From efdcd3421b38176a274e8536687131b9472f34d9 Mon Sep 17 00:00:00 2001 From: manukala6 Date: Mon, 20 May 2024 13:32:25 -0700 Subject: [PATCH] Revert "Upgrade to fixed pixetl" This reverts commit 5f6f58b02068efc1c4a33e2c4e6d44830214dddd. --- .github/workflows/terraform_build.yaml | 8 +- .../terraform_destroy_on_delete.yaml | 2 +- .github/workflows/terraform_plan.yaml | 5 +- .gitignore | 9 +- .isort.cfg | 2 +- Pipfile | 15 +- Pipfile.lock | 2411 ++++++++--------- app/authentication/token.py | 3 - app/crud/metadata.py | 59 - app/models/orm/asset_metadata.py | 2 +- app/models/pydantic/creation_options.py | 10 +- app/models/pydantic/versions.py | 3 +- app/routes/assets/asset.py | 14 +- app/routes/datasets/queries.py | 10 +- app/routes/datasets/versions.py | 6 +- app/tasks/delete_assets.py | 6 +- .../raster_tile_cache_assets.py | 14 +- app/tasks/static_vector_1x1_assets.py | 7 +- app/utils/aws.py | 8 +- app/utils/fields.py | 35 +- app/utils/google.py | 95 +- batch/pixetl.dockerfile | 2 +- batch/python/export_1x1_grid.py | 24 +- batch/scripts/create_vector_tile_cache.sh | 2 +- batch/scripts/export_1x1_grid.sh | 14 +- batch/scripts/get_arguments.sh | 4 - newrelic.ini | 6 +- .../gateway/main.tf => api_gateway.tf} | 56 +- terraform/cloudfront.tf | 97 +- terraform/data.tf | 13 +- terraform/generate_port.py | 18 - terraform/main.tf | 47 +- .../modules/api_gateway/gateway/outputs.tf | 15 - .../modules/api_gateway/gateway/variables.tf | 64 - terraform/outputs.tf | 8 +- terraform/variables.tf | 96 +- terraform/vars/terraform-dev.tfvars | 28 +- tests/crud/test_assets.py | 67 +- tests/routes/datasets/test_assets.py | 287 +- tests/routes/datasets/test_versions.py | 4 +- tests/tasks/test_vector_tile_assets.py | 222 +- tests/utils.py | 14 - tests_v2/conftest.py | 2 - .../unit/app/routes/analysis/test_analysis.py | 6 - .../unit/app/routes/datasets/test_version.py | 9 - tests_v2/unit/app/utils/test_fields.py | 92 - tests_v2/unit/app/utils/test_google.py | 104 +- 47 files changed, 1669 insertions(+), 2356 deletions(-) rename terraform/{modules/api_gateway/gateway/main.tf => api_gateway.tf} (81%) delete mode 100644 terraform/generate_port.py delete mode 100644 terraform/modules/api_gateway/gateway/outputs.tf delete mode 100644 terraform/modules/api_gateway/gateway/variables.tf mode change 100755 => 100644 tests/routes/datasets/test_versions.py delete mode 100644 tests_v2/unit/app/utils/test_fields.py diff --git a/.github/workflows/terraform_build.yaml b/.github/workflows/terraform_build.yaml index 704ab9bf6..daac0ae1a 100644 --- a/.github/workflows/terraform_build.yaml +++ b/.github/workflows/terraform_build.yaml @@ -21,7 +21,6 @@ jobs: project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} coverage-reports: tests/cobertura.xml, tests_v2/cobertura.xml - - name: Run CodeCOV action uses: codecov/codecov-action@v1 with: @@ -32,9 +31,8 @@ jobs: fail_ci_if_error: false verbose: false - - name: Deploy production - if: success() && github.ref == 'refs/heads/master' + if: success() && (github.ref_name == 'master') env: ENV: production AWS_ACCESS_KEY_ID: ${{ secrets.aws_key_production }} @@ -45,7 +43,7 @@ jobs: ./scripts/infra apply - name: Deploy staging - if: success() && github.ref == 'refs/heads/develop' + if: success() && (github.ref_name == 'develop') env: ENV: staging AWS_ACCESS_KEY_ID: ${{ secrets.aws_key_staging }} @@ -56,7 +54,7 @@ jobs: ./scripts/infra apply - name: Deploy dev - if: success() && (! github.ref == 'refs/heads/master' && github.ref == 'refs/heads/develop') + if: success() && (github.ref_name != 'develop') && (github.ref_name != 'master') env: ENV: dev AWS_ACCESS_KEY_ID: ${{ secrets.aws_key_dev }} diff --git a/.github/workflows/terraform_destroy_on_delete.yaml b/.github/workflows/terraform_destroy_on_delete.yaml index 8f948cb0a..171d2b337 100644 --- a/.github/workflows/terraform_destroy_on_delete.yaml +++ b/.github/workflows/terraform_destroy_on_delete.yaml @@ -4,7 +4,7 @@ on: [delete] jobs: build: - if: contains(github.event.ref_type, 'branch') && (! github.event.ref == 'master') && (! github.event.ref == 'develop') + if: contains(github.event.ref_type, 'branch') && (! contains(github.event.ref, 'master')) && (! contains(github.event.ref, 'develop')) runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 diff --git a/.github/workflows/terraform_plan.yaml b/.github/workflows/terraform_plan.yaml index 5102d9339..abba75df6 100644 --- a/.github/workflows/terraform_plan.yaml +++ b/.github/workflows/terraform_plan.yaml @@ -9,16 +9,15 @@ jobs: steps: - uses: actions/checkout@v1 - name: Plan production - if: success() && github.base_ref == 'master' + if: success() && contains(github.base_ref, 'master') env: ENV: production AWS_ACCESS_KEY_ID: ${{ secrets.aws_key_production }} AWS_SECRET_ACCESS_KEY: ${{ secrets.aws_secret_production }} AWS_REGION: ${{ secrets.aws_region_production }} run: ./scripts/infra plan -w ${{ github.base_ref }} - - name: Plan staging - if: success() && github.base_ref == 'develop' + if: success() && contains(github.base_ref, 'develop') env: ENV: staging AWS_ACCESS_KEY_ID: ${{ secrets.aws_key_staging }} diff --git a/.gitignore b/.gitignore index 3b9984c8c..c65308245 100644 --- a/.gitignore +++ b/.gitignore @@ -21,14 +21,7 @@ tests/cobertura.xml tests_v2/cobertura.xml # Terraform stuff -**/.terraform/* - -# .tfstate files -*.tfstate -*.tfstate.* - -# .tfplan files -*.tfplan +terraform/* # Virtual Environments .venv* \ No newline at end of file diff --git a/.isort.cfg b/.isort.cfg index 9c838702b..689f896bf 100644 --- a/.isort.cfg +++ b/.isort.cfg @@ -2,4 +2,4 @@ line_length = 88 multi_line_output = 3 include_trailing_comma = True -known_third_party = _pytest,aenum,affine,aiohttp,alembic,async_lru,asyncpg,aws_utils,boto3,botocore,click,docker,errors,fastapi,fiona,gdal_utils,geoalchemy2,geojson,gfw_pixetl,gino,gino_starlette,google,httpx,httpx_auth,logger,logging_utils,moto,numpy,orjson,osgeo,pandas,pendulum,pglast,psutil,psycopg2,pydantic,pyproj,pytest,pytest_asyncio,rasterio,shapely,sqlalchemy,sqlalchemy_utils,starlette,tileputty,typer +known_third_party = _pytest,aenum,affine,aiohttp,alembic,async_lru,asyncpg,aws_utils,boto3,botocore,click,docker,errors,fastapi,fiona,gdal_utils,geoalchemy2,geojson,gfw_pixetl,gino,gino_starlette,google,httpx,httpx_auth,logger,logging_utils,moto,numpy,orjson,osgeo,pandas,pendulum,pglast,psutil,psycopg2,pydantic,pyproj,pytest,pytest_asyncio,rasterio,retrying,shapely,sqlalchemy,sqlalchemy_utils,starlette,tileputty,typer diff --git a/Pipfile b/Pipfile index c18681840..0fc5845f6 100644 --- a/Pipfile +++ b/Pipfile @@ -8,20 +8,18 @@ black = "*" detect-secrets = "*" docker = "*" flake8 = "*" -geopandas = "*" # Needed by pixetl in batch script test # Pixetl is already installed in the pixetl image that's run in Batch, this # is to enable tests to run in the test container: gfw_pixetl = {git = "https://github.com/wri/gfw_pixetl.git", ref = "develop"} -moto = {version = "<5", extras = ["awslambda", "batch", "ec2", "s3", "secretsmanager"]} +moto = {version = "*", extras = ["awslambda", "batch", "ec2", "s3"]} openapi_spec_validator = "*" pre-commit = "*" pytest = "*" -pytest-asyncio = "<0.19" +pytest-asyncio = "==0.18.3" pytest-cov = "*" pytest-timeout = "*" rasterio = "*" -responses = "<0.16" -retrying = "*" # Needed by pixetl in batch script test +responses = "~=0.15.0" [packages] aenum = "*" @@ -30,7 +28,7 @@ aiohttp = "*" alembic = "*" arq = "*" async-lru = "*" -asyncpg = "*" +asyncpg = "<0.26" boto3 = "*" botocore = "*" email-validator = "*" @@ -46,17 +44,18 @@ httpx-auth = "*" numpy = "*" orjson = "*" packaging = "*" -pendulum = "<3" +pendulum = "*" pglast = "<2" psutil = "*" psycopg2 = "*" -pydantic = "<2" pyproj = "*" python-multipart = "*" +retrying = "*" shapely = "*" sqlalchemy = "<1.4" sqlalchemy-utils = "*" starlette = "<0.15" +pydantic = "~=1.9" typer = "*" uvicorn = {version = "*", extras = ["standard"]} diff --git a/Pipfile.lock b/Pipfile.lock index addda7267..745f2019b 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "31799ee534b534382f9aadf0c78558a7a989cc3f09f0e2ebb5464bd1c28b9633" + "sha256": "586cbe244d0f4b61ee177e0bdc76dc98e2512e6844bafa1aad39ec8ee325d0a8" }, "pipfile-spec": 6, "requires": { @@ -31,89 +31,102 @@ "sha256:84ec2218d8419404abcb9f0c02df3f34c6e0a68ed41072acfb1cef5cbc29051a" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==23.2.1" }, "aiohttp": { "hashes": [ - "sha256:00a9abcea793c81e7f8778ca195a1714a64f6d7436c4c0bb168ad2a212627000", - "sha256:04fd8ffd2be73d42bcf55fd78cde7958eeee6d4d8f73c3846b7cba491ecdb570", - "sha256:07205ae0015e05c78b3288c1517afa000823a678a41594b3fdc870878d645305", - "sha256:07be2be7071723c3509ab5c08108d3a74f2181d4964e869f2504aaab68f8d3e8", - "sha256:0b500c5ad9c07639d48615a770f49618130e61be36608fc9bc2d9bae31732b8f", - "sha256:0e4ee4df741670560b1bc393672035418bf9063718fee05e1796bf867e995fad", - "sha256:103daf41ff3b53ba6fa09ad410793e2e76c9d0269151812e5aba4b9dd674a7e8", - "sha256:114da29f39eccd71b93a0fcacff178749a5c3559009b4a4498c2c173a6d74dff", - "sha256:122468f6fee5fcbe67cb07014a08c195b3d4c41ff71e7b5160a7bcc41d585a5f", - "sha256:1543e7fb00214fb4ccead42e6a7d86f3bb7c34751ec7c605cca7388e525fd0b4", - "sha256:158564d0d1020e0d3fe919a81d97aadad35171e13e7b425b244ad4337fc6793a", - "sha256:16a967685907003765855999af11a79b24e70b34dc710f77a38d21cd9fc4f5fe", - "sha256:186e94570433a004e05f31f632726ae0f2c9dee4762a9ce915769ce9c0a23d89", - "sha256:193cc1ccd69d819562cc7f345c815a6fc51d223b2ef22f23c1a0f67a88de9a72", - "sha256:1956e3ac376b1711c1533266dec4efd485f821d84c13ce1217d53e42c9e65f08", - "sha256:1c45e4e815ac6af3b72ca2bde9b608d2571737bb1e2d42299fc1ffdf60f6f9a1", - "sha256:200dc0246f0cb5405c80d18ac905c8350179c063ea1587580e3335bfc243ba6a", - "sha256:2dec87a556f300d3211decf018bfd263424f0690fcca00de94a837949fbcea02", - "sha256:328918a6c2835861ff7afa8c6d2c70c35fdaf996205d5932351bdd952f33fa2f", - "sha256:3cc158466f6a980a6095ee55174d1de5730ad7dec251be655d9a6a9dd7ea1ff9", - "sha256:3d8d962b439a859b3ded9a1e111a4615357b01620a546bc601f25b0211f2da81", - "sha256:3e1a800f988ce7c4917f34096f81585a73dbf65b5c39618b37926b1238cf9bc4", - "sha256:3f17999ae3927d8a9a823a1283b201344a0627272f92d4f3e3a4efe276972fe8", - "sha256:4112d8ba61fbd0abd5d43a9cb312214565b446d926e282a6d7da3f5a5aa71d36", - "sha256:4bd9d5b989d57b41e4ff56ab250c5ddf259f32db17159cce630fd543376bd96b", - "sha256:4c189b64bd6d9a403a1a3f86a3ab3acbc3dc41a68f73a268a4f683f89a4dec1f", - "sha256:4deae2c165a5db1ed97df2868ef31ca3cc999988812e82386d22937d9d6fed52", - "sha256:5264d7327c9464786f74e4ec9342afbbb6ee70dfbb2ec9e3dfce7a54c8043aa3", - "sha256:5422cd9a4a00f24c7244e1b15aa9b87935c85fb6a00c8ac9b2527b38627a9211", - "sha256:54287bcb74d21715ac8382e9de146d9442b5f133d9babb7e5d9e453faadd005e", - "sha256:54ec82f45d57c9a65a1ead3953b51c704f9587440e6682f689da97f3e8defa35", - "sha256:5bb3d05569aa83011fcb346b5266e00b04180105fcacc63743fc2e4a1862a891", - "sha256:61c47ab8ef629793c086378b1df93d18438612d3ed60dca76c3422f4fbafa792", - "sha256:68bbee9e17d66f17bb0010aa15a22c6eb28583edcc8b3212e2b8e3f77f3ebe2a", - "sha256:6aaa6f99256dd1b5756a50891a20f0d252bd7bdb0854c5d440edab4495c9f973", - "sha256:6f4cdba12539215aaecf3c310ce9d067b0081a0795dd8a8805fdb67a65c0572a", - "sha256:6fa3ee92cd441d5c2d07ca88d7a9cef50f7ec975f0117cd0c62018022a184308", - "sha256:772fbe371788e61c58d6d3d904268e48a594ba866804d08c995ad71b144f94cb", - "sha256:7a75307ffe31329928a8d47eae0692192327c599113d41b278d4c12b54e1bd11", - "sha256:7a9825fdd64ecac5c670234d80bb52bdcaa4139d1f839165f548208b3779c6c6", - "sha256:7d579dcd5d82a86a46f725458418458fa43686f6a7b252f2966d359033ffc8ab", - "sha256:8008d0f451d66140a5aa1c17e3eedc9d56e14207568cd42072c9d6b92bf19b52", - "sha256:84e843b33d5460a5c501c05539809ff3aee07436296ff9fbc4d327e32aa3a326", - "sha256:8a7876f794523123bca6d44bfecd89c9fec9ec897a25f3dd202ee7fc5c6525b7", - "sha256:8ceb658afd12b27552597cf9a65d9807d58aef45adbb58616cdd5ad4c258c39e", - "sha256:972b63d589ff8f305463593050a31b5ce91638918da38139b9d8deaba9e0fed7", - "sha256:9a87aa0b13bbee025faa59fa58861303c2b064b9855d4c0e45ec70182bbeba1b", - "sha256:a1c3a4d0ab2f75f22ec80bca62385db2e8810ee12efa8c9e92efea45c1849133", - "sha256:a27d8c70ad87bcfce2e97488652075a9bdd5b70093f50b10ae051dfe5e6baf37", - "sha256:aa906b9bdfd4a7972dd0628dbbd6413d2062df5b431194486a78f0d2ae87bd55", - "sha256:abeb813a18eb387f0d835ef51f88568540ad0325807a77a6e501fed4610f864e", - "sha256:ae0a1e638cffc3ec4d4784b8b4fd1cf28968febc4bd2718ffa25b99b96a741bd", - "sha256:b0ad0a5e86ce73f5368a164c10ada10504bf91869c05ab75d982c6048217fbf7", - "sha256:b141753be581fab842a25cb319f79536d19c2a51995d7d8b29ee290169868eab", - "sha256:b65e861f4bebfb660f7f0f40fa3eb9f2ab9af10647d05dac824390e7af8f75b7", - "sha256:b9f1cb839b621f84a5b006848e336cf1496688059d2408e617af33e3470ba204", - "sha256:bc71f748e12284312f140eaa6599a520389273174b42c345d13c7e07792f4f57", - "sha256:bda42eb410be91b349fb4ee3a23a30ee301c391e503996a638d05659d76ea4c2", - "sha256:c07327b368745b1ce2393ae9e1aafed7073d9199e1dcba14e035cc646c7941bf", - "sha256:c4ad4241b52bb2eb7a4d2bde060d31c2b255b8c6597dd8deac2f039168d14fd7", - "sha256:c8534e7d69bb8e8d134fe2be9890d1b863518582f30c9874ed7ed12e48abe3c4", - "sha256:cc7d6502c23a0ec109687bf31909b3fb7b196faf198f8cff68c81b49eb316ea9", - "sha256:cc91d07280d7d169f3a0f9179d8babd0ee05c79d4d891447629ff0d7d8089ec2", - "sha256:cfee9287778399fdef6f8a11c9e425e1cb13cc9920fd3a3df8f122500978292b", - "sha256:d22a0931848b8c7a023c695fa2057c6aaac19085f257d48baa24455e67df97ec", - "sha256:d23fba734e3dd7b1d679b9473129cd52e4ec0e65a4512b488981a56420e708db", - "sha256:d43302a30ba1166325974858e6ef31727a23bdd12db40e725bec0f759abce505", - "sha256:d52d20832ac1560f4510d68e7ba8befbc801a2b77df12bd0cd2bcf3b049e52a4", - "sha256:da1346cd0ccb395f0ed16b113ebb626fa43b7b07fd7344fce33e7a4f04a8897a", - "sha256:e2cc0d04688b9f4a7854c56c18aa7af9e5b0a87a28f934e2e596ba7e14783192", - "sha256:ea510718a41b95c236c992b89fdfc3d04cc7ca60281f93aaada497c2b4e05c46", - "sha256:eaa9256de26ea0334ffa25f1913ae15a51e35c529a1ed9af8e6286dd44312554", - "sha256:edd4f1af2253f227ae311ab3d403d0c506c9b4410c7fc8d9573dec6d9740369f", - "sha256:ee2661a3f5b529f4fc8a8ffee9f736ae054adfb353a0d2f78218be90617194b3", - "sha256:f31df6a32217a34ae2f813b152a6f348154f948c83213b690e59d9e84020925c", - "sha256:fa6904088e6642609981f919ba775838ebf7df7fe64998b1a954fb411ffb4663" + "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c", + "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62", + "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53", + "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349", + "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47", + "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31", + "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9", + "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887", + "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358", + "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566", + "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07", + "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a", + "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e", + "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95", + "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93", + "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c", + "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad", + "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80", + "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f", + "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd", + "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0", + "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5", + "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132", + "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b", + "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096", + "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321", + "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1", + "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f", + "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6", + "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5", + "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66", + "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1", + "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31", + "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460", + "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22", + "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34", + "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071", + "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04", + "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8", + "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d", + "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3", + "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb", + "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951", + "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39", + "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921", + "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5", + "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92", + "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1", + "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865", + "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d", + "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6", + "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc", + "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543", + "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b", + "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684", + "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8", + "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed", + "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae", + "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c", + "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976", + "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54", + "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349", + "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17", + "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f", + "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28", + "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4", + "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2", + "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0", + "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b", + "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78", + "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403", + "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c", + "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae", + "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965", + "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446", + "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a", + "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca", + "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e", + "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda", + "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2", + "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771", + "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb", + "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa", + "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a", + "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2", + "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df", + "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479" ], "index": "pypi", - "version": "==3.9.2" + "markers": "python_version >= '3.6'", + "version": "==3.8.6" }, "aiosignal": { "hashes": [ @@ -125,19 +138,20 @@ }, "alembic": { "hashes": [ - "sha256:2edcc97bed0bd3272611ce3a98d98279e9c209e7186e43e75bbb1b2bdfdbcc43", - "sha256:4932c8558bf68f2ee92b9bbcb8218671c627064d5b08939437af6d77dc05e595" + "sha256:47d52e3dfb03666ed945becb723d6482e52190917fdb47071440cfdba05d92cb", + "sha256:bca5877e9678b454706347bc10b97cb7d67f300320fa5c3a94423e8266e2823f" ], "index": "pypi", - "version": "==1.13.1" + "markers": "python_version >= '3.7'", + "version": "==1.12.1" }, "anyio": { "hashes": [ - "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee", - "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f" + "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f", + "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a" ], "markers": "python_version >= '3.8'", - "version": "==4.2.0" + "version": "==4.0.0" }, "arq": { "hashes": [ @@ -145,6 +159,7 @@ "sha256:db072d0f39c0bc06b436db67ae1f315c81abc1527563b828955670531815290b" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==0.25.0" }, "async-lru": { @@ -153,6 +168,7 @@ "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==2.0.4" }, "async-timeout": { @@ -160,79 +176,67 @@ "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028" ], - "markers": "python_version < '3.11'", + "markers": "python_version >= '3.7'", "version": "==4.0.3" }, "asyncpg": { "hashes": [ - "sha256:0009a300cae37b8c525e5b449233d59cd9868fd35431abc470a3e364d2b85cb9", - "sha256:000c996c53c04770798053e1730d34e30cb645ad95a63265aec82da9093d88e7", - "sha256:012d01df61e009015944ac7543d6ee30c2dc1eb2f6b10b62a3f598beb6531548", - "sha256:039a261af4f38f949095e1e780bae84a25ffe3e370175193174eb08d3cecab23", - "sha256:103aad2b92d1506700cbf51cd8bb5441e7e72e87a7b3a2ca4e32c840f051a6a3", - "sha256:1e186427c88225ef730555f5fdda6c1812daa884064bfe6bc462fd3a71c4b675", - "sha256:2245be8ec5047a605e0b454c894e54bf2ec787ac04b1cb7e0d3c67aa1e32f0fe", - "sha256:37a2ec1b9ff88d8773d3eb6d3784dc7e3fee7756a5317b67f923172a4748a175", - "sha256:48e7c58b516057126b363cec8ca02b804644fd012ef8e6c7e23386b7d5e6ce83", - "sha256:52e8f8f9ff6e21f9b39ca9f8e3e33a5fcdceaf5667a8c5c32bee158e313be385", - "sha256:5340dd515d7e52f4c11ada32171d87c05570479dc01dc66d03ee3e150fb695da", - "sha256:54858bc25b49d1114178d65a88e48ad50cb2b6f3e475caa0f0c092d5f527c106", - "sha256:5b52e46f165585fd6af4863f268566668407c76b2c72d366bb8b522fa66f1870", - "sha256:5bbb7f2cafd8d1fa3e65431833de2642f4b2124be61a449fa064e1a08d27e449", - "sha256:5cad1324dbb33f3ca0cd2074d5114354ed3be2b94d48ddfd88af75ebda7c43cc", - "sha256:6011b0dc29886ab424dc042bf9eeb507670a3b40aece3439944006aafe023178", - "sha256:642a36eb41b6313ffa328e8a5c5c2b5bea6ee138546c9c3cf1bffaad8ee36dd9", - "sha256:6feaf2d8f9138d190e5ec4390c1715c3e87b37715cd69b2c3dfca616134efd2b", - "sha256:72fd0ef9f00aeed37179c62282a3d14262dbbafb74ec0ba16e1b1864d8a12169", - "sha256:746e80d83ad5d5464cfbf94315eb6744222ab00aa4e522b704322fb182b83610", - "sha256:76c3ac6530904838a4b650b2880f8e7af938ee049e769ec2fba7cd66469d7772", - "sha256:797ab8123ebaed304a1fad4d7576d5376c3a006a4100380fb9d517f0b59c1ab2", - "sha256:8d36c7f14a22ec9e928f15f92a48207546ffe68bc412f3be718eedccdf10dc5c", - "sha256:97eb024685b1d7e72b1972863de527c11ff87960837919dac6e34754768098eb", - "sha256:a65c1dcd820d5aea7c7d82a3fdcb70e096f8f70d1a8bf93eb458e49bfad036ac", - "sha256:a921372bbd0aa3a5822dd0409da61b4cd50df89ae85150149f8c119f23e8c408", - "sha256:a9e6823a7012be8b68301342ba33b4740e5a166f6bbda0aee32bc01638491a22", - "sha256:b544ffc66b039d5ec5a7454667f855f7fec08e0dfaf5a5490dfafbb7abbd2cfb", - "sha256:bb1292d9fad43112a85e98ecdc2e051602bce97c199920586be83254d9dafc02", - "sha256:bde17a1861cf10d5afce80a36fca736a86769ab3579532c03e45f83ba8a09c59", - "sha256:cce08a178858b426ae1aa8409b5cc171def45d4293626e7aa6510696d46decd8", - "sha256:cfe73ffae35f518cfd6e4e5f5abb2618ceb5ef02a2365ce64f132601000587d3", - "sha256:d1c49e1f44fffafd9a55e1a9b101590859d881d639ea2922516f5d9c512d354e", - "sha256:d4900ee08e85af01adb207519bb4e14b1cae8fd21e0ccf80fac6aa60b6da37b4", - "sha256:d84156d5fb530b06c493f9e7635aa18f518fa1d1395ef240d211cb563c4e2364", - "sha256:dc600ee8ef3dd38b8d67421359779f8ccec30b463e7aec7ed481c8346decf99f", - "sha256:e0bfe9c4d3429706cf70d3249089de14d6a01192d617e9093a8e941fea8ee775", - "sha256:e17b52c6cf83e170d3d865571ba574577ab8e533e7361a2b8ce6157d02c665d3", - "sha256:f100d23f273555f4b19b74a96840aa27b85e99ba4b1f18d4ebff0734e78dc090", - "sha256:f9ea3f24eb4c49a615573724d88a48bd1b7821c890c2effe04f05382ed9e8810", - "sha256:ff8e8109cd6a46ff852a5e6bab8b0a047d7ea42fcb7ca5ae6eaae97d8eacf397" + "sha256:0a61fb196ce4dae2f2fa26eb20a778db21bbee484d2e798cb3cc988de13bdd1b", + "sha256:18d49e2d93a7139a2fdbd113e320cc47075049997268a61bfbe0dde680c55471", + "sha256:191fe6341385b7fdea7dbdcf47fd6db3fd198827dcc1f2b228476d13c05a03c6", + "sha256:1a70783f6ffa34cc7dd2de20a873181414a34fd35a4a208a1f1a7f9f695e4ec4", + "sha256:2633331cbc8429030b4f20f712f8d0fbba57fa8555ee9b2f45f981b81328b256", + "sha256:2bc197fc4aca2fd24f60241057998124012469d2e414aed3f992579db0c88e3a", + "sha256:4327f691b1bdb222df27841938b3e04c14068166b3a97491bec2cb982f49f03e", + "sha256:43cde84e996a3afe75f325a68300093425c2f47d340c0fc8912765cf24a1c095", + "sha256:52fab7f1b2c29e187dd8781fce896249500cf055b63471ad66332e537e9b5f7e", + "sha256:56d88d7ef4341412cd9c68efba323a4519c916979ba91b95d4c08799d2ff0c09", + "sha256:5e4105f57ad1e8fbc8b1e535d8fcefa6ce6c71081228f08680c6dea24384ff0e", + "sha256:63f8e6a69733b285497c2855464a34de657f2cccd25aeaeeb5071872e9382540", + "sha256:649e2966d98cc48d0646d9a4e29abecd8b59d38d55c256d5c857f6b27b7407ac", + "sha256:6f8f5fc975246eda83da8031a14004b9197f510c41511018e7b1bedde6968e92", + "sha256:72a1e12ea0cf7c1e02794b697e3ca967b2360eaa2ce5d4bfdd8604ec2d6b774b", + "sha256:739bbd7f89a2b2f6bc44cb8bf967dab12c5bc714fcbe96e68d512be45ecdf962", + "sha256:863d36eba4a7caa853fd7d83fad5fd5306f050cc2fe6e54fbe10cdb30420e5e9", + "sha256:a738f1b2876f30d710d3dc1e7858160a0afe1603ba16bf5f391f5316eb0ed855", + "sha256:a84d30e6f850bac0876990bcd207362778e2208df0bee8be8da9f1558255e634", + "sha256:acb311722352152936e58a8ee3c5b8e791b24e84cd7d777c414ff05b3530ca68", + "sha256:beaecc52ad39614f6ca2e48c3ca15d56e24a2c15cbfdcb764a4320cc45f02fd5", + "sha256:bf5e3408a14a17d480f36ebaf0401a12ff6ae5457fdf45e4e2775c51cc9517d3", + "sha256:bf6dc9b55b9113f39eaa2057337ce3f9ef7de99a053b8a16360395ce588925cd", + "sha256:ddb4c3263a8d63dcde3d2c4ac1c25206bfeb31fa83bd70fd539e10f87739dee4", + "sha256:f55918ded7b85723a5eaeb34e86e7b9280d4474be67df853ab5a7fa0cc7c6bf2", + "sha256:fe471ccd915b739ca65e2e4dbd92a11b44a5b37f2e38f70827a1c147dafe0fa8" ], "index": "pypi", - "version": "==0.29.0" + "markers": "python_full_version >= '3.6.0'", + "version": "==0.25.0" }, "attrs": { "hashes": [ - "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30", - "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1" + "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04", + "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" ], "markers": "python_version >= '3.7'", - "version": "==23.2.0" + "version": "==23.1.0" }, "boto3": { "hashes": [ - "sha256:34b2b404bd2bec869ec2fc6aeeeeb884c72a9b895e2c7716b95381ab8deb9069", - "sha256:50776db195a73533f4f2c9d000c69f9d0e9fb9810f9f81584adc283e9516ad0d" + "sha256:1d10691911c4b8b9443d3060257ba32b68b6e3cad0eebbb9f69fd1c52a78417f", + "sha256:489c4967805b677b7a4030460e4c06c0903d6bc0f6834453611bf87efbd8d8a3" ], "index": "pypi", - "version": "==1.34.29" + "markers": "python_version >= '3.7'", + "version": "==1.28.83" }, "botocore": { "hashes": [ - "sha256:34223fdb8ebd47d1fce5724bb1bcb164e81853ea9ca532b50639c749fc347458", - "sha256:44d918b91a1c1085d99266f8bf6ecc087c8a73a8efbb8e829f0c2dcd1ddf9963" + "sha256:40914b0fb28f13d709e1f8a4481e278350b77a3987be81acd23715ec8d5fedca", + "sha256:c742069e8bfd06d212d712228258ff09fb481b6ec02358e539381ce0fcad065a" ], "index": "pypi", - "version": "==1.34.29" + "markers": "python_version >= '3.7'", + "version": "==1.31.83" }, "cachetools": { "hashes": [ @@ -244,11 +248,11 @@ }, "certifi": { "hashes": [ - "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1", - "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474" + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], "markers": "python_version >= '3.6'", - "version": "==2023.11.17" + "version": "==2023.7.22" }, "charset-normalizer": { "hashes": [ @@ -356,11 +360,11 @@ }, "dnspython": { "hashes": [ - "sha256:6facdf76b73c742ccf2d07add296f178e629da60be23ce4b0a9c927b1e02c3a6", - "sha256:a0034815a59ba9ae888946be7ccca8f7c157b286f8455b379c692efb51022a15" + "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8", + "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984" ], - "markers": "python_version >= '3.8'", - "version": "==2.5.0" + "markers": "python_version >= '3.8' and python_version < '4.0'", + "version": "==2.4.2" }, "email-validator": { "hashes": [ @@ -368,15 +372,16 @@ "sha256:c973053efbeddfef924dc0bd93f6e77a1ea7ee0fce935aea7103c7a3d6d2d637" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==2.1.0.post1" }, "exceptiongroup": { "hashes": [ - "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14", - "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68" + "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9", + "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3" ], "markers": "python_version < '3.11'", - "version": "==1.2.0" + "version": "==1.1.3" }, "fastapi": { "hashes": [ @@ -384,90 +389,75 @@ "sha256:b05f5af77af3b21cab896b8dade8b383b2d2f254caae4681a56313e29196f1ac" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==0.67.0" }, "frozenlist": { "hashes": [ - "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7", - "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98", - "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad", - "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5", - "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae", - "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e", - "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a", - "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701", - "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d", - "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6", - "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6", - "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106", - "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75", - "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868", - "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a", - "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0", - "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1", - "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826", - "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec", - "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6", - "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950", - "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19", - "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0", - "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8", - "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a", - "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09", - "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86", - "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c", - "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5", - "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b", - "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b", - "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d", - "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0", - "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea", - "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776", - "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a", - "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897", - "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7", - "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09", - "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9", - "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe", - "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd", - "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742", - "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09", - "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0", - "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932", - "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1", - "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a", - "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49", - "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d", - "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7", - "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480", - "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89", - "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e", - "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b", - "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82", - "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb", - "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068", - "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8", - "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b", - "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb", - "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2", - "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11", - "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b", - "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc", - "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0", - "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497", - "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17", - "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0", - "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2", - "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439", - "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5", - "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac", - "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825", - "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887", - "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced", - "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74" + "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6", + "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01", + "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251", + "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9", + "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b", + "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87", + "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf", + "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f", + "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0", + "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2", + "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b", + "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc", + "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c", + "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467", + "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9", + "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1", + "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a", + "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79", + "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167", + "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300", + "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf", + "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea", + "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2", + "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab", + "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3", + "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb", + "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087", + "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc", + "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8", + "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62", + "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f", + "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326", + "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c", + "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431", + "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963", + "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7", + "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef", + "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3", + "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956", + "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781", + "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472", + "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc", + "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839", + "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672", + "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3", + "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503", + "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d", + "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8", + "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b", + "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc", + "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f", + "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559", + "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b", + "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95", + "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb", + "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963", + "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919", + "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f", + "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3", + "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1", + "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e" ], "markers": "python_version >= '3.8'", - "version": "==1.4.1" + "version": "==1.4.0" }, "geoalchemy2": { "hashes": [ @@ -475,6 +465,7 @@ "sha256:f92a0faddb5b74384dbbf3c7000433358ce8e07a180fe1d6c2843eaa0437ff08" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==0.11.1" }, "geojson": { @@ -483,6 +474,7 @@ "sha256:68a9771827237adb8c0c71f8527509c8f5bef61733aa434cefc9c9d4f0ebe8f3" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==3.1.0" }, "gino": { @@ -491,6 +483,7 @@ "sha256:fe4189e82fe9d20c4a5f03fc775fb91c168061c5176b4c95623caeef22316150" ], "index": "pypi", + "markers": "python_version >= '3.5' and python_version < '4.0'", "version": "==1.0.1" }, "gino-starlette": { @@ -498,40 +491,41 @@ "sha256:5f874610a50b306331fc52e6937b3febf490470ce791142f791a41f938c7c89a", "sha256:868200bdd205bd4c2ce0856861daf2b2b6cf6c9de7010fbf9a2ca36871d6b8dc" ], - "index": "pypi", + "markers": "python_version >= '3.6' and python_version < '4.0'", "version": "==0.1.2" }, "google-api-core": { "hashes": [ - "sha256:2aa56d2be495551e66bbff7f729b790546f87d5c90e74781aa77233bcb395a8a", - "sha256:abc978a72658f14a2df1e5e12532effe40f94f868f6e23d95133bd6abcca35ca" + "sha256:5368a4502b793d9bbf812a5912e13e4e69f9bd87f6efb508460c43f5bbd1ce41", + "sha256:de2fb50ed34d47ddbb2bd2dcf680ee8fead46279f4ed6b16de362aca23a18952" ], "markers": "python_version >= '3.7'", - "version": "==2.15.0" + "version": "==2.14.0" }, "google-auth": { "hashes": [ - "sha256:8e4bad367015430ff253fe49d500fdc3396c1a434db5740828c728e45bcce245", - "sha256:e863a56ccc2d8efa83df7a80272601e43487fa9a728a376205c86c26aaefa821" + "sha256:79905d6b1652187def79d491d6e23d0cbb3a21d3c7ba0dbaa9c8a01906b13ff3", + "sha256:d4bbc92fe4b8bfd2f3e8d88e5ba7085935da208ee38a134fc280e7ce682a05f2" ], "markers": "python_version >= '3.7'", - "version": "==2.27.0" + "version": "==2.23.4" }, "google-cloud-core": { "hashes": [ - "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073", - "sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61" + "sha256:37b80273c8d7eee1ae816b3a20ae43585ea50506cb0e60f3cf5be5f87f1373cb", + "sha256:fbd11cad3e98a7e5b0343dc07cb1039a5ffd7a5bb96e1f1e27cee4bda4a90863" ], "markers": "python_version >= '3.7'", - "version": "==2.4.1" + "version": "==2.3.3" }, "google-cloud-storage": { "hashes": [ - "sha256:2d23fcf59b55e7b45336729c148bb1c464468c69d5efbaee30f7201dd90eb97e", - "sha256:8641243bbf2a2042c16a6399551fbb13f062cbc9a2de38d6c0bb5426962e9dbd" + "sha256:ab0bf2e1780a1b74cf17fccb13788070b729f50c252f0c94ada2aae0ca95437d", + "sha256:f62dc4c7b6cd4360d072e3deb28035fbdad491ac3d9b0b1815a12daea10f37c7" ], "index": "pypi", - "version": "==2.14.0" + "markers": "python_version >= '3.7'", + "version": "==2.13.0" }, "google-crc32c": { "hashes": [ @@ -609,19 +603,19 @@ }, "google-resumable-media": { "hashes": [ - "sha256:5f18f5fa9836f4b083162064a1c2c98c17239bfda9ca50ad970ccf905f3e625b", - "sha256:79543cfe433b63fd81c0844b7803aba1bb8950b47bedf7d980c38fa123937e08" + "sha256:972852f6c65f933e15a4a210c2b96930763b47197cdf4aa5f5bea435efb626e7", + "sha256:fc03d344381970f79eebb632a3c18bb1828593a2dc5572b5f90115ef7d11e81b" ], "markers": "python_version >= '3.7'", - "version": "==2.7.0" + "version": "==2.6.0" }, "googleapis-common-protos": { "hashes": [ - "sha256:4750113612205514f9f6aa4cb00d523a94f3e8c06c5ad2fee466387dc4875f07", - "sha256:83f0ece9f94e5672cced82f592d2a5edf527a96ed1794f0bab36d5735c996277" + "sha256:22f1915393bb3245343f6efe87f6fe868532efc12aa26b391b15132e1279f1c0", + "sha256:8a64866a97f6304a7179873a465d6eee97b7a24ec6cfd78e0f575e96b821240b" ], "markers": "python_version >= '3.7'", - "version": "==1.62.0" + "version": "==1.61.0" }, "h11": { "hashes": [ @@ -633,117 +627,97 @@ }, "hiredis": { "hashes": [ - "sha256:01b6c24c0840ac7afafbc4db236fd55f56a9a0919a215c25a238f051781f4772", - "sha256:02fc71c8333586871602db4774d3a3e403b4ccf6446dc4603ec12df563127cee", - "sha256:0c0773266e1c38a06e7593bd08870ac1503f5f0ce0f5c63f2b4134b090b5d6a4", - "sha256:0c5f6972d2bdee3cd301d5c5438e31195cf1cabf6fd9274491674d4ceb46914d", - "sha256:0da56915bda1e0a49157191b54d3e27689b70960f0685fdd5c415dacdee2fbed", - "sha256:14c7b43205e515f538a9defb4e411e0f0576caaeeda76bb9993ed505486f7562", - "sha256:16b01d9ceae265d4ab9547be0cd628ecaff14b3360357a9d30c029e5ae8b7e7f", - "sha256:1979334ccab21a49c544cd1b8d784ffb2747f99a51cb0bd0976eebb517628382", - "sha256:1c4c0bcf786f0eac9593367b6279e9b89534e008edbf116dcd0de956524702c8", - "sha256:1d63318ca189fddc7e75f6a4af8eae9c0545863619fb38cfba5f43e81280b286", - "sha256:27e9619847e9dc70b14b1ad2d0fb4889e7ca18996585c3463cff6c951fd6b10b", - "sha256:28adecb308293e705e44087a1c2d557a816f032430d8a2a9bb7873902a1c6d48", - "sha256:28bd184b33e0dd6d65816c16521a4ba1ffbe9ff07d66873c42ea4049a62fed83", - "sha256:322c668ee1c12d6c5750a4b1057e6b4feee2a75b3d25d630922a463cfe5e7478", - "sha256:333b5e04866758b11bda5f5315b4e671d15755fc6ed3b7969721bc6311d0ee36", - "sha256:33d5ebc93c39aed4b5bc769f8ce0819bc50e74bb95d57a35f838f1c4378978e0", - "sha256:380e029bb4b1d34cf560fcc8950bf6b57c2ef0c9c8b7c7ac20b7c524a730fadd", - "sha256:387f655444d912a963ab68abf64bf6e178a13c8e4aa945cb27388fd01a02e6f1", - "sha256:3dd63d0bbbe75797b743f35d37a4cca7ca7ba35423a0de742ae2985752f20c6d", - "sha256:419780f8583ddb544ffa86f9d44a7fcc183cd826101af4e5ffe535b6765f5f6b", - "sha256:4852f4bf88f0e2d9bdf91279892f5740ed22ae368335a37a52b92a5c88691140", - "sha256:49532d7939cc51f8e99efc326090c54acf5437ed88b9c904cc8015b3c4eda9c9", - "sha256:4baf4b579b108062e91bd2a991dc98b9dc3dc06e6288db2d98895eea8acbac22", - "sha256:4d59f88c4daa36b8c38e59ac7bffed6f5d7f68eaccad471484bf587b28ccc478", - "sha256:4fc242e9da4af48714199216eb535b61e8f8d66552c8819e33fc7806bd465a09", - "sha256:532a84a82156a82529ec401d1c25d677c6543c791e54a263aa139541c363995f", - "sha256:5341ce3d01ef3c7418a72e370bf028c7aeb16895e79e115fe4c954fff990489e", - "sha256:53d0f2c59bce399b8010a21bc779b4f8c32d0f582b2284ac8c98dc7578b27bc4", - "sha256:55ce31bf4711da879b96d511208efb65a6165da4ba91cb3a96d86d5a8d9d23e6", - "sha256:56e9b7d6051688ca94e68c0c8a54a243f8db841911b683cedf89a29d4de91509", - "sha256:57c0d0c7e308ed5280a4900d4468bbfec51f0e1b4cde1deae7d4e639bc6b7766", - "sha256:5986fb5f380169270a0293bebebd95466a1c85010b4f1afc2727e4d17c452512", - "sha256:5bd42d0d45ea47a2f96babd82a659fbc60612ab9423a68e4a8191e538b85542a", - "sha256:5c614552c6bd1d0d907f448f75550f6b24fb56cbfce80c094908b7990cad9702", - "sha256:63a090761ddc3c1f7db5e67aa4e247b4b3bb9890080bdcdadd1b5200b8b89ac4", - "sha256:63b99b5ea9fe4f21469fb06a16ca5244307678636f11917359e3223aaeca0b67", - "sha256:66ab949424ac6504d823cba45c4c4854af5c59306a1531edb43b4dd22e17c102", - "sha256:684840b014ce83541a087fcf2d48227196576f56ae3e944d4dfe14c0a3e0ccb7", - "sha256:6871306d8b98a15e53a5f289ec1106a3a1d43e7ab6f4d785f95fcef9a7bd9504", - "sha256:6b4edee59dc089bc3948f4f6fba309f51aa2ccce63902364900aa0a553a85e97", - "sha256:6d7302b4b17fcc1cc727ce84ded7f6be4655701e8d58744f73b09cb9ed2b13df", - "sha256:6dbfe1887ffa5cf3030451a56a8f965a9da2fa82b7149357752b67a335a05fc6", - "sha256:70d226ab0306a5b8d408235cabe51d4bf3554c9e8a72d53ce0b3c5c84cf78881", - "sha256:7298562a49d95570ab1c7fc4051e72824c6a80e907993a21a41ba204223e7334", - "sha256:733e2456b68f3f126ddaf2cd500a33b25146c3676b97ea843665717bda0c5d43", - "sha256:742093f33d374098aa21c1696ac6e4874b52658c870513a297a89265a4d08fe5", - "sha256:7bac7e02915b970c3723a7a7c5df4ba7a11a3426d2a3f181e041aa506a1ff028", - "sha256:7e8bf4444b09419b77ce671088db9f875b26720b5872d97778e2545cd87dba4a", - "sha256:7f39f28ffc65de577c3bc0c7615f149e35bc927802a0f56e612db9b530f316f9", - "sha256:80441b55edbef868e2563842f5030982b04349408396e5ac2b32025fb06b5212", - "sha256:80b02d27864ebaf9b153d4b99015342382eeaed651f5591ce6f07e840307c56d", - "sha256:88cb0b35b63717ef1e41d62f4f8717166f7c6245064957907cfe177cc144357c", - "sha256:8c490191fa1218851f8a80c5a21a05a6f680ac5aebc2e688b71cbfe592f8fec6", - "sha256:8e3f8b1733078ac663dad57e20060e16389a60ab542f18a97931f3a2a2dd64a4", - "sha256:8f34801b251ca43ad70691fb08b606a2e55f06b9c9fb1fc18fd9402b19d70f7b", - "sha256:8fc7197ff33047ce43a67851ccf190acb5b05c52fd4a001bb55766358f04da68", - "sha256:92830c16885f29163e1c2da1f3c1edb226df1210ec7e8711aaabba3dd0d5470a", - "sha256:9412a06b8a8e09abd6313d96864b6d7713c6003a365995a5c70cfb9209df1570", - "sha256:948d9f2ca7841794dd9b204644963a4bcd69ced4e959b0d4ecf1b8ce994a6daa", - "sha256:9a0026cfbf29f07649b0e34509091a2a6016ff8844b127de150efce1c3aff60b", - "sha256:9c431431abf55b64347ddc8df68b3ef840269cb0aa5bc2d26ad9506eb4b1b866", - "sha256:9e14fb70ca4f7efa924f508975199353bf653f452e4ef0a1e47549e208f943d7", - "sha256:a45857e87e9d2b005e81ddac9d815a33efd26ec67032c366629f023fe64fb415", - "sha256:a50c8af811b35b8a43b1590cf890b61ff2233225257a3cad32f43b3ec7ff1b9f", - "sha256:a6481c3b7673a86276220140456c2a6fbfe8d1fb5c613b4728293c8634134824", - "sha256:a6b54dabfaa5dbaa92f796f0c32819b4636e66aa8e9106c3d421624bd2a2d676", - "sha256:a797d8c7df9944314d309b0d9e1b354e2fa4430a05bb7604da13b6ad291bf959", - "sha256:a91a14dd95e24dc078204b18b0199226ee44644974c645dc54ee7b00c3157330", - "sha256:adfbf2e9c38b77d0db2fb32c3bdaea638fa76b4e75847283cd707521ad2475ef", - "sha256:ba3dc0af0def8c21ce7d903c59ea1e8ec4cb073f25ece9edaec7f92a286cd219", - "sha256:bb777a38797c8c7df0444533119570be18d1a4ce5478dffc00c875684df7bfcb", - "sha256:bcbe47da0aebc00a7cfe3ebdcff0373b86ce2b1856251c003e3d69c9db44b5a7", - "sha256:bd1cee053416183adcc8e6134704c46c60c3f66b8faaf9e65bf76191ca59a2f7", - "sha256:bd40d2e2f82a483de0d0a6dfd8c3895a02e55e5c9949610ecbded18188fd0a56", - "sha256:bfa73e3f163c6e8b2ec26f22285d717a5f77ab2120c97a2605d8f48b26950dac", - "sha256:c1f567489f422d40c21e53212a73bef4638d9f21043848150f8544ef1f3a6ad1", - "sha256:c3dde4ca00fe9eee3b76209711f1941bb86db42b8a75d7f2249ff9dfc026ab0e", - "sha256:c8937f1100435698c18e4da086968c4b5d70e86ea718376f833475ab3277c9aa", - "sha256:ca33c175c1cf60222d9c6d01c38fc17ec3a484f32294af781de30226b003e00f", - "sha256:ce42649e2676ad783186264d5ffc788a7612ecd7f9effb62d51c30d413a3eefe", - "sha256:cfa67afe2269b2d203cd1389c00c5bc35a287cd57860441fb0e53b371ea6a029", - "sha256:d47c915897a99d0d34a39fad4be97b4b709ab3d0d3b779ebccf2b6024a8c681e", - "sha256:d4dd676107a1d3c724a56a9d9db38166ad4cf44f924ee701414751bd18a784a0", - "sha256:d711c107e83117129b7f8bd08e9820c43ceec6204fff072a001fd82f6d13db9f", - "sha256:dc1c3fd49930494a67dcec37d0558d99d84eca8eb3f03b17198424538f2608d7", - "sha256:de3a32b4b76d46f1eb42b24a918d51d8ca52411a381748196241d59a895f7c5c", - "sha256:dfa904045d7cebfb0f01dad51352551cce1d873d7c3f80c7ded7d42f8cac8f89", - "sha256:e138d141ec5a6ec800b6d01ddc3e5561ce1c940215e0eb9960876bfde7186aae", - "sha256:e15a408f71a6c8c87b364f1f15a6cd9c1baca12bbc47a326ac8ab99ec7ad3c64", - "sha256:e1d86b75de787481b04d112067a4033e1ecfda2a060e50318a74e4e1c9b2948c", - "sha256:e2674a5a3168349435b08fa0b82998ed2536eb9acccf7087efe26e4cd088a525", - "sha256:e58494f282215fc461b06709e9a195a24c12ba09570f25bdf9efb036acc05101", - "sha256:e627d8ef5e100556e09fb44c9571a432b10e11596d3c4043500080ca9944a91a", - "sha256:e741ffe4e2db78a1b9dd6e5d29678ce37fbaaf65dfe132e5b82a794413302ef1", - "sha256:e81aa4e9a1fcf604c8c4b51aa5d258e195a6ba81efe1da82dea3204443eba01c", - "sha256:e96cd35df012a17c87ae276196ea8f215e77d6eeca90709eb03999e2d5e3fd8a", - "sha256:ea002656a8d974daaf6089863ab0a306962c8b715db6b10879f98b781a2a5bf5", - "sha256:eae62ed60d53b3561148bcd8c2383e430af38c0deab9f2dd15f8874888ffd26f", - "sha256:eb8797b528c1ff81eef06713623562b36db3dafa106b59f83a6468df788ff0d1", - "sha256:eb98038ccd368e0d88bd92ee575c58cfaf33e77f788c36b2a89a84ee1936dc6b", - "sha256:ec444ab8f27562a363672d6a7372bc0700a1bdc9764563c57c5f9efa0e592b5f", - "sha256:ed63e8b75c193c5e5a8288d9d7b011da076cc314fafc3bfd59ec1d8a750d48c8", - "sha256:f2c9c0d910dd3f7df92f0638e7f65d8edd7f442203caf89c62fc79f11b0b73f8", - "sha256:f3020b60e3fc96d08c2a9b011f1c2e2a6bdcc09cb55df93c509b88be5cb791df", - "sha256:f47775e27388b58ce52f4f972f80e45b13c65113e9e6b6bf60148f893871dc9b", - "sha256:f70481213373d44614148f0f2e38e7905be3f021902ae5167289413196de4ba4", - "sha256:f9de7586522e5da6bee83c9cf0dcccac0857a43249cb4d721a2e312d98a684d1", - "sha256:f9f606e810858207d4b4287b4ef0dc622c2aa469548bf02b59dcc616f134f811", - "sha256:fa45f7d771094b8145af10db74704ab0f698adb682fbf3721d8090f90e42cc49" - ], - "version": "==2.3.2" + "sha256:071c5814b850574036506a8118034f97c3cbf2fe9947ff45a27b07a48da56240", + "sha256:08415ea74c1c29b9d6a4ca3dd0e810dc1af343c1d1d442e15ba133b11ab5be6a", + "sha256:126623b03c31cb6ac3e0d138feb6fcc36dd43dd34fc7da7b7a0c38b5d75bc896", + "sha256:14824e457e4f5cda685c3345d125da13949bcf3bb1c88eb5d248c8d2c3dee08f", + "sha256:15c2a551f3b8a26f7940d6ee10b837810201754b8d7e6f6b1391655370882c5a", + "sha256:17e938d9d3ee92e1adbff361706f1c36cc60eeb3e3eeca7a3a353eae344f4c91", + "sha256:1cadb0ac7ba3babfd804e425946bec9717b320564a1390f163a54af9365a720a", + "sha256:1d274d5c511dfc03f83f997d3238eaa9b6ee3f982640979f509373cced891e98", + "sha256:20f509e3a1a20d6e5f5794fc37ceb21f70f409101fcfe7a8bde783894d51b369", + "sha256:227c5b4bcb60f89008c275d596e4a7b6625a6b3c827b8a66ae582eace7051f71", + "sha256:232d0a70519865741ba56e1dfefd160a580ae78c30a1517bad47b3cf95a3bc7d", + "sha256:2443659c76b226267e2a04dbbb21bc2a3f91aa53bdc0c22964632753ae43a247", + "sha256:2d7e459fe7313925f395148d36d9b7f4f8dac65be06e45d7af356b187cef65fc", + "sha256:2fb9300959a0048138791f3d68359d61a788574ec9556bddf1fec07f2dbc5320", + "sha256:334f2738700b20faa04a0d813366fb16ed17287430a6b50584161d5ad31ca6d7", + "sha256:33a94d264e6e12a79d9bb8af333b01dc286b9f39c99072ab5fef94ce1f018e17", + "sha256:33bc4721632ef9708fa44e5df0066053fccc8e65410a2c48573192517a533b48", + "sha256:33ee3ea5cad3a8cb339352cd230b411eb437a2e75d7736c4899acab32056ccdb", + "sha256:3753df5f873d473f055e1f8837bfad0bd3b277c86f3c9bf058c58f14204cd901", + "sha256:3759f4789ae1913b7df278dfc9e8749205b7a106f888cd2903d19461e24a7697", + "sha256:3b7fe075e91b9d9cff40eba4fb6a8eff74964d3979a39be9a9ef58b1b4cb3604", + "sha256:3bf4b5bae472630c229518e4a814b1b68f10a3d9b00aeaec45f1a330f03a0251", + "sha256:3f006c28c885deb99b670a5a66f367a175ab8955b0374029bad7111f5357dcd4", + "sha256:3f5446068197b35a11ccc697720c41879c8657e2e761aaa8311783aac84cef20", + "sha256:3fa6811a618653164f918b891a0fa07052bd71a799defa5c44d167cac5557b26", + "sha256:46525fbd84523cac75af5bf524bc74aaac848beaf31b142d2df8a787d9b4bbc4", + "sha256:477c34c4489666dc73cb5e89dafe2617c3e13da1298917f73d55aac4696bd793", + "sha256:4b3e974ad15eb32b1f537730dea70b93a4c3db7b026de3ad2b59da49c6f7454d", + "sha256:4c3b8be557e08b234774925622e196f0ee36fe4eab66cd19df934d3efd8f3743", + "sha256:4e3e3e31423f888d396b1fc1f936936e52af868ac1ec17dd15e3eeba9dd4de24", + "sha256:4e43e2b5acaad09cf48c032f7e4926392bb3a3f01854416cf6d82ebff94d5467", + "sha256:4ed68a3b1ccb4313d2a42546fd7e7439ad4745918a48b6c9bcaa61e1e3e42634", + "sha256:4f674e309cd055ee7a48304ceb8cf43265d859faf4d7d01d270ce45e976ae9d3", + "sha256:50171f985e17970f87d5a29e16603d1e5b03bdbf5c2691a37e6c912942a6b657", + "sha256:51341e70b467004dcbec3a6ce8c478d2d6241e0f6b01e4c56764afd5022e1e9d", + "sha256:5a4bcef114fc071d5f52c386c47f35aae0a5b43673197b9288a15b584da8fa3a", + "sha256:5a5c8019ff94988d56eb49b15de76fe83f6b42536d76edeb6565dbf7fe14b973", + "sha256:5cda592405bbd29d53942e0389dc3fa77b49c362640210d7e94a10c14a677d4d", + "sha256:5e6674a017629284ef373b50496d9fb1a89b85a20a7fa100ecd109484ec748e5", + "sha256:5e7bb4dd524f50b71c20ef5a12bd61da9b463f8894b18a06130942fe31509881", + "sha256:60c4e3c258eafaab21b174b17270a0cc093718d61cdbde8c03f85ec4bf835343", + "sha256:61995eb826009d99ed8590747bc0da683a5f4fbb4faa8788166bf3810845cd5c", + "sha256:61a72e4a523cdfc521762137559c08dfa360a3caef63620be58c699d1717dac1", + "sha256:69536b821dd1bc78058a6e7541743f8d82bf2d981b91280b14c4daa6cdc7faba", + "sha256:6ccdcb635dae85b006592f78e32d97f4bc7541cb27829d505f9c7fefcef48298", + "sha256:6f88cafe46612b6fa68e6dea49e25bebf160598bba00101caa51cc8c1f18d597", + "sha256:6f969edc851efe23010e0f53a64269f2629a9364135e9ec81c842e8b2277d0c1", + "sha256:77924b0d32fd1f493d3df15d9609ddf9d94c31a364022a6bf6b525ce9da75bea", + "sha256:7df645b6b7800e8b748c217fbd6a4ca8361bcb9a1ae6206cc02377833ec8a1aa", + "sha256:7e17d04ea58ab8cf3f2dc52e875db16077c6357846006780086fff3189fb199d", + "sha256:7f2b34a6444b8f9c1e9f84bd2c639388e5d14f128afd14a869dfb3d9af893aa2", + "sha256:818dfd310aa1020a13cd08ee48e116dd8c3bb2e23b8161f8ac4df587dd5093d7", + "sha256:89a258424158eb8b3ed9f65548d68998da334ef155d09488c5637723eb1cd697", + "sha256:8eceffca3941775b646cd585cd19b275d382de43cc3327d22f7c75d7b003d481", + "sha256:8f280ab4e043b089777b43b4227bdc2035f88da5072ab36588e0ccf77d45d058", + "sha256:8f9dbe12f011a9b784f58faecc171d22465bb532c310bd588d769ba79a59ef5a", + "sha256:9076ce8429785c85f824650735791738de7143f61f43ae9ed83e163c0ca0fa44", + "sha256:95d2305fd2a7b179cacb48b10f618872fc565c175f9f62b854e8d1acac3e8a9e", + "sha256:96d9ea6c8d4cbdeee2e0d43379ce2881e4af0454b00570677c59f33f2531cd38", + "sha256:9944a2cac25ffe049a7e89f306e11b900640837d1ef38d9be0eaa4a4e2b73a52", + "sha256:9a1a80a8fa767f2fdc3870316a54b84fe9fc09fa6ab6a2686783de6a228a4604", + "sha256:9cd32326dfa6ce87edf754153b0105aca64486bebe93b9600ccff74fa0b224df", + "sha256:9f4a65276f6ecdebe75f2a53f578fbc40e8d2860658420d5e0611c56bbf5054c", + "sha256:a286ded34eb16501002e3713b3130c987366eee2ba0d58c33c72f27778e31676", + "sha256:a2df98f5e071320c7d84e8bd07c0542acdd0a7519307fc31774d60e4b842ec4f", + "sha256:a7205497d7276a81fe92951a29616ef96562ed2f91a02066f72b6f93cb34b40e", + "sha256:aa17a3b22b3726d54d7af20394f65d4a1735a842a4e0f557dc67a90f6965c4bc", + "sha256:af33f370be90b48bbaf0dab32decbdcc522b1fa95d109020a963282086518a8e", + "sha256:b17baf702c6e5b4bb66e1281a3efbb1d749c9d06cdb92b665ad81e03118f78fc", + "sha256:b4f3d06dc16671b88a13ae85d8ca92534c0b637d59e49f0558d040a691246422", + "sha256:b9953d87418ac228f508d93898ab572775e4d3b0eeb886a1a7734553bcdaf291", + "sha256:b9a7c987e161e3c58f992c63b7e26fea7fe0777f3b975799d23d65bbb8cb5899", + "sha256:c6cb613148422c523945cdb8b6bed617856f2602fd8750e33773ede2616e55d5", + "sha256:c9b9e5bde7030cae83aa900b5bd660decc65afd2db8c400f3c568c815a47ca2a", + "sha256:cc36a9dded458d4e37492fe3e619c6c83caae794d26ad925adbce61d592f8428", + "sha256:cd2614f17e261f72efc2f19f5e5ff2ee19e2296570c0dcf33409e22be30710de", + "sha256:d115790f18daa99b5c11a506e48923b630ef712e9e4b40482af942c3d40638b8", + "sha256:d194decd9608f11c777946f596f31d5aacad13972a0a87829ae1e6f2d26c1885", + "sha256:d1a4ce40ba11da9382c14da31f4f9e88c18f7d294f523decd0fadfb81f51ad18", + "sha256:d1be9e30e675f5bc1cb534633324578f6f0944a1bcffe53242cf632f554f83b6", + "sha256:d20891e3f33803b26d54c77fd5745878497091e33f4bbbdd454cf6e71aee8890", + "sha256:d27e560eefb57914d742a837f1da98d3b29cb22eff013c8023b7cf52ae6e051d", + "sha256:dcb0569dd5bfe6004658cd0f229efa699a3169dcb4f77bd72e188adda302063d", + "sha256:e62ec131816c6120eff40dffe43424e140264a15fa4ab88c301bd6a595913af3", + "sha256:e75163773a309e56a9b58165cf5a50e0f84b755f6ff863b2c01a38918fe92daa", + "sha256:ec58fb7c2062f835595c12f0f02dcda76d0eb0831423cc191d1e18c9276648de", + "sha256:f1eadbcd3de55ac42310ff82550d3302cb4efcd4e17d76646a17b6e7004bb42b", + "sha256:f2dcb8389fa3d453927b1299f46bdb38473c293c8269d5c777d33ea0e526b610", + "sha256:ffaf841546905d90ff189de7397aa56413b1ce5e54547f17a98f0ebf3a3b0a3b" + ], + "version": "==2.2.3" }, "httpcore": { "hashes": [ @@ -751,6 +725,7 @@ "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==1.0.2" }, "httptools": { @@ -796,27 +771,29 @@ }, "httpx": { "hashes": [ - "sha256:451b55c30d5185ea6b23c2c793abf9bb237d2a7dfb901ced6ff69ad37ec1dfaf", - "sha256:8915f5a3627c4d47b73e8202457cb28f1266982d1159bd5779d86a80c0eab1cd" + "sha256:fec7d6cc5c27c578a391f7e87b9aa7d3d8fbcd034f6399f9f79b45bcc12a866a", + "sha256:ffd96d5cf901e63863d9f1b4b6807861dbea4d301613415d9e6e57ead15fc5d0" ], "index": "pypi", - "version": "==0.26.0" + "markers": "python_version >= '3.8'", + "version": "==0.25.1" }, "httpx-auth": { "hashes": [ - "sha256:6735fff47571fddb25cbcadd8f012b09fe27a171ba114001c82bfb536789a28f", - "sha256:b834fd7e257d7d389054fec9a48a9cdc646c9aa90c519f9b02e4b0a95afe0c19" + "sha256:22826b4b9c3d76523e9f4797769cafcc46f0d2e02f5e56856d5d996e7b925654", + "sha256:e0b3c3439d8de6c4ff9e74787f5cd99575fab5085f3616a3d03228ca03ec213b" ], "index": "pypi", - "version": "==0.19.0" + "markers": "python_version >= '3.9'", + "version": "==0.18.0" }, "idna": { "hashes": [ - "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", - "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" ], "markers": "python_version >= '3.5'", - "version": "==3.6" + "version": "==3.4" }, "jmespath": { "hashes": [ @@ -836,69 +813,69 @@ }, "markupsafe": { "hashes": [ - "sha256:0042d6a9880b38e1dd9ff83146cc3c9c18a059b9360ceae207805567aacccc69", - "sha256:0c26f67b3fe27302d3a412b85ef696792c4a2386293c53ba683a89562f9399b0", - "sha256:0fbad3d346df8f9d72622ac71b69565e621ada2ce6572f37c2eae8dacd60385d", - "sha256:15866d7f2dc60cfdde12ebb4e75e41be862348b4728300c36cdf405e258415ec", - "sha256:1c98c33ffe20e9a489145d97070a435ea0679fddaabcafe19982fe9c971987d5", - "sha256:21e7af8091007bf4bebf4521184f4880a6acab8df0df52ef9e513d8e5db23411", - "sha256:23984d1bdae01bee794267424af55eef4dfc038dc5d1272860669b2aa025c9e3", - "sha256:31f57d64c336b8ccb1966d156932f3daa4fee74176b0fdc48ef580be774aae74", - "sha256:3583a3a3ab7958e354dc1d25be74aee6228938312ee875a22330c4dc2e41beb0", - "sha256:36d7626a8cca4d34216875aee5a1d3d654bb3dac201c1c003d182283e3205949", - "sha256:396549cea79e8ca4ba65525470d534e8a41070e6b3500ce2414921099cb73e8d", - "sha256:3a66c36a3864df95e4f62f9167c734b3b1192cb0851b43d7cc08040c074c6279", - "sha256:3aae9af4cac263007fd6309c64c6ab4506dd2b79382d9d19a1994f9240b8db4f", - "sha256:3ab3a886a237f6e9c9f4f7d272067e712cdb4efa774bef494dccad08f39d8ae6", - "sha256:47bb5f0142b8b64ed1399b6b60f700a580335c8e1c57f2f15587bd072012decc", - "sha256:49a3b78a5af63ec10d8604180380c13dcd870aba7928c1fe04e881d5c792dc4e", - "sha256:4df98d4a9cd6a88d6a585852f56f2155c9cdb6aec78361a19f938810aa020954", - "sha256:5045e892cfdaecc5b4c01822f353cf2c8feb88a6ec1c0adef2a2e705eef0f656", - "sha256:5244324676254697fe5c181fc762284e2c5fceeb1c4e3e7f6aca2b6f107e60dc", - "sha256:54635102ba3cf5da26eb6f96c4b8c53af8a9c0d97b64bdcb592596a6255d8518", - "sha256:54a7e1380dfece8847c71bf7e33da5d084e9b889c75eca19100ef98027bd9f56", - "sha256:55d03fea4c4e9fd0ad75dc2e7e2b6757b80c152c032ea1d1de487461d8140efc", - "sha256:698e84142f3f884114ea8cf83e7a67ca8f4ace8454e78fe960646c6c91c63bfa", - "sha256:6aa5e2e7fc9bc042ae82d8b79d795b9a62bd8f15ba1e7594e3db243f158b5565", - "sha256:7653fa39578957bc42e5ebc15cf4361d9e0ee4b702d7d5ec96cdac860953c5b4", - "sha256:765f036a3d00395a326df2835d8f86b637dbaf9832f90f5d196c3b8a7a5080cb", - "sha256:78bc995e004681246e85e28e068111a4c3f35f34e6c62da1471e844ee1446250", - "sha256:7a07f40ef8f0fbc5ef1000d0c78771f4d5ca03b4953fc162749772916b298fc4", - "sha256:8b570a1537367b52396e53325769608f2a687ec9a4363647af1cded8928af959", - "sha256:987d13fe1d23e12a66ca2073b8d2e2a75cec2ecb8eab43ff5624ba0ad42764bc", - "sha256:9896fca4a8eb246defc8b2a7ac77ef7553b638e04fbf170bff78a40fa8a91474", - "sha256:9e9e3c4020aa2dc62d5dd6743a69e399ce3de58320522948af6140ac959ab863", - "sha256:a0b838c37ba596fcbfca71651a104a611543077156cb0a26fe0c475e1f152ee8", - "sha256:a4d176cfdfde84f732c4a53109b293d05883e952bbba68b857ae446fa3119b4f", - "sha256:a76055d5cb1c23485d7ddae533229039b850db711c554a12ea64a0fd8a0129e2", - "sha256:a76cd37d229fc385738bd1ce4cba2a121cf26b53864c1772694ad0ad348e509e", - "sha256:a7cc49ef48a3c7a0005a949f3c04f8baa5409d3f663a1b36f0eba9bfe2a0396e", - "sha256:abf5ebbec056817057bfafc0445916bb688a255a5146f900445d081db08cbabb", - "sha256:b0fe73bac2fed83839dbdbe6da84ae2a31c11cfc1c777a40dbd8ac8a6ed1560f", - "sha256:b6f14a9cd50c3cb100eb94b3273131c80d102e19bb20253ac7bd7336118a673a", - "sha256:b83041cda633871572f0d3c41dddd5582ad7d22f65a72eacd8d3d6d00291df26", - "sha256:b835aba863195269ea358cecc21b400276747cc977492319fd7682b8cd2c253d", - "sha256:bf1196dcc239e608605b716e7b166eb5faf4bc192f8a44b81e85251e62584bd2", - "sha256:c669391319973e49a7c6230c218a1e3044710bc1ce4c8e6eb71f7e6d43a2c131", - "sha256:c7556bafeaa0a50e2fe7dc86e0382dea349ebcad8f010d5a7dc6ba568eaaa789", - "sha256:c8f253a84dbd2c63c19590fa86a032ef3d8cc18923b8049d91bcdeeb2581fbf6", - "sha256:d18b66fe626ac412d96c2ab536306c736c66cf2a31c243a45025156cc190dc8a", - "sha256:d5291d98cd3ad9a562883468c690a2a238c4a6388ab3bd155b0c75dd55ece858", - "sha256:d5c31fe855c77cad679b302aabc42d724ed87c043b1432d457f4976add1c2c3e", - "sha256:d6e427c7378c7f1b2bef6a344c925b8b63623d3321c09a237b7cc0e77dd98ceb", - "sha256:dac1ebf6983148b45b5fa48593950f90ed6d1d26300604f321c74a9ca1609f8e", - "sha256:de8153a7aae3835484ac168a9a9bdaa0c5eee4e0bc595503c95d53b942879c84", - "sha256:e1a0d1924a5013d4f294087e00024ad25668234569289650929ab871231668e7", - "sha256:e7902211afd0af05fbadcc9a312e4cf10f27b779cf1323e78d52377ae4b72bea", - "sha256:e888ff76ceb39601c59e219f281466c6d7e66bd375b4ec1ce83bcdc68306796b", - "sha256:f06e5a9e99b7df44640767842f414ed5d7bedaaa78cd817ce04bbd6fd86e2dd6", - "sha256:f6be2d708a9d0e9b0054856f07ac7070fbe1754be40ca8525d5adccdbda8f475", - "sha256:f9917691f410a2e0897d1ef99619fd3f7dd503647c8ff2475bf90c3cf222ad74", - "sha256:fc1a75aa8f11b87910ffd98de62b29d6520b6d6e8a3de69a70ca34dea85d2a8a", - "sha256:fe8512ed897d5daf089e5bd010c3dc03bb1bdae00b35588c49b98268d4a01e00" + "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e", + "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", + "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", + "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", + "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c", + "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", + "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", + "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb", + "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939", + "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", + "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", + "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", + "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9", + "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", + "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", + "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", + "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd", + "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", + "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", + "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", + "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac", + "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52", + "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", + "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", + "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", + "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007", + "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", + "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", + "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", + "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0", + "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", + "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", + "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", + "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1", + "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", + "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", + "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c", + "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", + "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823", + "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", + "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", + "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", + "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad", + "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee", + "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc", + "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2", + "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48", + "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7", + "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e", + "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b", + "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa", + "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5", + "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e", + "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb", + "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", + "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", + "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", + "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc", + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2", + "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11" ], "markers": "python_version >= '3.7'", - "version": "==2.1.4" + "version": "==2.1.3" }, "multidict": { "hashes": [ @@ -982,101 +959,99 @@ }, "numpy": { "hashes": [ - "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd", - "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b", - "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e", - "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f", - "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f", - "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178", - "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3", - "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4", - "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e", - "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0", - "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00", - "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419", - "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4", - "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6", - "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166", - "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b", - "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3", - "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf", - "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2", - "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2", - "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36", - "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03", - "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce", - "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6", - "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13", - "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5", - "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e", - "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485", - "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137", - "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374", - "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58", - "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b", - "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb", - "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b", - "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda", - "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511" + "sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668", + "sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9", + "sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f", + "sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5", + "sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53", + "sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2", + "sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974", + "sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f", + "sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42", + "sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2", + "sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af", + "sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67", + "sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e", + "sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c", + "sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7", + "sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e", + "sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908", + "sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66", + "sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24", + "sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b", + "sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e", + "sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe", + "sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a", + "sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575", + "sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297", + "sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104", + "sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab", + "sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3", + "sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244", + "sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124", + "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617", + "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c" ], "index": "pypi", - "version": "==1.26.3" + "markers": "python_version < '3.13' and python_version >= '3.9'", + "version": "==1.26.1" }, "orjson": { "hashes": [ - "sha256:03ea7ee7e992532c2f4a06edd7ee1553f0644790553a118e003e3c405add41fa", - "sha256:06e42e899dde61eb1851a9fad7f1a21b8e4be063438399b63c07839b57668f6c", - "sha256:09d60450cda3fa6c8ed17770c3a88473a16460cd0ff2ba74ef0df663b6fd3bb8", - "sha256:0fc156fba60d6b50743337ba09f052d8afc8b64595112996d22f5fce01ab57da", - "sha256:12756a108875526b76e505afe6d6ba34960ac6b8c5ec2f35faf73ef161e97e07", - "sha256:1bb8f657c39ecdb924d02e809f992c9aafeb1ad70127d53fb573a6a6ab59d549", - "sha256:2849f88a0a12b8d94579b67486cbd8f3a49e36a4cb3d3f0ab352c596078c730c", - "sha256:29bf08e2eadb2c480fdc2e2daae58f2f013dff5d3b506edd1e02963b9ce9f8a9", - "sha256:2dfaf71499d6fd4153f5c86eebb68e3ec1bf95851b030a4b55c7637a37bbdee4", - "sha256:3186b18754befa660b31c649a108a915493ea69b4fc33f624ed854ad3563ac65", - "sha256:410f24309fbbaa2fab776e3212a81b96a1ec6037259359a32ea79fbccfcf76aa", - "sha256:4a0cd56e8ee56b203abae7d482ac0d233dbfb436bb2e2d5cbcb539fe1200a312", - "sha256:54071b7398cd3f90e4bb61df46705ee96cb5e33e53fc0b2f47dbd9b000e238e1", - "sha256:5586a533998267458fad3a457d6f3cdbddbcce696c916599fa8e2a10a89b24d3", - "sha256:59feb148392d9155f3bfed0a2a3209268e000c2c3c834fb8fe1a6af9392efcbf", - "sha256:5c157e999e5694475a5515942aebeed6e43f7a1ed52267c1c93dcfde7d78d421", - "sha256:61563d5d3b0019804d782137a4f32c72dc44c84e7d078b89d2d2a1adbaa47b52", - "sha256:640e2b5d8e36b970202cfd0799d11a9a4ab46cf9212332cd642101ec952df7c8", - "sha256:6492ff5953011e1ba9ed1bf086835fd574bd0a3cbe252db8e15ed72a30479081", - "sha256:659a8d7279e46c97661839035a1a218b61957316bf0202674e944ac5cfe7ed83", - "sha256:67426651faa671b40443ea6f03065f9c8e22272b62fa23238b3efdacd301df31", - "sha256:6b4e2bed7d00753c438e83b613923afdd067564ff7ed696bfe3a7b073a236e07", - "sha256:890e7519c0c70296253660455f77e3a194554a3c45e42aa193cdebc76a02d82b", - "sha256:950951799967558c214cd6cceb7ceceed6f81d2c3c4135ee4a2c9c69f58aa225", - "sha256:96e44b21fe407b8ed48afbb3721f3c8c8ce17e345fbe232bd4651ace7317782d", - "sha256:975e72e81a249174840d5a8df977d067b0183ef1560a32998be340f7e195c730", - "sha256:99e8cd005b3926c3db9b63d264bd05e1bf4451787cc79a048f27f5190a9a0311", - "sha256:a2b6f5252c92bcab3b742ddb3ac195c0fa74bed4319acd74f5d54d79ef4715dc", - "sha256:a4ae815a172a1f073b05b9e04273e3b23e608a0858c4e76f606d2d75fcabde0c", - "sha256:a84a0c3d4841a42e2571b1c1ead20a83e2792644c5827a606c50fc8af7ca4bee", - "sha256:ab8add018a53665042a5ae68200f1ad14c7953fa12110d12d41166f111724656", - "sha256:af17fa87bccad0b7f6fd8ac8f9cbc9ee656b4552783b10b97a071337616db3e4", - "sha256:b0e9d73cdbdad76a53a48f563447e0e1ce34bcecef4614eb4b146383e6e7d8c9", - "sha256:b159baecfda51c840a619948c25817d37733a4d9877fea96590ef8606468b362", - "sha256:bc82a4db9934a78ade211cf2e07161e4f068a461c1796465d10069cb50b32a80", - "sha256:bd1b8ec63f0bf54a50b498eedeccdca23bd7b658f81c524d18e410c203189365", - "sha256:c95488e4aa1d078ff5776b58f66bd29d628fa59adcb2047f4efd3ecb2bd41a71", - "sha256:cbbf313c9fb9d4f6cf9c22ced4b6682230457741daeb3d7060c5d06c2e73884a", - "sha256:cbd0f3555205bf2a60f8812133f2452d498dbefa14423ba90fe89f32276f7abf", - "sha256:cd52dec9eddf4c8c74392f3fd52fa137b5f2e2bed1d9ae958d879de5f7d7cded", - "sha256:cfdaede0fa5b500314ec7b1249c7e30e871504a57004acd116be6acdda3b8ab3", - "sha256:d3cfb76600c5a1e6be91326b8f3b83035a370e727854a96d801c1ea08b708073", - "sha256:d664880d7f016efbae97c725b243b33c2cbb4851ddc77f683fd1eec4a7894146", - "sha256:d6ce2062c4af43b92b0221ed4f445632c6bf4213f8a7da5396a122931377acd9", - "sha256:da908d23a3b3243632b523344403b128722a5f45e278a8343c2bb67538dff0e4", - "sha256:daa438bd8024e03bcea2c5a92cd719a663a58e223fba967296b6ab9992259dbf", - "sha256:dde1bc7c035f2d03aa49dc8642d9c6c9b1a81f2470e02055e76ed8853cfae0c3", - "sha256:e773f251258dd82795fd5daeac081d00b97bacf1548e44e71245543374874bcf", - "sha256:ed398f9a9d5a1bf55b6e362ffc80ac846af2122d14a8243a1e6510a4eabcb71e", - "sha256:f4098c7674901402c86ba6045a551a2ee345f9f7ed54eeffc7d86d155c8427e5" + "sha256:06ad5543217e0e46fd7ab7ea45d506c76f878b87b1b4e369006bdb01acc05a83", + "sha256:0a73160e823151f33cdc05fe2cea557c5ef12fdf276ce29bb4f1c571c8368a60", + "sha256:1234dc92d011d3554d929b6cf058ac4a24d188d97be5e04355f1b9223e98bbe9", + "sha256:1d0dc4310da8b5f6415949bd5ef937e60aeb0eb6b16f95041b5e43e6200821fb", + "sha256:2a11b4b1a8415f105d989876a19b173f6cdc89ca13855ccc67c18efbd7cbd1f8", + "sha256:2e2ecd1d349e62e3960695214f40939bbfdcaeaaa62ccc638f8e651cf0970e5f", + "sha256:3a2ce5ea4f71681623f04e2b7dadede3c7435dfb5e5e2d1d0ec25b35530e277b", + "sha256:3e892621434392199efb54e69edfff9f699f6cc36dd9553c5bf796058b14b20d", + "sha256:3fb205ab52a2e30354640780ce4587157a9563a68c9beaf52153e1cea9aa0921", + "sha256:4689270c35d4bb3102e103ac43c3f0b76b169760aff8bcf2d401a3e0e58cdb7f", + "sha256:49f8ad582da6e8d2cf663c4ba5bf9f83cc052570a3a767487fec6af839b0e777", + "sha256:4bd176f528a8151a6efc5359b853ba3cc0e82d4cd1fab9c1300c5d957dc8f48c", + "sha256:4cf7837c3b11a2dfb589f8530b3cff2bd0307ace4c301e8997e95c7468c1378e", + "sha256:4fd72fab7bddce46c6826994ce1e7de145ae1e9e106ebb8eb9ce1393ca01444d", + "sha256:5148bab4d71f58948c7c39d12b14a9005b6ab35a0bdf317a8ade9a9e4d9d0bd5", + "sha256:5869e8e130e99687d9e4be835116c4ebd83ca92e52e55810962446d841aba8de", + "sha256:602a8001bdf60e1a7d544be29c82560a7b49319a0b31d62586548835bbe2c862", + "sha256:61804231099214e2f84998316f3238c4c2c4aaec302df12b21a64d72e2a135c7", + "sha256:666c6fdcaac1f13eb982b649e1c311c08d7097cbda24f32612dae43648d8db8d", + "sha256:674eb520f02422546c40401f4efaf8207b5e29e420c17051cddf6c02783ff5ca", + "sha256:7ec960b1b942ee3c69323b8721df2a3ce28ff40e7ca47873ae35bfafeb4555ca", + "sha256:7f433be3b3f4c66016d5a20e5b4444ef833a1f802ced13a2d852c637f69729c1", + "sha256:7f8fb7f5ecf4f6355683ac6881fd64b5bb2b8a60e3ccde6ff799e48791d8f864", + "sha256:81a3a3a72c9811b56adf8bcc829b010163bb2fc308877e50e9910c9357e78521", + "sha256:858379cbb08d84fe7583231077d9a36a1a20eb72f8c9076a45df8b083724ad1d", + "sha256:8b9ba0ccd5a7f4219e67fbbe25e6b4a46ceef783c42af7dbc1da548eb28b6531", + "sha256:92af0d00091e744587221e79f68d617b432425a7e59328ca4c496f774a356071", + "sha256:9ebbdbd6a046c304b1845e96fbcc5559cd296b4dfd3ad2509e33c4d9ce07d6a1", + "sha256:9edd2856611e5050004f4722922b7b1cd6268da34102667bd49d2a2b18bafb81", + "sha256:a353bf1f565ed27ba71a419b2cd3db9d6151da426b61b289b6ba1422a702e643", + "sha256:b5b7d4a44cc0e6ff98da5d56cde794385bdd212a86563ac321ca64d7f80c80d1", + "sha256:b90f340cb6397ec7a854157fac03f0c82b744abdd1c0941a024c3c29d1340aff", + "sha256:c18a4da2f50050a03d1da5317388ef84a16013302a5281d6f64e4a3f406aabc4", + "sha256:c338ed69ad0b8f8f8920c13f529889fe0771abbb46550013e3c3d01e5174deef", + "sha256:c5a02360e73e7208a872bf65a7554c9f15df5fe063dc047f79738998b0506a14", + "sha256:c62b6fa2961a1dcc51ebe88771be5319a93fd89bd247c9ddf732bc250507bc2b", + "sha256:c812312847867b6335cfb264772f2a7e85b3b502d3a6b0586aa35e1858528ab1", + "sha256:c943b35ecdf7123b2d81d225397efddf0bce2e81db2f3ae633ead38e85cd5ade", + "sha256:ce0a29c28dfb8eccd0f16219360530bc3cfdf6bf70ca384dacd36e6c650ef8e8", + "sha256:cf80b550092cc480a0cbd0750e8189247ff45457e5a023305f7ef1bcec811616", + "sha256:cff7570d492bcf4b64cc862a6e2fb77edd5e5748ad715f487628f102815165e9", + "sha256:d2c1e559d96a7f94a4f581e2a32d6d610df5840881a8cba8f25e446f4d792df3", + "sha256:deeb3922a7a804755bbe6b5be9b312e746137a03600f488290318936c1a2d4dc", + "sha256:e28a50b5be854e18d54f75ef1bb13e1abf4bc650ab9d635e4258c58e71eb6ad5", + "sha256:e99c625b8c95d7741fe057585176b1b8783d46ed4b8932cf98ee145c4facf499", + "sha256:ec6f18f96b47299c11203edfbdc34e1b69085070d9a3d1f302810cc23ad36bf3", + "sha256:ed8bc367f725dfc5cabeed1ae079d00369900231fbb5a5280cf0736c30e2adf7", + "sha256:ee5926746232f627a3be1cc175b2cfad24d0170d520361f4ce3fa2fd83f09e1d", + "sha256:f295efcd47b6124b01255d1491f9e46f17ef40d3d7eabf7364099e463fb45f0f", + "sha256:fb0b361d73f6b8eeceba47cd37070b5e6c9de5beaeaa63a1cb35c7e1a73ef088" ], "index": "pypi", - "version": "==3.9.12" + "markers": "python_version >= '3.8'", + "version": "==3.9.10" }, "packaging": { "hashes": [ @@ -1084,6 +1059,7 @@ "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==23.2" }, "pendulum": { @@ -1111,6 +1087,7 @@ "sha256:fb53ffa0085002ddd43b6ca61a7b34f2d4d7c3ed66f931fe599e1a531b42af9b" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==2.1.2" }, "pglast": { @@ -1138,42 +1115,43 @@ }, "protobuf": { "hashes": [ - "sha256:10894a2885b7175d3984f2be8d9850712c57d5e7587a2410720af8be56cdaf62", - "sha256:2db9f8fa64fbdcdc93767d3cf81e0f2aef176284071507e3ede160811502fd3d", - "sha256:33a1aeef4b1927431d1be780e87b641e322b88d654203a9e9d93f218ee359e61", - "sha256:47f3de503fe7c1245f6f03bea7e8d3ec11c6c4a2ea9ef910e3221c8a15516d62", - "sha256:5e5c933b4c30a988b52e0b7c02641760a5ba046edc5e43d3b94a74c9fc57c1b3", - "sha256:8f62574857ee1de9f770baf04dde4165e30b15ad97ba03ceac65f760ff018ac9", - "sha256:a8b7a98d4ce823303145bf3c1a8bdb0f2f4642a414b196f04ad9853ed0c8f830", - "sha256:b50c949608682b12efb0b2717f53256f03636af5f60ac0c1d900df6213910fd6", - "sha256:d66a769b8d687df9024f2985d5137a337f957a0916cf5464d1513eee96a63ff0", - "sha256:fc381d1dd0516343f1440019cedf08a7405f791cd49eef4ae1ea06520bc1c020", - "sha256:fe599e175cb347efc8ee524bcd4b902d11f7262c0e569ececcb89995c15f0a5e" + "sha256:1a3ba712877e6d37013cdc3476040ea1e313a6c2e1580836a94f76b3c176d575", + "sha256:1a53d6f64b00eecf53b65ff4a8c23dc95df1fa1e97bb06b8122e5a64f49fc90a", + "sha256:32ac2100b0e23412413d948c03060184d34a7c50b3e5d7524ee96ac2b10acf51", + "sha256:5c1203ac9f50e4853b0a0bfffd32c67118ef552a33942982eeab543f5c634395", + "sha256:63714e79b761a37048c9701a37438aa29945cd2417a97076048232c1df07b701", + "sha256:683dc44c61f2620b32ce4927de2108f3ebe8ccf2fd716e1e684e5a50da154054", + "sha256:68f7caf0d4f012fd194a301420cf6aa258366144d814f358c5b32558228afa7c", + "sha256:b2cf8b5d381f9378afe84618288b239e75665fe58d0f3fd5db400959274296e9", + "sha256:c40ff8f00aa737938c5378d461637d15c442a12275a81019cc2fef06d81c9419", + "sha256:cf21faba64cd2c9a3ed92b7a67f226296b10159dbb8fbc5e854fc90657d908e4", + "sha256:d94a33db8b7ddbd0af7c467475fb9fde0c705fb315a8433c0e2020942b863a1f" ], "markers": "python_version >= '3.8'", - "version": "==4.25.2" + "version": "==4.25.0" }, "psutil": { "hashes": [ - "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d", - "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73", - "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8", - "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2", - "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e", - "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36", - "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7", - "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c", - "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee", - "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421", - "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf", - "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81", - "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0", - "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631", - "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4", - "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8" + "sha256:10e8c17b4f898d64b121149afb136c53ea8b68c7531155147867b7b1ac9e7e28", + "sha256:18cd22c5db486f33998f37e2bb054cc62fd06646995285e02a51b1e08da97017", + "sha256:3ebf2158c16cc69db777e3c7decb3c0f43a7af94a60d72e87b2823aebac3d602", + "sha256:51dc3d54607c73148f63732c727856f5febec1c7c336f8f41fcbd6315cce76ac", + "sha256:6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a", + "sha256:70cb3beb98bc3fd5ac9ac617a327af7e7f826373ee64c80efd4eb2856e5051e9", + "sha256:748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4", + "sha256:91ecd2d9c00db9817a4b4192107cf6954addb5d9d67a969a4f436dbc9200f88c", + "sha256:92e0cc43c524834af53e9d3369245e6cc3b130e78e26100d1f63cdb0abeb3d3c", + "sha256:a6f01f03bf1843280f4ad16f4bde26b817847b4c1a0db59bf6419807bc5ce05c", + "sha256:c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a", + "sha256:ca2780f5e038379e520281e4c032dddd086906ddff9ef0d1b9dcf00710e5071c", + "sha256:daecbcbd29b289aac14ece28eca6a3e60aa361754cf6da3dfb20d4d32b6c7f57", + "sha256:e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a", + "sha256:fb8a697f11b0f5994550555fcfe3e69799e5b060c8ecf9e2f75c69302cc35c0d", + "sha256:ff18b8d1a784b810df0b0fff3bcb50ab941c3b8e2c8de5726f9c71c601c611aa" ], "index": "pypi", - "version": "==5.9.8" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==5.9.6" }, "psycopg2": { "hashes": [ @@ -1192,15 +1170,16 @@ "sha256:ff432630e510709564c01dafdbe996cb552e0b9f3f065eb89bdce5bd31fabf4c" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==2.9.9" }, "pyasn1": { "hashes": [ - "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58", - "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c" + "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57", + "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==0.5.1" + "version": "==0.5.0" }, "pyasn1-modules": { "hashes": [ @@ -1212,45 +1191,46 @@ }, "pydantic": { "hashes": [ - "sha256:08b6ec0917c30861e3fe71a93be1648a2aa4f62f866142ba21670b24444d7fd8", - "sha256:0fbb503bbbbab0c588ed3cd21975a1d0d4163b87e360fec17a792f7d8c4ff29f", - "sha256:1245f4f61f467cb3dfeced2b119afef3db386aec3d24a22a1de08c65038b255f", - "sha256:13e86a19dca96373dcf3190fcb8797d40a6f12f154a244a8d1e8e03b8f280593", - "sha256:21efacc678a11114c765eb52ec0db62edffa89e9a562a94cbf8fa10b5db5c046", - "sha256:23d47a4b57a38e8652bcab15a658fdb13c785b9ce217cc3a729504ab4e1d6bc9", - "sha256:24a7679fab2e0eeedb5a8924fc4a694b3bcaac7d305aeeac72dd7d4e05ecbebf", - "sha256:282613a5969c47c83a8710cc8bfd1e70c9223feb76566f74683af889faadc0ea", - "sha256:336709883c15c050b9c55a63d6c7ff09be883dbc17805d2b063395dd9d9d0022", - "sha256:412ab4a3f6dbd2bf18aefa9f79c7cca23744846b31f1d6555c2ee2b05a2e14ca", - "sha256:466669501d08ad8eb3c4fecd991c5e793c4e0bbd62299d05111d4f827cded64f", - "sha256:46f17b832fe27de7850896f3afee50ea682220dd218f7e9c88d436788419dca6", - "sha256:49a46a0994dd551ec051986806122767cf144b9702e31d47f6d493c336462597", - "sha256:4ae57b4d8e3312d486e2498d42aed3ece7b51848336964e43abbf9671584e67f", - "sha256:53e3819bd20a42470d6dd0fe7fc1c121c92247bca104ce608e609b59bc7a77ee", - "sha256:596f12a1085e38dbda5cbb874d0973303e34227b400b6414782bf205cc14940c", - "sha256:646b2b12df4295b4c3148850c85bff29ef6d0d9621a8d091e98094871a62e5c7", - "sha256:798a3d05ee3b71967844a1164fd5bdb8c22c6d674f26274e78b9f29d81770c4e", - "sha256:7f4fcec873f90537c382840f330b90f4715eebc2bc9925f04cb92de593eae054", - "sha256:82d886bd3c3fbeaa963692ef6b643159ccb4b4cefaf7ff1617720cbead04fd1d", - "sha256:8e3a76f571970fcd3c43ad982daf936ae39b3e90b8a2e96c04113a369869dc87", - "sha256:8ee853cd12ac2ddbf0ecbac1c289f95882b2d4482258048079d13be700aa114c", - "sha256:9d578ac4bf7fdf10ce14caba6f734c178379bd35c486c6deb6f49006e1ba78a7", - "sha256:a42c7d17706911199798d4c464b352e640cab4351efe69c2267823d619a937e5", - "sha256:aad4e10efa5474ed1a611b6d7f0d130f4aafadceb73c11d9e72823e8f508e663", - "sha256:ad8c2bc677ae5f6dbd3cf92f2c7dc613507eafe8f71719727cbc0a7dec9a8c01", - "sha256:bc3ed06ab13660b565eed80887fcfbc0070f0aa0691fbb351657041d3e874efe", - "sha256:bfb113860e9288d0886e3b9e49d9cf4a9d48b441f52ded7d96db7819028514cc", - "sha256:c37c28449752bb1f47975d22ef2882d70513c546f8f37201e0fec3a97b816eee", - "sha256:c66609e138c31cba607d8e2a7b6a5dc38979a06c900815495b2d90ce6ded35b4", - "sha256:d604be0f0b44d473e54fdcb12302495fe0467c56509a2f80483476f3ba92b33c", - "sha256:d986e115e0b39604b9eee3507987368ff8148222da213cd38c359f6f57b3b347", - "sha256:dba49d52500c35cfec0b28aa8b3ea5c37c9df183ffc7210b10ff2a415c125c4a", - "sha256:e897c9f35281f7889873a3e6d6b69aa1447ceb024e8495a5f0d02ecd17742a7f", - "sha256:f9f674b5c3bebc2eba401de64f29948ae1e646ba2735f884d1594c5f675d6f2a", - "sha256:fa7790e94c60f809c95602a26d906eba01a0abee9cc24150e4ce2189352deb1b" + "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548", + "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80", + "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340", + "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01", + "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132", + "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599", + "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1", + "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8", + "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe", + "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0", + "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17", + "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953", + "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f", + "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f", + "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d", + "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127", + "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8", + "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f", + "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580", + "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6", + "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691", + "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87", + "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd", + "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96", + "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687", + "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33", + "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69", + "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653", + "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78", + "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261", + "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f", + "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9", + "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d", + "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737", + "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5", + "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0" ], "index": "pypi", - "version": "==1.10.14" + "markers": "python_version >= '3.7'", + "version": "==1.10.13" }, "pyproj": { "hashes": [ @@ -1283,6 +1263,7 @@ "sha256:fffb059ba3bced6f6725961ba758649261d85ed6ce670d3e3b0a26e81cf1aa8d" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==3.6.1" }, "python-dateutil": { @@ -1295,10 +1276,10 @@ }, "python-dotenv": { "hashes": [ - "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", - "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a" + "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba", + "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a" ], - "version": "==1.0.1" + "version": "==1.0.0" }, "python-multipart": { "hashes": [ @@ -1306,6 +1287,7 @@ "sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==0.0.6" }, "pytzdata": { @@ -1347,7 +1329,6 @@ "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", - "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef", "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", @@ -1391,6 +1372,14 @@ "markers": "python_version >= '3.7'", "version": "==2.31.0" }, + "retrying": { + "hashes": [ + "sha256:345da8c5765bd982b1d1915deb9102fd3d1f7ad16bd84a9700b85f64d24e8f3e", + "sha256:8cc4d43cb8e1125e0ff3344e9de678fefd85db3b750b81b2240dc0183af37b35" + ], + "index": "pypi", + "version": "==1.3.4" + }, "rsa": { "hashes": [ "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7", @@ -1401,19 +1390,19 @@ }, "s3transfer": { "hashes": [ - "sha256:3cdb40f5cfa6966e812209d0994f2a4709b561c88e90cf00c2696d2df4e56b2e", - "sha256:d0c8bbf672d5eebbe4e57945e23b972d963f07d82f661cabf678a5c88831595b" + "sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a", + "sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e" ], - "markers": "python_version >= '3.8'", - "version": "==0.10.0" + "markers": "python_version >= '3.7'", + "version": "==0.7.0" }, "setuptools": { "hashes": [ - "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05", - "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78" + "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87", + "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a" ], "markers": "python_version >= '3.8'", - "version": "==69.0.3" + "version": "==68.2.2" }, "shapely": { "hashes": [ @@ -1460,6 +1449,7 @@ "sha256:fd3ad17b64466a033848c26cb5b509625c87d07dcf39a1541461cacdb8f7e91c" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==2.0.2" }, "six": { @@ -1516,6 +1506,7 @@ "sha256:fcb251305fa24a490b6a9ee2180e5f8252915fb778d3dafc70f9cc3f863827b9" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.3.24" }, "sqlalchemy-utils": { @@ -1524,6 +1515,7 @@ "sha256:a2181bff01eeb84479e38571d2c0718eb52042f9afd8c194d0d02877e84b7d74" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==0.41.1" }, "starlette": { @@ -1532,6 +1524,7 @@ "sha256:7d49f4a27f8742262ef1470608c59ddbc66baf37c148e938c7038e6bc7a998aa" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==0.14.2" }, "typer": { @@ -1540,15 +1533,16 @@ "sha256:5d96d986a21493606a358cae4461bd8cdf83cbf33a5aa950ae629ca3b51467ee" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==0.9.0" }, "typing-extensions": { "hashes": [ - "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783", - "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd" + "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", + "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" ], "markers": "python_version >= '3.8'", - "version": "==4.9.0" + "version": "==4.8.0" }, "urllib3": { "hashes": [ @@ -1563,12 +1557,11 @@ "standard" ], "hashes": [ - "sha256:890b00f6c537d58695d3bb1f28e23db9d9e7a17cbcc76d7457c499935f933e24", - "sha256:c855578045d45625fd027367f7653d249f7c49f9361ba15cf9624186b26b8eb6" + "sha256:09c8e5a79dc466bdf28dead50093957db184de356fcdc48697bad3bde4c2588e", + "sha256:7c84fea70c619d4a710153482c0d230929af7bcf76c7bfa6de151f0a3a80121e" ], - "index": "pypi", - "markers": null, - "version": "==0.27.0" + "markers": "python_version >= '3.8'", + "version": "==0.24.0.post1" }, "uvloop": { "hashes": [ @@ -1765,99 +1758,83 @@ }, "yarl": { "hashes": [ - "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51", - "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce", - "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559", - "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0", - "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81", - "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc", - "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4", - "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c", - "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130", - "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136", - "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e", - "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec", - "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7", - "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1", - "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455", - "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099", - "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129", - "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10", - "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142", - "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98", - "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa", - "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7", - "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525", - "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c", - "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9", - "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c", - "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8", - "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b", - "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf", - "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23", - "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd", - "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27", - "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f", - "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece", - "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434", - "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec", - "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff", - "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78", - "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d", - "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863", - "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53", - "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31", - "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15", - "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5", - "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b", - "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57", - "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3", - "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1", - "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f", - "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad", - "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c", - "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7", - "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2", - "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b", - "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2", - "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b", - "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9", - "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be", - "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e", - "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984", - "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4", - "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074", - "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2", - "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392", - "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91", - "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541", - "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf", - "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572", - "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66", - "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575", - "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14", - "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5", - "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1", - "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e", - "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551", - "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17", - "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead", - "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0", - "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe", - "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234", - "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0", - "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7", - "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34", - "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42", - "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385", - "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78", - "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be", - "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958", - "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749", - "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec" + "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571", + "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3", + "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3", + "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c", + "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7", + "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04", + "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191", + "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea", + "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4", + "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4", + "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095", + "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e", + "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74", + "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef", + "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33", + "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde", + "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45", + "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf", + "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b", + "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac", + "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0", + "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528", + "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716", + "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb", + "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18", + "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72", + "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6", + "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582", + "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5", + "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368", + "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc", + "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9", + "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be", + "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a", + "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80", + "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8", + "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6", + "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417", + "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574", + "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59", + "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608", + "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82", + "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1", + "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3", + "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d", + "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8", + "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc", + "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac", + "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8", + "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955", + "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0", + "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367", + "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb", + "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a", + "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623", + "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2", + "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6", + "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7", + "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4", + "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051", + "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938", + "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8", + "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9", + "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3", + "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5", + "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9", + "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333", + "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185", + "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3", + "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560", + "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b", + "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7", + "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78", + "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7" ], "markers": "python_version >= '3.7'", - "version": "==1.9.4" + "version": "==1.9.2" } }, "develop": { @@ -1871,63 +1848,62 @@ }, "attrs": { "hashes": [ - "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30", - "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1" + "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04", + "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" ], "markers": "python_version >= '3.7'", - "version": "==23.2.0" + "version": "==23.1.0" }, "black": { "hashes": [ - "sha256:0269dfdea12442022e88043d2910429bed717b2d04523867a85dacce535916b8", - "sha256:07204d078e25327aad9ed2c64790d681238686bce254c910de640c7cc4fc3aa6", - "sha256:08b34e85170d368c37ca7bf81cf67ac863c9d1963b2c1780c39102187ec8dd62", - "sha256:1a95915c98d6e32ca43809d46d932e2abc5f1f7d582ffbe65a5b4d1588af7445", - "sha256:2588021038bd5ada078de606f2a804cadd0a3cc6a79cb3e9bb3a8bf581325a4c", - "sha256:2fa6a0e965779c8f2afb286f9ef798df770ba2b6cee063c650b96adec22c056a", - "sha256:34afe9da5056aa123b8bfda1664bfe6fb4e9c6f311d8e4a6eb089da9a9173bf9", - "sha256:3897ae5a21ca132efa219c029cce5e6bfc9c3d34ed7e892113d199c0b1b444a2", - "sha256:40657e1b78212d582a0edecafef133cf1dd02e6677f539b669db4746150d38f6", - "sha256:48b5760dcbfe5cf97fd4fba23946681f3a81514c6ab8a45b50da67ac8fbc6c7b", - "sha256:5242ecd9e990aeb995b6d03dc3b2d112d4a78f2083e5a8e86d566340ae80fec4", - "sha256:5cdc2e2195212208fbcae579b931407c1fa9997584f0a415421748aeafff1168", - "sha256:5d7b06ea8816cbd4becfe5f70accae953c53c0e53aa98730ceccb0395520ee5d", - "sha256:7258c27115c1e3b5de9ac6c4f9957e3ee2c02c0b39222a24dc7aa03ba0e986f5", - "sha256:854c06fb86fd854140f37fb24dbf10621f5dab9e3b0c29a690ba595e3d543024", - "sha256:a21725862d0e855ae05da1dd25e3825ed712eaaccef6b03017fe0853a01aa45e", - "sha256:a83fe522d9698d8f9a101b860b1ee154c1d25f8a82ceb807d319f085b2627c5b", - "sha256:b3d64db762eae4a5ce04b6e3dd745dcca0fb9560eb931a5be97472e38652a161", - "sha256:e298d588744efda02379521a19639ebcd314fba7a49be22136204d7ed1782717", - "sha256:e2c8dfa14677f90d976f68e0c923947ae68fa3961d61ee30976c388adc0b02c8", - "sha256:ecba2a15dfb2d97105be74bbfe5128bc5e9fa8477d8c46766505c1dda5883aac", - "sha256:fc1ec9aa6f4d98d022101e015261c056ddebe3da6a8ccfc2c792cbe0349d48b7" + "sha256:250d7e60f323fcfc8ea6c800d5eba12f7967400eb6c2d21ae85ad31c204fb1f4", + "sha256:2a9acad1451632021ee0d146c8765782a0c3846e0e0ea46659d7c4f89d9b212b", + "sha256:412f56bab20ac85927f3a959230331de5614aecda1ede14b373083f62ec24e6f", + "sha256:421f3e44aa67138ab1b9bfbc22ee3780b22fa5b291e4db8ab7eee95200726b07", + "sha256:45aa1d4675964946e53ab81aeec7a37613c1cb71647b5394779e6efb79d6d187", + "sha256:4c44b7211a3a0570cc097e81135faa5f261264f4dfaa22bd5ee2875a4e773bd6", + "sha256:4c68855825ff432d197229846f971bc4d6666ce90492e5b02013bcaca4d9ab05", + "sha256:5133f5507007ba08d8b7b263c7aa0f931af5ba88a29beacc4b2dc23fcefe9c06", + "sha256:54caaa703227c6e0c87b76326d0862184729a69b73d3b7305b6288e1d830067e", + "sha256:58e5f4d08a205b11800332920e285bd25e1a75c54953e05502052738fe16b3b5", + "sha256:698c1e0d5c43354ec5d6f4d914d0d553a9ada56c85415700b81dc90125aac244", + "sha256:6c1cac07e64433f646a9a838cdc00c9768b3c362805afc3fce341af0e6a9ae9f", + "sha256:760415ccc20f9e8747084169110ef75d545f3b0932ee21368f63ac0fee86b221", + "sha256:7f622b6822f02bfaf2a5cd31fdb7cd86fcf33dab6ced5185c35f5db98260b055", + "sha256:cf57719e581cfd48c4efe28543fea3d139c6b6f1238b3f0102a9c73992cbb479", + "sha256:d136ef5b418c81660ad847efe0e55c58c8208b77a57a28a503a5f345ccf01394", + "sha256:dbea0bb8575c6b6303cc65017b46351dc5953eea5c0a59d7b7e3a2d2f433a911", + "sha256:fc7f6a44d52747e65a02558e1d807c82df1d66ffa80a601862040a43ec2e3142" ], "index": "pypi", - "version": "==24.1.1" + "markers": "python_version >= '3.8'", + "version": "==23.11.0" }, "boto3": { "hashes": [ - "sha256:34b2b404bd2bec869ec2fc6aeeeeb884c72a9b895e2c7716b95381ab8deb9069", - "sha256:50776db195a73533f4f2c9d000c69f9d0e9fb9810f9f81584adc283e9516ad0d" + "sha256:1d10691911c4b8b9443d3060257ba32b68b6e3cad0eebbb9f69fd1c52a78417f", + "sha256:489c4967805b677b7a4030460e4c06c0903d6bc0f6834453611bf87efbd8d8a3" ], "index": "pypi", - "version": "==1.34.29" + "markers": "python_version >= '3.7'", + "version": "==1.28.83" }, "botocore": { "hashes": [ - "sha256:34223fdb8ebd47d1fce5724bb1bcb164e81853ea9ca532b50639c749fc347458", - "sha256:44d918b91a1c1085d99266f8bf6ecc087c8a73a8efbb8e829f0c2dcd1ddf9963" + "sha256:40914b0fb28f13d709e1f8a4481e278350b77a3987be81acd23715ec8d5fedca", + "sha256:c742069e8bfd06d212d712228258ff09fb481b6ec02358e539381ce0fcad065a" ], "index": "pypi", - "version": "==1.34.29" + "markers": "python_version >= '3.7'", + "version": "==1.31.83" }, "certifi": { "hashes": [ - "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1", - "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474" + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], "markers": "python_version >= '3.6'", - "version": "==2023.11.17" + "version": "==2023.7.22" }, "cffi": { "hashes": [ @@ -1984,7 +1960,7 @@ "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956", "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357" ], - "markers": "platform_python_implementation != 'PyPy'", + "markers": "python_version >= '3.8'", "version": "==1.16.0" }, "cfgv": { @@ -2119,99 +2095,90 @@ "toml" ], "hashes": [ - "sha256:0193657651f5399d433c92f8ae264aff31fc1d066deee4b831549526433f3f61", - "sha256:02f2edb575d62172aa28fe00efe821ae31f25dc3d589055b3fb64d51e52e4ab1", - "sha256:0491275c3b9971cdbd28a4595c2cb5838f08036bca31765bad5e17edf900b2c7", - "sha256:077d366e724f24fc02dbfe9d946534357fda71af9764ff99d73c3c596001bbd7", - "sha256:10e88e7f41e6197ea0429ae18f21ff521d4f4490aa33048f6c6f94c6045a6a75", - "sha256:18e961aa13b6d47f758cc5879383d27b5b3f3dcd9ce8cdbfdc2571fe86feb4dd", - "sha256:1a78b656a4d12b0490ca72651fe4d9f5e07e3c6461063a9b6265ee45eb2bdd35", - "sha256:1ed4b95480952b1a26d863e546fa5094564aa0065e1e5f0d4d0041f293251d04", - "sha256:23b27b8a698e749b61809fb637eb98ebf0e505710ec46a8aa6f1be7dc0dc43a6", - "sha256:23f5881362dcb0e1a92b84b3c2809bdc90db892332daab81ad8f642d8ed55042", - "sha256:32a8d985462e37cfdab611a6f95b09d7c091d07668fdc26e47a725ee575fe166", - "sha256:3468cc8720402af37b6c6e7e2a9cdb9f6c16c728638a2ebc768ba1ef6f26c3a1", - "sha256:379d4c7abad5afbe9d88cc31ea8ca262296480a86af945b08214eb1a556a3e4d", - "sha256:3cacfaefe6089d477264001f90f55b7881ba615953414999c46cc9713ff93c8c", - "sha256:3e3424c554391dc9ef4a92ad28665756566a28fecf47308f91841f6c49288e66", - "sha256:46342fed0fff72efcda77040b14728049200cbba1279e0bf1188f1f2078c1d70", - "sha256:536d609c6963c50055bab766d9951b6c394759190d03311f3e9fcf194ca909e1", - "sha256:5d6850e6e36e332d5511a48a251790ddc545e16e8beaf046c03985c69ccb2676", - "sha256:6008adeca04a445ea6ef31b2cbaf1d01d02986047606f7da266629afee982630", - "sha256:64e723ca82a84053dd7bfcc986bdb34af8d9da83c521c19d6b472bc6880e191a", - "sha256:6b00e21f86598b6330f0019b40fb397e705135040dbedc2ca9a93c7441178e74", - "sha256:6d224f0c4c9c98290a6990259073f496fcec1b5cc613eecbd22786d398ded3ad", - "sha256:6dceb61d40cbfcf45f51e59933c784a50846dc03211054bd76b421a713dcdf19", - "sha256:7ac8f8eb153724f84885a1374999b7e45734bf93a87d8df1e7ce2146860edef6", - "sha256:85ccc5fa54c2ed64bd91ed3b4a627b9cce04646a659512a051fa82a92c04a448", - "sha256:869b5046d41abfea3e381dd143407b0d29b8282a904a19cb908fa24d090cc018", - "sha256:8bdb0285a0202888d19ec6b6d23d5990410decb932b709f2b0dfe216d031d218", - "sha256:8dfc5e195bbef80aabd81596ef52a1277ee7143fe419efc3c4d8ba2754671756", - "sha256:8e738a492b6221f8dcf281b67129510835461132b03024830ac0e554311a5c54", - "sha256:918440dea04521f499721c039863ef95433314b1db00ff826a02580c1f503e45", - "sha256:9641e21670c68c7e57d2053ddf6c443e4f0a6e18e547e86af3fad0795414a628", - "sha256:9d2f9d4cc2a53b38cabc2d6d80f7f9b7e3da26b2f53d48f05876fef7956b6968", - "sha256:a07f61fc452c43cd5328b392e52555f7d1952400a1ad09086c4a8addccbd138d", - "sha256:a3277f5fa7483c927fe3a7b017b39351610265308f5267ac6d4c2b64cc1d8d25", - "sha256:a4a3907011d39dbc3e37bdc5df0a8c93853c369039b59efa33a7b6669de04c60", - "sha256:aeb2c2688ed93b027eb0d26aa188ada34acb22dceea256d76390eea135083950", - "sha256:b094116f0b6155e36a304ff912f89bbb5067157aff5f94060ff20bbabdc8da06", - "sha256:b8ffb498a83d7e0305968289441914154fb0ef5d8b3157df02a90c6695978295", - "sha256:b9bb62fac84d5f2ff523304e59e5c439955fb3b7f44e3d7b2085184db74d733b", - "sha256:c61f66d93d712f6e03369b6a7769233bfda880b12f417eefdd4f16d1deb2fc4c", - "sha256:ca6e61dc52f601d1d224526360cdeab0d0712ec104a2ce6cc5ccef6ed9a233bc", - "sha256:ca7b26a5e456a843b9b6683eada193fc1f65c761b3a473941efe5a291f604c74", - "sha256:d12c923757de24e4e2110cf8832d83a886a4cf215c6e61ed506006872b43a6d1", - "sha256:d17bbc946f52ca67adf72a5ee783cd7cd3477f8f8796f59b4974a9b59cacc9ee", - "sha256:dfd1e1b9f0898817babf840b77ce9fe655ecbe8b1b327983df485b30df8cc011", - "sha256:e0860a348bf7004c812c8368d1fc7f77fe8e4c095d661a579196a9533778e156", - "sha256:f2f5968608b1fe2a1d00d01ad1017ee27efd99b3437e08b83ded9b7af3f6f766", - "sha256:f3771b23bb3675a06f5d885c3630b1d01ea6cac9e84a01aaf5508706dba546c5", - "sha256:f68ef3660677e6624c8cace943e4765545f8191313a07288a53d3da188bd8581", - "sha256:f86f368e1c7ce897bf2457b9eb61169a44e2ef797099fb5728482b8d69f3f016", - "sha256:f90515974b39f4dea2f27c0959688621b46d96d5a626cf9c53dbc653a895c05c", - "sha256:fe558371c1bdf3b8fa03e097c523fb9645b8730399c14fe7721ee9c9e2a545d3" + "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1", + "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63", + "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9", + "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312", + "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3", + "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb", + "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25", + "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92", + "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda", + "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148", + "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6", + "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216", + "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a", + "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640", + "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836", + "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c", + "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f", + "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2", + "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901", + "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed", + "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a", + "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074", + "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc", + "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84", + "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083", + "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f", + "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c", + "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c", + "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637", + "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2", + "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82", + "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f", + "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce", + "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef", + "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f", + "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611", + "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c", + "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76", + "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9", + "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce", + "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9", + "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf", + "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf", + "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9", + "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6", + "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2", + "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a", + "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a", + "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf", + "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738", + "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a", + "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4" ], "markers": "python_version >= '3.8'", - "version": "==7.4.1" + "version": "==7.3.2" }, "cryptography": { "hashes": [ - "sha256:0b7cacc142260ada944de070ce810c3e2a438963ee3deb45aa26fd2cee94c9a4", - "sha256:126e0ba3cc754b200a2fb88f67d66de0d9b9e94070c5bc548318c8dab6383cb6", - "sha256:160fa08dfa6dca9cb8ad9bd84e080c0db6414ba5ad9a7470bc60fb154f60111e", - "sha256:16b9260d04a0bfc8952b00335ff54f471309d3eb9d7e8dbfe9b0bd9e26e67881", - "sha256:25ec6e9e81de5d39f111a4114193dbd39167cc4bbd31c30471cebedc2a92c323", - "sha256:265bdc693570b895eb641410b8fc9e8ddbce723a669236162b9d9cfb70bd8d77", - "sha256:2dff7a32880a51321f5de7869ac9dde6b1fca00fc1fef89d60e93f215468e824", - "sha256:2fe16624637d6e3e765530bc55caa786ff2cbca67371d306e5d0a72e7c3d0407", - "sha256:32ea63ceeae870f1a62e87f9727359174089f7b4b01e4999750827bf10e15d60", - "sha256:351db02c1938c8e6b1fee8a78d6b15c5ccceca7a36b5ce48390479143da3b411", - "sha256:430100abed6d3652208ae1dd410c8396213baee2e01a003a4449357db7dc9e14", - "sha256:4d84673c012aa698555d4710dcfe5f8a0ad76ea9dde8ef803128cc669640a2e0", - "sha256:50aecd93676bcca78379604ed664c45da82bc1241ffb6f97f6b7392ed5bc6f04", - "sha256:6ac8924085ed8287545cba89dc472fc224c10cc634cdf2c3e2866fe868108e77", - "sha256:6bfd823b336fdcd8e06285ae8883d3d2624d3bdef312a0e2ef905f332f8e9302", - "sha256:727387886c9c8de927c360a396c5edcb9340d9e960cda145fca75bdafdabd24c", - "sha256:7911586fc69d06cd0ab3f874a169433db1bc2f0e40988661408ac06c4527a986", - "sha256:802d6f83233cf9696b59b09eb067e6b4d5ae40942feeb8e13b213c8fad47f1aa", - "sha256:8d7efb6bf427d2add2f40b6e1e8e476c17508fa8907234775214b153e69c2e11", - "sha256:9544492e8024f29919eac2117edd8c950165e74eb551a22c53f6fdf6ba5f4cb8", - "sha256:95d900d19a370ae36087cc728e6e7be9c964ffd8cbcb517fd1efb9c9284a6abc", - "sha256:9d61fcdf37647765086030d81872488e4cb3fafe1d2dda1d487875c3709c0a49", - "sha256:ab6b302d51fbb1dd339abc6f139a480de14d49d50f65fdc7dff782aa8631d035", - "sha256:b512f33c6ab195852595187af5440d01bb5f8dd57cb7a91e1e009a17f1b7ebca", - "sha256:cb2861a9364fa27d24832c718150fdbf9ce6781d7dc246a516435f57cfa31fe7", - "sha256:d3594947d2507d4ef7a180a7f49a6db41f75fb874c2fd0e94f36b89bfd678bf2", - "sha256:d3902c779a92151f134f68e555dd0b17c658e13429f270d8a847399b99235a3f", - "sha256:d50718dd574a49d3ef3f7ef7ece66ef281b527951eb2267ce570425459f6a404", - "sha256:e5edf189431b4d51f5c6fb4a95084a75cef6b4646c934eb6e32304fc720e1453", - "sha256:e6edc3a568667daf7d349d7e820783426ee4f1c0feab86c29bd1d6fe2755e009", - "sha256:ed1b2130f5456a09a134cc505a17fc2830a1a48ed53efd37dcc904a23d7b82fa", - "sha256:fd33f53809bb363cf126bebe7a99d97735988d9b0131a2be59fbf83e1259a5b7" + "sha256:0c327cac00f082013c7c9fb6c46b7cc9fa3c288ca702c74773968173bda421bf", + "sha256:0d2a6a598847c46e3e321a7aef8af1436f11c27f1254933746304ff014664d84", + "sha256:227ec057cd32a41c6651701abc0328135e472ed450f47c2766f23267b792a88e", + "sha256:22892cc830d8b2c89ea60148227631bb96a7da0c1b722f2aac8824b1b7c0b6b8", + "sha256:392cb88b597247177172e02da6b7a63deeff1937fa6fec3bbf902ebd75d97ec7", + "sha256:3be3ca726e1572517d2bef99a818378bbcf7d7799d5372a46c79c29eb8d166c1", + "sha256:573eb7128cbca75f9157dcde974781209463ce56b5804983e11a1c462f0f4e88", + "sha256:580afc7b7216deeb87a098ef0674d6ee34ab55993140838b14c9b83312b37b86", + "sha256:5a70187954ba7292c7876734183e810b728b4f3965fbe571421cb2434d279179", + "sha256:73801ac9736741f220e20435f84ecec75ed70eda90f781a148f1bad546963d81", + "sha256:7d208c21e47940369accfc9e85f0de7693d9a5d843c2509b3846b2db170dfd20", + "sha256:8254962e6ba1f4d2090c44daf50a547cd5f0bf446dc658a8e5f8156cae0d8548", + "sha256:88417bff20162f635f24f849ab182b092697922088b477a7abd6664ddd82291d", + "sha256:a48e74dad1fb349f3dc1d449ed88e0017d792997a7ad2ec9587ed17405667e6d", + "sha256:b948e09fe5fb18517d99994184854ebd50b57248736fd4c720ad540560174ec5", + "sha256:c707f7afd813478e2019ae32a7c49cd932dd60ab2d2a93e796f68236b7e1fbf1", + "sha256:d38e6031e113b7421db1de0c1b1f7739564a88f1684c6b89234fbf6c11b75147", + "sha256:d3977f0e276f6f5bf245c403156673db103283266601405376f075c849a0b936", + "sha256:da6a0ff8f1016ccc7477e6339e1d50ce5f59b88905585f77193ebd5068f1e797", + "sha256:e270c04f4d9b5671ebcc792b3ba5d4488bf7c42c3c241a3748e2599776f29696", + "sha256:e886098619d3815e0ad5790c973afeee2c0e6e04b4da90b88e6bd06e2a0b1b72", + "sha256:ec3b055ff8f1dce8e6ef28f626e0972981475173d7973d63f271b29c8a2897da", + "sha256:fba1e91467c65fe64a82c689dc6cf58151158993b13eb7a7f3f4b7f395636723" ], "markers": "python_version >= '3.7'", - "version": "==42.0.1" + "version": "==41.0.5" }, "detect-secrets": { "hashes": [ @@ -2223,18 +2190,19 @@ }, "distlib": { "hashes": [ - "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784", - "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64" + "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057", + "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8" ], - "version": "==0.3.8" + "version": "==0.3.7" }, "docker": { "hashes": [ - "sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b", - "sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3" + "sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20", + "sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9" ], "index": "pypi", - "version": "==7.0.0" + "markers": "python_version >= '3.7'", + "version": "==6.1.3" }, "ecdsa": { "hashes": [ @@ -2246,11 +2214,11 @@ }, "exceptiongroup": { "hashes": [ - "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14", - "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68" + "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9", + "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3" ], "markers": "python_version < '3.11'", - "version": "==1.2.0" + "version": "==1.1.3" }, "filelock": { "hashes": [ @@ -2260,71 +2228,34 @@ "markers": "python_version >= '3.8'", "version": "==3.13.1" }, - "fiona": { - "hashes": [ - "sha256:35dae4b0308eb44617cdc4461ceb91f891d944fdebbcba5479efe524ec5db8de", - "sha256:374efe749143ecb5cfdd79b585d83917d2bf8ecfbfc6953c819586b336ce9c63", - "sha256:3ea04ec2d8c57b5f81a31200fb352cb3242aa106fc3e328963f30ffbdf0ff7c8", - "sha256:4877cc745d9e82b12b3eafce3719db75759c27bd8a695521202135b36b58c2e7", - "sha256:4df21906235928faad856c288cfea0298e9647f09c9a69a230535cbc8eadfa21", - "sha256:5b4c6a3df53bee8f85bb46685562b21b43346be1fe96419f18f70fa1ab8c561c", - "sha256:5f40a40529ecfca5294260316cf987a0420c77a2f0cf0849f529d1afbccd093e", - "sha256:6ad04c1877b9fd742871b11965606c6a52f40706f56a48d66a87cc3073943828", - "sha256:6d9f29e9bcbb33232ff7fa98b4a3c2234db910c1dc6c4147fc36c0b8b930f2e0", - "sha256:7ede8ddc798f3d447536080c6db9a5fb73733ad8bdb190cb65eed4e289dd4c50", - "sha256:81d502369493687746cb8d3cd77e5ada4447fb71d513721c9a1826e4fb32b23a", - "sha256:8b098054a27c12afac4f819f98cb4d4bf2db9853f70b0c588d7d97d26e128c39", - "sha256:8b53ce8de773fcd5e2e102e833c8c58479edd8796a522f3d83ef9e08b62bfeea", - "sha256:99e2604332caa7692855c2ae6ed91e1fffdf9b59449aa8032dd18e070e59a2f7", - "sha256:9a2da52f865db1aff0eaf41cdd4c87a7c079b3996514e8e7a1ca38457309e825", - "sha256:9fb9a24a8046c724787719e20557141b33049466145fc3e665764ac7caf5748c", - "sha256:ac2c250f509ec19fad7959d75b531984776517ef3c1222d1cc5b4f962825880b", - "sha256:bd2355e859a1cd24a3e485c6dc5003129f27a2051629def70036535ffa7e16a4", - "sha256:c521e1135c78dec0d7774303e5a1b4c62e0efb0e602bb8f167550ef95e0a2691", - "sha256:ce3b29230ef70947ead4e701f3f82be81082b7f37fd4899009b1445cc8fc276a", - "sha256:cfef6db5b779d463298b1113b50daa6c5b55f26f834dc9e37752116fa17277c1", - "sha256:d722d7f01a66f4ab6cd08d156df3fdb92f0669cf5f8708ddcb209352f416f241", - "sha256:f1af08da4ecea5036cb81c9131946be4404245d1b434b5b24fd3871a1d4030d9", - "sha256:fce4b1dd98810cabccdaa1828430c7402d283295c2ae31bea4f34188ea9e88d7" - ], - "markers": "python_version >= '3.7'", - "version": "==1.9.5" - }, "flake8": { "hashes": [ - "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132", - "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3" + "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23", + "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5" ], "index": "pypi", - "version": "==7.0.0" - }, - "geopandas": { - "hashes": [ - "sha256:0efa61235a68862c1c6be89fc3707cdeba67667d5676bb19e24f3c57a8c2f723", - "sha256:6e71d57b8376f9fdc9f1c3aa3170e7e420e91778de854f51013ae66fd371ccdb" - ], - "index": "pypi", - "version": "==0.14.2" + "markers": "python_full_version >= '3.8.1'", + "version": "==6.1.0" }, "gfw-pixetl": { "git": "https://github.com/wri/gfw_pixetl.git", - "ref": "d58a65c28c4d1798e308d95eb7489bc343689376" + "ref": "730021168ce5b23a7cc238c270e7a7acae964f04" }, "identify": { "hashes": [ - "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d", - "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34" + "sha256:7736b3c7a28233637e3c36550646fc6389bedd74ae84cb788200cc8e2dd60b75", + "sha256:90199cb9e7bd3c5407a9b7e81b4abec4bb9d249991c79439ec8af740afc6293d" ], "markers": "python_version >= '3.8'", - "version": "==2.5.33" + "version": "==2.5.31" }, "idna": { "hashes": [ - "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", - "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" ], "markers": "python_version >= '3.5'", - "version": "==3.6" + "version": "==3.4" }, "iniconfig": { "hashes": [ @@ -2336,11 +2267,11 @@ }, "jinja2": { "hashes": [ - "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa", - "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90" + "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", + "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" ], "markers": "python_version >= '3.7'", - "version": "==3.1.3" + "version": "==3.1.2" }, "jmespath": { "hashes": [ @@ -2352,136 +2283,135 @@ }, "jsonschema": { "hashes": [ - "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f", - "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5" + "sha256:c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392", + "sha256:eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc" ], "markers": "python_version >= '3.8'", - "version": "==4.21.1" + "version": "==4.19.2" }, "jsonschema-path": { "hashes": [ - "sha256:271aedfefcd161a0f467bdf23e1d9183691a61eaabf4b761046a914e369336c7", - "sha256:4d0dababf341e36e9b91a5fb2a3e3fd300b0150e7fe88df4e55cc8253c5a3989" + "sha256:06f01b1848a28963f49a17730e11204d252aa6ff5db4ef84ec77e5ac93cfa831", + "sha256:07ea584b5c9b41a614b4d011c5575955676f48d0abbfd93d9ea8e933018d716d" ], "markers": "python_full_version >= '3.8.0' and python_full_version < '4.0.0'", - "version": "==0.3.2" + "version": "==0.3.1" }, "jsonschema-specifications": { "hashes": [ - "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc", - "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c" + "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1", + "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb" ], "markers": "python_version >= '3.8'", - "version": "==2023.12.1" + "version": "==2023.7.1" }, "lazy-object-proxy": { "hashes": [ - "sha256:009e6bb1f1935a62889ddc8541514b6a9e1fcf302667dcb049a0be5c8f613e56", - "sha256:02c83f957782cbbe8136bee26416686a6ae998c7b6191711a04da776dc9e47d4", - "sha256:0aefc7591920bbd360d57ea03c995cebc204b424524a5bd78406f6e1b8b2a5d8", - "sha256:127a789c75151db6af398b8972178afe6bda7d6f68730c057fbbc2e96b08d282", - "sha256:18dd842b49456aaa9a7cf535b04ca4571a302ff72ed8740d06b5adcd41fe0757", - "sha256:217138197c170a2a74ca0e05bddcd5f1796c735c37d0eee33e43259b192aa424", - "sha256:2297f08f08a2bb0d32a4265e98a006643cd7233fb7983032bd61ac7a02956b3b", - "sha256:2fc0a92c02fa1ca1e84fc60fa258458e5bf89d90a1ddaeb8ed9cc3147f417255", - "sha256:30b339b2a743c5288405aa79a69e706a06e02958eab31859f7f3c04980853b70", - "sha256:366c32fe5355ef5fc8a232c5436f4cc66e9d3e8967c01fb2e6302fd6627e3d94", - "sha256:3ad54b9ddbe20ae9f7c1b29e52f123120772b06dbb18ec6be9101369d63a4074", - "sha256:5ad9e6ed739285919aa9661a5bbed0aaf410aa60231373c5579c6b4801bd883c", - "sha256:5faf03a7d8942bb4476e3b62fd0f4cf94eaf4618e304a19865abf89a35c0bbee", - "sha256:75fc59fc450050b1b3c203c35020bc41bd2695ed692a392924c6ce180c6f1dc9", - "sha256:76a095cfe6045c7d0ca77db9934e8f7b71b14645f0094ffcd842349ada5c5fb9", - "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69", - "sha256:782e2c9b2aab1708ffb07d4bf377d12901d7a1d99e5e410d648d892f8967ab1f", - "sha256:7ab7004cf2e59f7c2e4345604a3e6ea0d92ac44e1c2375527d56492014e690c3", - "sha256:80b39d3a151309efc8cc48675918891b865bdf742a8616a337cb0090791a0de9", - "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d", - "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977", - "sha256:92f09ff65ecff3108e56526f9e2481b8116c0b9e1425325e13245abfd79bdb1b", - "sha256:952c81d415b9b80ea261d2372d2a4a2332a3890c2b83e0535f263ddfe43f0d43", - "sha256:9a3a87cf1e133e5b1994144c12ca4aa3d9698517fe1e2ca82977781b16955658", - "sha256:9e4ed0518a14dd26092614412936920ad081a424bdcb54cc13349a8e2c6d106a", - "sha256:a899b10e17743683b293a729d3a11f2f399e8a90c73b089e29f5d0fe3509f0dd", - "sha256:b1f711e2c6dcd4edd372cf5dec5c5a30d23bba06ee012093267b3376c079ec83", - "sha256:b4f87d4ed9064b2628da63830986c3d2dca7501e6018347798313fcf028e2fd4", - "sha256:cb73507defd385b7705c599a94474b1d5222a508e502553ef94114a143ec6696", - "sha256:dc0d2fc424e54c70c4bc06787e4072c4f3b1aa2f897dfdc34ce1013cf3ceef05", - "sha256:e221060b701e2aa2ea991542900dd13907a5c90fa80e199dbf5a03359019e7a3", - "sha256:e271058822765ad5e3bca7f05f2ace0de58a3f4e62045a8c90a0dfd2f8ad8cc6", - "sha256:e2adb09778797da09d2b5ebdbceebf7dd32e2c96f79da9052b2e87b6ea495895", - "sha256:e333e2324307a7b5d86adfa835bb500ee70bfcd1447384a822e96495796b0ca4", - "sha256:e98c8af98d5707dcdecc9ab0863c0ea6e88545d42ca7c3feffb6b4d1e370c7ba", - "sha256:edb45bb8278574710e68a6b021599a10ce730d156e5b254941754a9cc0b17d03", - "sha256:fec03caabbc6b59ea4a638bee5fce7117be8e99a4103d9d5ad77f15d6f81020c" + "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382", + "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82", + "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9", + "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494", + "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46", + "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30", + "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63", + "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4", + "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae", + "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be", + "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701", + "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd", + "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006", + "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a", + "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586", + "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8", + "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821", + "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07", + "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b", + "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171", + "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b", + "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2", + "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7", + "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4", + "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8", + "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e", + "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f", + "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda", + "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4", + "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e", + "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671", + "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11", + "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455", + "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734", + "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb", + "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59" ], - "markers": "python_version >= '3.8'", - "version": "==1.10.0" + "markers": "python_version >= '3.7'", + "version": "==1.9.0" }, "markupsafe": { "hashes": [ - "sha256:0042d6a9880b38e1dd9ff83146cc3c9c18a059b9360ceae207805567aacccc69", - "sha256:0c26f67b3fe27302d3a412b85ef696792c4a2386293c53ba683a89562f9399b0", - "sha256:0fbad3d346df8f9d72622ac71b69565e621ada2ce6572f37c2eae8dacd60385d", - "sha256:15866d7f2dc60cfdde12ebb4e75e41be862348b4728300c36cdf405e258415ec", - "sha256:1c98c33ffe20e9a489145d97070a435ea0679fddaabcafe19982fe9c971987d5", - "sha256:21e7af8091007bf4bebf4521184f4880a6acab8df0df52ef9e513d8e5db23411", - "sha256:23984d1bdae01bee794267424af55eef4dfc038dc5d1272860669b2aa025c9e3", - "sha256:31f57d64c336b8ccb1966d156932f3daa4fee74176b0fdc48ef580be774aae74", - "sha256:3583a3a3ab7958e354dc1d25be74aee6228938312ee875a22330c4dc2e41beb0", - "sha256:36d7626a8cca4d34216875aee5a1d3d654bb3dac201c1c003d182283e3205949", - "sha256:396549cea79e8ca4ba65525470d534e8a41070e6b3500ce2414921099cb73e8d", - "sha256:3a66c36a3864df95e4f62f9167c734b3b1192cb0851b43d7cc08040c074c6279", - "sha256:3aae9af4cac263007fd6309c64c6ab4506dd2b79382d9d19a1994f9240b8db4f", - "sha256:3ab3a886a237f6e9c9f4f7d272067e712cdb4efa774bef494dccad08f39d8ae6", - "sha256:47bb5f0142b8b64ed1399b6b60f700a580335c8e1c57f2f15587bd072012decc", - "sha256:49a3b78a5af63ec10d8604180380c13dcd870aba7928c1fe04e881d5c792dc4e", - "sha256:4df98d4a9cd6a88d6a585852f56f2155c9cdb6aec78361a19f938810aa020954", - "sha256:5045e892cfdaecc5b4c01822f353cf2c8feb88a6ec1c0adef2a2e705eef0f656", - "sha256:5244324676254697fe5c181fc762284e2c5fceeb1c4e3e7f6aca2b6f107e60dc", - "sha256:54635102ba3cf5da26eb6f96c4b8c53af8a9c0d97b64bdcb592596a6255d8518", - "sha256:54a7e1380dfece8847c71bf7e33da5d084e9b889c75eca19100ef98027bd9f56", - "sha256:55d03fea4c4e9fd0ad75dc2e7e2b6757b80c152c032ea1d1de487461d8140efc", - "sha256:698e84142f3f884114ea8cf83e7a67ca8f4ace8454e78fe960646c6c91c63bfa", - "sha256:6aa5e2e7fc9bc042ae82d8b79d795b9a62bd8f15ba1e7594e3db243f158b5565", - "sha256:7653fa39578957bc42e5ebc15cf4361d9e0ee4b702d7d5ec96cdac860953c5b4", - "sha256:765f036a3d00395a326df2835d8f86b637dbaf9832f90f5d196c3b8a7a5080cb", - "sha256:78bc995e004681246e85e28e068111a4c3f35f34e6c62da1471e844ee1446250", - "sha256:7a07f40ef8f0fbc5ef1000d0c78771f4d5ca03b4953fc162749772916b298fc4", - "sha256:8b570a1537367b52396e53325769608f2a687ec9a4363647af1cded8928af959", - "sha256:987d13fe1d23e12a66ca2073b8d2e2a75cec2ecb8eab43ff5624ba0ad42764bc", - "sha256:9896fca4a8eb246defc8b2a7ac77ef7553b638e04fbf170bff78a40fa8a91474", - "sha256:9e9e3c4020aa2dc62d5dd6743a69e399ce3de58320522948af6140ac959ab863", - "sha256:a0b838c37ba596fcbfca71651a104a611543077156cb0a26fe0c475e1f152ee8", - "sha256:a4d176cfdfde84f732c4a53109b293d05883e952bbba68b857ae446fa3119b4f", - "sha256:a76055d5cb1c23485d7ddae533229039b850db711c554a12ea64a0fd8a0129e2", - "sha256:a76cd37d229fc385738bd1ce4cba2a121cf26b53864c1772694ad0ad348e509e", - "sha256:a7cc49ef48a3c7a0005a949f3c04f8baa5409d3f663a1b36f0eba9bfe2a0396e", - "sha256:abf5ebbec056817057bfafc0445916bb688a255a5146f900445d081db08cbabb", - "sha256:b0fe73bac2fed83839dbdbe6da84ae2a31c11cfc1c777a40dbd8ac8a6ed1560f", - "sha256:b6f14a9cd50c3cb100eb94b3273131c80d102e19bb20253ac7bd7336118a673a", - "sha256:b83041cda633871572f0d3c41dddd5582ad7d22f65a72eacd8d3d6d00291df26", - "sha256:b835aba863195269ea358cecc21b400276747cc977492319fd7682b8cd2c253d", - "sha256:bf1196dcc239e608605b716e7b166eb5faf4bc192f8a44b81e85251e62584bd2", - "sha256:c669391319973e49a7c6230c218a1e3044710bc1ce4c8e6eb71f7e6d43a2c131", - "sha256:c7556bafeaa0a50e2fe7dc86e0382dea349ebcad8f010d5a7dc6ba568eaaa789", - "sha256:c8f253a84dbd2c63c19590fa86a032ef3d8cc18923b8049d91bcdeeb2581fbf6", - "sha256:d18b66fe626ac412d96c2ab536306c736c66cf2a31c243a45025156cc190dc8a", - "sha256:d5291d98cd3ad9a562883468c690a2a238c4a6388ab3bd155b0c75dd55ece858", - "sha256:d5c31fe855c77cad679b302aabc42d724ed87c043b1432d457f4976add1c2c3e", - "sha256:d6e427c7378c7f1b2bef6a344c925b8b63623d3321c09a237b7cc0e77dd98ceb", - "sha256:dac1ebf6983148b45b5fa48593950f90ed6d1d26300604f321c74a9ca1609f8e", - "sha256:de8153a7aae3835484ac168a9a9bdaa0c5eee4e0bc595503c95d53b942879c84", - "sha256:e1a0d1924a5013d4f294087e00024ad25668234569289650929ab871231668e7", - "sha256:e7902211afd0af05fbadcc9a312e4cf10f27b779cf1323e78d52377ae4b72bea", - "sha256:e888ff76ceb39601c59e219f281466c6d7e66bd375b4ec1ce83bcdc68306796b", - "sha256:f06e5a9e99b7df44640767842f414ed5d7bedaaa78cd817ce04bbd6fd86e2dd6", - "sha256:f6be2d708a9d0e9b0054856f07ac7070fbe1754be40ca8525d5adccdbda8f475", - "sha256:f9917691f410a2e0897d1ef99619fd3f7dd503647c8ff2475bf90c3cf222ad74", - "sha256:fc1a75aa8f11b87910ffd98de62b29d6520b6d6e8a3de69a70ca34dea85d2a8a", - "sha256:fe8512ed897d5daf089e5bd010c3dc03bb1bdae00b35588c49b98268d4a01e00" + "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e", + "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", + "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", + "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", + "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c", + "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", + "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", + "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb", + "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939", + "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", + "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", + "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", + "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9", + "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", + "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", + "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", + "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd", + "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", + "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", + "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", + "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac", + "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52", + "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", + "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", + "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", + "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007", + "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", + "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", + "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", + "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0", + "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", + "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", + "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", + "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1", + "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", + "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", + "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c", + "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", + "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823", + "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", + "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", + "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", + "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad", + "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee", + "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc", + "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2", + "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48", + "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7", + "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e", + "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b", + "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa", + "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5", + "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e", + "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb", + "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", + "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", + "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", + "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc", + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2", + "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11" ], "markers": "python_version >= '3.7'", - "version": "==2.1.4" + "version": "==2.1.3" }, "mccabe": { "hashes": [ @@ -2496,16 +2426,14 @@ "awslambda", "batch", "ec2", - "s3", - "secretsmanager" + "s3" ], "hashes": [ - "sha256:6d242dbbabe925bb385ddb6958449e5c827670b13b8e153ed63f91dbdb50372c", - "sha256:8f9263ca70b646f091edcc93e97cda864a542e6d16ed04066b1370ed217bd190" + "sha256:1298006aaa6996b886658eb194cac0e3a5679c9fcce6cb13e741ccc5a7247abb", + "sha256:3e0ef388900448485cd6eff18e9f7fcaa6cf4560b6fb536ba2e2e1278a5ecc59" ], - "index": "pypi", - "markers": null, - "version": "==4.2.14" + "markers": "python_version >= '3.7'", + "version": "==4.2.7" }, "mypy-extensions": { "hashes": [ @@ -2525,45 +2453,42 @@ }, "numpy": { "hashes": [ - "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd", - "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b", - "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e", - "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f", - "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f", - "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178", - "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3", - "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4", - "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e", - "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0", - "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00", - "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419", - "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4", - "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6", - "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166", - "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b", - "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3", - "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf", - "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2", - "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2", - "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36", - "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03", - "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce", - "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6", - "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13", - "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5", - "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e", - "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485", - "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137", - "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374", - "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58", - "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b", - "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb", - "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b", - "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda", - "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511" + "sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668", + "sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9", + "sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f", + "sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5", + "sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53", + "sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2", + "sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974", + "sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f", + "sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42", + "sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2", + "sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af", + "sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67", + "sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e", + "sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c", + "sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7", + "sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e", + "sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908", + "sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66", + "sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24", + "sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b", + "sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e", + "sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe", + "sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a", + "sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575", + "sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297", + "sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104", + "sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab", + "sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3", + "sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244", + "sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124", + "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617", + "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c" ], "index": "pypi", - "version": "==1.26.3" + "markers": "python_version < '3.13' and python_version >= '3.9'", + "version": "==1.26.1" }, "openapi-schema-validator": { "hashes": [ @@ -2578,7 +2503,7 @@ "sha256:3c81825043f24ccbcd2f4b149b11e8231abce5ba84f37065e14ec947d8f4e959", "sha256:8577b85a8268685da6f8aa30990b83b7960d4d1117e901d451b5d572605e5ec7" ], - "index": "pypi", + "markers": "python_full_version >= '3.8.0' and python_full_version < '4.0.0'", "version": "==0.7.1" }, "packaging": { @@ -2587,43 +2512,9 @@ "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==23.2" }, - "pandas": { - "hashes": [ - "sha256:159205c99d7a5ce89ecfc37cb08ed179de7783737cea403b295b5eda8e9c56d1", - "sha256:20404d2adefe92aed3b38da41d0847a143a09be982a31b85bc7dd565bdba0f4e", - "sha256:2707514a7bec41a4ab81f2ccce8b382961a29fbe9492eab1305bb075b2b1ff4f", - "sha256:30b83f7c3eb217fb4d1b494a57a2fda5444f17834f5df2de6b2ffff68dc3c8e2", - "sha256:38e0b4fc3ddceb56ec8a287313bc22abe17ab0eb184069f08fc6a9352a769b18", - "sha256:3de918a754bbf2da2381e8a3dcc45eede8cd7775b047b923f9006d5f876802ae", - "sha256:52826b5f4ed658fa2b729264d63f6732b8b29949c7fd234510d57c61dbeadfcd", - "sha256:57abcaeda83fb80d447f28ab0cc7b32b13978f6f733875ebd1ed14f8fbc0f4ab", - "sha256:5a946f210383c7e6d16312d30b238fd508d80d927014f3b33fb5b15c2f895430", - "sha256:736da9ad4033aeab51d067fc3bd69a0ba36f5a60f66a527b3d72e2030e63280a", - "sha256:761cb99b42a69005dec2b08854fb1d4888fdf7b05db23a8c5a099e4b886a2106", - "sha256:7ea3ee3f125032bfcade3a4cf85131ed064b4f8dd23e5ce6fa16473e48ebcaf5", - "sha256:8108ee1712bb4fa2c16981fba7e68b3f6ea330277f5ca34fa8d557e986a11670", - "sha256:85793cbdc2d5bc32620dc8ffa715423f0c680dacacf55056ba13454a5be5de88", - "sha256:8ce2fbc8d9bf303ce54a476116165220a1fedf15985b09656b4b4275300e920b", - "sha256:9f66419d4a41132eb7e9a73dcec9486cf5019f52d90dd35547af11bc58f8637d", - "sha256:a146b9dcacc3123aa2b399df1a284de5f46287a4ab4fbfc237eac98a92ebcb71", - "sha256:a1b438fa26b208005c997e78672f1aa8138f67002e833312e6230f3e57fa87d5", - "sha256:a20628faaf444da122b2a64b1e5360cde100ee6283ae8effa0d8745153809a2e", - "sha256:a41d06f308a024981dcaa6c41f2f2be46a6b186b902c94c2674e8cb5c42985bc", - "sha256:a626795722d893ed6aacb64d2401d017ddc8a2341b49e0384ab9bf7112bdec30", - "sha256:bde2bc699dbd80d7bc7f9cab1e23a95c4375de615860ca089f34e7c64f4a8de7", - "sha256:cfd6c2491dc821b10c716ad6776e7ab311f7df5d16038d0b7458bc0b67dc10f3", - "sha256:e60f1f7dba3c2d5ca159e18c46a34e7ca7247a73b5dd1a22b6d59707ed6b899a", - "sha256:eb1e1f3861ea9132b32f2133788f3b14911b68102d562715d71bd0013bc45440", - "sha256:eb61dc8567b798b969bcc1fc964788f5a68214d333cade8319c7ab33e2b5d88a", - "sha256:f5be5d03ea2073627e7111f61b9f1f0d9625dc3c4d8dda72cc827b0c58a1d042", - "sha256:f9670b3ac00a387620489dfc1bca66db47a787f4e55911f1293063a78b108df1", - "sha256:fbc1b53c0e1fdf16388c33c3cca160f798d38aea2978004dd3f4d3dec56454c9" - ], - "markers": "python_version >= '3.9'", - "version": "==2.2.0" - }, "pathable": { "hashes": [ "sha256:5c869d315be50776cc8a993f3af43e0c60dc01506b399643f919034ebf4cdcab", @@ -2634,42 +2525,43 @@ }, "pathspec": { "hashes": [ - "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", - "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712" + "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20", + "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3" ], - "markers": "python_version >= '3.8'", - "version": "==0.12.1" + "markers": "python_version >= '3.7'", + "version": "==0.11.2" }, "platformdirs": { "hashes": [ - "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380", - "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420" + "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3", + "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e" ], - "markers": "python_version >= '3.8'", - "version": "==4.1.0" + "markers": "python_version >= '3.7'", + "version": "==3.11.0" }, "pluggy": { "hashes": [ - "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981", - "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be" + "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12", + "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7" ], "markers": "python_version >= '3.8'", - "version": "==1.4.0" + "version": "==1.3.0" }, "pre-commit": { "hashes": [ - "sha256:c255039ef399049a5544b6ce13d135caba8f2c28c3b4033277a788f434308376", - "sha256:d30bad9abf165f7785c15a21a1f46da7d0677cb00ee7ff4c579fd38922efe15d" + "sha256:5804465c675b659b0862f07907f96295d490822a450c4c40e747d0b1c6ebcb32", + "sha256:841dc9aef25daba9a0238cd27984041fa0467b4199fc4852e27950664919f660" ], "index": "pypi", - "version": "==3.6.0" + "markers": "python_version >= '3.8'", + "version": "==3.5.0" }, "py-partiql-parser": { "hashes": [ - "sha256:427a662e87d51a0a50150fc8b75c9ebb4a52d49129684856c40c88b8c8e027e4", - "sha256:dc454c27526adf62deca5177ea997bf41fac4fd109c5d4c8d81f984de738ba8f" + "sha256:6357ec3215f4ceabe4aa1926e4a0f808b9ebc9f7fd438e7f22dbdc3d6efb2eae", + "sha256:e0640ee913812bbf5cd126accc0b09eebd0e68df769a9bfbaef9a5e74a0c6d55" ], - "version": "==0.5.0" + "version": "==0.4.1" }, "pycodestyle": { "hashes": [ @@ -2688,11 +2580,11 @@ }, "pyflakes": { "hashes": [ - "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f", - "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a" + "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774", + "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc" ], "markers": "python_version >= '3.8'", - "version": "==3.2.0" + "version": "==3.1.0" }, "pyparsing": { "hashes": [ @@ -2702,46 +2594,14 @@ "markers": "python_full_version >= '3.6.8'", "version": "==3.1.1" }, - "pyproj": { - "hashes": [ - "sha256:18faa54a3ca475bfe6255156f2f2874e9a1c8917b0004eee9f664b86ccc513d3", - "sha256:1e9fbaf920f0f9b4ee62aab832be3ae3968f33f24e2e3f7fbb8c6728ef1d9746", - "sha256:2d6ff73cc6dbbce3766b6c0bce70ce070193105d8de17aa2470009463682a8eb", - "sha256:36b64c2cb6ea1cc091f329c5bd34f9c01bb5da8c8e4492c709bda6a09f96808f", - "sha256:38a3361941eb72b82bd9a18f60c78b0df8408416f9340521df442cebfc4306e2", - "sha256:447db19c7efad70ff161e5e46a54ab9cc2399acebb656b6ccf63e4bc4a04b97a", - "sha256:44aa7c704c2b7d8fb3d483bbf75af6cb2350d30a63b144279a09b75fead501bf", - "sha256:4ba1f9b03d04d8cab24d6375609070580a26ce76eaed54631f03bab00a9c737b", - "sha256:4bc0472302919e59114aa140fd7213c2370d848a7249d09704f10f5b062031fe", - "sha256:50100b2726a3ca946906cbaa789dd0749f213abf0cbb877e6de72ca7aa50e1ae", - "sha256:5279586013b8d6582e22b6f9e30c49796966770389a9d5b85e25a4223286cd3f", - "sha256:6420ea8e7d2a88cb148b124429fba8cd2e0fae700a2d96eab7083c0928a85110", - "sha256:65ad699e0c830e2b8565afe42bd58cc972b47d829b2e0e48ad9638386d994915", - "sha256:6d227a865356f225591b6732430b1d1781e946893789a609bb34f59d09b8b0f8", - "sha256:7a27151ddad8e1439ba70c9b4b2b617b290c39395fa9ddb7411ebb0eb86d6fb0", - "sha256:80fafd1f3eb421694857f254a9bdbacd1eb22fc6c24ca74b136679f376f97d35", - "sha256:83039e5ae04e5afc974f7d25ee0870a80a6bd6b7957c3aca5613ccbe0d3e72bf", - "sha256:8b8acc31fb8702c54625f4d5a2a6543557bec3c28a0ef638778b7ab1d1772132", - "sha256:9274880263256f6292ff644ca92c46d96aa7e57a75c6df3f11d636ce845a1877", - "sha256:ab7aa4d9ff3c3acf60d4b285ccec134167a948df02347585fdd934ebad8811b4", - "sha256:c41e80ddee130450dcb8829af7118f1ab69eaf8169c4bf0ee8d52b72f098dc2f", - "sha256:db3aedd458e7f7f21d8176f0a1d924f1ae06d725228302b872885a1c34f3119e", - "sha256:e7e13c40183884ec7f94eb8e0f622f08f1d5716150b8d7a134de48c6110fee85", - "sha256:ebfbdbd0936e178091309f6cd4fcb4decd9eab12aa513cdd9add89efa3ec2882", - "sha256:fd43bd9a9b9239805f406fd82ba6b106bf4838d9ef37c167d3ed70383943ade1", - "sha256:fd93c1a0c6c4aedc77c0fe275a9f2aba4d59b8acf88cebfc19fe3c430cfabf4f", - "sha256:fffb059ba3bced6f6725961ba758649261d85ed6ce670d3e3b0a26e81cf1aa8d" - ], - "index": "pypi", - "version": "==3.6.1" - }, "pytest": { "hashes": [ - "sha256:249b1b0864530ba251b7438274c4d251c58d868edaaec8762893ad4a0d71c36c", - "sha256:50fb9cbe836c3f20f0dfa99c565201fb75dc54c8d76373cd1bde06b06657bdb6" + "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac", + "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5" ], "index": "pypi", - "version": "==8.0.0" + "markers": "python_version >= '3.7'", + "version": "==7.4.3" }, "pytest-asyncio": { "hashes": [ @@ -2750,6 +2610,7 @@ "sha256:8fafa6c52161addfd41ee7ab35f11836c5a16ec208f93ee388f752bea3493a84" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==0.18.3" }, "pytest-cov": { @@ -2758,6 +2619,7 @@ "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==4.1.0" }, "pytest-timeout": { @@ -2766,6 +2628,7 @@ "sha256:bde531e096466f49398a59f2dde76fa78429a09a12411466f88a07213e220de2" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==2.2.0" }, "python-dateutil": { @@ -2776,12 +2639,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.8.2" }, - "pytz": { - "hashes": [ - "sha256:f90ef520d95e7c46951105338d918664ebfd6f1d995bd7d153127ce90efafa6a" - ], - "version": "==2023.4" - }, "pyyaml": { "hashes": [ "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", @@ -2813,7 +2670,6 @@ "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", - "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef", "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", @@ -2863,15 +2719,16 @@ "sha256:fd6a850a37840ba590ddcf7ff90ba007b1e231b04434d8b4ac5ce0f746ada91a" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==1.3.9" }, "referencing": { "hashes": [ - "sha256:81a1471c68c9d5e3831c30ad1dd9815c45b558e596653db751a2bfdd17b3b9ec", - "sha256:c19c4d006f1757e3dd75c4f784d38f8698d87b649c54f9ace14e5e8c9667c01d" + "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf", + "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0" ], "markers": "python_version >= '3.8'", - "version": "==0.31.1" + "version": "==0.30.2" }, "requests": { "hashes": [ @@ -2887,16 +2744,9 @@ "sha256:866757987d1962aa908d9c8b3185739faefd72a359e95459de0c2e4e5369c9b2" ], "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==0.15.0" }, - "retrying": { - "hashes": [ - "sha256:345da8c5765bd982b1d1915deb9102fd3d1f7ad16bd84a9700b85f64d24e8f3e", - "sha256:8cc4d43cb8e1125e0ff3344e9de678fefd85db3b750b81b2240dc0183af37b35" - ], - "index": "pypi", - "version": "==1.3.4" - }, "rfc3339-validator": { "hashes": [ "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", @@ -2907,171 +2757,124 @@ }, "rpds-py": { "hashes": [ - "sha256:01f58a7306b64e0a4fe042047dd2b7d411ee82e54240284bab63e325762c1147", - "sha256:0210b2668f24c078307260bf88bdac9d6f1093635df5123789bfee4d8d7fc8e7", - "sha256:02866e060219514940342a1f84303a1ef7a1dad0ac311792fbbe19b521b489d2", - "sha256:0387ce69ba06e43df54e43968090f3626e231e4bc9150e4c3246947567695f68", - "sha256:060f412230d5f19fc8c8b75f315931b408d8ebf56aec33ef4168d1b9e54200b1", - "sha256:071bc28c589b86bc6351a339114fb7a029f5cddbaca34103aa573eba7b482382", - "sha256:0bfb09bf41fe7c51413f563373e5f537eaa653d7adc4830399d4e9bdc199959d", - "sha256:10162fe3f5f47c37ebf6d8ff5a2368508fe22007e3077bf25b9c7d803454d921", - "sha256:149c5cd24f729e3567b56e1795f74577aa3126c14c11e457bec1b1c90d212e38", - "sha256:1701fc54460ae2e5efc1dd6350eafd7a760f516df8dbe51d4a1c79d69472fbd4", - "sha256:1957a2ab607f9added64478a6982742eb29f109d89d065fa44e01691a20fc20a", - "sha256:1a746a6d49665058a5896000e8d9d2f1a6acba8a03b389c1e4c06e11e0b7f40d", - "sha256:1bfcad3109c1e5ba3cbe2f421614e70439f72897515a96c462ea657261b96518", - "sha256:1d36b2b59e8cc6e576f8f7b671e32f2ff43153f0ad6d0201250a7c07f25d570e", - "sha256:1db228102ab9d1ff4c64148c96320d0be7044fa28bd865a9ce628ce98da5973d", - "sha256:1dc29db3900cb1bb40353772417800f29c3d078dbc8024fd64655a04ee3c4bdf", - "sha256:1e626b365293a2142a62b9a614e1f8e331b28f3ca57b9f05ebbf4cf2a0f0bdc5", - "sha256:1f3c3461ebb4c4f1bbc70b15d20b565759f97a5aaf13af811fcefc892e9197ba", - "sha256:20de7b7179e2031a04042e85dc463a93a82bc177eeba5ddd13ff746325558aa6", - "sha256:24e4900a6643f87058a27320f81336d527ccfe503984528edde4bb660c8c8d59", - "sha256:2528ff96d09f12e638695f3a2e0c609c7b84c6df7c5ae9bfeb9252b6fa686253", - "sha256:25f071737dae674ca8937a73d0f43f5a52e92c2d178330b4c0bb6ab05586ffa6", - "sha256:270987bc22e7e5a962b1094953ae901395e8c1e1e83ad016c5cfcfff75a15a3f", - "sha256:292f7344a3301802e7c25c53792fae7d1593cb0e50964e7bcdcc5cf533d634e3", - "sha256:2953937f83820376b5979318840f3ee47477d94c17b940fe31d9458d79ae7eea", - "sha256:2a792b2e1d3038daa83fa474d559acfd6dc1e3650ee93b2662ddc17dbff20ad1", - "sha256:2a7b2f2f56a16a6d62e55354dd329d929560442bd92e87397b7a9586a32e3e76", - "sha256:2f4eb548daf4836e3b2c662033bfbfc551db58d30fd8fe660314f86bf8510b93", - "sha256:3664d126d3388a887db44c2e293f87d500c4184ec43d5d14d2d2babdb4c64cad", - "sha256:3677fcca7fb728c86a78660c7fb1b07b69b281964673f486ae72860e13f512ad", - "sha256:380e0df2e9d5d5d339803cfc6d183a5442ad7ab3c63c2a0982e8c824566c5ccc", - "sha256:3ac732390d529d8469b831949c78085b034bff67f584559340008d0f6041a049", - "sha256:4128980a14ed805e1b91a7ed551250282a8ddf8201a4e9f8f5b7e6225f54170d", - "sha256:4341bd7579611cf50e7b20bb8c2e23512a3dc79de987a1f411cb458ab670eb90", - "sha256:436474f17733c7dca0fbf096d36ae65277e8645039df12a0fa52445ca494729d", - "sha256:4dc889a9d8a34758d0fcc9ac86adb97bab3fb7f0c4d29794357eb147536483fd", - "sha256:4e21b76075c01d65d0f0f34302b5a7457d95721d5e0667aea65e5bb3ab415c25", - "sha256:516fb8c77805159e97a689e2f1c80655c7658f5af601c34ffdb916605598cda2", - "sha256:5576ee2f3a309d2bb403ec292d5958ce03953b0e57a11d224c1f134feaf8c40f", - "sha256:5a024fa96d541fd7edaa0e9d904601c6445e95a729a2900c5aec6555fe921ed6", - "sha256:5d0e8a6434a3fbf77d11448c9c25b2f25244226cfbec1a5159947cac5b8c5fa4", - "sha256:5e7d63ec01fe7c76c2dbb7e972fece45acbb8836e72682bde138e7e039906e2c", - "sha256:60e820ee1004327609b28db8307acc27f5f2e9a0b185b2064c5f23e815f248f8", - "sha256:637b802f3f069a64436d432117a7e58fab414b4e27a7e81049817ae94de45d8d", - "sha256:65dcf105c1943cba45d19207ef51b8bc46d232a381e94dd38719d52d3980015b", - "sha256:698ea95a60c8b16b58be9d854c9f993c639f5c214cf9ba782eca53a8789d6b19", - "sha256:70fcc6c2906cfa5c6a552ba7ae2ce64b6c32f437d8f3f8eea49925b278a61453", - "sha256:720215373a280f78a1814becb1312d4e4d1077b1202a56d2b0815e95ccb99ce9", - "sha256:7450dbd659fed6dd41d1a7d47ed767e893ba402af8ae664c157c255ec6067fde", - "sha256:7b7d9ca34542099b4e185b3c2a2b2eda2e318a7dbde0b0d83357a6d4421b5296", - "sha256:7fbd70cb8b54fe745301921b0816c08b6d917593429dfc437fd024b5ba713c58", - "sha256:81038ff87a4e04c22e1d81f947c6ac46f122e0c80460b9006e6517c4d842a6ec", - "sha256:810685321f4a304b2b55577c915bece4c4a06dfe38f6e62d9cc1d6ca8ee86b99", - "sha256:82ada4a8ed9e82e443fcef87e22a3eed3654dd3adf6e3b3a0deb70f03e86142a", - "sha256:841320e1841bb53fada91c9725e766bb25009cfd4144e92298db296fb6c894fb", - "sha256:8587fd64c2a91c33cdc39d0cebdaf30e79491cc029a37fcd458ba863f8815383", - "sha256:8ffe53e1d8ef2520ebcf0c9fec15bb721da59e8ef283b6ff3079613b1e30513d", - "sha256:9051e3d2af8f55b42061603e29e744724cb5f65b128a491446cc029b3e2ea896", - "sha256:91e5a8200e65aaac342a791272c564dffcf1281abd635d304d6c4e6b495f29dc", - "sha256:93432e747fb07fa567ad9cc7aaadd6e29710e515aabf939dfbed8046041346c6", - "sha256:938eab7323a736533f015e6069a7d53ef2dcc841e4e533b782c2bfb9fb12d84b", - "sha256:9584f8f52010295a4a417221861df9bea4c72d9632562b6e59b3c7b87a1522b7", - "sha256:9737bdaa0ad33d34c0efc718741abaafce62fadae72c8b251df9b0c823c63b22", - "sha256:99da0a4686ada4ed0f778120a0ea8d066de1a0a92ab0d13ae68492a437db78bf", - "sha256:99f567dae93e10be2daaa896e07513dd4bf9c2ecf0576e0533ac36ba3b1d5394", - "sha256:9bdf1303df671179eaf2cb41e8515a07fc78d9d00f111eadbe3e14262f59c3d0", - "sha256:9f0e4dc0f17dcea4ab9d13ac5c666b6b5337042b4d8f27e01b70fae41dd65c57", - "sha256:a000133a90eea274a6f28adc3084643263b1e7c1a5a66eb0a0a7a36aa757ed74", - "sha256:a3264e3e858de4fc601741498215835ff324ff2482fd4e4af61b46512dd7fc83", - "sha256:a71169d505af63bb4d20d23a8fbd4c6ce272e7bce6cc31f617152aa784436f29", - "sha256:a967dd6afda7715d911c25a6ba1517975acd8d1092b2f326718725461a3d33f9", - "sha256:aa5bfb13f1e89151ade0eb812f7b0d7a4d643406caaad65ce1cbabe0a66d695f", - "sha256:ae35e8e6801c5ab071b992cb2da958eee76340e6926ec693b5ff7d6381441745", - "sha256:b686f25377f9c006acbac63f61614416a6317133ab7fafe5de5f7dc8a06d42eb", - "sha256:b760a56e080a826c2e5af09002c1a037382ed21d03134eb6294812dda268c811", - "sha256:b86b21b348f7e5485fae740d845c65a880f5d1eda1e063bc59bef92d1f7d0c55", - "sha256:b9412abdf0ba70faa6e2ee6c0cc62a8defb772e78860cef419865917d86c7342", - "sha256:bd345a13ce06e94c753dab52f8e71e5252aec1e4f8022d24d56decd31e1b9b23", - "sha256:be22ae34d68544df293152b7e50895ba70d2a833ad9566932d750d3625918b82", - "sha256:bf046179d011e6114daf12a534d874958b039342b347348a78b7cdf0dd9d6041", - "sha256:c3d2010656999b63e628a3c694f23020322b4178c450dc478558a2b6ef3cb9bb", - "sha256:c64602e8be701c6cfe42064b71c84ce62ce66ddc6422c15463fd8127db3d8066", - "sha256:d65e6b4f1443048eb7e833c2accb4fa7ee67cc7d54f31b4f0555b474758bee55", - "sha256:d8bbd8e56f3ba25a7d0cf980fc42b34028848a53a0e36c9918550e0280b9d0b6", - "sha256:da1ead63368c04a9bded7904757dfcae01eba0e0f9bc41d3d7f57ebf1c04015a", - "sha256:dbbb95e6fc91ea3102505d111b327004d1c4ce98d56a4a02e82cd451f9f57140", - "sha256:dbc56680ecf585a384fbd93cd42bc82668b77cb525343170a2d86dafaed2a84b", - "sha256:df3b6f45ba4515632c5064e35ca7f31d51d13d1479673185ba8f9fefbbed58b9", - "sha256:dfe07308b311a8293a0d5ef4e61411c5c20f682db6b5e73de6c7c8824272c256", - "sha256:e796051f2070f47230c745d0a77a91088fbee2cc0502e9b796b9c6471983718c", - "sha256:efa767c220d94aa4ac3a6dd3aeb986e9f229eaf5bce92d8b1b3018d06bed3772", - "sha256:f0b8bf5b8db49d8fd40f54772a1dcf262e8be0ad2ab0206b5a2ec109c176c0a4", - "sha256:f175e95a197f6a4059b50757a3dca33b32b61691bdbd22c29e8a8d21d3914cae", - "sha256:f2f3b28b40fddcb6c1f1f6c88c6f3769cd933fa493ceb79da45968a21dccc920", - "sha256:f6c43b6f97209e370124baf2bf40bb1e8edc25311a158867eb1c3a5d449ebc7a", - "sha256:f7f4cb1f173385e8a39c29510dd11a78bf44e360fb75610594973f5ea141028b", - "sha256:fad059a4bd14c45776600d223ec194e77db6c20255578bb5bcdd7c18fd169361", - "sha256:ff1dcb8e8bc2261a088821b2595ef031c91d499a0c1b031c152d43fe0a6ecec8", - "sha256:ffee088ea9b593cc6160518ba9bd319b5475e5f3e578e4552d63818773c6f56a" + "sha256:0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142", + "sha256:05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5", + "sha256:0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42", + "sha256:0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1", + "sha256:08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1", + "sha256:0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624", + "sha256:0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777", + "sha256:0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523", + "sha256:0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7", + "sha256:0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18", + "sha256:1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a", + "sha256:171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50", + "sha256:188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425", + "sha256:1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa", + "sha256:1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963", + "sha256:1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c", + "sha256:2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733", + "sha256:240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4", + "sha256:25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e", + "sha256:27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4", + "sha256:281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2", + "sha256:2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427", + "sha256:301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b", + "sha256:30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d", + "sha256:33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff", + "sha256:35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436", + "sha256:389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c", + "sha256:3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c", + "sha256:3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c", + "sha256:3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de", + "sha256:429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4", + "sha256:466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78", + "sha256:47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278", + "sha256:48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b", + "sha256:4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440", + "sha256:4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b", + "sha256:4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e", + "sha256:4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575", + "sha256:513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f", + "sha256:5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f", + "sha256:54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07", + "sha256:56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c", + "sha256:57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e", + "sha256:5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4", + "sha256:6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2", + "sha256:68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459", + "sha256:6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76", + "sha256:6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b", + "sha256:6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81", + "sha256:6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348", + "sha256:7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80", + "sha256:7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29", + "sha256:761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743", + "sha256:7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6", + "sha256:8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f", + "sha256:81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213", + "sha256:81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206", + "sha256:88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e", + "sha256:8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c", + "sha256:91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061", + "sha256:9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534", + "sha256:9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3", + "sha256:9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63", + "sha256:a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee", + "sha256:a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193", + "sha256:a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0", + "sha256:a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98", + "sha256:a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc", + "sha256:aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b", + "sha256:b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978", + "sha256:b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56", + "sha256:b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990", + "sha256:b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274", + "sha256:b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31", + "sha256:bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543", + "sha256:c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46", + "sha256:c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa", + "sha256:cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e", + "sha256:cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f", + "sha256:ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431", + "sha256:d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808", + "sha256:d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c", + "sha256:d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2", + "sha256:d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f", + "sha256:d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31", + "sha256:dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10", + "sha256:e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d", + "sha256:e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595", + "sha256:e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34", + "sha256:e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d", + "sha256:eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe", + "sha256:efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9", + "sha256:efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d", + "sha256:f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f", + "sha256:f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5", + "sha256:f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194", + "sha256:f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985", + "sha256:f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a", + "sha256:fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7" ], "markers": "python_version >= '3.8'", - "version": "==0.17.1" + "version": "==0.12.0" }, "s3transfer": { "hashes": [ - "sha256:3cdb40f5cfa6966e812209d0994f2a4709b561c88e90cf00c2696d2df4e56b2e", - "sha256:d0c8bbf672d5eebbe4e57945e23b972d963f07d82f661cabf678a5c88831595b" + "sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a", + "sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e" ], - "markers": "python_version >= '3.8'", - "version": "==0.10.0" + "markers": "python_version >= '3.7'", + "version": "==0.7.0" }, "setuptools": { "hashes": [ - "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05", - "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78" + "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87", + "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a" ], "markers": "python_version >= '3.8'", - "version": "==69.0.3" - }, - "shapely": { - "hashes": [ - "sha256:03e63a99dfe6bd3beb8d5f41ec2086585bb969991d603f9aeac335ad396a06d4", - "sha256:0521d76d1e8af01e712db71da9096b484f081e539d4f4a8c97342e7971d5e1b4", - "sha256:06f193091a7c6112fc08dfd195a1e3846a64306f890b151fa8c63b3e3624202c", - "sha256:084b023dae8ad3d5b98acee9d3bf098fdf688eb0bb9b1401e8b075f6a627b611", - "sha256:1713cc04c171baffc5b259ba8531c58acc2a301707b7f021d88a15ed090649e7", - "sha256:1f217d28ecb48e593beae20a0082a95bd9898d82d14b8fcb497edf6bff9a44d7", - "sha256:2d217e56ae067e87b4e1731d0dc62eebe887ced729ba5c2d4590e9e3e9fdbd88", - "sha256:34eac2337cbd67650248761b140d2535855d21b969d76d76123317882d3a0c1a", - "sha256:36480e32c434d168cdf2f5e9862c84aaf4d714a43a8465ae3ce8ff327f0affb7", - "sha256:394e5085b49334fd5b94fa89c086edfb39c3ecab7f669e8b2a4298b9d523b3a5", - "sha256:42997ac806e4583dad51c80a32d38570fd9a3d4778f5e2c98f9090aa7db0fe91", - "sha256:45ac6906cff0765455a7b49c1670af6e230c419507c13e2f75db638c8fc6f3bd", - "sha256:4ef753200cbffd4f652efb2c528c5474e5a14341a473994d90ad0606522a46a2", - "sha256:5324be299d4c533ecfcfd43424dfd12f9428fd6f12cda38a4316da001d6ef0ea", - "sha256:5b0c052709c8a257c93b0d4943b0b7a3035f87e2d6a8ac9407b6a992d206422f", - "sha256:6a21353d28209fb0d8cc083e08ca53c52666e0d8a1f9bbe23b6063967d89ed24", - "sha256:6ca8cffbe84ddde8f52b297b53f8e0687bd31141abb2c373fd8a9f032df415d6", - "sha256:72b5997272ae8c25f0fd5b3b967b3237e87fab7978b8d6cd5fa748770f0c5d68", - "sha256:737dba15011e5a9b54a8302f1748b62daa207c9bc06f820cd0ad32a041f1c6f2", - "sha256:78128357a0cee573257a0c2c388d4b7bf13cb7dbe5b3fe5d26d45ebbe2a39e25", - "sha256:794affd80ca0f2c536fc948a3afa90bd8fb61ebe37fe873483ae818e7f21def4", - "sha256:7e92e7c255f89f5cdf777690313311f422aa8ada9a3205b187113274e0135cd8", - "sha256:87dc2be34ac3a3a4a319b963c507ac06682978a5e6c93d71917618b14f13066e", - "sha256:94ac128ae2ab4edd0bffcd4e566411ea7bdc738aeaf92c32a8a836abad725f9f", - "sha256:a5533a925d8e211d07636ffc2fdd9a7f9f13d54686d00577eeb11d16f00be9c4", - "sha256:a9a41ff4323fc9d6257759c26eb1cf3a61ebc7e611e024e6091f42977303fd3a", - "sha256:b8eb0a92f7b8c74f9d8fdd1b40d395113f59bd8132ca1348ebcc1f5aece94b96", - "sha256:baa14fc27771e180c06b499a0a7ba697c7988c7b2b6cba9a929a19a4d2762de3", - "sha256:be46d5509b9251dd9087768eaf35a71360de6afac82ce87c636990a0871aa18b", - "sha256:c6fd29fbd9cd76350bd5cc14c49de394a31770aed02d74203e23b928f3d2f1aa", - "sha256:ccfd5fa10a37e67dbafc601c1ddbcbbfef70d34c3f6b0efc866ddbdb55893a6c", - "sha256:d41a116fcad58048d7143ddb01285e1a8780df6dc1f56c3b1e1b7f12ed296651", - "sha256:dc9342fc82e374130db86a955c3c4525bfbf315a248af8277a913f30911bed9e", - "sha256:dea9a0651333cf96ef5bb2035044e3ad6a54f87d90e50fe4c2636debf1b77abc", - "sha256:e7c95d3379ae3abb74058938a9fcbc478c6b2e28d20dace38f8b5c587dde90aa", - "sha256:e7d897e6bdc6bc64f7f65155dbbb30e49acaabbd0d9266b9b4041f87d6e52b3a", - "sha256:ea84d1cdbcf31e619d672b53c4532f06253894185ee7acb8ceb78f5f33cbe033", - "sha256:ed1e99702125e7baccf401830a3b94d810d5c70b329b765fe93451fe14cf565b", - "sha256:eebe544df5c018134f3c23b6515877f7e4cd72851f88a8d0c18464f414d141a2", - "sha256:fa3ee28f5e63a130ec5af4dc3c4cb9c21c5788bb13c15e89190d163b14f9fb89", - "sha256:fd3ad17b64466a033848c26cb5b509625c87d07dcf39a1541461cacdb8f7e91c" - ], - "index": "pypi", - "version": "==2.0.2" + "version": "==68.2.2" }, "six": { "hashes": [ @@ -3105,19 +2908,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783", - "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd" + "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", + "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" ], "markers": "python_version >= '3.8'", - "version": "==4.9.0" - }, - "tzdata": { - "hashes": [ - "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3", - "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9" - ], - "markers": "python_version >= '2'", - "version": "==2023.4" + "version": "==4.8.0" }, "urllib3": { "hashes": [ @@ -3129,11 +2924,19 @@ }, "virtualenv": { "hashes": [ - "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3", - "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b" + "sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af", + "sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381" ], "markers": "python_version >= '3.7'", - "version": "==20.25.0" + "version": "==20.24.6" + }, + "websocket-client": { + "hashes": [ + "sha256:084072e0a7f5f347ef2ac3d8698a5e0b4ffbfcab607628cadabc650fc9a83a24", + "sha256:b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df" + ], + "markers": "python_version >= '3.8'", + "version": "==1.6.4" }, "werkzeug": { "hashes": [ diff --git a/app/authentication/token.py b/app/authentication/token.py index 80e91fbfb..43a743cba 100644 --- a/app/authentication/token.py +++ b/app/authentication/token.py @@ -1,17 +1,14 @@ from typing import Tuple, cast -from typing import Tuple, cast from fastapi import Depends, HTTPException from fastapi.logger import logger from fastapi.security import OAuth2PasswordBearer from httpx import Response from ..routes import dataset_dependency -from ..routes import dataset_dependency from ..utils.rw_api import who_am_i from ..settings.globals import PROTECTED_QUERY_DATASETS -# token dependency where we immediately cause an exception if there is no auth token # token dependency where we immediately cause an exception if there is no auth token oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/token") # token dependency where we don't cause exception if there is no auth token diff --git a/app/crud/metadata.py b/app/crud/metadata.py index 8765d0746..d05976744 100644 --- a/app/crud/metadata.py +++ b/app/crud/metadata.py @@ -181,44 +181,12 @@ async def get_asset_metadata(asset_id: UUID): async def update_asset_metadata(asset_id: UUID, **data) -> ORMAssetMetadata: """Update asset metadata.""" fields = data.pop("fields", None) - bands = data.pop("bands", None) asset_metadata: ORMAssetMetadata = await get_asset_metadata(asset_id) if data: await asset_metadata.update(**data).apply() - bands_metadata = [] - if bands: - for band in bands: - try: - pixel_meaning = band.pop("pixel_meaning") - band_metadata = await update_band_metadata( - asset_metadata.id, pixel_meaning, **band - ) - except RecordNotFoundError: - bands_metadata = await create_raster_band_metadata( - asset_metadata.id, **bands - ) - bands_metadata.append(band_metadata) - - asset_metadata.bands = bands_metadata - - fields_metadata = [] - if fields: - for field in fields: - try: - field_metadata = await update_field_metadata( - asset_metadata.id, field["name"], **field - ) - except RecordNotFoundError: - field_metadata = await create_field_metadata(asset_metadata.id, **field) - fields_metadata.append(field_metadata) - - asset_metadata.fields = fields_metadata - - return asset_metadata - fields_metadata = [] if fields: for field in fields: @@ -272,18 +240,6 @@ async def update_field_metadata( return field_metadata -async def update_band_metadata( - metadata_id: UUID, pixel_meaning: str, **data -) -> ORMFieldMetadata: - band_metadata: ORMRasterBandMetadata = await get_asset_raster_band( - metadata_id, pixel_meaning - ) - - await band_metadata.update(**data).apply() - - return band_metadata - - async def get_asset_fields(asset_metadata_id: UUID) -> List[ORMFieldMetadata]: fields_metadata: List[ORMFieldMetadata] = await ( ORMFieldMetadata.query.where( @@ -316,21 +272,6 @@ async def get_asset_field(asset_metadata_id: UUID, field_name: str) -> ORMFieldM return field_metadata -async def get_asset_raster_band( - asset_metadata_id: UUID, pixel_meaning: str -) -> ORMRasterBandMetadata: - band_metadata: ORMRasterBandMetadata = await ORMRasterBandMetadata.get( - [asset_metadata_id, pixel_meaning] - ) - - if band_metadata is None: - raise RecordNotFoundError( - f"No band metadata record found for pixel meaning {pixel_meaning}." - ) - - return band_metadata - - def update_metadata(row: Base, parent: Base): """Dynamically update metadata with parent metadata. diff --git a/app/models/orm/asset_metadata.py b/app/models/orm/asset_metadata.py index 4b51c77b9..7b031ba40 100644 --- a/app/models/orm/asset_metadata.py +++ b/app/models/orm/asset_metadata.py @@ -52,8 +52,8 @@ class RasterBandMetadata(db.Model): name="asset_metadata_id_fk", onupdate="CASCADE", ondelete="CASCADE", + primary_key=True, ), - primary_key=True, ) pixel_meaning = db.Column(db.String, primary_key=True) description = db.Column(db.String) diff --git a/app/models/pydantic/creation_options.py b/app/models/pydantic/creation_options.py index 36e526568..454bd8695 100644 --- a/app/models/pydantic/creation_options.py +++ b/app/models/pydantic/creation_options.py @@ -378,13 +378,6 @@ class StaticVectorFileCreationOptions(StrictBaseModel): ) -class StaticVector1x1CreationOptions(StaticVectorFileCreationOptions): - include_tile_id: Optional[bool] = Field( - False, - description="Whether or not to include the tile_id of each feature" - ) - - SourceCreationOptions = Union[ TableSourceCreationOptions, RasterTileSetSourceCreationOptions, @@ -396,7 +389,6 @@ class StaticVector1x1CreationOptions(StaticVectorFileCreationOptions): RasterTileCacheCreationOptions, StaticVectorTileCacheCreationOptions, StaticVectorFileCreationOptions, - StaticVector1x1CreationOptions, DynamicVectorTileCacheCreationOptions, RasterTileSetAssetCreationOptions, ] @@ -418,7 +410,7 @@ class CreationOptionsResponse(Response): AssetType.dynamic_vector_tile_cache: DynamicVectorTileCacheCreationOptions, AssetType.static_vector_tile_cache: StaticVectorTileCacheCreationOptions, AssetType.ndjson: StaticVectorFileCreationOptions, - AssetType.grid_1x1: StaticVector1x1CreationOptions, + AssetType.grid_1x1: StaticVectorFileCreationOptions, AssetType.shapefile: StaticVectorFileCreationOptions, AssetType.geopackage: StaticVectorFileCreationOptions, AssetType.raster_tile_set: RasterTileSetAssetCreationOptions, diff --git a/app/models/pydantic/versions.py b/app/models/pydantic/versions.py index 5d6666744..21cffbc8e 100644 --- a/app/models/pydantic/versions.py +++ b/app/models/pydantic/versions.py @@ -18,8 +18,7 @@ class Version(BaseRecord): metadata: Union[VersionMetadataOut, BaseModel] status: VersionStatus = VersionStatus.pending - # Each element of assets is a tuple (asset_type, assert_uri, asset_id) - assets: List[Tuple[str, str, str]] = list() + assets: List[Tuple[str, str]] = list() class VersionCreateIn(StrictBaseModel): diff --git a/app/routes/assets/asset.py b/app/routes/assets/asset.py index 0d39879be..e408d639f 100644 --- a/app/routes/assets/asset.py +++ b/app/routes/assets/asset.py @@ -11,6 +11,11 @@ from typing import List, Optional, Union from uuid import UUID +# from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, Path, status +from fastapi.responses import ORJSONResponse +from starlette.responses import JSONResponse + +from app.models.pydantic.responses import Response from fastapi import ( APIRouter, BackgroundTasks, @@ -22,18 +27,13 @@ status, ) -# from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, Path, status -from fastapi.responses import ORJSONResponse -from starlette.responses import JSONResponse - -from app.models.pydantic.responses import Response from app.settings.globals import API_URL from ...authentication.token import is_admin from ...crud import assets from ...crud import metadata as metadata_crud from ...crud import tasks -from ...errors import BadRequestError, RecordAlreadyExistsError, RecordNotFoundError +from ...errors import RecordAlreadyExistsError, RecordNotFoundError from ...models.enum.assets import is_database_asset, is_single_file_asset from ...models.orm.asset_metadata import FieldMetadata as ORMFieldMetadata from ...models.orm.assets import Asset as ORMAsset @@ -112,8 +112,6 @@ async def update_asset( row: ORMAsset = await assets.update_asset(asset_id, **input_data) except RecordNotFoundError as e: raise HTTPException(status_code=404, detail=str(e)) - except BadRequestError as e: - raise HTTPException(status_code=400, detail=str(e)) except NotImplementedError as e: raise HTTPException(status_code=501, detail=str(e)) diff --git a/app/routes/datasets/queries.py b/app/routes/datasets/queries.py index 1e65f8c75..5a43fb307 100755 --- a/app/routes/datasets/queries.py +++ b/app/routes/datasets/queries.py @@ -7,13 +7,13 @@ from uuid import UUID, uuid4 import httpx -from async_lru import alru_cache from asyncpg import DataError, InsufficientPrivilegeError, SyntaxOrAccessError from fastapi import APIRouter, Depends, HTTPException, Query from fastapi import Request as FastApiRequest from fastapi import Response as FastApiResponse from fastapi.encoders import jsonable_encoder from fastapi.logger import logger + # from fastapi.openapi.models import APIKey from fastapi.responses import RedirectResponse from pglast import printers # noqa @@ -21,10 +21,11 @@ from pglast.parser import ParseError from pglast.printer import RawStream from pydantic.tools import parse_obj_as +from sqlalchemy.sql import and_ -from ...authentication.token import is_gfwpro_admin_for_query from ...authentication.token import is_gfwpro_admin_for_query from ...application import db + # from ...authentication.api_keys import get_api_key from ...crud import assets from ...models.enum.assets import AssetType @@ -61,6 +62,7 @@ from ...models.enum.queries import QueryFormat, QueryType from ...models.orm.assets import Asset as AssetORM from ...models.orm.queries.raster_assets import latest_raster_tile_sets +from ...models.orm.versions import Version as VersionORM from ...models.pydantic.asset_metadata import RasterTable, RasterTableRow from ...models.pydantic.creation_options import NoDataType from ...models.pydantic.geostore import Geometry, GeostoreCommon @@ -657,14 +659,13 @@ async def _query_raster_lambda( def _get_area_density_name(nm): - """Return empty string if nm doesn't have an area-density suffix, else + """Return empty string if nm doesn't not have an area-density suffix, else return nm with the area-density suffix removed.""" for suffix in AREA_DENSITY_RASTER_SUFFIXES: if nm.endswith(suffix): return nm[:-len(suffix)] return "" - def _get_default_layer(dataset, pixel_meaning): default_type = pixel_meaning area_density_name = _get_area_density_name(default_type) @@ -682,7 +683,6 @@ def _get_default_layer(dataset, pixel_meaning): return f"{dataset}__{default_type}" -@alru_cache(maxsize=16, ttl=300.0) async def _get_data_environment(grid: Grid) -> DataEnvironment: # get all raster tile set assets with the same grid. latest_tile_sets = await db.all(latest_raster_tile_sets, {"grid": grid}) diff --git a/app/routes/datasets/versions.py b/app/routes/datasets/versions.py index 890d95aab..5af146958 100644 --- a/app/routes/datasets/versions.py +++ b/app/routes/datasets/versions.py @@ -513,14 +513,14 @@ async def _version_response( associated assets.""" assets: List[ORMAsset] = ( - await ORMAsset.select("asset_type", "asset_uri", "asset_id") + await ORMAsset.select("asset_type", "asset_uri") .where(ORMAsset.dataset == dataset) .where(ORMAsset.version == version) .where(ORMAsset.status == AssetStatus.saved) .gino.all() ) data = Version.from_orm(data).dict(by_alias=True) - data["assets"] = [(asset[0], asset[1], str(asset[2])) for asset in assets] + data["assets"] = [(asset[0], asset[1]) for asset in assets] return VersionResponse(data=Version(**data)) @@ -573,7 +573,7 @@ def _verify_source_file_access(sources: List[str]) -> None: raise HTTPException( status_code=400, detail=( - "Cannot access all of the source files (non-existent or access denied). " + "Cannot access all of the source files. " f"Invalid sources: {invalid_sources}" ), ) diff --git a/app/tasks/delete_assets.py b/app/tasks/delete_assets.py index f04c9a2b4..4582bae15 100644 --- a/app/tasks/delete_assets.py +++ b/app/tasks/delete_assets.py @@ -11,11 +11,7 @@ async def delete_all_assets(dataset: str, version: str) -> None: await delete_database_table_asset(dataset, version) delete_s3_objects(DATA_LAKE_BUCKET, f"{dataset}/{version}/") - - # We don't yet have the correct PutBucketLifecycleConfiguration permission for - # this expire_s3_objects call. The failure of this background task somehow causes - # the main delete request to return a network error (504) - #expire_s3_objects(TILE_CACHE_BUCKET, f"{dataset}/{version}/") + # expire_s3_objects(TILE_CACHE_BUCKET, f"{dataset}/{version}/") flush_cloudfront_cache(TILE_CACHE_CLOUDFRONT_ID, [f"/{dataset}/{version}/*"]) diff --git a/app/tasks/raster_tile_cache_assets/raster_tile_cache_assets.py b/app/tasks/raster_tile_cache_assets/raster_tile_cache_assets.py index 93bf63e0e..eb9759721 100644 --- a/app/tasks/raster_tile_cache_assets/raster_tile_cache_assets.py +++ b/app/tasks/raster_tile_cache_assets/raster_tile_cache_assets.py @@ -4,7 +4,6 @@ import numpy as np from fastapi import HTTPException from fastapi.logger import logger -from asyncpg import DataError from app.crud.assets import get_asset from app.models.enum.assets import AssetType @@ -30,7 +29,6 @@ ) from app.utils.path import get_asset_uri, tile_uri_to_tiles_geojson -from ...errors import RecordNotFoundError async def raster_tile_cache_asset( dataset: str, @@ -206,15 +204,9 @@ async def raster_tile_cache_validator( Used in asset route. If validation fails, it will raise an HTTPException visible to user. """ - try: - source_asset: ORMAsset = await get_asset( - input_data["creation_options"]["source_asset_id"] - ) - except RecordNotFoundError as e: - raise HTTPException(status_code=404, detail=str(e)) - except DataError as e: - raise HTTPException(status_code=400, detail=str(e)) - + source_asset: ORMAsset = await get_asset( + input_data["creation_options"]["source_asset_id"] + ) if (source_asset.dataset != dataset) or (source_asset.version != version): message: str = ( "Dataset and version of source asset must match dataset and " diff --git a/app/tasks/static_vector_1x1_assets.py b/app/tasks/static_vector_1x1_assets.py index a3ad84e69..10a395569 100644 --- a/app/tasks/static_vector_1x1_assets.py +++ b/app/tasks/static_vector_1x1_assets.py @@ -19,7 +19,7 @@ async def static_vector_1x1_asset( asset_id: UUID, input_data: Dict[str, Any], ) -> ChangeLog: - """Export a TSV to S3 with features in a 1x1 grid of tiles.""" + """Create Vector tile cache and NDJSON file as intermediate data.""" ####################### # Update asset metadata @@ -57,15 +57,12 @@ async def static_vector_1x1_asset( grid_1x1_uri, ] - if creation_options.include_tile_id: - command.append("--include_tile_id") - export_1x1_grid = PostgresqlClientJob( dataset=dataset, job_name="export_1x1_grid", job_queue=DATA_LAKE_JOB_QUEUE, command=command, - memory=16000, + memory=9000, environment=reader_secrets, callback=callback_constructor(asset_id), ) diff --git a/app/utils/aws.py b/app/utils/aws.py index 2f9e2da66..fe981be42 100644 --- a/app/utils/aws.py +++ b/app/utils/aws.py @@ -1,10 +1,8 @@ from typing import Any, Dict, List, Optional, Sequence import boto3 -import botocore import httpx from httpx_auth import AWS4Auth -from fastapi.logger import logger from ..settings.globals import ( AWS_REGION, @@ -110,11 +108,7 @@ def get_aws_files( if exit_after_max and num_matches >= exit_after_max: break - # Strangely, s3_client.exceptions has NoSuchBucket, but doesn't have - # AccessDenied, even though you can get that error, so we just catch all botocore - # exceptions. - except botocore.exceptions.ClientError as error: - logger.warning(f"get_aws_file: {error}") + except s3_client.exceptions.NoSuchBucket: matches = list() return matches diff --git a/app/utils/fields.py b/app/utils/fields.py index d1f2ff725..d6e4dd74a 100644 --- a/app/utils/fields.py +++ b/app/utils/fields.py @@ -1,7 +1,6 @@ from typing import Any, Dict, List -from ..crud.assets import get_default_asset -from ..crud.metadata import get_asset_fields_dicts +from ..crud import assets, metadata as metadata_crud from ..models.orm.assets import Asset as ORMAsset from ..models.pydantic.creation_options import CreationOptions @@ -9,30 +8,28 @@ async def get_field_attributes( dataset: str, version: str, creation_options: CreationOptions ) -> List[Dict[str, Any]]: - """Get list of field attributes on the asset which are marked as `is_feature_info` - If a field list is provided in creation options, limit the list to those provided, - in the order provided. Invalid provided fields are silently ignored. + """Get field attribute list from creation options. + + If no attribute list provided, use all fields from DB table, marked + as `is_feature_info`. Otherwise compare to provide list with + available fields and use intersection. """ - default_asset: ORMAsset = await get_default_asset(dataset, version) - asset_fields = await get_asset_fields_dicts(default_asset) + default_asset: ORMAsset = await assets.get_default_asset(dataset, version) + fields = await metadata_crud.get_asset_fields_dicts(default_asset) - name_to_feature_fields: Dict[str, Dict] = { - field["name"]: field - for field in asset_fields - if field["is_feature_info"] - } + field_attributes: List[Dict[str, Any]] = [ + field for field in fields if field["is_feature_info"] + ] if ( "field_attributes" in creation_options.__fields__ and creation_options.field_attributes ): - asset_field_attributes = [ - name_to_feature_fields[field_name] - for field_name in creation_options.field_attributes - if field_name in name_to_feature_fields + field_attributes = [ + field + for field in field_attributes + if field["name"] in creation_options.field_attributes ] - else: - asset_field_attributes = list(name_to_feature_fields.values()) - return asset_field_attributes + return field_attributes diff --git a/app/utils/google.py b/app/utils/google.py index eddafca7c..24a94f773 100644 --- a/app/utils/google.py +++ b/app/utils/google.py @@ -1,61 +1,84 @@ -import json -from functools import lru_cache -from typing import List, Optional, Sequence, Dict +import os +from typing import List, Optional, Sequence -from google.cloud.storage import Client -from google.oauth2 import service_account +from fastapi.logger import logger +from google.auth.exceptions import DefaultCredentialsError +from google.cloud import storage +from retrying import retry +from ..settings.globals import AWS_GCS_KEY_SECRET_ARN, GOOGLE_APPLICATION_CREDENTIALS from .aws import get_secret_client -from ..settings.globals import AWS_GCS_KEY_SECRET_ARN -@lru_cache(maxsize=1) -def get_gcs_service_account_auth_info() -> Dict[str, str]: - secret_client = get_secret_client() - response = secret_client.get_secret_value(SecretId=AWS_GCS_KEY_SECRET_ARN) - return json.loads(response["SecretString"]) +def set_google_application_credentials(exception: Exception) -> bool: + # Only continue + retry if we can't find the GCS credentials file + if not isinstance(exception, (DefaultCredentialsError, FileNotFoundError)): + logger.error(f"Some other exception happened!: {exception}") + return False + # We will not reach out to AWS Secret Manager if no secret is set... + elif not AWS_GCS_KEY_SECRET_ARN: + logger.error( + "No AWS_GCS_KEY_SECRET_ARN set. " + "Cannot write Google Application Credential file." + ) + return False + # ...or if we don't know where to write the credential file. + elif not GOOGLE_APPLICATION_CREDENTIALS: + logger.error( + "No GOOGLE_APPLICATION_CREDENTIALS set. " + "Cannot write Google Application Credential file" + ) + return False + # But if all those conditions are met, write the GCS credentials file + # and return True to retry + else: + logger.info("GCS key file is missing. Fetching key from secret manager") + client = get_secret_client() + response = client.get_secret_value(SecretId=AWS_GCS_KEY_SECRET_ARN) + os.makedirs( + os.path.dirname(GOOGLE_APPLICATION_CREDENTIALS), + exist_ok=True, + ) -def get_prefix_objects(bucket: str, prefix: str, limit: Optional[int] = None) -> List[str]: - """Get ALL object names under a bucket and prefix in GCS.""" + logger.info("Writing GCS key to file") + with open(GOOGLE_APPLICATION_CREDENTIALS, "w") as f: + f.write(response["SecretString"]) - auth_info = get_gcs_service_account_auth_info() - scopes = [ - "https://www.googleapis.com/auth/devstorage.read_only", - "https://www.googleapis.com/auth/cloud-platform.read-only", - ] + # make sure that global ENV VAR is set + logger.info("Setting environment's GOOGLE_APPLICATION_CREDENTIALS") + os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = GOOGLE_APPLICATION_CREDENTIALS - account_info = { - "scopes": scopes, - **auth_info - } - - service_account_info = service_account.Credentials.from_service_account_info( - account_info - ) - client = Client(project=None, credentials=service_account_info) - - blobs = client.list_blobs(bucket, prefix=prefix, max_results=limit) - return [blob.name for blob in blobs] + return True +@retry( + retry_on_exception=set_google_application_credentials, + stop_max_attempt_number=2, +) def get_gs_files( bucket: str, prefix: str, limit: Optional[int] = None, exit_after_max: Optional[int] = None, - extensions: Sequence[str] = tuple() + extensions: Sequence[str] = tuple(), ) -> List[str]: - """Get matching object names under a bucket and prefix in GCS.""" + """Get all matching files in GCS.""" + + storage_client = storage.Client.from_service_account_json( + GOOGLE_APPLICATION_CREDENTIALS + ) matches: List[str] = list() num_matches: int = 0 - for blob_name in get_prefix_objects(bucket, prefix, limit): - if not extensions or any(blob_name.endswith(ext) for ext in extensions): - matches.append(f"/vsigs/{bucket}/{blob_name}") + blobs = storage_client.list_blobs(bucket, prefix=prefix, max_results=limit) + + for blob in blobs: + if not extensions or any(blob.name.endswith(ext) for ext in extensions): + matches.append(f"/vsigs/{bucket}/{blob.name}") num_matches += 1 if exit_after_max and num_matches >= exit_after_max: - return matches + break return matches diff --git a/batch/pixetl.dockerfile b/batch/pixetl.dockerfile index 5c495adde..f89b2db60 100644 --- a/batch/pixetl.dockerfile +++ b/batch/pixetl.dockerfile @@ -1,4 +1,4 @@ -FROM globalforestwatch/pixetl:v1.7.6 +FROM globalforestwatch/pixetl:v1.7.5 # Copy scripts COPY ./batch/scripts/ /opt/scripts/ diff --git a/batch/python/export_1x1_grid.py b/batch/python/export_1x1_grid.py index 690986f9e..6a2beef03 100644 --- a/batch/python/export_1x1_grid.py +++ b/batch/python/export_1x1_grid.py @@ -356,7 +356,7 @@ def src_table(dataset: str, version: str) -> Table: def get_sql( - dataset: str, version: str, fields: List[str], include_tile_id: bool, grid_id: str, tcl: bool, glad: bool + dataset: str, version: str, fields: List[str], grid_id: str, tcl: bool, glad: bool ) -> Select: """Generate SQL statement.""" @@ -366,9 +366,6 @@ def get_sql( nested_columns = [field.split(",") for field in fields] columns = [column(c) for columns in nested_columns for c in columns] - if include_tile_id: - columns.append(literal_column(f"'{grid_id}'").label("tile_id")) - sql: Select = ( select(columns + [tcl_column, glad_column, geom_column]) .select_from(src_table(dataset, version).alias("t")) @@ -382,7 +379,7 @@ def get_sql( async def run( - loop: AbstractEventLoop, dataset: str, version: str, fields: List[str], include_tile_id: bool + loop: AbstractEventLoop, dataset: str, version: str, fields: List[str] ) -> None: async def copy_tiles(i: int, tile: Tuple[str, bool, bool]) -> None: if i == 0: @@ -409,17 +406,7 @@ async def copy_tiles(i: int, tile: Tuple[str, bool, bool]) -> None: password=PGPASSWORD, ) result = await con.copy_from_query( - str( - get_sql( - dataset, - version, - fields, - include_tile_id, - grid_id, - tcl, - glad - ) - ), + str(get_sql(dataset, version, fields, grid_id, tcl, glad)), output=output, format="csv", delimiter="\t", @@ -458,9 +445,6 @@ async def copy_tiles(i: int, tile: Tuple[str, bool, bool]) -> None: parser.add_argument( "--column_names", "-C", type=str, nargs="+", help="Column names to include" ) - parser.add_argument( - "--include_tile_id", action='store_true', help="Include tile_id in the output" - ) args = parser.parse_args() loop: AbstractEventLoop = asyncio.get_event_loop() - loop.run_until_complete(run(loop, args.dataset, args.version, args.column_names, args.include_tile_id)) + loop.run_until_complete(run(loop, args.dataset, args.version, args.column_names)) diff --git a/batch/scripts/create_vector_tile_cache.sh b/batch/scripts/create_vector_tile_cache.sh index 4fe2547e7..ee96564ca 100755 --- a/batch/scripts/create_vector_tile_cache.sh +++ b/batch/scripts/create_vector_tile_cache.sh @@ -34,7 +34,7 @@ echo "Fetch NDJSON data from Data Lake ${SRC} -> ${DATASET}" aws s3 cp "${SRC}" "${DATASET}" --no-progress echo "Build Tile Cache" -tippecanoe -Z"${MIN_ZOOM}" -z"${MAX_ZOOM}" -e tilecache "${STRATEGY[@]}" -P -n "${DATASET}" "${DATASET}" --preserve-input-order +tippecanoe -Z"${MIN_ZOOM}" -z"${MAX_ZOOM}" -e tilecache "${STRATEGY[@]}" -P -n "${DATASET}" "${DATASET}" echo "Upload tiles to S3" tileputty tilecache --bucket "${TILE_CACHE}" --dataset "${DATASET}" --version "${VERSION}" --implementation "${IMPLEMENTATION}" --cores "${NUM_PROCESSES}" \ No newline at end of file diff --git a/batch/scripts/export_1x1_grid.sh b/batch/scripts/export_1x1_grid.sh index 00044ecb4..6831e232c 100755 --- a/batch/scripts/export_1x1_grid.sh +++ b/batch/scripts/export_1x1_grid.sh @@ -2,27 +2,17 @@ set -e -# required arguments +# requires arguments # -d | --dataset # -v | --version # -C | --column_names # -T | --target -# -# optional arguments -# --include_tile_id ME=$(basename "$0") . get_arguments.sh "$@" echo "PYTHON: Create 1x1 grid files" -ARG_ARRAY=("--dataset" "${DATASET}" - "--version" "${VERSION}" - "-C" "${COLUMN_NAMES}") - -if [ -n "${INCLUDE_TILE_ID}" ]; then - ARG_ARRAY+=("--include_tile_id") -fi -export_1x1_grid.py "${ARG_ARRAY[@]}" +export_1x1_grid.py -d "$DATASET" -v "$VERSION" -C "$COLUMN_NAMES" echo "Combine output files" echo ./*.tmp | xargs cat >> "${DATASET}_${VERSION}_1x1.tsv" diff --git a/batch/scripts/get_arguments.sh b/batch/scripts/get_arguments.sh index 7b69d3596..297e5eab5 100755 --- a/batch/scripts/get_arguments.sh +++ b/batch/scripts/get_arguments.sh @@ -105,10 +105,6 @@ do shift # past argument shift # past value ;; - --include_tile_id) - INCLUDE_TILE_ID="TRUE" - shift # past argument - ;; -j|--json) JSON="$2" shift # past argument diff --git a/newrelic.ini b/newrelic.ini index 6e6083fd2..e3f769ced 100644 --- a/newrelic.ini +++ b/newrelic.ini @@ -37,7 +37,7 @@ app_name = GFW Data API # New Relic offers distributed tracing for monitoring and analyzing modern # distributed systems.Enable distributed tracing. -# distributed_tracing.enabled = false +distributed_tracing.enabled = # When "true", the agent collects performance data about your # application and reports this data to the New Relic UI at @@ -115,7 +115,7 @@ high_security = false # then add "request.parameters.*" to the "attributes.include" # setting. For details about attributes configuration, please # consult the documentation. -attributes.include = request.parameters.* +# attributes.include = request.parameters.* # The transaction tracer captures deep information about slow # transactions and sends this to the UI on a periodic basis. The @@ -203,10 +203,8 @@ monitor_mode = false [newrelic:staging] app_name = GFW Data API (Staging) monitor_mode = true -distributed_tracing.enabled = false [newrelic:production] monitor_mode = true -distributed_tracing.enabled = true # --------------------------------------------------------------------------- \ No newline at end of file diff --git a/terraform/modules/api_gateway/gateway/main.tf b/terraform/api_gateway.tf similarity index 81% rename from terraform/modules/api_gateway/gateway/main.tf rename to terraform/api_gateway.tf index 2dcb9d63e..ab2f67df4 100644 --- a/terraform/modules/api_gateway/gateway/main.tf +++ b/terraform/api_gateway.tf @@ -1,6 +1,6 @@ resource "aws_api_gateway_rest_api" "api_gw_api" { - name = var.name - description = var.description + name = substr("GFWDataAPIGateway${local.name_suffix}", 0, 64) + description = "GFW Data API Gateway" api_key_source = "AUTHORIZER" # pragma: allowlist secret endpoint_configuration { @@ -33,14 +33,14 @@ resource "aws_api_gateway_resource" "query_parent" { } module "query_resource" { - source = "../resource" + source = "./modules/api_gateway/resource" rest_api_id = aws_api_gateway_rest_api.api_gw_api.id parent_id = aws_api_gateway_resource.query_parent.id path_part = "{proxy+}" } module "query_get" { - source = "../endpoint" + source = "./modules/api_gateway/endpoint" rest_api_id = aws_api_gateway_rest_api.api_gw_api.id authorizer_id = aws_api_gateway_authorizer.api_key.id @@ -63,11 +63,11 @@ module "query_get" { } - integration_uri = "http://${var.lb_dns_name}/dataset/{dataset}/{version}/query/{proxy}" + integration_uri = "http://${module.fargate_autoscaling.lb_dns_name}/dataset/{dataset}/{version}/query/{proxy}" } module "query_post" { - source = "../endpoint" + source = "./modules/api_gateway/endpoint" rest_api_id = aws_api_gateway_rest_api.api_gw_api.id authorizer_id = aws_api_gateway_authorizer.api_key.id @@ -90,7 +90,7 @@ module "query_post" { } - integration_uri = "http://${var.lb_dns_name}/dataset/{dataset}/{version}/query/{proxy}" + integration_uri = "http://${module.fargate_autoscaling.lb_dns_name}/dataset/{dataset}/{version}/query/{proxy}" } resource "aws_api_gateway_resource" "download_parent" { @@ -100,7 +100,7 @@ resource "aws_api_gateway_resource" "download_parent" { } module "download_shapes_resources" { - source = "../resource" + source = "./modules/api_gateway/resource" rest_api_id = aws_api_gateway_rest_api.api_gw_api.id parent_id = aws_api_gateway_resource.download_parent.id @@ -110,7 +110,7 @@ module "download_shapes_resources" { } module "download_shapes_endpoint" { - source = "../endpoint" + source = "./modules/api_gateway/endpoint" rest_api_id = aws_api_gateway_rest_api.api_gw_api.id authorizer_id = aws_api_gateway_authorizer.api_key.id @@ -132,11 +132,11 @@ module "download_shapes_endpoint" { "method.request.path.version" = true } - integration_uri = "http://${var.lb_dns_name}/dataset/{dataset}/{version}/download/${each.key}" + integration_uri = "http://${module.fargate_autoscaling.lb_dns_name}/dataset/{dataset}/{version}/download/${each.key}" } -module "unprotected_resource" { - source = "../resource" +module unprotected_resource { + source = "./modules/api_gateway/resource" rest_api_id = aws_api_gateway_rest_api.api_gw_api.id parent_id = aws_api_gateway_rest_api.api_gw_api.root_resource_id @@ -145,7 +145,7 @@ module "unprotected_resource" { } module "unprotected_endpoints" { - source = "../endpoint" + source = "./modules/api_gateway/endpoint" rest_api_id = aws_api_gateway_rest_api.api_gw_api.id authorizer_id = aws_api_gateway_authorizer.api_key.id @@ -159,12 +159,12 @@ module "unprotected_endpoints" { method_parameters = { "method.request.path.proxy" = true } integration_parameters = { "integration.request.path.proxy" = "method.request.path.proxy" } - integration_uri = "http://${var.lb_dns_name}/{proxy}" + integration_uri = "http://${module.fargate_autoscaling.lb_dns_name}/{proxy}" } resource "aws_api_gateway_usage_plan" "internal" { - name = substr("internal_apps", 0, 64) + name = substr("internal_apps${local.name_suffix}", 0, 64) api_stages { api_id = aws_api_gateway_rest_api.api_gw_api.id @@ -190,7 +190,7 @@ resource "aws_api_gateway_usage_plan" "internal" { } resource "aws_api_gateway_usage_plan" "external" { - name = substr("external_apps", 0, 64) + name = substr("external_apps${local.name_suffix}", 0, 64) api_stages { api_id = aws_api_gateway_rest_api.api_gw_api.id @@ -220,7 +220,7 @@ resource "aws_api_gateway_deployment" "api_gw_dep" { rest_api_id = aws_api_gateway_rest_api.api_gw_api.id triggers = { - redeployment = "${md5(file("main.tf"))}-${md5(file("${path.module}/../endpoint/main.tf"))}-${md5(file("${path.module}/../resource/main.tf"))}" + redeployment = "${md5(file("api_gateway.tf"))}-${md5(file("./modules/api_gateway/endpoint/main.tf"))}-${md5(file("./modules/api_gateway/resource/main.tf"))}" } depends_on = [ @@ -241,7 +241,7 @@ resource "aws_api_gateway_deployment" "api_gw_dep" { resource "aws_api_gateway_stage" "api_gw_stage" { deployment_id = aws_api_gateway_deployment.api_gw_dep.id rest_api_id = aws_api_gateway_rest_api.api_gw_api.id - stage_name = var.stage_name + stage_name = local.api_gw_stage_name } # Lambda Authorizer @@ -260,28 +260,28 @@ resource "aws_api_gateway_authorizer" "api_key" { resource "aws_iam_role" "invocation_role" { - name = substr("api_gateway_auth_invocation", 0, 64) + name = substr("api_gateway_auth_invocation${local.name_suffix}", 0, 64) path = "/" - assume_role_policy = var.api_gateway_role_policy + assume_role_policy = data.template_file.api_gateway_role_policy.rendered } resource "aws_iam_role_policy" "invocation_policy" { name = "default" role = aws_iam_role.invocation_role.id - policy = var.lambda_invoke_policy + policy = data.local_file.iam_lambda_invoke.content } resource "aws_iam_role" "lambda" { - name = substr("api_gw_authorizer_lambda", 0, 64) + name = substr("api_gw_authorizer_lambda${local.name_suffix}", 0, 64) - assume_role_policy = var.lambda_role_policy + assume_role_policy = data.template_file.lambda_role_policy.rendered } resource "aws_lambda_function" "authorizer" { filename = "api_gateway/api_key_authorizer_lambda.zip" - function_name = substr("api_gateway_authorizer", 0, 64) + function_name = substr("api_gateway_authorizer${local.name_suffix}", 0, 64) runtime = "python3.8" role = aws_iam_role.lambda.arn handler = "lambda_function.handler" @@ -300,23 +300,23 @@ resource "aws_api_gateway_account" "main" { } resource "aws_iam_role" "cloudwatch" { - name = substr("api_gateway_cloudwatch_global", 0, 64) + name = substr("api_gateway_cloudwatch_global${local.name_suffix}", 0, 64) - assume_role_policy = var.api_gateway_role_policy + assume_role_policy = data.template_file.api_gateway_role_policy.rendered } resource "aws_iam_role_policy" "api_gw_cloudwatch" { name = "default" role = aws_iam_role.cloudwatch.id - policy = var.cloudwatch_policy + policy = data.local_file.cloudwatch_log_policy.content } resource "aws_iam_role_policy" "lambda_cloudwatch" { name = "default" role = aws_iam_role.lambda.id - policy = var.cloudwatch_policy + policy = data.local_file.cloudwatch_log_policy.content } resource "aws_api_gateway_method_settings" "general_settings" { diff --git a/terraform/cloudfront.tf b/terraform/cloudfront.tf index 278054ba1..b6f49c301 100644 --- a/terraform/cloudfront.tf +++ b/terraform/cloudfront.tf @@ -1,18 +1,17 @@ resource "aws_cloudfront_distribution" "data_api" { - count = var.create_cloudfront_distribution == true ? 1 : 0 - enabled = true - is_ipv6_enabled = true - price_class = "PriceClass_All" - aliases = var.environment == "dev" ? null : [replace(var.service_url, "https://", "")] + enabled = true + is_ipv6_enabled = true + price_class = "PriceClass_All" + aliases = var.environment == "dev" ? null : [replace(var.service_url, "https://", "")] - origin { - domain_name = local.lb_dns_name + origin { + domain_name = module.fargate_autoscaling.lb_dns_name custom_origin_config { - http_port = 80 - https_port = 443 + http_port = 80 + https_port = 443 origin_keepalive_timeout = 5 - origin_protocol_policy = "http-only" - origin_read_timeout = 30 + origin_protocol_policy = "http-only" + origin_read_timeout = 30 origin_ssl_protocols = [ "TLSv1", "TLSv1.1", @@ -23,83 +22,83 @@ resource "aws_cloudfront_distribution" "data_api" { } ordered_cache_behavior { - path_pattern = "/" - target_origin_id = "load_balancer" - default_ttl = 0 - min_ttl = 0 - max_ttl = 31536000 # 1y - - allowed_methods = ["GET", "HEAD", "OPTIONS", "PUT", "POST", "PATCH", "DELETE"] - cached_methods = ["GET", "HEAD"] + path_pattern = "/" + target_origin_id = "load_balancer" + default_ttl = 0 + min_ttl = 0 + max_ttl = 31536000 # 1y + + allowed_methods = ["GET", "HEAD", "OPTIONS", "PUT", "POST", "PATCH", "DELETE"] + cached_methods = ["GET", "HEAD"] viewer_protocol_policy = "redirect-to-https" forwarded_values { - headers = ["Origin", "Access-Control-Request-Headers", "Access-Control-Request-Method", "x-api-key", "Referer", "Authorization"] - query_string = true + headers = ["Origin", "Access-Control-Request-Headers", "Access-Control-Request-Method", "x-api-key", "Referer", "Authorization"] + query_string = true cookies { - forward = "none" + forward = "none" whitelisted_names = [] } } } ordered_cache_behavior { - path_pattern = "/openapi.json" - target_origin_id = "load_balancer" - default_ttl = 0 - min_ttl = 0 - max_ttl = 31536000 # 1y - - allowed_methods = ["GET", "HEAD", "OPTIONS"] - cached_methods = ["GET", "HEAD"] + path_pattern = "/openapi.json" + target_origin_id = "load_balancer" + default_ttl = 0 + min_ttl = 0 + max_ttl = 31536000 # 1y + + allowed_methods = ["GET", "HEAD", "OPTIONS"] + cached_methods = ["GET", "HEAD"] viewer_protocol_policy = "redirect-to-https" forwarded_values { - headers = ["Origin", "Access-Control-Request-Headers", "Access-Control-Request-Method", "x-api-key", "Referer", "Authorization"] - query_string = true + headers = ["Origin", "Access-Control-Request-Headers", "Access-Control-Request-Method", "x-api-key", "Referer", "Authorization"] + query_string = true cookies { - forward = "none" + forward = "none" whitelisted_names = [] } } } origin { - domain_name = trimsuffix(trimprefix(var.api_gateway_url == "" ? module.api_gateway[0].invoke_url : var.api_gateway_url, "https://"), "/${var.api_gateway_stage_name}") + domain_name = trimsuffix(trimprefix(aws_api_gateway_stage.api_gw_stage.invoke_url, "https://"), "/${local.api_gw_stage_name}") custom_origin_config { - http_port = 80 - https_port = 443 + http_port = 80 + https_port = 443 origin_keepalive_timeout = 5 - origin_protocol_policy = "https-only" - origin_read_timeout = 30 + origin_protocol_policy = "https-only" + origin_read_timeout = 30 origin_ssl_protocols = [ "TLSv1", "TLSv1.1", "TLSv1.2", ] } - origin_id = "api_gateway" - origin_path = "/${var.api_gateway_stage_name}" + origin_id = "api_gateway" + origin_path = "/${local.api_gw_stage_name}" } default_cache_behavior { - target_origin_id = "api_gateway" - default_ttl = 0 - min_ttl = 0 - max_ttl = 31536000 # 1y + target_origin_id = "api_gateway" + default_ttl = 0 + min_ttl = 0 + max_ttl = 31536000 # 1y - allowed_methods = ["GET", "HEAD", "OPTIONS", "PUT", "POST", "PATCH", "DELETE"] - cached_methods = ["GET", "HEAD"] + allowed_methods = ["GET", "HEAD", "OPTIONS", "PUT", "POST", "PATCH", "DELETE"] + cached_methods = ["GET", "HEAD"] viewer_protocol_policy = "redirect-to-https" forwarded_values { - headers = ["Origin", "Access-Control-Request-Headers", "Access-Control-Request-Method", "x-api-key", "Referer", "Authorization"] - query_string = true + headers = ["Origin", "Access-Control-Request-Headers", "Access-Control-Request-Method", "x-api-key", "Referer", "Authorization"] + query_string = true cookies { - forward = "none" + forward = "none" whitelisted_names = [] } } diff --git a/terraform/data.tf b/terraform/data.tf index 6016f0118..8bf2582af 100644 --- a/terraform/data.tf +++ b/terraform/data.tf @@ -74,10 +74,10 @@ data "template_file" "container_definition" { api_token_secret_arn = data.terraform_remote_state.core.outputs.secrets_read-gfw-api-token_arn aws_gcs_key_secret_arn = data.terraform_remote_state.core.outputs.secrets_read-gfw-gee-export_arn - api_gateway_id = var.api_gateway_id == "" ? module.api_gateway[0].api_gateway_id : var.api_gateway_id - api_gateway_external_usage_plan = var.api_gw_external_up_id == "" ? module.api_gateway[0].external_usage_plan_id : var.api_gw_external_up_id - api_gateway_internal_usage_plan = var.api_gw_internal_up_id == "" ? module.api_gateway[0].internal_usage_plan_id : var.api_gw_internal_up_id - api_gateway_stage_name = var.api_gateway_stage_name + api_gateway_id = aws_api_gateway_rest_api.api_gw_api.id + api_gateway_internal_usage_plan = aws_api_gateway_usage_plan.internal.id + api_gateway_external_usage_plan = aws_api_gateway_usage_plan.external.id + api_gateway_stage_name = aws_api_gateway_stage.api_gw_stage.stage_name internal_domains = var.internal_domains # TODO move to core-infrastructure when operational @@ -170,8 +170,3 @@ data "aws_iam_policy_document" "read_new_relic_lic" { effect = "Allow" } } - -data "external" "generate_port" { - count = var.environment == "dev" ? 1 : 0 - program = ["python3", "${path.module}/generate_port.py", local.name_suffix, "30000", "31000"] -} diff --git a/terraform/generate_port.py b/terraform/generate_port.py deleted file mode 100644 index adfd3f284..000000000 --- a/terraform/generate_port.py +++ /dev/null @@ -1,18 +0,0 @@ -import sys -import random -import json - - -try: - input_string = sys.argv[1] - min_port = int(sys.argv[2]) - max_port = int(sys.argv[3]) - - random.seed(input_string) - port = random.randint(min_port, max_port) - - output = {"port": str(port)} - print(json.dumps(output)) -except Exception as e: - print(f"Error: {str(e)}", file=sys.stderr) - sys.exit(1) diff --git a/terraform/main.tf b/terraform/main.tf index 0a0bc164a..d9c6ea145 100644 --- a/terraform/main.tf +++ b/terraform/main.tf @@ -27,7 +27,7 @@ locals { aurora_max_vcpus = local.aurora_instance_class == "db.t3.medium" ? 2 : local.aurora_instance_class == "db.r6g.large" ? 2 : local.aurora_instance_class == "db.r6g.xlarge" ? 4 : local.aurora_instance_class == "db.r6g.2xlarge" ? 8 : local.aurora_instance_class == "db.r6g.4xlarge" ? 16 : local.aurora_instance_class == "db.r6g.8xlarge" ? 32 : local.aurora_instance_class == "db.r6g.16xlarge" ? 64 : local.aurora_instance_class == "db.r5.large" ? 2 : local.aurora_instance_class == "db.r5.xlarge" ? 4 : local.aurora_instance_class == "db.r5.2xlarge" ? 8 : local.aurora_instance_class == "db.r5.4xlarge" ? 16 : local.aurora_instance_class == "db.r5.8xlarge" ? 32 : local.aurora_instance_class == "db.r5.12xlarge" ? 48 : local.aurora_instance_class == "db.r5.16xlarge" ? 64 : local.aurora_instance_class == "db.r5.24xlarge" ? 96 : "" service_url = var.environment == "dev" ? "http://${module.fargate_autoscaling.lb_dns_name}" : var.service_url container_tag = substr(var.git_sha, 0, 7) - lb_dns_name = coalesce(module.fargate_autoscaling.lb_dns_name, var.lb_dns_name) + api_gw_stage_name = substr("deploy${replace(local.name_suffix, "-", "_")}", 0, 64) } # Docker image for FastAPI app @@ -76,25 +76,22 @@ module "batch_tile_cache_image" { module "fargate_autoscaling" { - source = "git::https://github.com/wri/gfw-terraform-modules.git//terraform/modules/fargate_autoscaling?ref=v0.4.2.5" - project = local.project - name_suffix = local.name_suffix - tags = local.fargate_tags - vpc_id = data.terraform_remote_state.core.outputs.vpc_id - private_subnet_ids = data.terraform_remote_state.core.outputs.private_subnet_ids - public_subnet_ids = data.terraform_remote_state.core.outputs.public_subnet_ids - container_name = var.container_name - container_port = var.container_port - desired_count = var.desired_count - fargate_cpu = var.fargate_cpu - fargate_memory = var.fargate_memory - load_balancer_arn = var.load_balancer_arn - load_balancer_security_group = var.load_balancer_security_group - listener_port = var.environment == "dev" ? data.external.generate_port[0].result.port : var.listener_port - auto_scaling_cooldown = var.auto_scaling_cooldown - auto_scaling_max_capacity = var.auto_scaling_max_capacity - auto_scaling_max_cpu_util = var.auto_scaling_max_cpu_util - auto_scaling_min_capacity = var.auto_scaling_min_capacity + source = "git::https://github.com/wri/gfw-terraform-modules.git//terraform/modules/fargate_autoscaling?ref=v0.4.2.3" + project = local.project + name_suffix = local.name_suffix + tags = local.fargate_tags + vpc_id = data.terraform_remote_state.core.outputs.vpc_id + private_subnet_ids = data.terraform_remote_state.core.outputs.private_subnet_ids + public_subnet_ids = data.terraform_remote_state.core.outputs.public_subnet_ids + container_name = var.container_name + container_port = var.container_port + desired_count = var.desired_count + fargate_cpu = var.fargate_cpu + fargate_memory = var.fargate_memory + auto_scaling_cooldown = var.auto_scaling_cooldown + auto_scaling_max_capacity = var.auto_scaling_max_capacity + auto_scaling_max_cpu_util = var.auto_scaling_max_cpu_util + auto_scaling_min_capacity = var.auto_scaling_min_capacity // acm_certificate_arn = var.environment == "dev" ? null : data.terraform_remote_state.core.outputs.acm_certificate security_group_ids = [data.terraform_remote_state.core.outputs.postgresql_security_group_id] task_role_policies = [ @@ -207,13 +204,3 @@ module "batch_job_queues" { aurora_max_vcpus = local.aurora_max_vcpus gcs_secret = data.terraform_remote_state.core.outputs.secrets_read-gfw-gee-export_arn } - -module "api_gateway" { - count = var.api_gateway_id == "" ? 1 : 0 - source = "./modules/api_gateway/gateway" - lb_dns_name = local.lb_dns_name - api_gateway_role_policy = data.template_file.api_gateway_role_policy.rendered - lambda_role_policy = data.template_file.lambda_role_policy.rendered - cloudwatch_policy = data.local_file.cloudwatch_log_policy.content - lambda_invoke_policy = data.local_file.iam_lambda_invoke.content -} diff --git a/terraform/modules/api_gateway/gateway/outputs.tf b/terraform/modules/api_gateway/gateway/outputs.tf deleted file mode 100644 index d74ec3c60..000000000 --- a/terraform/modules/api_gateway/gateway/outputs.tf +++ /dev/null @@ -1,15 +0,0 @@ -output "internal_usage_plan_id" { - value = aws_api_gateway_usage_plan.internal.id -} - -output "external_usage_plan_id" { - value = aws_api_gateway_usage_plan.external.id -} - -output "api_gateway_id" { - value = aws_api_gateway_rest_api.api_gw_api.id -} - -output "invoke_url" { - value = aws_api_gateway_stage.api_gw_stage.invoke_url -} diff --git a/terraform/modules/api_gateway/gateway/variables.tf b/terraform/modules/api_gateway/gateway/variables.tf deleted file mode 100644 index 3f820a5cf..000000000 --- a/terraform/modules/api_gateway/gateway/variables.tf +++ /dev/null @@ -1,64 +0,0 @@ -variable "name" { - type = string - description = "Name of API Gateway instance" - default = "GFWDataAPIGateway" -} - -variable "description" { - type = string - description = "Description of API Gateway Instance" - default = "GFW Data API Gateway" -} - -variable "stage_name" { - type = string - description = "The stage under which the instance will be deployed" - default = "deploy" -} - -variable "download_endpoints" { - type = list(string) - description = "path parts to download endpoints" - - # listing spatial endpoints as gateway needs them explicitly created - # in order to apply endpoint-level throttling to them - default = ["geotiff", "gpkg", "shp"] -} - -variable "lb_dns_name" { - type = string - description = "Application load balancer to forward requests to" -} - -variable "api_gateway_role_policy" { - type = string -} - -variable "lambda_role_policy" { - type = string -} - -variable "cloudwatch_policy" { - type = string -} - -variable "lambda_invoke_policy" { - type = string -} - -variable "api_gateway_usage_plans" { - type = map(any) - description = "Throttling limits for API Gateway" - default = { - internal_apps = { - quota_limit = 10000 # per day - burst_limit = 100 # per second - rate_limit = 200 - } - external_apps = { - quota_limit = 500 - burst_limit = 10 - rate_limit = 20 - } - } -} diff --git a/terraform/outputs.tf b/terraform/outputs.tf index 0681cb88c..af15b104a 100644 --- a/terraform/outputs.tf +++ b/terraform/outputs.tf @@ -1,7 +1,3 @@ output "loadbalancer_dns" { - value = coalesce(module.fargate_autoscaling.lb_dns_name, var.lb_dns_name) -} - -output "generated_port" { - value = length(data.external.generate_port) > 0 ? data.external.generate_port[0].result["port"] : var.listener_port -} + value = module.fargate_autoscaling.lb_dns_name +} \ No newline at end of file diff --git a/terraform/variables.tf b/terraform/variables.tf index 8b56728b9..ecf08bdab 100644 --- a/terraform/variables.tf +++ b/terraform/variables.tf @@ -73,86 +73,40 @@ variable "data_lake_max_vcpus" { default = 576 } +variable "api_gateway_usage_plans" { + type = map(any) + description = "Throttling limits for API Gateway" + default = { + internal_apps = { + quota_limit = 10000 # per day + burst_limit = 100 # per second + rate_limit = 200 + } + external_apps = { + quota_limit = 500 + burst_limit = 10 + rate_limit = 20 + } + } +} + variable "internal_domains" { type = string description = "Comma separated list of client domains for which we set first tier rate limiting." default = "*.globalforestwatch.org,globalforestwatch.org,api.resourcewatch.org,my.gfw-mapbuilder.org,resourcewatch.org" } +variable "download_endpoints" { + type = list(string) + description = "path parts to download endpoints" + + # listing spatial endpoints as gateway needs them explicitly created + # in order to apply endpoint-level throttling to them + default = ["geotiff", "gpkg", "shp"] +} #TODO import from core-infrastructure when operational variable "new_relic_license_key_arn" { type = string description = "New Relic license key ARN" } - -variable "load_balancer_arn" { - type = string - default = "" - description = "Optional Load Balancer to use for fargate cluster. When left blank, a new LB will be created" -} - -variable "load_balancer_security_group" { - type = string - default = "" - description = "Optional secuirty group of load balancer with which the task can communicate. Required if load_blancer_arn is not empty" -} - -variable "listener_port" { - type = number - description = "The default port the Load Balancer should listen to. Will be ignored when acm_certificate is set." - default = 80 -} - -variable "lb_dns_name" { - type = string - default = "" - description = "DNS name of load balancer for API Gateway to forward requests to. API Gateway will first look for one from fargate autoscaling module output before using this." -} - -variable "create_cloudfront_distribution" { - type = bool - default = true -} - -variable "api_gateway_id" { - type = string - description = "ID of API Gateway instance" - default = "" -} - -variable "api_gw_internal_up_id" { - type = string - description = "ID of API Gateway usage plan for internal domains" - default = "" -} - -variable "api_gw_external_up_id" { - type = string - description = "ID of API Gateway usage plan for external domains" - default = "" -} - -variable "api_gateway_name" { - type = string - description = "Name of API Gateway instance" - default = "GFWDataAPIGateway" -} - -variable "api_gateway_description" { - type = string - description = "Description of API Gateway Instance" - default = "GFW Data API Gateway" -} - -variable "api_gateway_stage_name" { - type = string - description = "Deployment stage name of API Gateway instance" - default = "deploy" -} - -variable "api_gateway_url" { - type = string - description = "The invoke url of the API Gateway stage" - default = "" -} diff --git a/terraform/vars/terraform-dev.tfvars b/terraform/vars/terraform-dev.tfvars index 92024ec8d..7a7bebdcd 100644 --- a/terraform/vars/terraform-dev.tfvars +++ b/terraform/vars/terraform-dev.tfvars @@ -1,18 +1,10 @@ -environment = "dev" -log_level = "debug" -service_url = "https://dev-data-api.globalforestwatch.org" # fake, needed for CloudFront -rw_api_url = "https://api.resourcewatch.org" -desired_count = 1 -auto_scaling_min_capacity = 1 -auto_scaling_max_capacity = 5 -lambda_analysis_workspace = "features-lat_lon" -key_pair = "dmannarino_gfw" -create_cloudfront_distribution = false -new_relic_license_key_arn = "arn:aws:secretsmanager:us-east-1:563860007740:secret:newrelic/license_key-lolw24" -load_balancer_security_group = "sg-07c9331c01f8da1c8" -load_balancer_arn = "arn:aws:elasticloadbalancing:us-east-1:563860007740:loadbalancer/app/gfw-data-api-elb-shared-dev-lb/60c3ad42ca6522e3" -lb_dns_name = "gfw-data-api-elb-shared-dev-lb-10091095.us-east-1.elb.amazonaws.com" -api_gateway_id = "ett3a69n8h" -api_gw_external_up_id = "08ipvv" -api_gw_internal_up_id = "ahj8m0" -api_gateway_url = "https://ett3a69n8h.execute-api.us-east-1.amazonaws.com/deploy" +environment = "dev" +log_level = "debug" +service_url = "https://dev-data-api.globalforestwatch.org" # fake, needed for CloudFront +rw_api_url = "https://api.resourcewatch.org" +desired_count = 1 +auto_scaling_min_capacity = 1 +auto_scaling_max_capacity = 5 +lambda_analysis_workspace = "features-lat_lon" +key_pair = "dmannarino_gfw" +new_relic_license_key_arn = "arn:aws:secretsmanager:us-east-1:563860007740:secret:newrelic/license_key-lolw24" diff --git a/tests/crud/test_assets.py b/tests/crud/test_assets.py index a9a5c4ad8..c36340ea1 100644 --- a/tests/crud/test_assets.py +++ b/tests/crud/test_assets.py @@ -10,22 +10,18 @@ create_asset, delete_asset, get_asset, + get_assets, get_assets_by_filter, update_asset, ) from app.crud.datasets import create_dataset from app.crud.versions import create_version from app.errors import RecordAlreadyExistsError, RecordNotFoundError -from app.models.pydantic.asset_metadata import DatabaseTableMetadata from app.models.pydantic.change_log import ChangeLog -from app.models.pydantic.metadata import DatasetMetadata, VersionMetadata +from app.models.pydantic.asset_metadata import DatabaseTableMetadata +from app.models.pydantic.metadata import VersionMetadata, DatasetMetadata -from ..utils import ( - asset_metadata, - dataset_metadata, - raster_asset_metadata, - version_metadata, -) +from ..utils import dataset_metadata, version_metadata, asset_metadata @pytest.mark.asyncio @@ -247,58 +243,3 @@ async def test_assets_metadata(): assert ( asset.metadata.fields[0].data_type == asset_metadata["fields"][0]["data_type"] ) - - -@pytest.mark.asyncio -async def test_band_metadata(): - """Testing band metadata.""" - - dataset = "test" - version = "v1.1.1" - - # Add a dataset - async with ContextEngine("WRITE"): - await create_dataset( - dataset, metadata=DatasetMetadata(**dataset_metadata).dict(by_alias=False) - ) - await create_version( - dataset, - version, - metadata=VersionMetadata(**version_metadata).dict(by_alias=True), - ) - new_asset = await create_asset( - dataset, - version, - asset_type="Raster tile set", - asset_uri="s3://path/to/file", - metadata=raster_asset_metadata, - ) - - asset_id = new_asset.asset_id - assert ( - new_asset.metadata.bands[0].values_table - == raster_asset_metadata["bands"][0]["values_table"] - ) - - updated_band_metadata = { - "bands": [ - { - "pixel_meaning": "year", - "values_table": { - "rows": [ - {"value": 1, "meaning": 2001}, - {"value": 2, "meaning": 2002}, - {"value": 3, "meaning": 2003}, - ], - }, - } - ] - } - - async with ContextEngine("WRITE"): - asset = await update_asset(asset_id, metadata=updated_band_metadata) - - assert ( - asset.metadata.bands[0].values_table - == updated_band_metadata["bands"][0]["values_table"] - ) diff --git a/tests/routes/datasets/test_assets.py b/tests/routes/datasets/test_assets.py index 2a407c1b5..eb45f43c8 100644 --- a/tests/routes/datasets/test_assets.py +++ b/tests/routes/datasets/test_assets.py @@ -33,49 +33,6 @@ s3_client = get_s3_client() -# Create a first asset of a new version with a raster tile set and specified grid and -# pixel meaning. extra_opts specifies any extra options for the creation_options. -async def create_test_default_asset(dataset, version, primary_grid, pixel_meaning, extra_opts, async_client, logs, httpd): - raster_version_payload = { - "creation_options": { - "source_type": "raster", - "source_uri": [ - f"s3://{DATA_LAKE_BUCKET}/{FAKE_INT_DATA_PARAMS['prefix']}/tiles.geojson" - ], - "source_driver": "GeoTIFF", - "data_type": FAKE_INT_DATA_PARAMS["dtype_name"], - "no_data": FAKE_INT_DATA_PARAMS["no_data"], - "pixel_meaning": pixel_meaning, - "grid": primary_grid, - "resampling": "nearest", - "overwrite": True, - }, - } - if extra_opts != None: - raster_version_payload["creation_options"] |= extra_opts - - asset = await create_default_asset( - dataset, - version, - version_payload=raster_version_payload, - async_client=async_client, - execute_batch_jobs=True, - ) - default_asset_id = asset["asset_id"] - - await check_tasks_status(async_client, logs, [default_asset_id]) - - # Verify that the asset and version are in state "saved" - version_resp = await async_client.get(f"/dataset/{dataset}/{version}") - assert version_resp.json()["data"]["status"] == "saved" - - asset_resp = await async_client.get(f"/asset/{default_asset_id}") - assert asset_resp.json()["data"]["status"] == "saved" - - # Flush requests list so we're starting fresh - httpx.delete(f"http://localhost:{httpd.server_port}") - return default_asset_id - @pytest.mark.asyncio async def test_assets(async_client): @@ -224,8 +181,40 @@ async def test_auxiliary_raster_asset(async_client, httpd, logs): for key in pixetl_output_files: s3_client.delete_object(Bucket=DATA_LAKE_BUCKET, Key=key) - await create_test_default_asset(dataset, version, primary_grid, "percent", - { "subset": "90N_000E" }, async_client, logs, httpd) + raster_version_payload = { + "creation_options": { + "source_type": "raster", + "source_uri": [ + f"s3://{DATA_LAKE_BUCKET}/{FAKE_INT_DATA_PARAMS['prefix']}/tiles.geojson" + ], + "source_driver": "GeoTIFF", + "data_type": FAKE_INT_DATA_PARAMS["dtype_name"], + "no_data": FAKE_INT_DATA_PARAMS["no_data"], + "pixel_meaning": "percent", + "grid": primary_grid, + "resampling": "nearest", + "overwrite": True, + "subset": "90N_000E", + } + } + asset = await create_default_asset( + dataset, + version, + version_payload=raster_version_payload, + async_client=async_client, + execute_batch_jobs=True, + ) + asset_id = asset["asset_id"] + + # Verify that the asset and version are in state "saved" + version_resp = await async_client.get(f"/dataset/{dataset}/{version}") + assert version_resp.json()["data"]["status"] == "saved" + + asset_resp = await async_client.get(f"/asset/{asset_id}") + assert asset_resp.json()["data"]["status"] == "saved" + + # Flush requests list so we're starting fresh + httpx.delete(f"http://localhost:{httpd.server_port}") # Try adding a non-default raster tile asset based on the default asset_payload = { @@ -462,8 +451,8 @@ async def test_asset_bad_requests(async_client, batch_client, httpd): ] -# The 5th case in symbology_checks[] is not currently working (see GTC-2735). -@pytest.mark.parametrize("checks", symbology_checks[:4]) +@pytest.mark.skip("Disabling for a few days while replacements are made") +@pytest.mark.parametrize("checks", symbology_checks) @pytest.mark.asyncio async def test_raster_tile_cache_asset(checks, async_client, batch_client, httpd): """""" @@ -473,9 +462,44 @@ async def test_raster_tile_cache_asset(checks, async_client, batch_client, httpd dataset = "test_raster_tile_cache_asset" version = "v1.0.0" primary_grid = "90/27008" + pixel_meaning = "date_conf" + raster_version_payload = { + "creation_options": { + "source_type": "raster", + "source_uri": [ + f"s3://{DATA_LAKE_BUCKET}/{FAKE_INT_DATA_PARAMS['prefix']}/tiles.geojson" + ], + "source_driver": "GeoTIFF", + "data_type": FAKE_INT_DATA_PARAMS["dtype_name"], + "no_data": FAKE_INT_DATA_PARAMS["no_data"], + "pixel_meaning": pixel_meaning, + "grid": primary_grid, + "resampling": "nearest", + "overwrite": True, + }, + } - default_asset_id = await create_test_default_asset(dataset, version, primary_grid, pixel_meaning, None, async_client, logs, httpd) + asset = await create_default_asset( + dataset, + version, + version_payload=raster_version_payload, + async_client=async_client, + execute_batch_jobs=True, + ) + default_asset_id = asset["asset_id"] + + await check_tasks_status(async_client, logs, [default_asset_id]) + + # Verify that the asset and version are in state "saved" + version_resp = await async_client.get(f"/dataset/{dataset}/{version}") + assert version_resp.json()["data"]["status"] == "saved" + + asset_resp = await async_client.get(f"/asset/{default_asset_id}") + assert asset_resp.json()["data"]["status"] == "saved" + + # Flush requests list so we're starting fresh + httpx.delete(f"http://localhost:{httpd.server_port}") await _test_raster_tile_cache( dataset, @@ -608,7 +632,7 @@ async def _test_raster_tile_cache( @pytest.mark.hanging @pytest.mark.asyncio -async def test_asset_stats(async_client, logs, httpd): +async def test_asset_stats(async_client): dataset = "test_asset_stats" version = "v1.0.0" @@ -617,9 +641,31 @@ async def test_asset_stats(async_client, logs, httpd): ) delete_s3_files(DATA_LAKE_BUCKET, pixetl_output_files_prefix) - await create_test_default_asset(dataset, version, "90/27008", "percent", - { "compute_histogram": True, "compute_stats": True }, - async_client, logs, httpd) + raster_version_payload = { + "creation_options": { + "source_type": "raster", + "source_uri": [ + f"s3://{DATA_LAKE_BUCKET}/{FAKE_INT_DATA_PARAMS['prefix']}/tiles.geojson" + ], + "source_driver": "GeoTIFF", + "data_type": FAKE_INT_DATA_PARAMS["dtype_name"], + "no_data": FAKE_INT_DATA_PARAMS["no_data"], + "pixel_meaning": "percent", + "grid": "90/27008", + "resampling": "nearest", + "overwrite": True, + "compute_histogram": True, + "compute_stats": True, + }, + } + + await create_default_asset( + dataset, + version, + version_payload=raster_version_payload, + async_client=async_client, + execute_batch_jobs=True, + ) resp = await async_client.get(f"/dataset/{dataset}/{version}/assets") asset_id = resp.json()["data"][0]["asset_id"] @@ -637,7 +683,7 @@ async def test_asset_stats(async_client, logs, httpd): @pytest.mark.hanging @pytest.mark.asyncio -async def test_asset_stats_no_histo(async_client, logs, httpd): +async def test_asset_stats_no_histo(async_client): dataset = "test_asset_stats_no_histo" version = "v1.0.0" @@ -646,9 +692,31 @@ async def test_asset_stats_no_histo(async_client, logs, httpd): ) delete_s3_files(DATA_LAKE_BUCKET, pixetl_output_files_prefix) - await create_test_default_asset(dataset, version, "90/27008", "percent", - { "compute_histogram": False, "compute_stats": True }, - async_client, logs, httpd) + raster_version_payload = { + "creation_options": { + "source_type": "raster", + "source_uri": [ + f"s3://{DATA_LAKE_BUCKET}/{FAKE_INT_DATA_PARAMS['prefix']}/tiles.geojson" + ], + "source_driver": "GeoTIFF", + "data_type": FAKE_INT_DATA_PARAMS["dtype_name"], + "no_data": FAKE_INT_DATA_PARAMS["no_data"], + "pixel_meaning": "percent", + "grid": "90/27008", + "resampling": "nearest", + "overwrite": True, + "compute_histogram": False, + "compute_stats": True, + }, + } + + await create_default_asset( + dataset, + version, + version_payload=raster_version_payload, + async_client=async_client, + execute_batch_jobs=True, + ) resp = await async_client.get(f"/dataset/{dataset}/{version}/assets") asset_id = resp.json()["data"][0]["asset_id"] @@ -662,7 +730,7 @@ async def test_asset_stats_no_histo(async_client, logs, httpd): @pytest.mark.hanging @pytest.mark.asyncio -async def test_asset_extent(async_client, logs, httpd): +async def test_asset_extent(async_client): dataset = "test_asset_extent" version = "v1.0.0" @@ -671,9 +739,32 @@ async def test_asset_extent(async_client, logs, httpd): ) delete_s3_files(DATA_LAKE_BUCKET, pixetl_output_files_prefix) - await create_test_default_asset(dataset, version, "90/27008", "percent", - { "compute_histogram": False, "compute_stats": False }, - async_client, logs, httpd) + raster_version_payload = { + "creation_options": { + "source_type": "raster", + "source_uri": [ + f"s3://{DATA_LAKE_BUCKET}/{FAKE_INT_DATA_PARAMS['prefix']}/tiles.geojson" + ], + "source_driver": "GeoTIFF", + "data_type": FAKE_INT_DATA_PARAMS["dtype_name"], + "no_data": FAKE_INT_DATA_PARAMS["no_data"], + "pixel_meaning": "percent", + "grid": "90/27008", + "resampling": "nearest", + "overwrite": True, + "compute_histogram": False, + "compute_stats": False, + }, + } + + await create_default_asset( + dataset, + version, + version_payload=raster_version_payload, + async_client=async_client, + execute_batch_jobs=True, + ) + expected_coords = [ [[0.0, 90.0], [90.0, 90.0], [90.0, 0.0], [0.0, 0.0], [0.0, 90.0]] ] @@ -694,7 +785,7 @@ async def test_asset_extent(async_client, logs, httpd): @pytest.mark.hanging @pytest.mark.asyncio -async def test_asset_extent_stats_empty(async_client, logs, httpd): +async def test_asset_extent_stats_empty(async_client): dataset = "test_asset_extent_stats_empty" version = "v1.0.0" @@ -703,9 +794,31 @@ async def test_asset_extent_stats_empty(async_client, logs, httpd): ) delete_s3_files(DATA_LAKE_BUCKET, pixetl_output_files_prefix) - await create_test_default_asset(dataset, version, "90/27008", "percent", - { "compute_histogram": False, "compute_stats": False }, - async_client, logs, httpd) + raster_version_payload = { + "creation_options": { + "source_type": "raster", + "source_uri": [ + f"s3://{DATA_LAKE_BUCKET}/{FAKE_INT_DATA_PARAMS['prefix']}/tiles.geojson" + ], + "source_driver": "GeoTIFF", + "data_type": FAKE_INT_DATA_PARAMS["dtype_name"], + "no_data": FAKE_INT_DATA_PARAMS["no_data"], + "pixel_meaning": "percent", + "grid": "90/27008", + "resampling": "nearest", + "overwrite": True, + "compute_histogram": False, + "compute_stats": False, + }, + } + + await create_default_asset( + dataset, + version, + version_payload=raster_version_payload, + async_client=async_client, + execute_batch_jobs=True, + ) resp = await async_client.get(f"/dataset/{dataset}/{version}/assets") asset_id = resp.json()["data"][0]["asset_id"] @@ -976,49 +1089,3 @@ async def test_raster_asset_payloads_vector_source(async_client): ) resp_json = create_asset_resp.json() assert resp_json["status"] == "success" - - -asset_errors = [ - ( "999", 400 ), - ( "12345678-1234-1234-1234-123456789abc", 404 ) -] - -@pytest.mark.parametrize("asset_error", asset_errors) -@pytest.mark.asyncio -async def test_raster_tile_cache_nonexistent_asset(asset_error, async_client, batch_client, httpd): - """Test error cases where the source_asset_id doesn't exist""" - _, logs = batch_client - - # Add a dataset, version, and default (raster tile set) asset - dataset = "test_raster_tile_cache_asset" - version = "v1.0.0" - primary_grid = "90/27008" - pixel_meaning = "date_conf" - - await create_test_default_asset(dataset, version, primary_grid, pixel_meaning, None, async_client, logs, httpd) - - default_asset_id = asset_error[0] - symbology = symbology_checks[0]["symbology"] - asset_payload = { - "asset_type": "Raster tile cache", - "is_managed": True, - "creation_options": { - "source_asset_id": default_asset_id, - "min_zoom": 0, - "max_zoom": 2, - "max_static_zoom": 1, - "symbology": symbology, - "implementation": symbology["type"], - }, - "metadata": asset_metadata, - } - - create_asset_resp = await async_client.post( - f"/dataset/{dataset}/{version}/assets", json=asset_payload - ) - resp_json = create_asset_resp.json() - # - print(f"CREATE TILE CACHE ASSET RESPONSE: {resp_json}") - assert resp_json["status"] == "failed" - assert create_asset_resp.status_code == asset_error[1] - diff --git a/tests/routes/datasets/test_versions.py b/tests/routes/datasets/test_versions.py old mode 100755 new mode 100644 index 35fcf0c82..c96b8eebb --- a/tests/routes/datasets/test_versions.py +++ b/tests/routes/datasets/test_versions.py @@ -310,7 +310,7 @@ async def test_invalid_source_uri(async_client: AsyncClient): assert response.json()["status"] == "failed" assert ( response.json()["message"] - == f"Cannot access all of the source files (non-existent or access denied). Invalid sources: ['{bad_uri}']" + == f"Cannot access all of the source files. Invalid sources: ['{bad_uri}']" ) # Create a version with a valid source_uri so we have something to append to @@ -333,7 +333,7 @@ async def test_invalid_source_uri(async_client: AsyncClient): assert response.json()["status"] == "failed" assert ( response.json()["message"] - == f"Cannot access all of the source files (non-existent or access denied). Invalid sources: ['{bad_uri}']" + == f"Cannot access all of the source files. Invalid sources: ['{bad_uri}']" ) # Test appending to a version that DOESN'T exist diff --git a/tests/tasks/test_vector_tile_assets.py b/tests/tasks/test_vector_tile_assets.py index 5fcde34a3..046a7e545 100644 --- a/tests/tasks/test_vector_tile_assets.py +++ b/tests/tasks/test_vector_tile_assets.py @@ -1,4 +1,3 @@ -import csv import json from unittest.mock import patch from urllib.parse import urlparse @@ -131,6 +130,56 @@ async def test_vector_tile_asset( ) assert resp["KeyCount"] == 0 + ########### + # 1x1 Grid + ########### + ### Create static tile cache asset + httpx.delete(f"http://localhost:{PORT}") + + input_data = { + "asset_type": "1x1 grid", + "is_managed": True, + "creation_options": {}, + } + + response = await async_client.post( + f"/dataset/{dataset}/{version}/assets", json=input_data + ) + assert response.status_code == 202 + asset_id = response.json()["data"]["asset_id"] + + # get tasks id from change log and wait until finished + response = await async_client.get(f"/asset/{asset_id}/change_log") + + assert response.status_code == 200 + tasks = json.loads(response.json()["data"][-1]["detail"]) + task_ids = [task["job_id"] for task in tasks] + + # make sure, all jobs completed + status = await poll_jobs(task_ids, logs=logs, async_client=async_client) + assert status == "saved" + + response = await async_client.get(f"/dataset/{dataset}/{version}/assets") + assert response.status_code == 200 + + # there should be 4 assets now (geodatabase table, dynamic vector tile cache and static vector tile cache (already deleted ndjson) + assert len(response.json()["data"]) == 4 + + # Check if file is in tile cache + resp = s3_client.list_objects_v2( + Bucket=DATA_LAKE_BUCKET, Prefix=f"{dataset}/{version}/vector/" + ) + assert resp["KeyCount"] == 1 + + response = await async_client.delete(f"/asset/{asset_id}") + assert response.status_code == 200 + + # Check if file was deleted + resp = s3_client.list_objects_v2( + Bucket=DATA_LAKE_BUCKET, Prefix=f"{dataset}/{version}/vector/" + ) + assert resp["KeyCount"] == 0 + ########### # Vector file export ########### @@ -201,174 +250,3 @@ async def test_vector_tile_asset( ) assert response.status_code == 200 assert mocked_cloudfront_client.called - - -@pytest.mark.asyncio -async def test_vector_tile_asset_1x1_grid( - batch_client, async_client: AsyncClient, monkeypatch -): - _, logs = batch_client - - ############################ - # Setup test - ############################ - - dataset = "test" - - version = "v1.1.1" - input_data = { - "creation_options": { - "source_type": "vector", - "source_uri": [f"s3://{BUCKET}/{SHP_NAME}"], - "source_driver": "ESRI Shapefile", - "create_dynamic_vector_tile_cache": False, - }, - } - - await create_default_asset( - dataset, - version, - version_payload=input_data, - async_client=async_client, - logs=logs, - execute_batch_jobs=True, - skip_dataset=False, - ) - - httpx.delete(f"http://localhost:{PORT}") - - ########### - # 1x1 Grid - ########### - input_data = { - "asset_type": "1x1 grid", - "creation_options": { - "field_attributes": [ - "gfw_geostore_id" - ] - }, - } - - response = await async_client.post( - f"/dataset/{dataset}/{version}/assets", json=input_data - ) - assert response.status_code == 202 - asset_id = response.json()["data"]["asset_id"] - - # Get task ids from change log and wait until finished - changelog_response = await async_client.get(f"/asset/{asset_id}/change_log") - tasks_dict = json.loads(changelog_response.json()["data"][-1]["detail"]) - task_ids = [task["job_id"] for task in tasks_dict] - - # Make sure all jobs completed - status = await poll_jobs(task_ids, logs=logs, async_client=async_client) - assert status == "saved" - - # There should be 2 assets now (geodatabase table and 1x1 TSV) - assets_response = await async_client.get(f"/dataset/{dataset}/{version}/assets") - assert len(assets_response.json()["data"]) == 2 - - # Verify the TSV was created - s3_client = get_s3_client() - expected_prefix = f"{dataset}/{version}/vector/epsg-4326" - resp = s3_client.list_objects_v2( - Bucket=DATA_LAKE_BUCKET, Prefix=expected_prefix - ) - assert resp["KeyCount"] == 1 - - # Sanity-check the TSV - s3_client.download_file( - DATA_LAKE_BUCKET, - f"{expected_prefix}/{dataset}_{version}_1x1.tsv", - "/tmp/1x1.tsv" - ) - with open("/tmp/1x1.tsv", "r") as f: - reader = csv.reader(f, dialect=csv.excel_tab) - header = next(reader) - assert header == ["gfw_geostore_id", 'tcl', 'glad', 'geom'] - - assert next(reader, None) is not None - - # Make sure deleting the asset deletes the TSV - response = await async_client.delete(f"/asset/{asset_id}") - assert response.status_code == 200 - - resp = s3_client.list_objects_v2( - Bucket=DATA_LAKE_BUCKET, Prefix=expected_prefix - ) - assert resp["KeyCount"] == 0 - - -@pytest.mark.asyncio -async def test_vector_tile_asset_1x1_grid_include_tile_id( - batch_client, async_client: AsyncClient, monkeypatch -): - _, logs = batch_client - - ############################ - # Setup test - ############################ - - dataset = "test" - - version = "v1.1.1" - input_data = { - "creation_options": { - "source_type": "vector", - "source_uri": [f"s3://{BUCKET}/{SHP_NAME}"], - "source_driver": "ESRI Shapefile", - "create_dynamic_vector_tile_cache": False, - }, - } - - await create_default_asset( - dataset, - version, - version_payload=input_data, - async_client=async_client, - logs=logs, - execute_batch_jobs=True, - skip_dataset=False, - ) - - httpx.delete(f"http://localhost:{PORT}") - - ########### - # 1x1 Grid - ########### - input_data = { - "asset_type": "1x1 grid", - "creation_options": { - "include_tile_id": True, - "field_attributes": [ - "gfw_geostore_id" - ] - }, - } - - response = await async_client.post( - f"/dataset/{dataset}/{version}/assets", json=input_data - ) - assert response.status_code == 202 - asset_id = response.json()["data"]["asset_id"] - - # Get task ids from change log and wait until finished - changelog_response = await async_client.get(f"/asset/{asset_id}/change_log") - tasks_dict = json.loads(changelog_response.json()["data"][-1]["detail"]) - task_ids = [task["job_id"] for task in tasks_dict] - await poll_jobs(task_ids, logs=logs, async_client=async_client) - - # Sanity-check the TSV - s3_client = get_s3_client() - expected_prefix = f"{dataset}/{version}/vector/epsg-4326" - s3_client.download_file( - DATA_LAKE_BUCKET, - f"{expected_prefix}/{dataset}_{version}_1x1.tsv", - "/tmp/1x1.tsv" - ) - with open("/tmp/1x1.tsv", "r") as f: - reader = csv.reader(f, dialect=csv.excel_tab) - header = next(reader) - assert header == ["gfw_geostore_id", "tile_id", "tcl", "glad", "geom"] - - assert "60N_010E" in next(reader) diff --git a/tests/utils.py b/tests/utils.py index c3dba73e6..307578ea4 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -39,20 +39,6 @@ "fields": [{"name": "field1", "data_type": "numeric", "unit": "meters"}] } -raster_asset_metadata = { - "bands": [ - { - "pixel_meaning": "year", - "values_table": { - "rows": [ - {"value": 1, "meaning": 2001}, - {"value": 2, "meaning": 2002}, - ], - }, - } - ] -} - generic_version_payload = { "metadata": version_metadata, "creation_options": { diff --git a/tests_v2/conftest.py b/tests_v2/conftest.py index 99c052914..33fbb3a53 100755 --- a/tests_v2/conftest.py +++ b/tests_v2/conftest.py @@ -189,7 +189,6 @@ async def create_vector_source_version( monkeypatch.setattr(batch, "submit_batch_job", batch_job_mock.submit_batch_job) monkeypatch.setattr(vector_source_assets, "is_zipped", bool_function_closure(False)) monkeypatch.setattr(delete_assets, "delete_s3_objects", int_function_closure(1)) - monkeypatch.setattr(delete_assets, "expire_s3_objects", dict_function_closure({})) monkeypatch.setattr(versions, "flush_cloudfront_cache", dict_function_closure({})) monkeypatch.setattr( delete_assets, "flush_cloudfront_cache", dict_function_closure({}) @@ -249,7 +248,6 @@ async def generic_raster_version( monkeypatch.setattr(versions, "_verify_source_file_access", void_coroutine) monkeypatch.setattr(batch, "submit_batch_job", batch_job_mock.submit_batch_job) monkeypatch.setattr(delete_assets, "delete_s3_objects", int_function_closure(1)) - monkeypatch.setattr(delete_assets, "expire_s3_objects", dict_function_closure({})) monkeypatch.setattr(raster_tile_set_assets, "get_extent", get_extent_mocked) monkeypatch.setattr( delete_assets, "flush_cloudfront_cache", dict_function_closure({}) diff --git a/tests_v2/unit/app/routes/analysis/test_analysis.py b/tests_v2/unit/app/routes/analysis/test_analysis.py index 1def7fb39..d8dcd6673 100644 --- a/tests_v2/unit/app/routes/analysis/test_analysis.py +++ b/tests_v2/unit/app/routes/analysis/test_analysis.py @@ -81,9 +81,6 @@ async def test_analysis_with_huge_geostore( async def test_raster_analysis_payload_shape( generic_dataset, async_client: AsyncClient, monkeypatch: MonkeyPatch ): - """Note that this test depends on the output of _get_data_environment - which will likely have cached values from other tests, so we clear it.""" - dataset_name, _ = generic_dataset pixel_meaning: str = "date_conf" no_data_value = 0 @@ -106,9 +103,6 @@ async def test_raster_analysis_payload_shape( ) monkeypatch.setattr(geostore.rw_api, "get_geostore", mock_rw_get_geostore) - # The other tests will have polluted the data env cache. Clear it. - queries._get_data_environment.cache_clear() - _ = await async_client.get( f"/analysis/zonal/17076d5ea9f214a5bdb68cc40433addb?geostore_origin=rw&group_by=umd_tree_cover_loss__year&filters=is__umd_regional_primary_forest_2001&filters=umd_tree_cover_density_2000__30&sum=area__ha&start_date=2001" ) diff --git a/tests_v2/unit/app/routes/datasets/test_version.py b/tests_v2/unit/app/routes/datasets/test_version.py index 8d4b570c6..19f5b33bf 100644 --- a/tests_v2/unit/app/routes/datasets/test_version.py +++ b/tests_v2/unit/app/routes/datasets/test_version.py @@ -1,7 +1,6 @@ import pytest from _pytest.monkeypatch import MonkeyPatch from httpx import AsyncClient -import re from app.routes.datasets import versions from app.tasks import batch @@ -18,14 +17,6 @@ async def test_get_version(async_client: AsyncClient, generic_vector_source_vers assert resp.status_code == 200 data = resp.json() assert_jsend(data) - first_asset = data["data"]["assets"][0] - assert len(first_asset) == 3 - assert first_asset[0] == "Geo database table" - # Check asset_id looks reasonable - asset_id = first_asset[2] - assert len(asset_id) > 30 - pattern = re.compile(r'^[a-zA-Z0-9-]+$') - assert bool(pattern.match(asset_id)) @pytest.mark.asyncio diff --git a/tests_v2/unit/app/utils/test_fields.py b/tests_v2/unit/app/utils/test_fields.py deleted file mode 100644 index c3f27e4da..000000000 --- a/tests_v2/unit/app/utils/test_fields.py +++ /dev/null @@ -1,92 +0,0 @@ -from unittest.mock import AsyncMock - -import pytest -from _pytest.monkeypatch import MonkeyPatch - -from app.crud.assets import get_default_asset -from app.models.pydantic.creation_options import StaticVector1x1CreationOptions -from app.utils import fields - - -@pytest.mark.asyncio -async def test_get_field_attributes_no_specified_fields(monkeypatch: MonkeyPatch): - creation_options = {} - - mock_get_default_asset = AsyncMock(get_default_asset) - monkeypatch.setattr(fields, "get_default_asset", mock_get_default_asset) - - mock_get_asset_fields_dicts = AsyncMock(get_default_asset) - mock_get_asset_fields_dicts.return_value = [ - {"name": "something_wacky", "is_feature_info": True}, - {"name": "gid_2", "is_feature_info": True}, - {"name": "not_feature_field", "is_feature_info": False}, - {"name": "something_else", "is_feature_info": True}, - ] - monkeypatch.setattr(fields, "get_asset_fields_dicts", mock_get_asset_fields_dicts) - - foo = await fields.get_field_attributes("some_dataset", "v1.5", StaticVector1x1CreationOptions(**creation_options)) - assert foo == [ - {"name": "something_wacky", "is_feature_info": True}, - {"name": "gid_2", "is_feature_info": True}, - {"name": "something_else", "is_feature_info": True}, - ] - - -@pytest.mark.asyncio -async def test_get_field_attributes_respects_requested_order_1(monkeypatch: MonkeyPatch): - creation_options = { - "include_tile_id": True, - "field_attributes": [ - "gfw_geostore_id", - "gid_0", - "gid_1", - "gid_2" - ] - } - - mock_get_default_asset = AsyncMock(get_default_asset) - monkeypatch.setattr(fields, "get_default_asset", mock_get_default_asset) - - mock_get_asset_fields_dicts = AsyncMock(get_default_asset) - mock_get_asset_fields_dicts.return_value = [ - {"name": "something_wacky", "is_feature_info": True}, - {"name": "gid_2", "is_feature_info": True}, - {"name": "gid_0", "is_feature_info": True}, - ] - monkeypatch.setattr(fields, "get_asset_fields_dicts", mock_get_asset_fields_dicts) - - foo = await fields.get_field_attributes("some_dataset", "v1.5", StaticVector1x1CreationOptions(**creation_options)) - assert foo == [ - {"name": "gid_0", "is_feature_info": True}, - {"name": "gid_2", "is_feature_info": True}, - ] - - -@pytest.mark.asyncio -async def test_get_field_attributes_respects_requested_order_2(monkeypatch: MonkeyPatch): - creation_options = { - "include_tile_id": True, - "field_attributes": [ - "gfw_geostore_id", - "gid_0", - "gid_1", - "gid_2" - ] - } - - mock_get_default_asset = AsyncMock(get_default_asset) - monkeypatch.setattr(fields, "get_default_asset", mock_get_default_asset) - - mock_get_asset_fields_dicts = AsyncMock(get_default_asset) - mock_get_asset_fields_dicts.return_value = [ - {"name": "something_wacky", "is_feature_info": True}, - {"name": "gid_2", "is_feature_info": True}, - {"name": "gid_0", "is_feature_info": True}, - ] - monkeypatch.setattr(fields, "get_asset_fields_dicts", mock_get_asset_fields_dicts) - - foo = await fields.get_field_attributes("some_dataset", "v1.5", StaticVector1x1CreationOptions(**creation_options)) - assert foo == [ - {"name": "gid_0", "is_feature_info": True}, - {"name": "gid_2", "is_feature_info": True}, - ] diff --git a/tests_v2/unit/app/utils/test_google.py b/tests_v2/unit/app/utils/test_google.py index beaac1f16..6082a6f67 100644 --- a/tests_v2/unit/app/utils/test_google.py +++ b/tests_v2/unit/app/utils/test_google.py @@ -1,54 +1,92 @@ -from typing import List -from unittest.mock import Mock +import random +from collections import defaultdict +from typing import DefaultDict, List, Optional +import pytest from _pytest.monkeypatch import MonkeyPatch +from google.cloud import storage -from app.utils import google from app.utils.google import get_gs_files -good_bucket: str = "good_bucket" -good_prefix: str = "good_prefix" -all_the_files: List[str] = [ - f"{good_prefix}/irrelevant.mp3", - f"{good_prefix}/something.csv", - f"{good_prefix}/world.tif" -] +class MockBlob: + name: str -all_the_files_gdal_notation: List[str] = [ - f"/vsigs/{good_bucket}/{x}" for x in all_the_files -] + def __init__(self, name): + self.name = name -def test_get_matching_gs_files_no_filtering(monkeypatch: MonkeyPatch): - mock_get_prefix_objects = Mock(return_value=all_the_files) - monkeypatch.setattr(google, "get_prefix_objects", mock_get_prefix_objects) +class MockStorageClient: + blob_store: DefaultDict[str, List[MockBlob]] = defaultdict(list) - keys = get_gs_files(good_bucket, good_prefix) - assert len(keys) == 3 - assert set(keys) == set(all_the_files_gdal_notation) + def from_service_account_json(self, _: str): + return self + + def add_blobs(self, bucket: str, blob_names: List[str]): + self.blob_store[bucket] += [MockBlob(blob_name) for blob_name in blob_names] + + def list_blobs(self, bucket: str, prefix: str, max_results: Optional[int] = None): + blobs = [ + blob for blob in self.blob_store[bucket] if blob.name.startswith(prefix) + ] + + if max_results is not None: + return random.choices(blobs, k=max_results) + return blobs -def test_get_matching_gs_files_match_extensions(monkeypatch: MonkeyPatch): - mock_get_prefix_objects = Mock(return_value=all_the_files) - monkeypatch.setattr(google, "get_prefix_objects", mock_get_prefix_objects) +@pytest.mark.asyncio +async def test_get_gs_files(monkeypatch: MonkeyPatch): + good_bucket = "good_bucket" + good_prefix = "good_prefix" - keys = get_gs_files(good_bucket, good_prefix, extensions=[".tif"]) - assert keys == [f"/vsigs/{good_bucket}/{good_prefix}/world.tif"] + blob_store_client = MockStorageClient() + monkeypatch.setattr(storage, "Client", blob_store_client) -def test_get_matching_gs_files_no_matches(monkeypatch: MonkeyPatch): - mock_get_prefix_objects = Mock(return_value=all_the_files) - monkeypatch.setattr(google, "get_prefix_objects", mock_get_prefix_objects) + blob_store_client.add_blobs(good_bucket, [f"{good_prefix}/world.tif"]) + + keys = get_gs_files(good_bucket, good_prefix) + assert len(keys) == 1 + assert keys[0] == f"/vsigs/{good_bucket}/{good_prefix}/world.tif" keys = get_gs_files(good_bucket, good_prefix, extensions=[".pdf"]) - assert keys == [] + assert len(keys) == 0 + + keys = get_gs_files(good_bucket, "bad_prefix") + assert len(keys) == 0 + keys = get_gs_files("bad_bucket", "doesnt_matter") + assert len(keys) == 0 -def test_get_matching_gs_files_early_exit(monkeypatch: MonkeyPatch): - mock_get_prefix_objects = Mock(return_value=all_the_files) - monkeypatch.setattr(google, "get_prefix_objects", mock_get_prefix_objects) + blob_store_client.add_blobs(good_bucket, [f"{good_prefix}/another_world.csv"]) + + keys = get_gs_files(good_bucket, good_prefix) + assert len(keys) == 2 + assert f"/vsigs/{good_bucket}/{good_prefix}/another_world.csv" in keys + assert f"/vsigs/{good_bucket}/{good_prefix}/world.tif" in keys + + keys = get_gs_files(good_bucket, good_prefix, extensions=[".csv"]) + assert len(keys) == 1 + assert keys[0] == f"/vsigs/{good_bucket}/{good_prefix}/another_world.csv" + + keys = get_gs_files(good_bucket, good_prefix, limit=1) + assert len(keys) == 1 + assert ( + f"/vsigs/{good_bucket}/{good_prefix}/another_world.csv" in keys + or f"/vsigs/{good_bucket}/{good_prefix}/world.tif" in keys + ) + + blob_store_client.add_blobs(good_bucket, [f"{good_prefix}/coverage_layer.tif"]) + keys = get_gs_files(good_bucket, good_prefix) + assert len(keys) == 3 + assert f"/vsigs/{good_bucket}/{good_prefix}/another_world.csv" in keys + assert f"/vsigs/{good_bucket}/{good_prefix}/coverage_layer.tif" in keys + assert f"/vsigs/{good_bucket}/{good_prefix}/world.tif" in keys - keys = get_gs_files(good_bucket, good_prefix, exit_after_max=1) + keys = get_gs_files(good_bucket, good_prefix, exit_after_max=1, extensions=[".tif"]) assert len(keys) == 1 - assert keys[0] in all_the_files_gdal_notation + assert ( + f"/vsigs/{good_bucket}/{good_prefix}/coverage_layer.tif" in keys + or f"/vsigs/{good_bucket}/{good_prefix}/world.tif" in keys + )