From e41e7d6cfa33890b4e682abe18c065f79369c23f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Jul 2024 14:13:19 +0200 Subject: [PATCH] chore(deps): refresh pip-compile outputs (#748) * chore(deps): refresh pip-compile outputs * fix(boto): fixes aws mock methods --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: nazarfil --- hexa/catalog/tests/test_models.py | 5 +- hexa/files/tests/test_api.py | 4 +- .../tests/schema/test_fileset.py | 8 +- .../tests/test_dataworker.py | 35 ++-- hexa/plugins/connector_s3/tests/test_api.py | 18 +-- .../connector_s3/tests/test_credentials.py | 17 +- .../plugins/connector_s3/tests/test_models.py | 8 +- hexa/plugins/connector_s3/tests/test_sync.py | 23 +-- requirements.txt | 153 +++++++++--------- 9 files changed, 121 insertions(+), 150 deletions(-) diff --git a/hexa/catalog/tests/test_models.py b/hexa/catalog/tests/test_models.py index 05e3bcbfd..8978c6bd5 100644 --- a/hexa/catalog/tests/test_models.py +++ b/hexa/catalog/tests/test_models.py @@ -2,7 +2,7 @@ from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist from django.test import override_settings -from moto import mock_s3, mock_sts +from moto import mock_aws from hexa.core.test import TestCase from hexa.plugins.connector_s3.models import Bucket, BucketPermission @@ -101,8 +101,7 @@ def setUpTestData(cls): Membership.objects.create(team=cls.TEAM2, user=cls.USER_REGULAR_2) cls.BUCKET = Bucket.objects.create(name="test-bucket") - @mock_s3 - @mock_sts + @mock_aws def test_permission_update(self): # we start the test with one index: the bucket self.assertEqual(Index.objects.count(), 1) diff --git a/hexa/files/tests/test_api.py b/hexa/files/tests/test_api.py index e748a8360..28123be0d 100644 --- a/hexa/files/tests/test_api.py +++ b/hexa/files/tests/test_api.py @@ -4,7 +4,7 @@ import botocore from django.core.exceptions import ValidationError from django.test import override_settings -from moto import mock_s3 +from moto import mock_aws from hexa.core.test import TestCase @@ -32,7 +32,7 @@ def create_mock_client(*args, **kwargs): self.addCleanup(patcher.stop) if self.get_type() == "s3": - mock = mock_s3() + mock = mock_aws() self.mock_backend = mock.start() self.addCleanup(mock.stop) diff --git a/hexa/plugins/connector_accessmod/tests/schema/test_fileset.py b/hexa/plugins/connector_accessmod/tests/schema/test_fileset.py index 8d13e93ed..63b89b827 100644 --- a/hexa/plugins/connector_accessmod/tests/schema/test_fileset.py +++ b/hexa/plugins/connector_accessmod/tests/schema/test_fileset.py @@ -2,7 +2,7 @@ from django.conf import settings from django.test import override_settings -from moto import mock_s3, mock_sts +from moto import mock_aws from hexa.core.test import GraphQLTestCase from hexa.plugins.connector_accessmod.models import ( @@ -431,8 +431,7 @@ def test_accessmod_filesets_empty(self): }, ) - @mock_s3 - @mock_sts + @mock_aws def test_full_accessmod_upload_workflow(self): self.client.force_login(self.USER_GREG) @@ -853,8 +852,7 @@ def test_accessmod_fileset_roles(self): r["data"]["accessmodFilesetRoles"][0], ) - @mock_s3 - @mock_sts + @mock_aws def test_prepare_fileset_visualization(self): self.client.force_login(self.USER_GREG) diff --git a/hexa/plugins/connector_accessmod/tests/test_dataworker.py b/hexa/plugins/connector_accessmod/tests/test_dataworker.py index 8545ffe1a..f7ee246c7 100644 --- a/hexa/plugins/connector_accessmod/tests/test_dataworker.py +++ b/hexa/plugins/connector_accessmod/tests/test_dataworker.py @@ -3,7 +3,7 @@ import boto3 import rasterio from django.test import override_settings -from moto import mock_s3, mock_sts +from moto import mock_aws from rasterio import DatasetReader from hexa.core.test import TestCase @@ -177,8 +177,7 @@ def setUpTestData(cls): # S3 setup cls.BUCKET = Bucket.objects.create(name="test-bucket") - @mock_s3 - @mock_sts + @mock_aws def test_validate_no_file(self): validate_fileset_job( None, MockJob(args={"fileset_id": str(self.dem_empty_fs.id)}) @@ -186,8 +185,7 @@ def test_validate_no_file(self): self.dem_empty_fs.refresh_from_db() self.assertEqual(self.dem_empty_fs.status, FilesetStatus.INVALID) - @mock_s3 - @mock_sts + @mock_aws def test_validate_dem(self): dem_file = os.path.dirname(__file__) + "/data/dem.tif" dem_data = open(dem_file, "rb").read() @@ -216,8 +214,7 @@ def test_validate_dem(self): ) self.assertEqual(self.dem_fs.status, FilesetStatus.VALID) - @mock_s3 - @mock_sts + @mock_aws def test_validate_dem_wrong(self): dem_file = os.path.dirname(__file__) + "/data/dem_invalid.tif" dem_data = open(dem_file, "rb").read() @@ -235,8 +232,7 @@ def test_validate_dem_wrong(self): ) self.assertEqual(self.dem_fs.status, FilesetStatus.INVALID) - @mock_s3 - @mock_sts + @mock_aws def test_validate_facilities(self): facilities_file = os.path.dirname(__file__) + "/data/facilities.gpkg" facilities_data = open(facilities_file, "rb").read() @@ -257,8 +253,7 @@ def test_validate_facilities(self): ) self.assertEqual(self.facilities_fs.status, FilesetStatus.VALID) - @mock_s3 - @mock_sts + @mock_aws def test_validate_water(self): water_file = os.path.dirname(__file__) + "/data/water.gpkg" water_data = open(water_file, "rb").read() @@ -277,8 +272,7 @@ def test_validate_water(self): self.assertEqual(self.water_fs.metadata, {"length": 3}) self.assertEqual(self.water_fs.status, FilesetStatus.VALID) - @mock_s3 - @mock_sts + @mock_aws def test_validate_transport(self): transport_file = os.path.dirname(__file__) + "/data/transport.gpkg" transport_data = open(transport_file, "rb").read() @@ -311,8 +305,7 @@ def test_validate_transport(self): ) self.assertEqual(self.transport_fs.status, FilesetStatus.VALID) - @mock_s3 - @mock_sts + @mock_aws def test_validate_landcover(self): landcover_file = os.path.dirname(__file__) + "/data/landcover.tif" landcover_data = open(landcover_file, "rb").read() @@ -339,8 +332,7 @@ def test_validate_landcover(self): ) self.assertEqual(self.landcover_fs.status, FilesetStatus.VALID) - @mock_s3 - @mock_sts + @mock_aws def test_validate_stack(self): stack_file = os.path.dirname(__file__) + "/data/stack.tif" stack_data = open(stack_file, "rb").read() @@ -365,8 +357,7 @@ def test_validate_stack(self): ) self.assertEqual(self.stack_fs.status, FilesetStatus.VALID) - @mock_s3 - @mock_sts + @mock_aws def test_validate_travel_times(self): travel_times_file = os.path.dirname(__file__) + "/data/travel.tif" travel_times_data = open(travel_times_file, "rb").read() @@ -400,8 +391,7 @@ def test_validate_travel_times(self): ) self.assertEqual(self.travel_times_fs.status, FilesetStatus.VALID) - @mock_s3 - @mock_sts + @mock_aws def test_validate_population(self): population_file = os.path.dirname(__file__) + "/data/population.tif" population_data = open(population_file, "rb").read() @@ -515,8 +505,7 @@ def setUpTestData(cls): stack_priorities=[1, 2], ) - @mock_s3 - @mock_sts + @mock_aws def test_update_analysis_status(self): landcover_file = os.path.dirname(__file__) + "/data/landcover.tif" landcover_data = open(landcover_file, "rb").read() diff --git a/hexa/plugins/connector_s3/tests/test_api.py b/hexa/plugins/connector_s3/tests/test_api.py index 5263a80d4..b19b7c7d1 100644 --- a/hexa/plugins/connector_s3/tests/test_api.py +++ b/hexa/plugins/connector_s3/tests/test_api.py @@ -3,7 +3,7 @@ import boto3 from django.test import override_settings -from moto import mock_iam, mock_s3, mock_sts +from moto import mock_aws from hexa.core.test import TestCase from hexa.plugins.connector_s3.api import ( @@ -25,8 +25,7 @@ class ApiTest(TestCase): def setUp(self): self.bucket = Bucket.objects.create(name=self.bucket_name) - @mock_s3 - @mock_sts + @mock_aws def test_generate_download_url(self): s3_client = boto3.client("s3", region_name="us-east-1") s3_client.create_bucket(Bucket="test-bucket") @@ -44,8 +43,7 @@ def test_generate_download_url(self): str, ) - @mock_s3 - @mock_sts + @mock_aws def test_generate_upload_url(self): s3_client = boto3.client("s3", region_name="us-east-1") s3_client.create_bucket(Bucket="test-bucket") @@ -57,7 +55,7 @@ def test_generate_upload_url(self): str, ) - @mock_sts + @mock_aws def test_generate_sts_app_s3_credentials(self): credentials = generate_sts_app_s3_credentials() self.assertIsInstance(credentials, dict) @@ -65,14 +63,13 @@ def test_generate_sts_app_s3_credentials(self): self.assertIsInstance(credentials[key], str) self.assertGreater(len(credentials[key]), 0) - @mock_sts + @mock_aws def test_generate_sts_app_s3_credentials_with_bucket(self): bucket = Bucket.objects.create(name="hexa-test-bucket") credentials = generate_sts_app_s3_credentials(bucket=bucket) self.assertIsInstance(credentials, dict) - @mock_iam - @mock_sts + @mock_aws @patch("hexa.plugins.connector_s3.api.sleep", return_value=None) def test_generate_sts_app_team_credentials(self, _): bucket = Bucket.objects.create(name="hexa-test-bucket") @@ -87,8 +84,7 @@ def test_generate_sts_app_team_credentials(self, _): self.assertIsInstance(credentials[key], str) self.assertGreater(len(credentials[key]), 0) - @mock_iam - @mock_sts + @mock_aws @patch("hexa.plugins.connector_s3.api.sleep", return_value=None) def test_generate_sts_app_team_credentials_long_ident(self, _): bucket = Bucket.objects.create(name="hexa-test-bucket") diff --git a/hexa/plugins/connector_s3/tests/test_credentials.py b/hexa/plugins/connector_s3/tests/test_credentials.py index 4d88dee3b..09be45923 100644 --- a/hexa/plugins/connector_s3/tests/test_credentials.py +++ b/hexa/plugins/connector_s3/tests/test_credentials.py @@ -5,7 +5,7 @@ import boto3 from django.test import override_settings -from moto import mock_iam, mock_sts +from moto import mock_aws from hexa.core.test import TestCase from hexa.notebooks.credentials import NotebooksCredentials @@ -83,8 +83,7 @@ def setUpTestData(cls): bucket=b2, team=cls.TEAM_SECRET, mode=PermissionMode.VIEWER ) - @mock_iam - @mock_sts + @mock_aws @patch("hexa.plugins.connector_s3.api.sleep", return_value=None) def test_credentials(self, _): """John is a regular user, should have access to 2 buckets""" @@ -142,8 +141,7 @@ def test_credentials(self, _): self.assertEqual(1, len(role_policies_data["PolicyNames"])) self.assertEqual("s3-access", role_policies_data["PolicyNames"][0]) - @mock_iam - @mock_sts + @mock_aws @patch("hexa.plugins.connector_s3.api.sleep", return_value=None) def test_credentials_superuser(self, _): """Jane is a superuser, should have access to 3 buckets""" @@ -177,8 +175,7 @@ def setUpTestData(cls): cls.CREDENTIALS = _get_app_s3_credentials() cls.BUCKET = Bucket.objects.create(name="hexa-test-bucket-1") - @mock_iam - @mock_sts + @mock_aws @patch("hexa.plugins.connector_s3.api.sleep", return_value=None) def test_new_role(self, _): iam_client = boto3.client( @@ -270,8 +267,7 @@ def test_new_role(self, _): credentials.env, ) - @mock_iam - @mock_sts + @mock_aws @patch("hexa.plugins.connector_s3.api.sleep", return_value=None) def test_existing_role(self, _): """ @@ -337,8 +333,7 @@ def test_existing_role(self, _): parse_arn(response["Arn"])["resource"].split("/")[0], expected_role_name ) - @mock_iam - @mock_sts + @mock_aws @patch("hexa.plugins.connector_s3.api.sleep", return_value=None) def test_slug(self, _): DAGAuthorizedDatasource.objects.create( diff --git a/hexa/plugins/connector_s3/tests/test_models.py b/hexa/plugins/connector_s3/tests/test_models.py index f60bf920a..7a4537d63 100644 --- a/hexa/plugins/connector_s3/tests/test_models.py +++ b/hexa/plugins/connector_s3/tests/test_models.py @@ -1,7 +1,7 @@ import boto3 from django.core.exceptions import ValidationError from django.test import override_settings -from moto import mock_s3, mock_sts +from moto import mock_aws from hexa.catalog.models import Index from hexa.core.test import TestCase @@ -153,8 +153,7 @@ def test_bucket_delete(self): bucket.delete() self.assertEqual(0, Index.objects.filter(object_id=bucket_id).count()) - @mock_s3 - @mock_sts + @mock_aws def test_bucket_clean_ok(self): s3_client = boto3.client("s3", region_name="us-east-1") s3_client.create_bucket(Bucket="some-bucket") @@ -162,8 +161,7 @@ def test_bucket_clean_ok(self): self.assertIsNone(bucket.clean()) - @mock_s3 - @mock_sts + @mock_aws def test_bucket_clean_ko(self): s3_client = boto3.client("s3", region_name="us-east-1") s3_client.create_bucket(Bucket="some-bucket") diff --git a/hexa/plugins/connector_s3/tests/test_sync.py b/hexa/plugins/connector_s3/tests/test_sync.py index cccfeb811..4f7d52fc3 100644 --- a/hexa/plugins/connector_s3/tests/test_sync.py +++ b/hexa/plugins/connector_s3/tests/test_sync.py @@ -1,6 +1,6 @@ import boto3 from django.test import override_settings -from moto import mock_s3, mock_sts +from moto import mock_aws from hexa.catalog.sync import DatasourceSyncResult from hexa.core.test import TestCase @@ -15,8 +15,7 @@ class SyncTest(TestCase): def setUpTestData(cls): cls.bucket = Bucket.objects.create(name="test-bucket") - @mock_s3 - @mock_sts + @mock_aws def test_empty_sync(self): s3_client = boto3.client("s3", region_name="us-east-1") s3_client.create_bucket(Bucket="test-bucket") @@ -26,8 +25,7 @@ def test_empty_sync(self): self.assertQuerysetEqual(self.bucket.object_set.all(), []) - @mock_s3 - @mock_sts + @mock_aws def test_base_sync(self): s3_client = boto3.client("s3", region_name="us-east-1") s3_client.create_bucket(Bucket="test-bucket") @@ -59,8 +57,7 @@ def test_base_sync(self): self.bucket.object_set.all(), expected, lambda x: (x.key, x.type) ) - @mock_s3 - @mock_sts + @mock_aws def test_metadata(self): s3_client = boto3.client("s3", region_name="us-east-1") s3_client.create_bucket(Bucket="test-bucket") @@ -95,8 +92,7 @@ def test_metadata(self): lambda x: (x.key, x.type, x.parent_key, x.size), ) - @mock_s3 - @mock_sts + @mock_aws def test_sync_remove_add_edit(self): s3_client = boto3.client("s3", region_name="us-east-1") s3_client.create_bucket(Bucket="test-bucket") @@ -167,8 +163,7 @@ def test_sync_remove_add_edit(self): result = sorted(result) self.assertEqual(result, expected) - @mock_s3 - @mock_sts + @mock_aws def test_double_etag(self): """ Upload 2x the same file with different names @@ -193,8 +188,7 @@ def test_double_etag(self): self.bucket.sync() self.assertEqual(self.bucket.object_set.exclude(type="directory").count(), 1) - @mock_s3 - @mock_sts + @mock_aws def test_slash_directory(self): """Objects with a key that start with / are valid - but S3 will consider this first slash as a directory named "/". It's not a big deal but our sync system has trouble processing them, due to an issue with s3fs @@ -211,8 +205,7 @@ def test_slash_directory(self): self.assertEqual(self.bucket.object_set.count(), 1) - @mock_s3 - @mock_sts + @mock_aws def test_dir_structure(self): """A list of files with different path should be indexed as a set of dir and files""" self.assertEqual(self.bucket.object_set.count(), 0) diff --git a/requirements.txt b/requirements.txt index 718caaffc..6714b5038 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,24 +6,23 @@ # affine==2.4.0 # via rasterio -annotated-types==0.6.0 +annotated-types==0.7.0 # via pydantic -anyio==4.2.0 +anyio==4.4.0 # via starlette -ariadne==0.21 +ariadne==0.23.0 # via # -r requirements.in # ariadne-django ariadne-django==0.3.0 # via -r requirements.in -asgiref==3.7.2 +asgiref==3.8.1 # via # django # django-cors-headers # django-countries -attrs==23.1.0 +attrs==23.2.0 # via - # fiona # morecantile # rasterio boto3==1.34.144 @@ -35,14 +34,14 @@ botocore==1.34.144 # boto3 # moto # s3transfer -build==1.0.3 +build==1.2.1 # via pip-tools cachetools==5.3.3 # via google-auth certifi==2024.7.4 # via - # fiona # kubernetes + # pyogrio # pyproj # rasterio # requests @@ -55,21 +54,16 @@ click==8.1.7 # via # click-plugins # cligj - # fiona # pip-tools # rasterio # rio-cogeo click-plugins==1.1.1 - # via - # fiona - # rasterio + # via rasterio cligj==0.7.2 - # via - # fiona - # rasterio + # via rasterio colorhash==2.0.0 # via -r requirements.in -coverage[toml]==7.3.4 +coverage[toml]==7.6.0 # via -r requirements.in croniter==2.0.5 # via -r requirements.in @@ -90,44 +84,45 @@ django==5.0.7 # django-otp # django-postgres-queue # django-storages -django-cors-headers==4.3.1 +django-cors-headers==4.4.0 # via -r requirements.in -django-countries==7.5.1 +django-countries==7.6.1 # via -r requirements.in -django-debug-toolbar==4.2.0 +django-debug-toolbar==4.4.6 # via -r requirements.in django-ltree==0.5.3 # via -r requirements.in -django-model-utils==4.3.1 +django-model-utils==4.5.1 # via -r requirements.in -django-otp==1.3.0 +django-otp==1.5.0 # via -r requirements.in django-postgres-queue==1.0.0 # via -r requirements.in -django-storages[google]==1.14.2 +django-storages[google]==1.14.4 # via -r requirements.in docker==7.1.0 # via -r requirements.in -fiona==1.9.6 - # via geopandas -geopandas==0.14.1 +geopandas==1.0.1 # via -r requirements.in -google-api-core[grpc]==2.15.0 +google-api-core[grpc]==2.19.1 # via + # google-api-core # google-cloud-appengine-logging # google-cloud-core # google-cloud-iam # google-cloud-logging # google-cloud-storage -google-auth==2.25.2 +google-auth==2.32.0 # via # -r requirements.in # google-api-core # google-cloud-appengine-logging # google-cloud-core + # google-cloud-iam + # google-cloud-logging # google-cloud-storage # kubernetes -google-cloud-appengine-logging==1.4.3 +google-cloud-appengine-logging==1.4.4 # via google-cloud-logging google-cloud-audit-log==0.2.5 # via google-cloud-logging @@ -135,19 +130,19 @@ google-cloud-core==2.4.1 # via # google-cloud-logging # google-cloud-storage -google-cloud-iam==2.13.0 +google-cloud-iam==2.15.1 # via -r requirements.in -google-cloud-logging==3.9.0 +google-cloud-logging==3.10.0 # via -r requirements.in -google-cloud-storage==2.14.0 +google-cloud-storage==2.17.0 # via django-storages google-crc32c==1.5.0 # via # google-cloud-storage # google-resumable-media -google-resumable-media==2.7.0 +google-resumable-media==2.7.1 # via google-cloud-storage -googleapis-common-protos[grpc]==1.62.0 +googleapis-common-protos[grpc]==1.63.2 # via # google-api-core # google-cloud-audit-log @@ -156,14 +151,16 @@ googleapis-common-protos[grpc]==1.62.0 graphql-core==3.2.3 # via ariadne grpc-google-iam-v1==0.13.1 - # via google-cloud-logging -grpcio==1.60.0 + # via + # google-cloud-iam + # google-cloud-logging +grpcio==1.65.0 # via # google-api-core # googleapis-common-protos # grpc-google-iam-v1 # grpcio-status -grpcio-status==1.60.0 +grpcio-status==1.62.2 # via google-api-core gunicorn==22.0.0 # via -r requirements.in @@ -177,11 +174,11 @@ jmespath==0.10.0 # via # boto3 # botocore -kubernetes==28.1.0 +kubernetes==30.1.0 # via -r requirements.in logzero==1.7.0 # via dhis2-py -markdown==3.5.1 +markdown==3.6 # via -r requirements.in markupsafe==2.1.5 # via @@ -189,38 +186,41 @@ markupsafe==2.1.5 # werkzeug mixpanel==4.10.1 # via -r requirements.in -morecantile==5.0.2 +morecantile==5.3.0 # via rio-cogeo -moto[s3]==4.2.14 +moto[s3]==5.0.11 # via -r requirements.in -numpy==1.26.2 +numpy==2.0.0 # via + # geopandas # pandas + # pyogrio # rasterio - # rio-cogeo # shapely # snuggs oauthlib==3.2.2 # via # kubernetes # requests-oauthlib -packaging==23.2 +packaging==24.1 # via # build # geopandas # gunicorn -pandas==2.1.4 + # pyogrio +pandas==2.2.2 # via # -r requirements.in # geopandas -pip-tools==7.3.0 +pip-tools==7.4.1 # via -r requirements.in -proto-plus==1.23.0 +proto-plus==1.24.0 # via + # google-api-core # google-cloud-appengine-logging # google-cloud-iam # google-cloud-logging -protobuf==4.25.1 +protobuf==4.25.3 # via # google-api-core # google-cloud-appengine-logging @@ -233,42 +233,46 @@ protobuf==4.25.1 # proto-plus psycopg2-binary==2.9.9 # via -r requirements.in -py-partiql-parser==0.5.0 +py-partiql-parser==0.5.5 # via moto -pyasn1==0.5.1 +pyasn1==0.6.0 # via # pyasn1-modules # rsa -pyasn1-modules==0.3.0 +pyasn1-modules==0.4.0 # via google-auth -pycparser==2.21 +pycparser==2.22 # via cffi -pydantic==2.5.3 +pydantic==2.8.2 # via # morecantile # rio-cogeo -pydantic-core==2.14.6 +pydantic-core==2.20.1 # via pydantic -pygments==2.17.2 +pygments==2.18.0 # via dhis2-py -pyparsing==3.1.1 +pyogrio==0.9.0 + # via geopandas +pyparsing==3.1.2 # via snuggs pyproj==3.6.1 # via # geopandas # morecantile -pyproject-hooks==1.0.0 - # via build -python-dateutil==2.8.2 +pyproject-hooks==1.1.0 + # via + # build + # pip-tools +python-dateutil==2.9.0.post0 # via # botocore # croniter # kubernetes # moto # pandas -python-slugify==8.0.1 +python-slugify==8.0.4 # via -r requirements.in -pytz==2023.3.post1 +pytz==2024.1 # via # croniter # pandas @@ -277,7 +281,7 @@ pyyaml==6.0.1 # kubernetes # moto # responses -rasterio==1.3.9 +rasterio==1.3.10 # via # -r requirements.in # rio-cogeo @@ -293,30 +297,29 @@ requests==2.32.3 # moto # requests-oauthlib # responses -requests-oauthlib==1.3.1 +requests-oauthlib==2.0.0 # via kubernetes -responses==0.24.1 +responses==0.25.3 # via # -r requirements.in # moto -rio-cogeo==5.1.0 +rio-cogeo==5.3.3 # via -r requirements.in rsa==4.9 # via google-auth s3transfer==0.10.2 # via boto3 -sentry-sdk==1.39.1 +sentry-sdk==2.9.0 # via -r requirements.in -shapely==2.0.2 +shapely==2.0.4 # via geopandas six==1.16.0 # via # django-ltree - # fiona # kubernetes # mixpanel # python-dateutil -sniffio==1.3.0 +sniffio==1.3.1 # via anyio snuggs==1.4.7 # via rasterio @@ -324,7 +327,7 @@ sqlparse==0.5.0 # via # django # django-debug-toolbar -starlette==0.36.2 +starlette==0.37.2 # via ariadne stringcase==1.2.0 # via -r requirements.in @@ -332,15 +335,15 @@ tblib==3.0.0 # via -r requirements.in text-unidecode==1.3 # via python-slugify -tqdm==4.66.3 +tqdm==4.66.4 # via -r requirements.in -typing-extensions==4.9.0 +typing-extensions==4.12.2 # via # ariadne # django-countries # pydantic # pydantic-core -tzdata==2023.3 +tzdata==2024.1 # via pandas ua-parser==0.18.0 # via -r requirements.in @@ -353,13 +356,13 @@ urllib3==1.26.19 # requests # responses # sentry-sdk -websocket-client==1.7.0 +websocket-client==1.8.0 # via kubernetes werkzeug==3.0.3 # via moto -wheel==0.42.0 +wheel==0.43.0 # via pip-tools -whitenoise==6.6.0 +whitenoise==6.7.0 # via -r requirements.in xmltodict==0.13.0 # via moto