diff --git a/dev/breeze/tests/test_selective_checks.py b/dev/breeze/tests/test_selective_checks.py index d8cbd2737a9ba..e1318a34a6684 100644 --- a/dev/breeze/tests/test_selective_checks.py +++ b/dev/breeze/tests/test_selective_checks.py @@ -2316,7 +2316,7 @@ def test_expected_output_push( ), { "selected-providers-list-as-string": "amazon common.compat common.io common.sql " - "databricks dbt.cloud ftp google microsoft.mssql mysql " + "databricks dbt.cloud ftp google microsoft.azure microsoft.mssql mysql " "openlineage oracle postgres sftp snowflake standard trino", "all-python-versions": f"['{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}']", "all-python-versions-list-as-string": DEFAULT_PYTHON_MAJOR_MINOR_VERSION, @@ -2335,7 +2335,7 @@ def test_expected_output_push( { "description": "amazon...standard", "test_types": "Providers[amazon] Providers[common.compat,common.io,common.sql," - "databricks,dbt.cloud,ftp,microsoft.mssql,mysql,openlineage,oracle," + "databricks,dbt.cloud,ftp,microsoft.azure,microsoft.mssql,mysql,openlineage,oracle," "postgres,sftp,snowflake,trino] Providers[google] Providers[standard]", } ] diff --git a/providers/microsoft/azure/docs/index.rst b/providers/microsoft/azure/docs/index.rst index c86007b64f9cd..da5fc4fa3e599 100644 --- a/providers/microsoft/azure/docs/index.rst +++ b/providers/microsoft/azure/docs/index.rst @@ -159,6 +159,8 @@ Dependent package `apache-airflow-providers-amazon `_ ``amazon`` `apache-airflow-providers-common-compat `_ ``common.compat`` `apache-airflow-providers-common-messaging `_ ``common.messaging`` +`apache-airflow-providers-google `_ ``google`` +`apache-airflow-providers-openlineage `_ ``openlineage`` `apache-airflow-providers-oracle `_ ``oracle`` `apache-airflow-providers-sftp `_ ``sftp`` ======================================================================================================================== ==================== diff --git a/providers/microsoft/azure/docs/transfer/gcs_to_wasb.rst b/providers/microsoft/azure/docs/transfer/gcs_to_wasb.rst new file mode 100644 index 0000000000000..0ff1cbadbb219 --- /dev/null +++ b/providers/microsoft/azure/docs/transfer/gcs_to_wasb.rst @@ -0,0 +1,69 @@ + + .. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + .. http://www.apache.org/licenses/LICENSE-2.0 + + .. Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +===================================================== +Google Cloud Storage to Azure Blob Storage transfer +===================================================== + +`Google Cloud Storage `__ and +`Azure Blob Storage `__ +are object stores commonly used for data lakes and file exchange. +This guide describes copying objects from GCS into an Azure Blob container. + +Install the optional dependency when using this operator: + +.. code-block:: bash + + pip install 'apache-airflow-providers-microsoft-azure[google]' + +Prerequisite Tasks +------------------ + +.. include:: ../operators/_partials/prerequisite_tasks.rst + +.. _howto/operator:GCSToAzureBlobStorageOperator: + +Operator +-------- + +Use :class:`~airflow.providers.microsoft.azure.transfers.gcs_to_wasb.GCSToAzureBlobStorageOperator` +to list objects under a GCS ``prefix`` and upload them to a container using ``blob_prefix`` as the base path. +Use ``keep_directory_structure`` and ``flatten_structure`` the same way as +:class:`~airflow.providers.amazon.aws.transfers.gcs_to_s3.GCSToS3Operator` (``flatten_structure`` wins when both apply). +Object keys ending with ``/`` (GCS console folder markers) are not copied. + +Example: + +.. code-block:: python + + copy_gcs_to_azure = GCSToAzureBlobStorageOperator( + task_id="gcs_to_azure_blob", + gcs_bucket="my-gcs-bucket", + prefix="exports/daily/", + container_name="my-container", + blob_prefix="imports/daily", + gcp_conn_id="google_cloud_default", + wasb_conn_id="wasb_default", + replace=True, + ) + +Reference +--------- + +* `Google Cloud Storage Python client `__ +* `Azure Blob Storage client library `__ diff --git a/providers/microsoft/azure/provider.yaml b/providers/microsoft/azure/provider.yaml index 76421ba3127c9..36e6f68a254b5 100644 --- a/providers/microsoft/azure/provider.yaml +++ b/providers/microsoft/azure/provider.yaml @@ -357,6 +357,10 @@ transfers: target-integration-name: Microsoft Azure Blob Storage how-to-guide: /docs/apache-airflow-providers-microsoft-azure/transfer/s3_to_wasb.rst python-module: airflow.providers.microsoft.azure.transfers.s3_to_wasb + - source-integration-name: Google Cloud Storage (GCS) + target-integration-name: Microsoft Azure Blob Storage + how-to-guide: /docs/apache-airflow-providers-microsoft-azure/transfer/gcs_to_wasb.rst + python-module: airflow.providers.microsoft.azure.transfers.gcs_to_wasb connection-types: diff --git a/providers/microsoft/azure/pyproject.toml b/providers/microsoft/azure/pyproject.toml index e7df3848d6fca..65a4032892cd5 100644 --- a/providers/microsoft/azure/pyproject.toml +++ b/providers/microsoft/azure/pyproject.toml @@ -114,6 +114,12 @@ dependencies = [ "common.messaging" = [ "apache-airflow-providers-common-messaging>=2.0.0" ] +"google" = [ + "apache-airflow-providers-google" +] +"openlineage" = [ + "apache-airflow-providers-openlineage>=2.3.0" +] [dependency-groups] dev = [ @@ -123,6 +129,8 @@ dev = [ "apache-airflow-providers-amazon", "apache-airflow-providers-common-compat", "apache-airflow-providers-common-messaging", + "apache-airflow-providers-google", + "apache-airflow-providers-openlineage", "apache-airflow-providers-oracle", "apache-airflow-providers-sftp", # Additional devel dependencies (do not remove this line and add extra development dependencies) diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/get_provider_info.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/get_provider_info.py index 0b312ec09a955..f1b5dcb1d311e 100644 --- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/get_provider_info.py +++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/get_provider_info.py @@ -348,6 +348,12 @@ def get_provider_info(): "how-to-guide": "/docs/apache-airflow-providers-microsoft-azure/transfer/s3_to_wasb.rst", "python-module": "airflow.providers.microsoft.azure.transfers.s3_to_wasb", }, + { + "source-integration-name": "Google Cloud Storage (GCS)", + "target-integration-name": "Microsoft Azure Blob Storage", + "how-to-guide": "/docs/apache-airflow-providers-microsoft-azure/transfer/gcs_to_wasb.rst", + "python-module": "airflow.providers.microsoft.azure.transfers.gcs_to_wasb", + }, ], "connection-types": [ { diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/transfers/gcs_to_wasb.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/transfers/gcs_to_wasb.py new file mode 100644 index 0000000000000..acdc0fa65ea5e --- /dev/null +++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/transfers/gcs_to_wasb.py @@ -0,0 +1,261 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +"""This module contains Google Cloud Storage to Azure Blob Storage operator.""" + +from __future__ import annotations + +import posixpath +from collections.abc import Sequence +from typing import TYPE_CHECKING + +from packaging.version import Version + +from airflow.providers.common.compat.sdk import BaseOperator +from airflow.providers.microsoft.azure.hooks.wasb import WasbHook + +try: + from airflow.providers.google.cloud.hooks.gcs import GCSHook +except ModuleNotFoundError as e: + from airflow.providers.common.compat.sdk import AirflowOptionalProviderFeatureException + + raise AirflowOptionalProviderFeatureException(e) + +if TYPE_CHECKING: + from airflow.providers.openlineage.extractors import OperatorLineage + from airflow.sdk import Context + + +class GCSToAzureBlobStorageOperator(BaseOperator): + """ + Synchronizes objects from a Google Cloud Storage bucket to Azure Blob Storage. + + .. note:: + When ``flatten_structure=True``, it takes precedence over ``keep_directory_structure``. + For example, with ``flatten_structure=True``, ``folder/subfolder/file.txt`` becomes + ``file.txt`` regardless of the ``keep_directory_structure`` setting. + + Objects whose names end with ``/`` (GCS console folder markers) and keys that become an + empty destination path after ``flatten_structure`` are skipped. + + .. seealso:: + For more information on how to use this operator, take a look at the guide: + :ref:`howto/operator:GCSToAzureBlobStorageOperator` + + :param gcs_bucket: The GCS bucket to list objects from. (templated) + :param prefix: Prefix to filter object names under the bucket. (templated) + :param gcp_conn_id: Airflow connection ID for Google Cloud. + :param google_impersonation_chain: Optional impersonation chain for GCP credentials. + :param gcp_user_project: Requester-pays billing project for GCS requests, if required. + :param match_glob: Optional glob filter for object names (requires + ``apache-airflow-providers-google>=10.3.0``). + :param container_name: Azure Blob container to upload into. (templated) + :param blob_prefix: Base blob path for uploaded objects. (templated) + :param wasb_conn_id: Airflow connection ID for Azure Blob Storage. + :param replace: If ``True``, overwrite existing blobs (``overwrite=True`` on upload) and + upload all listed objects. If ``False``, skip objects that already exist under + ``blob_prefix`` with the same relative path and pass ``overwrite=False`` on upload. + :param keep_directory_structure: When ``False`` and ``prefix`` is set (and + ``flatten_structure`` is ``False``), append ``prefix`` to ``blob_prefix``. + :param flatten_structure: If ``True``, upload each object using only its file name + under ``blob_prefix``. Takes precedence over ``keep_directory_structure``. + :param create_container: If ``True``, create the container when missing before upload. + """ + + template_fields: Sequence[str] = ( + "gcs_bucket", + "prefix", + "blob_prefix", + "container_name", + "google_impersonation_chain", + "gcp_user_project", + "match_glob", + ) + ui_color = "#f0eee4" + + def __init__( + self, + *, + gcs_bucket: str, + container_name: str, + blob_prefix: str = "", + prefix: str | None = None, + gcp_conn_id: str = "google_cloud_default", + google_impersonation_chain: str | Sequence[str] | None = None, + wasb_conn_id: str = "wasb_default", + replace: bool = False, + keep_directory_structure: bool = True, + flatten_structure: bool = False, + match_glob: str | None = None, + gcp_user_project: str | None = None, + create_container: bool = False, + **kwargs, + ) -> None: + super().__init__(**kwargs) + self.gcs_bucket = gcs_bucket + self.prefix = prefix + self.gcp_conn_id = gcp_conn_id + self.google_impersonation_chain = google_impersonation_chain + self.container_name = container_name + self.blob_prefix = blob_prefix + self.wasb_conn_id = wasb_conn_id + self.replace = replace + self.keep_directory_structure = keep_directory_structure + self.flatten_structure = flatten_structure + self.gcp_user_project = gcp_user_project + self.create_container = create_container + + if self.flatten_structure and self.keep_directory_structure: + self.log.warning("flatten_structure=True takes precedence over keep_directory_structure=True") + + try: + from airflow.providers.google import __version__ as _GOOGLE_PROVIDER_VERSION + + if Version(_GOOGLE_PROVIDER_VERSION) >= Version("10.3.0"): + self._is_match_glob_supported = True + else: + self._is_match_glob_supported = False + except ImportError: + self._is_match_glob_supported = False + if not self._is_match_glob_supported and match_glob: + raise ValueError("The 'match_glob' parameter requires 'apache-airflow-providers-google>=10.3.0'.") + self.match_glob = match_glob + + def _transform_file_path(self, file_path: str) -> str: + """ + Transform the GCS file path according to the specified options. + + :param file_path: The original GCS file path + :return: The transformed file path for Azure Blob destination + """ + if self.flatten_structure: + return posixpath.basename(file_path) + return file_path + + @staticmethod + def _should_skip_gcs_object(name: str) -> bool: + """ + Return True if this object name should not be copied. + + The GCS console creates zero-byte "folder" markers whose keys end with ``/``. + Those yield an empty basename when ``flatten_structure=True`` and odd blob paths + on Azure when copied as-is. + """ + if not name or not name.strip(): + return True + return name.endswith("/") + + def execute(self, context: Context) -> list[str]: + gcs_hook = GCSHook( + gcp_conn_id=self.gcp_conn_id, + impersonation_chain=self.google_impersonation_chain, + ) + wasb_hook = WasbHook(wasb_conn_id=self.wasb_conn_id) + + self.log.info( + "Getting list of the files. Bucket: %s; Prefix: %s", + self.gcs_bucket, + self.prefix, + ) + + list_kwargs: dict = { + "bucket_name": self.gcs_bucket, + "prefix": self.prefix, + "user_project": self.gcp_user_project, + } + if self._is_match_glob_supported: + list_kwargs["match_glob"] = self.match_glob + + gcs_files = gcs_hook.list(**list_kwargs) # type: ignore[call-arg] + + gcs_files = [f for f in gcs_files if not self._should_skip_gcs_object(f)] + + blob_prefix = self.blob_prefix + if not self.keep_directory_structure and self.prefix and not self.flatten_structure: + blob_prefix = posixpath.join(blob_prefix, self.prefix) + + existing_blobs_set: set[str] = set() + if not self.replace: + existing_blobs = ( + wasb_hook.get_blobs_list_recursive( + container_name=self.container_name, + prefix=blob_prefix or None, + ) + or [] + ) + if blob_prefix: + prefix_str = blob_prefix.rstrip("/") + "/" + existing_blobs = [b.removeprefix(prefix_str) for b in existing_blobs] + existing_blobs_set = set(existing_blobs) + + filtered_files: list[str] = [] + seen_transformed: set[str] = set() + for file in gcs_files: + transformed = self._transform_file_path(file) + if transformed in existing_blobs_set: + continue + if transformed in seen_transformed: + self.log.warning( + "Skipping duplicate file %s (transforms to %s)", + file, + transformed, + ) + continue + filtered_files.append(file) + seen_transformed.add(transformed) + + gcs_files = filtered_files + + uploaded_blobs: list[str] = [] + if gcs_files: + for file in gcs_files: + with gcs_hook.provide_file( + object_name=file, bucket_name=str(self.gcs_bucket), user_project=self.gcp_user_project + ) as local_tmp_file: + transformed_path = self._transform_file_path(file) + dest_blob = posixpath.join(blob_prefix, transformed_path) + self.log.info("Saving file from %s to %s", file, dest_blob) + wasb_hook.load_file( + file_path=local_tmp_file.name, + container_name=self.container_name, + blob_name=dest_blob, + create_container=self.create_container, + overwrite=self.replace, + ) + uploaded_blobs.append(dest_blob) + self.log.info("All done, uploaded %d files to Azure Blob Storage", len(uploaded_blobs)) + else: + self.log.info("In sync, no files needed to be uploaded to Azure Blob Storage") + + return uploaded_blobs + + def get_openlineage_facets_on_start(self) -> OperatorLineage: + from airflow.providers.common.compat.openlineage.facet import Dataset + from airflow.providers.openlineage.extractors import OperatorLineage + + wasb_hook = WasbHook(wasb_conn_id=self.wasb_conn_id) + account_name = wasb_hook.get_conn().account_name + + return OperatorLineage( + inputs=[Dataset(namespace=f"gs://{self.gcs_bucket}", name=self.prefix or "/")], + outputs=[ + Dataset( + namespace=f"wasbs://{self.container_name}@{account_name}", + name=self.blob_prefix or "/", + ) + ], + ) diff --git a/providers/microsoft/azure/tests/unit/microsoft/azure/transfers/test_gcs_to_wasb.py b/providers/microsoft/azure/tests/unit/microsoft/azure/transfers/test_gcs_to_wasb.py new file mode 100644 index 0000000000000..27d61b0c2ae45 --- /dev/null +++ b/providers/microsoft/azure/tests/unit/microsoft/azure/transfers/test_gcs_to_wasb.py @@ -0,0 +1,259 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +from __future__ import annotations + +import sys +from types import ModuleType +from unittest import mock + +import pytest + +from airflow.providers.microsoft.azure.transfers.gcs_to_wasb import GCSToAzureBlobStorageOperator + +TASK_ID = "test-gcs-to-azure-blob" +GCS_BUCKET = "gcs-bucket" +CONTAINER = "container" +BLOB_PREFIX = "dest/prefix" +GCS_OBJECTS = ["data/a.txt", "data/b.txt"] + + +class TestGCSToAzureBlobStorageOperator: + def test_init_defaults(self): + op = GCSToAzureBlobStorageOperator( + task_id=TASK_ID, + gcs_bucket=GCS_BUCKET, + container_name=CONTAINER, + blob_prefix=BLOB_PREFIX, + ) + assert op.gcp_conn_id == "google_cloud_default" + assert op.wasb_conn_id == "wasb_default" + assert op.replace is False + assert op.keep_directory_structure is True + assert op.flatten_structure is False + assert op.create_container is False + + @mock.patch("airflow.providers.google.__version__", "10.2.0") + def test_match_glob_requires_recent_google_provider(self): + with pytest.raises(ValueError, match="match_glob"): + GCSToAzureBlobStorageOperator( + task_id=TASK_ID, + gcs_bucket=GCS_BUCKET, + container_name=CONTAINER, + match_glob="**/*.csv", + ) + + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.WasbHook") + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.GCSHook") + def test_execute_replace_uploads_all(self, mock_gcs_hook, mock_wasb_hook): + mock_gcs_hook.return_value.list.return_value = list(GCS_OBJECTS) + mock_file = mock.Mock() + mock_file.name = "/tmp/local" + mock_gcs_hook.return_value.provide_file.return_value.__enter__ = mock.Mock(return_value=mock_file) + mock_gcs_hook.return_value.provide_file.return_value.__exit__ = mock.Mock(return_value=None) + + op = GCSToAzureBlobStorageOperator( + task_id=TASK_ID, + gcs_bucket=GCS_BUCKET, + prefix="data/", + container_name=CONTAINER, + blob_prefix=BLOB_PREFIX, + replace=True, + ) + result = op.execute(context=None) + + assert result == [f"{BLOB_PREFIX}/data/a.txt", f"{BLOB_PREFIX}/data/b.txt"] + assert mock_wasb_hook.return_value.load_file.call_count == 2 + first_kw = mock_wasb_hook.return_value.load_file.call_args_list[0].kwargs + assert first_kw["container_name"] == CONTAINER + assert first_kw["blob_name"] == f"{BLOB_PREFIX}/data/a.txt" + assert first_kw["overwrite"] is True + + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.WasbHook") + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.GCSHook") + def test_execute_returns_empty_when_no_objects(self, mock_gcs_hook, mock_wasb_hook): + mock_gcs_hook.return_value.list.return_value = [] + + op = GCSToAzureBlobStorageOperator( + task_id=TASK_ID, + gcs_bucket=GCS_BUCKET, + container_name=CONTAINER, + blob_prefix=BLOB_PREFIX, + replace=True, + ) + assert op.execute(context=None) == [] + mock_wasb_hook.return_value.load_file.assert_not_called() + + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.WasbHook") + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.GCSHook") + def test_execute_skips_gcs_directory_placeholder_keys(self, mock_gcs_hook, mock_wasb_hook): + mock_gcs_hook.return_value.list.return_value = ["src/airflow.png", "src/"] + mock_file = mock.Mock() + mock_file.name = "/tmp/local" + mock_gcs_hook.return_value.provide_file.return_value.__enter__ = mock.Mock(return_value=mock_file) + mock_gcs_hook.return_value.provide_file.return_value.__exit__ = mock.Mock(return_value=None) + + op = GCSToAzureBlobStorageOperator( + task_id=TASK_ID, + gcs_bucket=GCS_BUCKET, + container_name=CONTAINER, + blob_prefix="", + replace=True, + ) + result = op.execute(context=None) + + assert result == ["src/airflow.png"] + mock_wasb_hook.return_value.load_file.assert_called_once() + assert mock_wasb_hook.return_value.load_file.call_args.kwargs["blob_name"] == "src/airflow.png" + assert mock_wasb_hook.return_value.load_file.call_args.kwargs["overwrite"] is True + + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.WasbHook") + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.GCSHook") + def test_execute_skip_existing_when_replace_false(self, mock_gcs_hook, mock_wasb_hook): + mock_gcs_hook.return_value.list.return_value = ["data/a.txt", "data/b.txt"] + mock_wasb_hook.return_value.get_blobs_list_recursive.return_value = [ + f"{BLOB_PREFIX}/data/a.txt", + ] + mock_file = mock.Mock() + mock_file.name = "/tmp/local" + mock_gcs_hook.return_value.provide_file.return_value.__enter__ = mock.Mock(return_value=mock_file) + mock_gcs_hook.return_value.provide_file.return_value.__exit__ = mock.Mock(return_value=None) + + op = GCSToAzureBlobStorageOperator( + task_id=TASK_ID, + gcs_bucket=GCS_BUCKET, + container_name=CONTAINER, + blob_prefix=BLOB_PREFIX, + replace=False, + ) + result = op.execute(context=None) + + assert result == [f"{BLOB_PREFIX}/data/b.txt"] + mock_wasb_hook.return_value.load_file.assert_called_once() + assert mock_wasb_hook.return_value.load_file.call_args.kwargs["overwrite"] is False + + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.WasbHook") + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.GCSHook") + def test_flatten_structure(self, mock_gcs_hook, mock_wasb_hook): + mock_gcs_hook.return_value.list.return_value = ["data/a.txt"] + mock_file = mock.Mock() + mock_file.name = "/tmp/local" + mock_gcs_hook.return_value.provide_file.return_value.__enter__ = mock.Mock(return_value=mock_file) + mock_gcs_hook.return_value.provide_file.return_value.__exit__ = mock.Mock(return_value=None) + + op = GCSToAzureBlobStorageOperator( + task_id=TASK_ID, + gcs_bucket=GCS_BUCKET, + container_name=CONTAINER, + blob_prefix=BLOB_PREFIX, + replace=True, + flatten_structure=True, + ) + result = op.execute(context=None) + + assert result == [f"{BLOB_PREFIX}/a.txt"] + kw = mock_wasb_hook.return_value.load_file.call_args.kwargs + assert kw["blob_name"] == f"{BLOB_PREFIX}/a.txt" + assert kw["overwrite"] is True + + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.WasbHook") + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.GCSHook") + def test_execute_dedups_collisions_when_replace_true(self, mock_gcs_hook, mock_wasb_hook): + mock_gcs_hook.return_value.list.return_value = ["a/file.txt", "b/file.txt"] + mock_file = mock.Mock() + mock_file.name = "/tmp/local" + mock_gcs_hook.return_value.provide_file.return_value.__enter__ = mock.Mock(return_value=mock_file) + mock_gcs_hook.return_value.provide_file.return_value.__exit__ = mock.Mock(return_value=None) + + op = GCSToAzureBlobStorageOperator( + task_id=TASK_ID, + gcs_bucket=GCS_BUCKET, + container_name=CONTAINER, + blob_prefix=BLOB_PREFIX, + replace=True, + flatten_structure=True, + ) + result = op.execute(context=None) + + assert result == [f"{BLOB_PREFIX}/file.txt"] + mock_wasb_hook.return_value.load_file.assert_called_once() + + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.WasbHook") + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.GCSHook") + def test_execute_is_idempotent_on_retry(self, mock_gcs_hook, mock_wasb_hook): + mock_gcs_hook.return_value.list.return_value = ["data/a.txt"] + mock_file = mock.Mock() + mock_file.name = "/tmp/local" + mock_gcs_hook.return_value.provide_file.return_value.__enter__ = mock.Mock(return_value=mock_file) + mock_gcs_hook.return_value.provide_file.return_value.__exit__ = mock.Mock(return_value=None) + + op = GCSToAzureBlobStorageOperator( + task_id=TASK_ID, + gcs_bucket=GCS_BUCKET, + prefix="data/", + container_name=CONTAINER, + blob_prefix=BLOB_PREFIX, + replace=True, + keep_directory_structure=False, + ) + + first = op.execute(context=None) + second = op.execute(context=None) + + assert first == second + assert op.blob_prefix == BLOB_PREFIX + + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.WasbHook") + @mock.patch("airflow.providers.microsoft.azure.transfers.gcs_to_wasb.GCSHook") + def test_openlineage_facets(self, mock_gcs_hook, mock_wasb_hook): + injected: list[str] = [] + if "airflow.providers.openlineage.extractors" not in sys.modules: + ol_pkg = ModuleType("airflow.providers.openlineage") + ol_ext = ModuleType("airflow.providers.openlineage.extractors") + + class _OperatorLineage: + __slots__ = ("inputs", "outputs") + + def __init__(self, *, inputs=None, outputs=None): + self.inputs = inputs + self.outputs = outputs + + ol_ext.OperatorLineage = _OperatorLineage + sys.modules["airflow.providers.openlineage"] = ol_pkg + sys.modules["airflow.providers.openlineage.extractors"] = ol_ext + injected = [ + "airflow.providers.openlineage.extractors", + "airflow.providers.openlineage", + ] + + try: + mock_wasb_hook.return_value.get_conn.return_value.account_name = "mystorage" + op = GCSToAzureBlobStorageOperator( + task_id=TASK_ID, + gcs_bucket=GCS_BUCKET, + prefix="p/", + container_name=CONTAINER, + blob_prefix=BLOB_PREFIX, + ) + lineage = op.get_openlineage_facets_on_start() + assert len(lineage.inputs) == 1 + assert lineage.inputs[0].namespace == "gs://gcs-bucket" + assert "wasbs://" in lineage.outputs[0].namespace + finally: + for name in injected: + sys.modules.pop(name, None) diff --git a/uv.lock b/uv.lock index 4e5e7a6f79f80..7fefc48b4c880 100644 --- a/uv.lock +++ b/uv.lock @@ -888,7 +888,7 @@ wheels = [ [[package]] name = "anthropic" -version = "0.100.0" +version = "0.101.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -900,9 +900,9 @@ dependencies = [ { name = "sniffio" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9c/2d/24caf0ff727cba2ed863925017c8f93463a2ea6224a0efe5626e672bc3d2/anthropic-0.100.0.tar.gz", hash = "sha256:650dee9e023afb16395939ee4104bbc21f966b380210119fb91122c12099c79a", size = 758255, upload-time = "2026-05-06T15:07:13.578Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/cb/9d0123243e749ac3a579972b2c398971bce1dc57bcc4efb08066df610360/anthropic-0.101.0.tar.gz", hash = "sha256:1116a6a87c55757e0fbe3e1ba40804fbd04de7963601a6dd6b539a889f18de3e", size = 758603, upload-time = "2026-05-11T15:46:33.944Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/a0/c775c59ab9445ecabb57ef3d5c24027de060139189a9e312ef9ef889a665/anthropic-0.100.0-py3-none-any.whl", hash = "sha256:1c15769efa15d8fd5c1ebf900e25c57e3ee540f8554a29aa56e4edefffe2951d", size = 753596, upload-time = "2026-05-06T15:07:12.106Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b2/74ff06762d005ecf1658929a292df0acb786d025f6a6c54fcb30e2dc7761/anthropic-0.101.0-py3-none-any.whl", hash = "sha256:cc3cc6576989471e2aa9132258034ad0ff0d8fe500b04ac499e4e46ed68c5ed0", size = 753594, upload-time = "2026-05-11T15:46:32.216Z" }, ] [[package]] @@ -5875,6 +5875,12 @@ amazon = [ common-messaging = [ { name = "apache-airflow-providers-common-messaging" }, ] +google = [ + { name = "apache-airflow-providers-google" }, +] +openlineage = [ + { name = "apache-airflow-providers-openlineage" }, +] oracle = [ { name = "apache-airflow-providers-oracle" }, ] @@ -5889,6 +5895,8 @@ dev = [ { name = "apache-airflow-providers-amazon" }, { name = "apache-airflow-providers-common-compat" }, { name = "apache-airflow-providers-common-messaging" }, + { name = "apache-airflow-providers-google" }, + { name = "apache-airflow-providers-openlineage" }, { name = "apache-airflow-providers-oracle" }, { name = "apache-airflow-providers-sftp" }, { name = "apache-airflow-task-sdk" }, @@ -5906,6 +5914,8 @@ requires-dist = [ { name = "apache-airflow-providers-amazon", marker = "extra == 'amazon'", editable = "providers/amazon" }, { name = "apache-airflow-providers-common-compat", editable = "providers/common/compat" }, { name = "apache-airflow-providers-common-messaging", marker = "extra == 'common-messaging'", editable = "providers/common/messaging" }, + { name = "apache-airflow-providers-google", marker = "extra == 'google'", editable = "providers/google" }, + { name = "apache-airflow-providers-openlineage", marker = "extra == 'openlineage'", editable = "providers/openlineage" }, { name = "apache-airflow-providers-oracle", marker = "extra == 'oracle'", editable = "providers/oracle" }, { name = "apache-airflow-providers-sftp", marker = "extra == 'sftp'", editable = "providers/sftp" }, { name = "azure-batch", specifier = ">=8.0.0,<15.0.0" }, @@ -5937,7 +5947,7 @@ requires-dist = [ { name = "msgraph-core", specifier = ">=1.3.3" }, { name = "msgraphfs", specifier = ">=0.3.0" }, ] -provides-extras = ["amazon", "oracle", "sftp", "common-messaging"] +provides-extras = ["amazon", "oracle", "sftp", "common-messaging", "google", "openlineage"] [package.metadata.requires-dev] dev = [ @@ -5946,6 +5956,8 @@ dev = [ { name = "apache-airflow-providers-amazon", editable = "providers/amazon" }, { name = "apache-airflow-providers-common-compat", editable = "providers/common/compat" }, { name = "apache-airflow-providers-common-messaging", editable = "providers/common/messaging" }, + { name = "apache-airflow-providers-google", editable = "providers/google" }, + { name = "apache-airflow-providers-openlineage", editable = "providers/openlineage" }, { name = "apache-airflow-providers-oracle", editable = "providers/oracle" }, { name = "apache-airflow-providers-sftp", editable = "providers/sftp" }, { name = "apache-airflow-task-sdk", editable = "task-sdk" }, @@ -9431,95 +9443,95 @@ wheels = [ [[package]] name = "backports-zstd" -version = "1.4.0" +version = "1.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/13/40/0e0361a5c78f80cb11b07ddec0faf63a9985b9be4dc5d15592e48ce35eb4/backports_zstd-1.4.0.tar.gz", hash = "sha256:655be611252f717bc78f2227e3773dc393c965f228a81e60431f6d47bfdb6643", size = 997918, upload-time = "2026-05-03T21:12:32.298Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/c5/3b27e7aeee9918474a44c909744aac0f00a834e5bf4bea9aed1ef4e153fe/backports_zstd-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:233267bbd5ab177423a6cc538370bc54761357d29da48f491b1e59a6a03f6ba0", size = 435848, upload-time = "2026-05-03T21:10:36.015Z" }, - { url = "https://files.pythonhosted.org/packages/93/35/110a7c77fd412e0d8040774408760b4e9dfcede69d28fb3b4f2f633ada77/backports_zstd-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fe0e46b99d6d18d419d6657811b056dc91a13e6e7a08a89eb7c1fe4df5921747", size = 362240, upload-time = "2026-05-03T21:10:37.354Z" }, - { url = "https://files.pythonhosted.org/packages/92/9a/9bbd9ab394ca6d023ebcb51dcd90c5a895ed01f73e2ea7f91e60eb82e739/backports_zstd-1.4.0-cp310-cp310-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:67788ada70755df2d8b6bf356a41b4fbdd04b8177abfbeccff778033c4df2efa", size = 506135, upload-time = "2026-05-03T21:10:38.506Z" }, - { url = "https://files.pythonhosted.org/packages/90/a7/a521ea420aded33ca9821b3ef98e5bbdbd78d5d41711684cfce1a5d127a8/backports_zstd-1.4.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e5d269184a1c310a69b2c3a8dcb6c87de90fae4e9252852918a740dbca780648", size = 475742, upload-time = "2026-05-03T21:10:40.474Z" }, - { url = "https://files.pythonhosted.org/packages/ae/28/5d3961b217c3581e154e25ffa17f695337ca4493af99a7030f164b0e3660/backports_zstd-1.4.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:35f954914349f7dc00ddcb170b345895480b2ffbfa7a9eb86e4f9840dc91769e", size = 581377, upload-time = "2026-05-03T21:10:42.013Z" }, - { url = "https://files.pythonhosted.org/packages/e2/60/153078037d08e5eb4f204896c238703ea4dd947e0080a20f63df9034360a/backports_zstd-1.4.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:de54e2356f873be8772e47b8a92bf6b859c2dcacfe3da0ed8e556e7672027464", size = 641025, upload-time = "2026-05-03T21:10:43.403Z" }, - { url = "https://files.pythonhosted.org/packages/ea/cf/7fc0d8c3b5bae488ddab183a203474d9066fe77b0b563b3a345fc141ac50/backports_zstd-1.4.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8b948ffb0697d1cdeed49ac20595532cdbe4968468426418d399c66e2a4c9dd3", size = 491231, upload-time = "2026-05-03T21:10:44.597Z" }, - { url = "https://files.pythonhosted.org/packages/34/79/e58b2bcc8fd937d7e7b14105fcf16f774f210288fc95cb5f6ae4e8b1e8dd/backports_zstd-1.4.0-cp310-cp310-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ffe920a94e0a36ac2d3a0b7e84529664872e099fa10d88c574dae333b6be6de0", size = 565267, upload-time = "2026-05-03T21:10:46.135Z" }, - { url = "https://files.pythonhosted.org/packages/d5/71/c6478273977a477b93c8c3c46582b792fc8cf2c32f317e99f6a4ec433e5a/backports_zstd-1.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d76472c4df433267b57b835f6ad3ecae7d677fd9b9bed4593180040a78dbc4bb", size = 481684, upload-time = "2026-05-03T21:10:47.326Z" }, - { url = "https://files.pythonhosted.org/packages/12/08/7ad6c482bb58a0826842f8280f963a81e6d827348e8789bef5941820e497/backports_zstd-1.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:30bc878e8c605bb8f8f60d7510d65705b904aa91657772f9ab294d4adf06da5c", size = 509636, upload-time = "2026-05-03T21:10:48.928Z" }, - { url = "https://files.pythonhosted.org/packages/0b/be/6f738e5e9f7112d133815d16626b3bac4e9bd04761cc32f6554b5791e166/backports_zstd-1.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e1e5c5e4609c85fef1a2d3295a61c839fd30528669c748867a6715043ef2b3bc", size = 585737, upload-time = "2026-05-03T21:10:50.113Z" }, - { url = "https://files.pythonhosted.org/packages/f9/5e/00fd7e8f66e1c8583cbc267cf7521bbf568b26db3e2aa0540fdb6c2d6414/backports_zstd-1.4.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:107104426de5c36fdec3a9df13ee069f4bda1627c478c551bdebebe7d8492c3c", size = 563066, upload-time = "2026-05-03T21:10:51.67Z" }, - { url = "https://files.pythonhosted.org/packages/33/c5/a005d5bad6c5663edc34b0abb849ef5849a29c112fdbe7e6c5fc530c6327/backports_zstd-1.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f16a5747d01d8d35605ad9f52c88b3511f50bc09bd47eb02194dea2149a81734", size = 631611, upload-time = "2026-05-03T21:10:53.008Z" }, - { url = "https://files.pythonhosted.org/packages/1a/01/548d1aee9bab2df1e3fe2b1442a78806bf2f53906687e82251c8de25dffb/backports_zstd-1.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2dfd1fcfb584dfa5c68530e04bd128f8e9c83c5a44f8336019a7d0a00dfc5dc1", size = 495290, upload-time = "2026-05-03T21:10:54.292Z" }, - { url = "https://files.pythonhosted.org/packages/e3/47/7c5368c4b0af76519622146131e76f1536d80fee5085d911d7725853851d/backports_zstd-1.4.0-cp310-cp310-win32.whl", hash = "sha256:0dfdafcd0fdccbf84865ff9414c5bc6ad1131983ed824254f13ef3b07745847d", size = 288663, upload-time = "2026-05-03T21:10:55.486Z" }, - { url = "https://files.pythonhosted.org/packages/24/0a/f1e7081c3f4886fae7da8e97ae74840d22f1b38694a8c244f2f4a952da45/backports_zstd-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:c3c85437fdbf6df3e98a21dbea24cd8faa3db46e347667eb6882769924bad58e", size = 313689, upload-time = "2026-05-03T21:10:56.871Z" }, - { url = "https://files.pythonhosted.org/packages/9a/38/f12cbbc156bfa16dac9d98002d244f7399c4e81f80868dafe466c146460f/backports_zstd-1.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:3c91a19ae24852ae84a58de11eeb0e427f824f2a58245140ab65eebe73f719cd", size = 290385, upload-time = "2026-05-03T21:10:58.441Z" }, - { url = "https://files.pythonhosted.org/packages/ac/a3/965af4a586310e746bc071f5e0ffdb73930486aa67d8ff95fd1731bba1c4/backports_zstd-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2cf117dc4165e24943904b23bf88cc9eeae6084bdcb0a21f1936ce63f17bf0d5", size = 435846, upload-time = "2026-05-03T21:10:59.725Z" }, - { url = "https://files.pythonhosted.org/packages/9e/15/8de2cf36960c910e64ae08947417f7767791d4e49f441dfa167f454008b8/backports_zstd-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:76ffa10a01e3f760cedd454e78ba44c81f6fe7533fe9f0b93884ffa0bc369d23", size = 362235, upload-time = "2026-05-03T21:11:01.001Z" }, - { url = "https://files.pythonhosted.org/packages/e4/38/d1080e708f7695dba350f89dc06f0ac677a490f7b12c1f31c5bffdacf4a8/backports_zstd-1.4.0-cp311-cp311-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:7dd560da7b5aa857524fb277b9882e9f280c50d66cf2aed783408539ba0bc08f", size = 506133, upload-time = "2026-05-03T21:11:02.553Z" }, - { url = "https://files.pythonhosted.org/packages/51/74/a5e19c0c62faa28ea56507a53c633dd1ae377348860ec4d63a851680aedd/backports_zstd-1.4.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:367b1053bfbb51b732700cc7da79ace78f2c8dd864e280e77960578a78dbe5d7", size = 475742, upload-time = "2026-05-03T21:11:03.968Z" }, - { url = "https://files.pythonhosted.org/packages/1e/a5/0d734a48655d9d5303fb2bb914a98d251d7ae28c3810ab88b0fa33a45b78/backports_zstd-1.4.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1cfaf8895e40412c6a9e58c2a73667b61658c96144bdbbcc4476d2b75c50e252", size = 581376, upload-time = "2026-05-03T21:11:05.483Z" }, - { url = "https://files.pythonhosted.org/packages/4c/e0/e43561ea5bcf7e83170e9d15573e036e657cce857ccab4fb6c1857fa8895/backports_zstd-1.4.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:180121cd374ea907a3e76a5b026f9b30a8c85c18d070a4bc12654bdf361a5e69", size = 641046, upload-time = "2026-05-03T21:11:06.881Z" }, - { url = "https://files.pythonhosted.org/packages/86/9a/12539685816526ce2646d3f3f05968444721ec5c62815f39226dc01115ef/backports_zstd-1.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51467cc48d2fe915cacc1e71ac504d51224ea48d83da706de7277a326d1573df", size = 491262, upload-time = "2026-05-03T21:11:08.078Z" }, - { url = "https://files.pythonhosted.org/packages/37/78/7d6003d678420c61b1d5d9518069faf84ea408fd0a66407b08276a78caa7/backports_zstd-1.4.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:30845cbecd892aa849f3606502aeee2d3bb32878f1440be22139f3584792c196", size = 565267, upload-time = "2026-05-03T21:11:09.285Z" }, - { url = "https://files.pythonhosted.org/packages/fe/88/2b03cff79a5e73ae835d49aa7e2765740873d2f19166fe4621b3e7547c88/backports_zstd-1.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2e9646942f2475baab81609ac557399888aff07bf78075ef0c6c833ee1db2ee0", size = 481688, upload-time = "2026-05-03T21:11:10.554Z" }, - { url = "https://files.pythonhosted.org/packages/b4/f4/89cd05edd10ee057b276e91888fbad4e0780f9f5e0fa8aec66042a2cf358/backports_zstd-1.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ad37285b83f6ffab99e49d5717809a97a6d36555f1244b966e8e8c814fe71fae", size = 509639, upload-time = "2026-05-03T21:11:12.187Z" }, - { url = "https://files.pythonhosted.org/packages/95/c9/aa5fb7aaa9338aecd22787a6bc8393e6dd633536c170e6ce24cb33704828/backports_zstd-1.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:05324b32c4329361461b78014b44c42a834b7eea52f599a2e4fade18c95bc32f", size = 585720, upload-time = "2026-05-03T21:11:13.438Z" }, - { url = "https://files.pythonhosted.org/packages/8a/fe/5867498c9906e72a1a75509611d1d9ff7e22b8458456995c49d4c0d8d40a/backports_zstd-1.4.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:4731e81cecc864c474a2f8f30113e53762ae263ed7f5282a52376519d644c23e", size = 563070, upload-time = "2026-05-03T21:11:14.817Z" }, - { url = "https://files.pythonhosted.org/packages/fa/51/d3a40aeecaf16628cbf7ad51bc5ccef78b3ca0fc419548d8ee8f20e7f423/backports_zstd-1.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5068480df23da0f74e34d9659f7ce3b81f6e512a80dce935c6f15a35a7a25be3", size = 631667, upload-time = "2026-05-03T21:11:16.41Z" }, - { url = "https://files.pythonhosted.org/packages/78/71/35feb68e7e456a913ca69403a60caea401d1bb9352a39dd26cabcfe3c35d/backports_zstd-1.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0c4cd20c39aacd0331ff43d517a1d627df31d9a6fcf85e4433063cdc668234f2", size = 495295, upload-time = "2026-05-03T21:11:17.593Z" }, - { url = "https://files.pythonhosted.org/packages/07/fb/015137284bcec9c8826860c804e15bb4ae7b7ac8537c330c4d0ef6227f6f/backports_zstd-1.4.0-cp311-cp311-win32.whl", hash = "sha256:9daa24ba95c62e54f50ac163d2e678df9187060c09b5ece5cef0499996d47e96", size = 288765, upload-time = "2026-05-03T21:11:18.817Z" }, - { url = "https://files.pythonhosted.org/packages/a2/94/c66654822c5f2761b7bcb51cd8013872285f2f1f2eb182026cc166936e3f/backports_zstd-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:519caa21010e5d04b4d28a5d7174983df6004a05e2a33ff7bd3d9de79cbca66c", size = 313830, upload-time = "2026-05-03T21:11:20.372Z" }, - { url = "https://files.pythonhosted.org/packages/12/d7/604e0ef802db621e70b46b2eaa02cdb6194b636fd139c0c55d10a693547c/backports_zstd-1.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:653717a0cb728ad2fef2cb9ac1be3b8e94f8d82082deb907e5927a4f53e5ae15", size = 290517, upload-time = "2026-05-03T21:11:22.326Z" }, - { url = "https://files.pythonhosted.org/packages/66/10/f0a9cd9ede461088fb6693de6da4cd6d118c2b187164680ed69ffe611565/backports_zstd-1.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4f1bafc9994f264c1ba27c8881693be593f4678140e42f53fd9100c4df32a37c", size = 436150, upload-time = "2026-05-03T21:11:23.613Z" }, - { url = "https://files.pythonhosted.org/packages/4a/c5/5b7414dfcce4b72465a2335e747f55ad4fca037ee3dad48a0aee29eac20e/backports_zstd-1.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40e3673dfa38a44cd2f0b47dd0179c056c856fbcd639e7acc3de9c12d245e4e1", size = 362306, upload-time = "2026-05-03T21:11:25.048Z" }, - { url = "https://files.pythonhosted.org/packages/eb/f2/b166503ae8714854c8bca8024a73f1bc698dafbcf0dcca380d9b9d2665fb/backports_zstd-1.4.0-cp312-cp312-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:dd6c8cfbe30e8a8352517185f2e926832f3376a871e21b2907a50d56e920b65d", size = 506554, upload-time = "2026-05-03T21:11:26.274Z" }, - { url = "https://files.pythonhosted.org/packages/58/62/fd82927d7c7a9d331ac531dc25b5f2a4c3aba91f029bac399358d6eeeaec/backports_zstd-1.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4cbb3e96004c13988ac702f9b2cd3a83b5ec1a88b87b4af5ceccbb8c7fd6a5ff", size = 476374, upload-time = "2026-05-03T21:11:27.589Z" }, - { url = "https://files.pythonhosted.org/packages/c1/81/255428a78a0d954dec9ab642f5b94a5be77494c6f0dd85f982b93e79ea99/backports_zstd-1.4.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7281543bbb94aaaf8bec52ecf2335fe3b9e62f4e645a70373c7c86c0ef4ed038", size = 581835, upload-time = "2026-05-03T21:11:28.87Z" }, - { url = "https://files.pythonhosted.org/packages/06/2f/c35b0cec8a4166875689bb0de18dbf93ec629894e256a342a8d47f8281ab/backports_zstd-1.4.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:795276b280feb0306cdb49be754c4830d34456547319415e6d15a9f5e66aa206", size = 640552, upload-time = "2026-05-03T21:11:30.144Z" }, - { url = "https://files.pythonhosted.org/packages/de/8a/a9a789bd74eb6449747b879894c72bc5e2d4d905694ede83cb9493c61f25/backports_zstd-1.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2f5a4eae2c0149c12ec3ed7b033fc1a49d991bcd65c46caa98962650981a645", size = 494342, upload-time = "2026-05-03T21:11:31.416Z" }, - { url = "https://files.pythonhosted.org/packages/28/d7/4b669f1b6fa791a3d460c70f395bff34d16a7e9d29842a57cd0243f2ce5d/backports_zstd-1.4.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:04ddf9d178b16f5e1bf7cf91bc6890f50e88521f00bee4fc4b8f4800466cb4f1", size = 568814, upload-time = "2026-05-03T21:11:32.663Z" }, - { url = "https://files.pythonhosted.org/packages/12/c0/2652674e1b1a58a0df9623b7b8eea8f7dc8b56cfbb1312d4242c8f29b5f2/backports_zstd-1.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:de2c533aebdc3346f23ebd5cde555dfec855ebdadd1f43f305132e2121c18be0", size = 482399, upload-time = "2026-05-03T21:11:34.332Z" }, - { url = "https://files.pythonhosted.org/packages/dc/83/6043e34417311178c3dcbcf9c7e64217898f70af0338f1f2829ba40c4a12/backports_zstd-1.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6d190cd2762fe0000af21083326c79e496cfb8fb626cb1fa72ac938a6891ba52", size = 509976, upload-time = "2026-05-03T21:11:35.587Z" }, - { url = "https://files.pythonhosted.org/packages/1c/f9/3100ded2d1fa383d6c5b5f432632d02965b2a4789110c5d4a4a22dd25002/backports_zstd-1.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:205b9e4b6312418bbd288ccd51a4209eec1183b657c0032c37252eb582f98fca", size = 586211, upload-time = "2026-05-03T21:11:36.846Z" }, - { url = "https://files.pythonhosted.org/packages/d6/2b/25fdbc3572b739d5e97518a7163fb04e714de61626da53e848c5b1ef7dac/backports_zstd-1.4.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:53698379001fa6368842239248bcdac569d8306508cb112d6089c3219148721f", size = 566416, upload-time = "2026-05-03T21:11:38.118Z" }, - { url = "https://files.pythonhosted.org/packages/cb/45/d744dcb801cbf0540d52becf130dc91e628f55239b23b71ab12b602e97dc/backports_zstd-1.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bef65145c8bc95ae91de91d777c70ed77eb1670c700b31920ad06b273780570d", size = 631021, upload-time = "2026-05-03T21:11:39.349Z" }, - { url = "https://files.pythonhosted.org/packages/88/d6/cd4e0f33380fc2416794789849698f61e2577127d2dd146bd537b9b6c885/backports_zstd-1.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6b8fcb353220440267ca0c80d1ca4b86e64630860a19fa62a7f61c5062816f97", size = 498833, upload-time = "2026-05-03T21:11:40.682Z" }, - { url = "https://files.pythonhosted.org/packages/2b/17/6b66bdc5ddcf4c01ef791ab8b14507502b400ffb596c8bb84bff82ed44e2/backports_zstd-1.4.0-cp312-cp312-win32.whl", hash = "sha256:b91bfdab224752430c6daba8eff8f57800732e818b070a21a3332e734445438f", size = 288894, upload-time = "2026-05-03T21:11:42.086Z" }, - { url = "https://files.pythonhosted.org/packages/d2/ea/32b5826d6aae92f8d8120b9871329aae1260719030b29676079d07820088/backports_zstd-1.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:22c47d8d712202278cb148ce07375518a8f88586cd481523d1043553d506b6e7", size = 314034, upload-time = "2026-05-03T21:11:43.319Z" }, - { url = "https://files.pythonhosted.org/packages/1a/4b/3eae339639b7d97b1fe9b89e6489468ffd366d31cd8ae935b97a740fdd5c/backports_zstd-1.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:94697008a72e3c1297986d558c228a7ffc091c4dcb77ff81bf841855a78dcdfc", size = 290692, upload-time = "2026-05-03T21:11:44.527Z" }, - { url = "https://files.pythonhosted.org/packages/e4/9a/a490cbe666655004c433b9c8c1076bdb1a5945112c92f1abc20280f9f4da/backports_zstd-1.4.0-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:84503d12e7b2d053c82abec506925eccd22c3890cfc27d6c982b0e6d83242d4b", size = 399132, upload-time = "2026-05-03T21:11:45.66Z" }, - { url = "https://files.pythonhosted.org/packages/e0/8b/84de040b1a894dfa4677f21d4a634543eca8a8bf77d00c711ef983c27ab6/backports_zstd-1.4.0-cp313-cp313-android_21_x86_64.whl", hash = "sha256:7bd3514bc7f57f39e2c8df33ce82b38a17a27130fbed0028d50d3255f385ea95", size = 453203, upload-time = "2026-05-03T21:11:46.864Z" }, - { url = "https://files.pythonhosted.org/packages/d8/fd/c8098ad06196207ce7b799e528cf6b5b6ffed886a9468073606267b8a2c1/backports_zstd-1.4.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:4e9cbc52a2bfcb480da5d9b4090307e4155c22758801d596c7a2338ba4be3629", size = 356216, upload-time = "2026-05-03T21:11:48.127Z" }, - { url = "https://files.pythonhosted.org/packages/ce/77/3476b7976305cd8c180bdb8997b9c52f8ce06d8c5f2e60d4ef22bca2f906/backports_zstd-1.4.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:ec2d86b6fed33e802098e8422d13eb0b8a5d056e2f42ee3249e1a453979e8203", size = 364915, upload-time = "2026-05-03T21:11:49.597Z" }, - { url = "https://files.pythonhosted.org/packages/4c/03/4764e4d8fa23c73fe93eb0da0f4b16fddbca79ab48894bc92dd8bd785f50/backports_zstd-1.4.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:113852c6b4e52796955c5d6d366828f8d859b4b96ad57fafc627a7fb691cdd62", size = 445464, upload-time = "2026-05-03T21:11:51.001Z" }, - { url = "https://files.pythonhosted.org/packages/bb/a7/76f6c859c4c8dad9e00aa4170cc6ce3729422196aecbe68af54d404db85f/backports_zstd-1.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9c9f7c7ebb6d39a2d8b1c2783b16a1f2f4595879265c4f0aa00b053c09d23993", size = 435641, upload-time = "2026-05-03T21:11:52.184Z" }, - { url = "https://files.pythonhosted.org/packages/dc/9a/a688ff0ac4614c6880ab29a9497cdf26edf0474b09db1710084d1b2c1de3/backports_zstd-1.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:13c7d3ab1382dea0693aa31ca076b3dff75235aafafc2cc2d323258db3dece93", size = 361915, upload-time = "2026-05-03T21:11:53.411Z" }, - { url = "https://files.pythonhosted.org/packages/b1/0a/9467dd583156dec395a0858729ee59f49ffb23b19db3bf08fa5dca61ac75/backports_zstd-1.4.0-cp313-cp313-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:b5a28771464ccac584ea7712a2cb34491106769dc02a0fa5d76e38c3ce3ccb4e", size = 505831, upload-time = "2026-05-03T21:11:54.646Z" }, - { url = "https://files.pythonhosted.org/packages/e7/e3/a4ec786ebb4793c69e8f449012aa8f6f2913fdfd1841ee23dab6aab3b09e/backports_zstd-1.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:406112854cee9f052c7cca22840094b5d3a5456466b9b90493598a7861c64e83", size = 476016, upload-time = "2026-05-03T21:11:56.093Z" }, - { url = "https://files.pythonhosted.org/packages/8e/57/0390ba883c8b2f3d2da7e008da147ded0c61d69d5a0be98a624532cd3892/backports_zstd-1.4.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:11742cbf51a068c5fe1b3b95297e5bb8fd9b90bfa45a02eb59a8269a34e26394", size = 581513, upload-time = "2026-05-03T21:11:57.601Z" }, - { url = "https://files.pythonhosted.org/packages/e6/36/b875158a70ffa5420796772e10ad31f5742d1028b6c91356050eb870fdbd/backports_zstd-1.4.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1965d5e417637c38ec2d4090fb8f777b9783f2929af2f4bfd9be1d32266f28a6", size = 642346, upload-time = "2026-05-03T21:11:59.118Z" }, - { url = "https://files.pythonhosted.org/packages/07/3e/aa0b9fc92c4100b931358b083876f227b619d4373af1eebbb1725c159df7/backports_zstd-1.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0807b944b2642e27fce7e0946cc91cf89b5a570fd63414b8100c72b97883f025", size = 490980, upload-time = "2026-05-03T21:12:00.585Z" }, - { url = "https://files.pythonhosted.org/packages/44/60/4f77a8b3f95bc768a4c15174f857f6d414b36744c236165b745c34158e56/backports_zstd-1.4.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e1a5abcb3ceed254a93e5db570336b4751a72cfb7435fa19cf5f5ac99ba12eab", size = 566235, upload-time = "2026-05-03T21:12:02.196Z" }, - { url = "https://files.pythonhosted.org/packages/65/c0/ee0b02a74a1265d46ba66c601b37e23e61321250557744b7cdd86a0578aa/backports_zstd-1.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4ed1bab84018895b45b78d0206007854551784f0ca6afca708c3c999785b1fdf", size = 481821, upload-time = "2026-05-03T21:12:03.728Z" }, - { url = "https://files.pythonhosted.org/packages/b9/56/284477ddd0eac84815049f2f2597153cf0d8c1f0d603063f4b57e28eb589/backports_zstd-1.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7eb5eb0606cada9a80300936c7e2a6d1fd4d6a85778bf79a0123672c59c7d64e", size = 509379, upload-time = "2026-05-03T21:12:04.973Z" }, - { url = "https://files.pythonhosted.org/packages/99/b5/43d9a674d3f168da898063914dd1e8914fc7a400c453ee1bfb950aba5fcf/backports_zstd-1.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ae51abe97c7e4f55da4bfd3ea6e2b8c8ea51cfb6a9eaffe4b083a03ba402e5c", size = 585957, upload-time = "2026-05-03T21:12:06.6Z" }, - { url = "https://files.pythonhosted.org/packages/2d/99/43f3ae1b30f31968394730eaf91fcd2d5ab86083e8936e47ccbaed999c0f/backports_zstd-1.4.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:500970de01c10608a4f225c23b799c97164c0f27cadf620e449d3461c824590a", size = 564024, upload-time = "2026-05-03T21:12:07.984Z" }, - { url = "https://files.pythonhosted.org/packages/35/1a/38b039aed0b9656f029c95021460a5900d670bb8001ecd67a684862b3704/backports_zstd-1.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ed3e2b0c762eb4c61586d3f2468e2c3f59cb2f66b61419aa18686468a9551ae8", size = 632753, upload-time = "2026-05-03T21:12:09.363Z" }, - { url = "https://files.pythonhosted.org/packages/fb/b5/6e5cf800234186bf3b9346779455cf9f2b2082eda9dba8080f00ecc7bb38/backports_zstd-1.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:03ede9c0584d2211e699955fbfb936c11f7eb57a91f1499ed61d7a743a656cc6", size = 495271, upload-time = "2026-05-03T21:12:10.94Z" }, - { url = "https://files.pythonhosted.org/packages/88/15/7fb513b17a0b0afb00859c2d9b64c8b8625915ad625bd270fe39e6fe965c/backports_zstd-1.4.0-cp313-cp313-win32.whl", hash = "sha256:24d107d5d32106cb9c2ed17bb236ad5e6ba2e1ae9a5bec650895acf71205d82a", size = 288588, upload-time = "2026-05-03T21:12:12.509Z" }, - { url = "https://files.pythonhosted.org/packages/9f/ff/f5f08621f40d2c5c0e30403d6700b33f54c60d6eb6a2c7e481d8495098ed/backports_zstd-1.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:37c70e9fffc8d0b3d755e1bb1822387138a02abe43cec05914827345fd926a46", size = 313820, upload-time = "2026-05-03T21:12:14.215Z" }, - { url = "https://files.pythonhosted.org/packages/c4/26/bb9330535bd975d5c6f0764461f4ccfecf513a1c6095e1fe05b7453c2707/backports_zstd-1.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:50ddb677384c349d1cca6cd54c37f2e4aa0a5811c3e4ea427b6cbf63cd1fc4e1", size = 290427, upload-time = "2026-05-03T21:12:15.405Z" }, - { url = "https://files.pythonhosted.org/packages/5b/0d/6fc1c300267446b5f737efd38727c3bc486926c40422d475a8e55ea64b45/backports_zstd-1.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:06083e297e7f4a159696c6c320a16f3f958944c54793bf1b3d45c87020c4fd71", size = 409943, upload-time = "2026-05-03T21:12:16.666Z" }, - { url = "https://files.pythonhosted.org/packages/be/e6/8a5dda4b3af02388991b4d3a549246ce8704110e4378adad87c89bf05e1f/backports_zstd-1.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ea2d511c31626b5f861c5bdcc20faea1a833df65728f7372aded6f832cc530d7", size = 339461, upload-time = "2026-05-03T21:12:17.873Z" }, - { url = "https://files.pythonhosted.org/packages/37/3d/eabfa44eb809e539a38560430c47ba3ef82b9f82fa14909fc8c5ae5474f6/backports_zstd-1.4.0-pp310-pypy310_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:18f0fef8cc4c2e493e0c7af5d9b0b3f420227dc2538089ca7c6e9e6d2c823a86", size = 420503, upload-time = "2026-05-03T21:12:19.055Z" }, - { url = "https://files.pythonhosted.org/packages/8d/60/9c87bdb4faec5d6f0ee305127230beeb262db5c1f3e0021a6c64262c2e42/backports_zstd-1.4.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:04a548267d16ca0085542667f6ba06f1f180771a791877966b66b9335c1ec35b", size = 394047, upload-time = "2026-05-03T21:12:20.322Z" }, - { url = "https://files.pythonhosted.org/packages/5d/ad/6a52a7e63e92aa926eee0397b03d09227d62cfee1d0e03a7cb50c0cc1601/backports_zstd-1.4.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5db3c31906055b8cbaf06f0818ab68b3269493f3d6d5203639d82bd550bbdb2", size = 414012, upload-time = "2026-05-03T21:12:21.675Z" }, - { url = "https://files.pythonhosted.org/packages/91/55/6c920f7111f0dcee24c0cfe079690d9ebf3967b4912fb7768c0e9358175b/backports_zstd-1.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0c78c97abc3166d0e420d13398a7559f755b7000d69c6732cfc00cebb0fa0660", size = 299885, upload-time = "2026-05-03T21:12:23.006Z" }, - { url = "https://files.pythonhosted.org/packages/be/96/87304c86de46a52cfe363102433a0f8595a99e792766fec7ebf10a87144e/backports_zstd-1.4.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9dfa9a7cd529f54eb7cf2769fb9759bb29c46a0c334f24b0d1a9311e9421f4a8", size = 409842, upload-time = "2026-05-03T21:12:24.346Z" }, - { url = "https://files.pythonhosted.org/packages/8f/47/54c5d2c84c14a0f13ee452eabba18b797f424bfdd31e53a294f242280fb1/backports_zstd-1.4.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:07df8bb2b2063d52ca071e02027309beba474fcbd6654f6b1ff3e6e659fafeb8", size = 339373, upload-time = "2026-05-03T21:12:25.592Z" }, - { url = "https://files.pythonhosted.org/packages/77/ce/1f497b69ffbacef7ee23ca30d0657d33f89d26b1f4cc6bf7ec1f85cca1b4/backports_zstd-1.4.0-pp311-pypy311_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:a9fec1f706434b1a505fbe4ca41a4d3d3bcb8aa125f5eb9bf28d15bc6a1c3621", size = 420504, upload-time = "2026-05-03T21:12:26.969Z" }, - { url = "https://files.pythonhosted.org/packages/e2/82/79af6c52ef353df8270d5f23117efc63dad20ae8c98faa6a375e6445856d/backports_zstd-1.4.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:19b9e674d16f3f73c018a899a2a02d27acc260cbcd167af00cb2a9649a81939d", size = 394046, upload-time = "2026-05-03T21:12:28.15Z" }, - { url = "https://files.pythonhosted.org/packages/29/bb/93ec35462ed49d5c24cf943acafe6e41236ca0fd1655ac8dcdd10a6be781/backports_zstd-1.4.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d8563678d6166e87f1fee8ef24f3e4b9e3d22af1c423ca7ce56c99424c3a169c", size = 414011, upload-time = "2026-05-03T21:12:29.783Z" }, - { url = "https://files.pythonhosted.org/packages/e6/c9/7c56d128c1f5426cdedf22df3297965c8440458fadf1611cf01432ef19e3/backports_zstd-1.4.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6d11051444dba7dc10da1e4fccc309a824d8fbf4ca7503cbb20f524f37e39c67", size = 299886, upload-time = "2026-05-03T21:12:30.997Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/d4/05/480d439b482edf59b786bc19b474d990c61942e372f5de3dc14acac8154d/backports_zstd-1.5.0.tar.gz", hash = "sha256:a5e622a82eb183b4fbe18032755ce0a15fa9a82f2adb9b621620b91247aaedb7", size = 998556, upload-time = "2026-05-11T19:54:24.923Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/6e/bc24b45e16381272db45bfe627c1762600fc5fbcd39cef3723c89425129e/backports_zstd-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09045a00d9dad12dab49e029b26c197637b882cf4adc737a373404ba2aaabbca", size = 436832, upload-time = "2026-05-11T19:51:54.343Z" }, + { url = "https://files.pythonhosted.org/packages/e2/87/85bc9b98bd0bbbe76af0aa19d423eb93906467110e4cdd4741fd8d26def5/backports_zstd-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e51edd66db6855bee020c951ca5c2e816777bfe77f87742fbbfae9a32d482fec", size = 363217, upload-time = "2026-05-11T19:51:56.359Z" }, + { url = "https://files.pythonhosted.org/packages/c1/61/b461cf3620ee3a55e20d885ef61c5ab56a3745ccc0d422f74968337777ca/backports_zstd-1.5.0-cp310-cp310-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:73ff4ceb7e28538455e0a44f53e05a731bbdb9bfe2cab4a1637dd1f0093732e3", size = 507163, upload-time = "2026-05-11T19:51:57.957Z" }, + { url = "https://files.pythonhosted.org/packages/ed/cb/4e0063bf90d6fd17329ff271e131758d5d96a73061b6d45577a8be6ebf42/backports_zstd-1.5.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a9526d69c8fbef03e04d74b33946e23f806399cb49e51550bb21d757fb2ce869", size = 476728, upload-time = "2026-05-11T19:51:59.822Z" }, + { url = "https://files.pythonhosted.org/packages/11/4a/ee0c81e24789781fcc8399817e5c82121001293dbbaf17629833ff0d34e8/backports_zstd-1.5.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5e24ee1e1bbb4549a2ad63695b4a5776596aa171fdaf7c1e178e61e351faf0a9", size = 582391, upload-time = "2026-05-11T19:52:01.776Z" }, + { url = "https://files.pythonhosted.org/packages/e3/aa/3c2c28492656af005ed9602beab4c20813346b53257413ae57bf88adbd41/backports_zstd-1.5.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ebfbf7307d618d68deef905d3d6655339d4ce187e176023bff8fbd44ec1e20d0", size = 642040, upload-time = "2026-05-11T19:52:03.396Z" }, + { url = "https://files.pythonhosted.org/packages/9e/ad/9070e691597657bd3b983d8c8ba46bc6ee4d394608e7be969f2060f16899/backports_zstd-1.5.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b82506a4da0977754335c727752411bbba1fe476a8662d96161218f275fba859", size = 492266, upload-time = "2026-05-11T19:52:05.16Z" }, + { url = "https://files.pythonhosted.org/packages/9e/ec/7222e9e8ca899cf9d538468b0fb6386da93dae94f6e60625a7ef99281672/backports_zstd-1.5.0-cp310-cp310-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4cf8355cdfa7a2cba9c51655d56e6be39c751799286b142640be30fef2301a70", size = 566215, upload-time = "2026-05-11T19:52:07.037Z" }, + { url = "https://files.pythonhosted.org/packages/9f/f8/bf880d87cfb71ad9753142d2ad0802015ee4a343b8c080ea6f0eb6b05bfb/backports_zstd-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f7de15f3871d21d6e761c5a309618b069fee5f225e64e4406956ac0209dc6917", size = 482662, upload-time = "2026-05-11T19:52:08.726Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ed/fc7144651682744b32de1e624bcad6d0bb72d6359e37a5d9e980f3d5a45b/backports_zstd-1.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:624825b9c290e6089cd9955d88da04b085528fe213adf3e4e8be5c0fffef6c65", size = 510592, upload-time = "2026-05-11T19:52:10.244Z" }, + { url = "https://files.pythonhosted.org/packages/f6/40/436ee1aa915fa310d0e83c361f25757960f96ef798f532948351637125fd/backports_zstd-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:7088a75f96d8f6b0d3523ec3a99d1472ce03c3524b2f7b485b80e115ef20055f", size = 586713, upload-time = "2026-05-11T19:52:12.153Z" }, + { url = "https://files.pythonhosted.org/packages/55/9b/16573be05e8fe54cb356d9aa9aeb84d1e14fd49fe23ea7f261027e2e7f25/backports_zstd-1.5.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:97f4d29e99538b11313cbc7a6d9b3c2ce0d69fdc497699ab74953d0d5949ab88", size = 564032, upload-time = "2026-05-11T19:52:13.864Z" }, + { url = "https://files.pythonhosted.org/packages/95/33/7cf01fb8b4cff1ea6c7fee19d64de8a1a8dec7b18703af2aca79c8f87864/backports_zstd-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8b4e17632759a45a7d0c4cf31968d8d033eefbe1a3d81d8aaf519558371c3359", size = 632604, upload-time = "2026-05-11T19:52:15.469Z" }, + { url = "https://files.pythonhosted.org/packages/1a/03/547b4e0abf8e1c2f29314e1e3ed7a3e2054b22560b2bad843423fbb99140/backports_zstd-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0075195c79c0508bc7313a3402b187bd9d27d4f9a376e8e2caac0fc2baeacbdf", size = 496272, upload-time = "2026-05-11T19:52:17.064Z" }, + { url = "https://files.pythonhosted.org/packages/cd/ff/28c94189774b62c26ddf65ee54ec3591f6f0217d9545d20854f8600541b0/backports_zstd-1.5.0-cp310-cp310-win32.whl", hash = "sha256:11c694c9eef69c19a52df94466d4fd5c8b1bdfbaad350e95adc883b40d8b3be2", size = 289665, upload-time = "2026-05-11T19:52:18.946Z" }, + { url = "https://files.pythonhosted.org/packages/18/0e/579f193d023c099ecaf560aae72701bfa6bacc5486cf57f91236b9c1404e/backports_zstd-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:c1ea900765329a515020e4e66c65a826657cc1f110770cac3f71ec01b43f2d25", size = 314698, upload-time = "2026-05-11T19:52:20.734Z" }, + { url = "https://files.pythonhosted.org/packages/7e/f7/1cfc87f0171268ffb3eb479f0b8ef936164cbb6bddd1fbf1457e1ac8aecb/backports_zstd-1.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:0c473387025e233d123f401d09a17a57e0b9af2ec2423aae7f50f1c806887cb3", size = 291362, upload-time = "2026-05-11T19:52:22.486Z" }, + { url = "https://files.pythonhosted.org/packages/26/bc/083c0ebee316f4863ed288c4a5eaa1e98be115e82deb8855da8bab1c7701/backports_zstd-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fbaa5502617dc4f04327c7a2951f0fcdca7aaef93ddf32c15dc8b620208174fa", size = 436838, upload-time = "2026-05-11T19:52:24.349Z" }, + { url = "https://files.pythonhosted.org/packages/cd/e5/bf778667fff6598dbd0791745123ed964aee94753ae8e4e92aa1e07417b6/backports_zstd-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:204f00d62e95aab987c7c019452b2373bdefb17252443765f2ede7f15b6e669a", size = 363215, upload-time = "2026-05-11T19:52:25.887Z" }, + { url = "https://files.pythonhosted.org/packages/63/a5/4fae78734dbefcb4b5386137c807e2107c4bc94e85c0d9eaae79206dde84/backports_zstd-1.5.0-cp311-cp311-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:2c77c0d4c330afd26d2a98f3d689ab922ec3f046014a1614ddcaad437666ac05", size = 507161, upload-time = "2026-05-11T19:52:27.48Z" }, + { url = "https://files.pythonhosted.org/packages/d8/ec/b64409f0cf56fb65181d6f5d9130058f19d5c3c9f8c581a5e2bd62642630/backports_zstd-1.5.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6bb2f2d2c07358edeaa251cf804b993e9f0d5d93af8a7ea2414d80ff3c105e95", size = 476728, upload-time = "2026-05-11T19:52:29.182Z" }, + { url = "https://files.pythonhosted.org/packages/4d/10/4c1693cb4e129585a6e4cb565106cad7347e61c43c8375b9e9cadb00eb06/backports_zstd-1.5.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89f554abcebcb2c487024e63be8059083775c5fd351fec0cc2dc3e9f528714", size = 582388, upload-time = "2026-05-11T19:52:30.908Z" }, + { url = "https://files.pythonhosted.org/packages/45/b9/dc748a0e7d21ce2228241f6e8af96d297c80ab69c4c49429309b8fa3beb8/backports_zstd-1.5.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ea969758af743000d822fc3a69dc9de059bbbb8d07d2f13e06ff49ac63cce74f", size = 642091, upload-time = "2026-05-11T19:52:32.397Z" }, + { url = "https://files.pythonhosted.org/packages/de/5f/02366ddae6e008d53df71605e4e3ca8dcea5d1dfcba29040b46883a23127/backports_zstd-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:775ad82d268923639bc924013fc61561df376c148506b241f0f80718b5bb3a2f", size = 492256, upload-time = "2026-05-11T19:52:34.441Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c7/c5e7824c17abc87dbb24c7c90dc43054d701533cf04d3531cb9b7105cdac/backports_zstd-1.5.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:663128370bbc2ebcc436b8977bc434a7bf29919d92d91fee05ed6fb0fa807646", size = 566214, upload-time = "2026-05-11T19:52:35.962Z" }, + { url = "https://files.pythonhosted.org/packages/12/7b/ee7368c4ad8f5e00b3fd84fc566fb7714aa766c5672500793990e19efa00/backports_zstd-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:572c76832e9a24da4084befa52c23f4c03fede2aa250ae6250cbc5a11b980f69", size = 482666, upload-time = "2026-05-11T19:52:37.675Z" }, + { url = "https://files.pythonhosted.org/packages/77/36/2826f9f04b6c91d5f707f49188ac6f5ec7487b36d73caedfa20db3307826/backports_zstd-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9410bcbcd3afd787a15a276d68f954d1703788c780faa421183a61d39da8b862", size = 510594, upload-time = "2026-05-11T19:52:39.501Z" }, + { url = "https://files.pythonhosted.org/packages/84/3b/95342baf0e301b7d06c6862389f8520a9d71f073a6c1a5b86182e7d89148/backports_zstd-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0fab15e6895bef621041dd82d6306ffa24889257dd902c4b98b88e4260b3465d", size = 586713, upload-time = "2026-05-11T19:52:41.461Z" }, + { url = "https://files.pythonhosted.org/packages/bc/32/73d2b8f572960307406b084bb8932f4ebd9fcedb05d1502e04fecf25970a/backports_zstd-1.5.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2ffde637b6d0082f1c3356657002469cf199c7c12d50d9822a55b13425c778d3", size = 564037, upload-time = "2026-05-11T19:52:43.15Z" }, + { url = "https://files.pythonhosted.org/packages/8f/a4/6e319fa7fa5851c3ca9701cbded9522c16018432a01a33a95cc0fccb6b4a/backports_zstd-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c01d377c1489cb2230bf6a9ff01c73c42863cc96ee648c49923d4f6d4ea4e2d5", size = 632626, upload-time = "2026-05-11T19:52:45.017Z" }, + { url = "https://files.pythonhosted.org/packages/67/5c/10df0444db05f9276b286d230a3d6948ad47c593fc22925b8fe551d34b26/backports_zstd-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4080bb9c8a51bb2bf8caf8018d78278cd49eb924cb06a54f56a411095e2ac912", size = 496270, upload-time = "2026-05-11T19:52:46.558Z" }, + { url = "https://files.pythonhosted.org/packages/f1/ad/6cd1de5cd858ac653833098f13a4643a4c9db484072350d3dbf299cc46f1/backports_zstd-1.5.0-cp311-cp311-win32.whl", hash = "sha256:9f4fe3fd82c8c6e8a9fdc5c71f92f9fe2442d02e7f59fddef25a955e189e3f38", size = 289754, upload-time = "2026-05-11T19:52:48.232Z" }, + { url = "https://files.pythonhosted.org/packages/1d/1b/df94ad1cb79705d717f7e1063da642c538a6d7ce6443c8e60355fa507ea4/backports_zstd-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:e7c0372fa036751109604c70a8c87e59faaacc195d519c8cb9e0e527ee2b5478", size = 314829, upload-time = "2026-05-11T19:52:50.031Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e7/24e60da7cc89b9ed1c5b474678e316dd0ddfe7cd1de39b23d04452ca5946/backports_zstd-1.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:264a66137555bb4648f7e64cfc514d820758072684f373269fcdd2e8d4a90306", size = 291497, upload-time = "2026-05-11T19:52:51.729Z" }, + { url = "https://files.pythonhosted.org/packages/24/71/29ed213344f8f62b7520745d7df3752d88db456aff9d8b706bdf5eb99a3c/backports_zstd-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1858cacdb3e50105a1b60acdc3dd5b18650077d12dce243e19d5c88e8172bd71", size = 437170, upload-time = "2026-05-11T19:52:53.204Z" }, + { url = "https://files.pythonhosted.org/packages/d0/e3/a58a3eb8fc54d4e3e4f684ed7b1f688da02e5bda5ae5e2809e94cf2ead2f/backports_zstd-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ccffc0a1974ecc2cc42afa4c15f56d036a4b2bae0abc46e6ba9b3358d9b1c037", size = 363265, upload-time = "2026-05-11T19:52:55.153Z" }, + { url = "https://files.pythonhosted.org/packages/3f/03/9d13840d206dec1c4698c803f61c58379b3578cb9dc6140ba5fa4ce2f31d/backports_zstd-1.5.0-cp312-cp312-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:ab3430ab4d4ac3fb1bc1e4174d137731e51363b6abd5e51a1599690fe9c7d61d", size = 507527, upload-time = "2026-05-11T19:52:57.256Z" }, + { url = "https://files.pythonhosted.org/packages/6a/8f/8dc4b5736dca218cbca9609549a8f6dc202990abdb49afdc6112442f5360/backports_zstd-1.5.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c737c1cb4a10c2d0f6cba9a347522858094f0a737b4558c67a777bcaa4a795cd", size = 477352, upload-time = "2026-05-11T19:52:59.425Z" }, + { url = "https://files.pythonhosted.org/packages/96/2c/65a66976a761b5b62eacbaed5ed418c694b24b5c480399315d799751de62/backports_zstd-1.5.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0379c66510681a6b2780d3f3ef2cff54d01204b52448d64bde1855d40f856a04", size = 582799, upload-time = "2026-05-11T19:53:01.303Z" }, + { url = "https://files.pythonhosted.org/packages/d3/e9/ee93a66cd28cb3ad7f3c04d1105325a5428671b18bd41ba9ed8b43bc44cf/backports_zstd-1.5.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7c7474b291e264c9609358d3875cf539623f7a65339c2b533020992b1a4c095b", size = 641530, upload-time = "2026-05-11T19:53:03.082Z" }, + { url = "https://files.pythonhosted.org/packages/e4/4b/2cecd4d6679f175f28ae02022bd2050ff4023e38902fae104dbe2e231911/backports_zstd-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bb73c22444617bc5a3abf32dd27b3f2085898cfe3b95e6855300e9189898a3bd", size = 495324, upload-time = "2026-05-11T19:53:05.005Z" }, + { url = "https://files.pythonhosted.org/packages/4d/20/ee21e4e791e31f38f7a70b3961eb64b350d9be802a335e7a04c02b41b197/backports_zstd-1.5.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6cd7f6c33afd89354f74469e315e72754e3040f91f7b685061e225d9e36e3e8e", size = 569796, upload-time = "2026-05-11T19:53:07.011Z" }, + { url = "https://files.pythonhosted.org/packages/76/da/86c9a2ea384885b60638b3e47113198449568d0e36ef3834d1f969623092/backports_zstd-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2106309071f279b38d3663c55c7fed192733b4f332b50eb3fa707e54bad6967a", size = 483367, upload-time = "2026-05-11T19:53:08.674Z" }, + { url = "https://files.pythonhosted.org/packages/5d/f0/c95c6e4dd28fc314547782a482839e422283d62c2aaf45d30672109a4a1e/backports_zstd-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:56fffa80be74cb11ac843333bbdc56e466c87967706886b3efd6b16d83830d90", size = 510976, upload-time = "2026-05-11T19:53:10.339Z" }, + { url = "https://files.pythonhosted.org/packages/0e/a2/72777b7e1872228a13b09b0bf77ae6cf626008d462cc2e1a0ae64721fd55/backports_zstd-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5e8b8251eec80e67e30ec79dfc5b3b1ada069b9ac48b56b102f3e2c6f8281062", size = 587190, upload-time = "2026-05-11T19:53:12.205Z" }, + { url = "https://files.pythonhosted.org/packages/f5/a1/db5d1aee59da308eadeaa189764a4ec68e98495c309a13dcb8da5718fef1/backports_zstd-1.5.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:f334dd17ffead361aa9090e40151bd123507ce213a62733121b7145c6711cbde", size = 567395, upload-time = "2026-05-11T19:53:14.245Z" }, + { url = "https://files.pythonhosted.org/packages/00/0f/39ca1a6e8c5c2dc81da9e06c44d1990cc464f4b16dae214e877afd7adfc0/backports_zstd-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:78cbfd061255fef6de5070a54e0f9c00e8aabad5c99dd2ad884a3a7d1acc09ae", size = 632048, upload-time = "2026-05-11T19:53:16.234Z" }, + { url = "https://files.pythonhosted.org/packages/73/fd/a438ee4fc615016dbe96112b709b6805ee19eb215f46e208c8fbce086d8d/backports_zstd-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2f55d70df44f49d599e20033013bc1ae705202735c45d4bca8eb963b225e15fd", size = 499833, upload-time = "2026-05-11T19:53:17.85Z" }, + { url = "https://files.pythonhosted.org/packages/f7/42/f544fde4de32687e28c514288ae3c11106ba644e9dd580992cbd704bbb49/backports_zstd-1.5.0-cp312-cp312-win32.whl", hash = "sha256:a8b096e0383a3bcab34f8c97b79e1a52051189d11258bbc2bc1145997a15dd1d", size = 289876, upload-time = "2026-05-11T19:53:19.486Z" }, + { url = "https://files.pythonhosted.org/packages/ad/31/9c29cd3175892e5ee909f5e8d14707fa07815301ff24b5c697d1cea62a77/backports_zstd-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:e2802899ba4ef1a062ffe4bb1292c5df32011a54b4c3004c54f46ec975f39554", size = 314933, upload-time = "2026-05-11T19:53:20.942Z" }, + { url = "https://files.pythonhosted.org/packages/11/ee/1a50acd6446c0d57c4f93ad6ce68e1a631ad920737a6b2d0bbbc47de7f42/backports_zstd-1.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:3c0353e66942afbd45518788cfbd1e9e117828ceb390fa50517f46f291850d8e", size = 291665, upload-time = "2026-05-11T19:53:22.686Z" }, + { url = "https://files.pythonhosted.org/packages/c6/e6/252521e3a847eb200bc0a1d528542d651b9c8dc7953e231c39ed2890d5ff/backports_zstd-1.5.0-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:02a57ee8598dd863c0b11c7af00042ce6bc045bf6f4249fa4c322c62614ca1fd", size = 400134, upload-time = "2026-05-11T19:53:24.28Z" }, + { url = "https://files.pythonhosted.org/packages/36/43/27ef105ffa2da3d52218d4a7b2e14037974283953b3ee790358af6e9b4df/backports_zstd-1.5.0-cp313-cp313-android_21_x86_64.whl", hash = "sha256:c56c11eb3173d540e1fb0216f7ab477cbd3a204eca41f5f329059ee8a5d2ad47", size = 454225, upload-time = "2026-05-11T19:53:25.874Z" }, + { url = "https://files.pythonhosted.org/packages/0e/c9/cdcba1244347500d00567ce2cd6bf04c92d1b0fb6405fb8e13c07715eb46/backports_zstd-1.5.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:ef98f632026aa8e6ce05d786977092798efbe78677aa71219f22d31787809c90", size = 357229, upload-time = "2026-05-11T19:53:27.661Z" }, + { url = "https://files.pythonhosted.org/packages/df/da/cea04dab3ffb940bde9a59866bde6f2594a7b3ef2948a63fb3898f73d311/backports_zstd-1.5.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:c3712300b18f9d07f788b03594b2f34dfad89d77df96938a640c5007522a6b69", size = 365907, upload-time = "2026-05-11T19:53:29.241Z" }, + { url = "https://files.pythonhosted.org/packages/da/c4/6a71df2e65033f9b7d8017d77ea2bb572fc2ebc814ea383fdcda4187597a/backports_zstd-1.5.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:bdbc75d1f54df70b65bcfbc8aa0cac21475f79665bb045960af606dc07b56090", size = 446453, upload-time = "2026-05-11T19:53:30.888Z" }, + { url = "https://files.pythonhosted.org/packages/66/e7/f98ad1a6a249c27884df9d28cf6ebc3c368e0e3288a741c1d51a572bb3d7/backports_zstd-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93d306300d25e59f1cbe98cda494bf295be03a20e8b2c5602ee5ddc03ded29f2", size = 436634, upload-time = "2026-05-11T19:53:32.484Z" }, + { url = "https://files.pythonhosted.org/packages/ba/42/d0393ecc64e2ab6ae1b5ca7edbe26e3fe5196885f15d6cc4bce7254e29cd/backports_zstd-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:305d2e4ae9a595d0fd9d5bea5a7a2163306c6c4dcc5eec35ecd5008219d4580e", size = 362867, upload-time = "2026-05-11T19:53:34.385Z" }, + { url = "https://files.pythonhosted.org/packages/41/fe/87aa9404763bada695d06e5cb9d0575bae033cbf3a2e4e3bd648760178f7/backports_zstd-1.5.0-cp313-cp313-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:c8f0967bf8d806b250fb1e905a6b8190e7ae83656d5308989243f84e01fa3774", size = 506844, upload-time = "2026-05-11T19:53:36.023Z" }, + { url = "https://files.pythonhosted.org/packages/56/94/3af7ce637d148e0b0acb1298b61afe9a934ed425bad9ff05e87afbf6766d/backports_zstd-1.5.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:76b7314ca9a253171e3e9524960e9e6411997323cf10aecbbc330faa7a90278d", size = 476975, upload-time = "2026-05-11T19:53:37.885Z" }, + { url = "https://files.pythonhosted.org/packages/aa/6c/dc2aa1b48296ac6effc3bacb5a3061d40ed74bf73082dfe38eed2ba8362b/backports_zstd-1.5.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b1d0bf16bba86b1071731ced389f184e8de61c1afcafa584244f7f726632f92f", size = 582496, upload-time = "2026-05-11T19:53:39.812Z" }, + { url = "https://files.pythonhosted.org/packages/f6/38/dd49d3dd27eda9b165ccd63d70538fea016a3e9e42923bbbc1d89fae8a43/backports_zstd-1.5.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:96709d27d406008575ef759405169d538040156704b457d8c0ac035127a46b67", size = 643257, upload-time = "2026-05-11T19:53:41.819Z" }, + { url = "https://files.pythonhosted.org/packages/59/75/78e819272450aec2462f97a1bceb90bde481f9dba435bf9e76d580b4dec4/backports_zstd-1.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5737402c29b2bd5bc661d4cde08aed531ed326f2b59a7ad98dc07650dc99a2c9", size = 491958, upload-time = "2026-05-11T19:53:43.501Z" }, + { url = "https://files.pythonhosted.org/packages/62/ae/d860f9cf21cb59d583a12166353bf71a439538e2b669f4a7736e400ca596/backports_zstd-1.5.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2b65f37ddd375114dbf84658e7dd168e10f5a93394940bfefa7fafc2d3234450", size = 567198, upload-time = "2026-05-11T19:53:45.226Z" }, + { url = "https://files.pythonhosted.org/packages/38/7c/b175d4c9ff60f964c8f6dd43211de905227cfde5a41eb5f654df58483025/backports_zstd-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fae7825dde4f81c28b4c66b1e997f893e296c3f1668351952b3ed085eb9f8cd", size = 482792, upload-time = "2026-05-11T19:53:47.323Z" }, + { url = "https://files.pythonhosted.org/packages/eb/e3/f7b50cf891a10da5f9c412ed4a9c4a772df4d4186d98a41e75c9b462f148/backports_zstd-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3aa10e77c0e712d2dfb950910b50591c2fb11f0f1328814e23acc0b4950766df", size = 510363, upload-time = "2026-05-11T19:53:49.523Z" }, + { url = "https://files.pythonhosted.org/packages/be/50/e7841fd4a65661d527697a0e2dab97295868965ccd4e3e12474472719a60/backports_zstd-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:518b2ef54ce0fee6d29379cfd64ef66e639456f1b18943466e929b19677f135f", size = 586917, upload-time = "2026-05-11T19:53:51.741Z" }, + { url = "https://files.pythonhosted.org/packages/c6/7c/57e985dbd621f0307b8c57cabb258eb976793f2aeaf8a5bc020e15b4a793/backports_zstd-1.5.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:673a1e5fdaa6cb0c7a967eb33066b6dd564871b3498a93e11e2972998047d11f", size = 565004, upload-time = "2026-05-11T19:53:53.774Z" }, + { url = "https://files.pythonhosted.org/packages/2f/8f/855ffcd1ee0fcf44c3fe62e36db8e7362292d450cc7c4b3f43edccbcd37a/backports_zstd-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:1277c07ff2d731586aa05aebd946a1b30184620d886a735dd5d5bf94a4a1061e", size = 633737, upload-time = "2026-05-11T19:53:56.036Z" }, + { url = "https://files.pythonhosted.org/packages/20/39/c4129a03d268699200dfebe1ccab97c7c332d2794571afb372a62e4ed098/backports_zstd-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aff334c7c38b4aea2a899f3138a99c1d58f0686ad7815c74bff506ecf4333296", size = 496309, upload-time = "2026-05-11T19:53:57.591Z" }, + { url = "https://files.pythonhosted.org/packages/8e/33/34152316dd244dcd43d5300ded3cf6e1b46d343e4e92620c23e533fa91df/backports_zstd-1.5.0-cp313-cp313-win32.whl", hash = "sha256:b932834c4d85360f46d1e7fbf3eee1e26ba594e0eb5c3ee1281e89bc1d48d06f", size = 289560, upload-time = "2026-05-11T19:53:59.274Z" }, + { url = "https://files.pythonhosted.org/packages/71/c5/f759bc87fd77c88f4fdad2d878535fb7e9537c6a05876d206e6690bf33c6/backports_zstd-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:c71dfbeced720326a8917a6edf921c568dc2396228c6432205c6d7e7fe7f3707", size = 314812, upload-time = "2026-05-11T19:54:00.909Z" }, + { url = "https://files.pythonhosted.org/packages/47/96/d7970dbb2fef34b549b34146090f48f41903cc7268b1ed1c7542eaa1852e/backports_zstd-1.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:7b5798b20ffff71ee4620a01f56fe0b50271724b4251db08c90a069446cc4752", size = 291411, upload-time = "2026-05-11T19:54:02.541Z" }, + { url = "https://files.pythonhosted.org/packages/5b/35/294ce0d818455191ee9a0f21d987d6061d4f844ca34ca44a8b1daaaba3ca/backports_zstd-1.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9685586eb67fa2e59eab8027d48e8275ce90e404b6dc737b508f741853ba6cb7", size = 410912, upload-time = "2026-05-11T19:54:04.031Z" }, + { url = "https://files.pythonhosted.org/packages/1a/5c/99fba38e6d57cf238362d4ac568823b1fb75e20f75b58cd062a3da4d9a7a/backports_zstd-1.5.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a68ab446d007d34e12f5a812e6f7d1c120a3d15cb5d4e62b7568926a6da6fb7", size = 340429, upload-time = "2026-05-11T19:54:05.632Z" }, + { url = "https://files.pythonhosted.org/packages/e1/bc/146fdb7b0bf39817e1b706e34be46f2cf11d5465668e1912747dd45fd71b/backports_zstd-1.5.0-pp310-pypy310_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:627973d4375a42500a66cc2ea912f6223249a6cdfeb56cc340b0d20b5a3475d0", size = 421477, upload-time = "2026-05-11T19:54:07.499Z" }, + { url = "https://files.pythonhosted.org/packages/f4/2e/6e43d94a3414d0113439c5e9ae6b04311797cfef5d04dc1d3aa0bcbff057/backports_zstd-1.5.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c077639e99de02a679dca9c6a189f60a76e7d0096977c0ebd070c31de8df57a", size = 395021, upload-time = "2026-05-11T19:54:09.171Z" }, + { url = "https://files.pythonhosted.org/packages/b1/41/d599f31e5152f43397f837c6911bffee8626d6d079bcaafab04d1a8a07ad/backports_zstd-1.5.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ac2b3895fc9b1f0b0e71bffa179b48930dc27643b7e4885869afd295e7dfe1e", size = 414986, upload-time = "2026-05-11T19:54:10.986Z" }, + { url = "https://files.pythonhosted.org/packages/26/62/006a63d5a13a04384b9cd35e35f78944a75c975f5a71c25e81cc766d53d7/backports_zstd-1.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:41b23cbd72f503aedcaaaa23d55d2d98d449e5938154d2b3f57832c73b286cee", size = 300853, upload-time = "2026-05-11T19:54:12.593Z" }, + { url = "https://files.pythonhosted.org/packages/89/92/8e8769e1e3ebec16d39f455e317a0f137a191b1f122853d0377c660666ce/backports_zstd-1.5.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0ca2d4ac4901eada2cfb86fda692e5d4a1e09485d9f2ec5777dc6cd3154b3b46", size = 410809, upload-time = "2026-05-11T19:54:14.117Z" }, + { url = "https://files.pythonhosted.org/packages/63/5c/741a2923020c45b85cad4dffffcb86dbfa2d4aaed27f18ee793428ef4c24/backports_zstd-1.5.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:20796211a623ec6e0061cef4d7cca760e9e0a0a951bb30dc9ba89ed4a3fea5e4", size = 340342, upload-time = "2026-05-11T19:54:16.165Z" }, + { url = "https://files.pythonhosted.org/packages/c8/3b/68c4fe8a551d3f47ed75ddcf15dc7c777bb9d869fc0e0f5b7cacc9f158f5/backports_zstd-1.5.0-pp311-pypy311_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:5232cd2a58c60da4ceb0e09e42dbc579b92dda4a9301a756af0c738223a23487", size = 421476, upload-time = "2026-05-11T19:54:17.709Z" }, + { url = "https://files.pythonhosted.org/packages/a8/4d/ab5dcd6ab9a7ac02ec42c4507211da7dadb9498abb655115c296077e2b8b/backports_zstd-1.5.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:012d88a9ae08f331e1adc03dfbda4ff2ae7f76ea62455975827b215677a11aec", size = 395020, upload-time = "2026-05-11T19:54:19.566Z" }, + { url = "https://files.pythonhosted.org/packages/55/aa/ec512a0d14552bbb4e75693f7065434b865956abd045ceb67f0574146241/backports_zstd-1.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cbb7d79f8e43b6e0e17616961e425b9f8b32d9933e1db69242baa6e21f44a978", size = 414985, upload-time = "2026-05-11T19:54:21.136Z" }, + { url = "https://files.pythonhosted.org/packages/aa/31/759d077aa680555e17c9d2bb09edf4c3428d895fe5d35a8df67684401b84/backports_zstd-1.5.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6172dcdd664ef243e55a35e6b45f1c866767c61043f0ddcd908abd14df662065", size = 300853, upload-time = "2026-05-11T19:54:23.1Z" }, ] [[package]] @@ -11284,11 +11296,11 @@ wheels = [ [[package]] name = "fastcore" -version = "1.12.47" +version = "1.13.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f5/bc/66382dcd1bd434a1fdcf822f8ac47495dd89aea5572f9fa38c9931422dc5/fastcore-1.12.47.tar.gz", hash = "sha256:7efc053f63e3c63b601486dc97e8b25fe08c93ff7ba9e149a4954f8d29c5296b", size = 100310, upload-time = "2026-05-10T23:16:12.678Z" } +sdist = { url = "https://files.pythonhosted.org/packages/68/71/f96a5070cdc4b85ce3f9673f8e3121c081dee7517ef67986abbeefefb3f7/fastcore-1.13.0.tar.gz", hash = "sha256:933960662fec19ada98e704a8feb2b6d5e9a7828f27712dd57014ad55b4b3160", size = 100301, upload-time = "2026-05-13T02:11:46.662Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/18/b9708d50afcc6099c7645c4c0a47144a3f6f0ebcac9a6d7b9947812d9d3b/fastcore-1.12.47-py3-none-any.whl", hash = "sha256:88610c6481e558556e8d19d2fd6cf42a38aa732c8345203bbf272f5f1d393c6a", size = 105021, upload-time = "2026-05-10T23:16:10.679Z" }, + { url = "https://files.pythonhosted.org/packages/96/9c/c86a018d1cbb3c117f7a83fcc86e74b648edaeacc849b8dbc71dd84171bf/fastcore-1.13.0-py3-none-any.whl", hash = "sha256:d56d5727a65835c1326299afc33a166cfa9977a6720b5e9580314c0eeb0ebbfe", size = 105027, upload-time = "2026-05-13T02:11:44.995Z" }, ] [[package]] @@ -13353,43 +13365,43 @@ wheels = [ [[package]] name = "httpr" -version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a5/25/1d85c923e164f58d95055a588e74a88611be84295fca00018c8c63ba9b4a/httpr-0.4.6.tar.gz", hash = "sha256:d8a782fbea8374dc942cf05dcea1ef32f4c64b42cb0140b7bfb0a319869a51be", size = 332390, upload-time = "2026-05-06T11:55:54.171Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/de/ce/f273e542423c6cddeb37f9daf29f14e2bd0e9d9bb268e1a11479dae34db5/httpr-0.4.6-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:0f6e3ac37d9f3de31589248f900d107a8d9d87c4ff6a3ffb2bb39eb37a03a8fd", size = 2398101, upload-time = "2026-05-06T11:55:36.949Z" }, - { url = "https://files.pythonhosted.org/packages/08/43/871ed6cbc43fabb95fc266dfc4437491ab8a08b661d721bfddb11eccfa3b/httpr-0.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:2ff9668228f6ac2207e6784bbe23e0f227a93ab096b0af1259797b70031a4b09", size = 2228427, upload-time = "2026-05-06T11:55:32.724Z" }, - { url = "https://files.pythonhosted.org/packages/99/f4/aa8a4a255d35f14a32c0748961989178dbf0526b22c5e70328caf5a7c67c/httpr-0.4.6-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2b5b2c0be8ff5d69bd1af90794165377fc609ef53360be7c83b323216e5c7f1", size = 2441821, upload-time = "2026-05-06T11:55:23.813Z" }, - { url = "https://files.pythonhosted.org/packages/47/dc/a51c344e5351de00ed7aeeedab9def4149edc3f9a59e36e306e4c0914fb3/httpr-0.4.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722370567d2c4d392556108e70459c92bbf325f00eef1d5538db3f9286eff89d", size = 2478377, upload-time = "2026-05-06T11:55:14.791Z" }, - { url = "https://files.pythonhosted.org/packages/9d/8d/54e8e6aeb0fdd9be9ea7e71dd52ae59ee3d61f1ae39cfea5cb78f807dc1c/httpr-0.4.6-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c76e2ccdf6d11cf63fd86671695f328181bcc578c61abeed2ac1d42ec7fa9eef", size = 2335898, upload-time = "2026-05-06T11:55:19.205Z" }, - { url = "https://files.pythonhosted.org/packages/b6/6f/94a3a1e9917384f7207f80685ce90f09e807564e40bdbced8d2c3c8d26fb/httpr-0.4.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0430cdebd2a1993b1f0c858b78f25f851e51554e143080c5878438e6dcb3457b", size = 2564382, upload-time = "2026-05-06T11:55:27.915Z" }, - { url = "https://files.pythonhosted.org/packages/ec/5f/074c0852d9a796aa88cbe30009b31cb501370bbef003752a3b41f8a984ca/httpr-0.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9225708eca488ee03c10e2a59d35f269aec3b62ef0270ad38d38924d6ca1e82b", size = 2653990, upload-time = "2026-05-06T11:55:41.267Z" }, - { url = "https://files.pythonhosted.org/packages/69/0d/87559ce0d01e99b8d4dafee674f7394fd4332f4ce9ecba395000389a2313/httpr-0.4.6-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:95355dd72732b008ab39760b740e50e85034f9bc2a7daa7fc643b6fea9da33c9", size = 2595893, upload-time = "2026-05-06T11:55:45.332Z" }, - { url = "https://files.pythonhosted.org/packages/e4/42/0c36e5f6d0eb60eb26d04193078854ea5f87787ecf66ef59aa9e1a93919b/httpr-0.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:75295962ed1723c2f97909383ca9e95a8d11cf4be47d16c85fb7b89636e2ff27", size = 2806354, upload-time = "2026-05-06T11:55:49.312Z" }, - { url = "https://files.pythonhosted.org/packages/4d/7c/7ef638208a61317874880e2b066627f0c24e1b4a6157e8109364811a4c8b/httpr-0.4.6-cp313-cp313t-win32.whl", hash = "sha256:8445d166a254d63dd58e2448d8390cce65189f1457f4b114f60940a028605484", size = 2034791, upload-time = "2026-05-06T11:55:59.831Z" }, - { url = "https://files.pythonhosted.org/packages/f7/0a/fc03da7e3a71c1ca622a6b97f8871ffb588fac8d1d76acf998140da85334/httpr-0.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:a9580e72f44624116bb7093b96e79f69ec88632f603ad022d33d33ecf4ee33d2", size = 2286939, upload-time = "2026-05-06T11:55:55.442Z" }, - { url = "https://files.pythonhosted.org/packages/2f/fa/7ead8103d36f831dca724ab7aa2d816b32c5f746e4d919def3d01797699b/httpr-0.4.6-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:302c045445f24c66ae582f3a9475c6b419017d5e216833ffcee97a2f5f2cef10", size = 2399088, upload-time = "2026-05-06T11:55:38.233Z" }, - { url = "https://files.pythonhosted.org/packages/9b/0a/ca97b047f10c489dfa704a5c67aa995dd5e38b5ae23dc532d8c4972ac485/httpr-0.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e9fce1b00c46744ac30b6b904b13132464224dbe99b4d289d10031851f4ecb24", size = 2229208, upload-time = "2026-05-06T11:55:34.334Z" }, - { url = "https://files.pythonhosted.org/packages/9c/f8/880f1a1bfbd273e3cd2b03cea913430daf680dc7fb669531116613386923/httpr-0.4.6-cp314-cp314t-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f111a8d7586ebfeaa74e674ee34c3242b4c4e1d97a06166c401769ee6ce479c8", size = 2442180, upload-time = "2026-05-06T11:55:25.375Z" }, - { url = "https://files.pythonhosted.org/packages/84/b6/c90d19e683359e6cb7f0ca9514793aafe4b798502c375f71a00801acda45/httpr-0.4.6-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dae17213a75bed1dc0b7d6f0b71dd39d6c92412ea2d3abbcc75e800f04948602", size = 2479573, upload-time = "2026-05-06T11:55:16.507Z" }, - { url = "https://files.pythonhosted.org/packages/33/91/8be2110a3c3c9f58748329a6338ddda8b3d60e7e915f89a2d1eeb771e34a/httpr-0.4.6-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a24c95444aaf5eca778086a8da43db5e0f709fd1440756b7c951fad74497c175", size = 2336876, upload-time = "2026-05-06T11:55:20.728Z" }, - { url = "https://files.pythonhosted.org/packages/31/44/49d6b743c5c3ab5d176c52a0ec15c4e9c0a4d0988e561f6bb2e3660d1aa6/httpr-0.4.6-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4924a4a8abe9642ed77d9ae46b0c1221316b0dae68bdf3d0464d12170d70973e", size = 2565860, upload-time = "2026-05-06T11:55:29.648Z" }, - { url = "https://files.pythonhosted.org/packages/eb/75/34424b00531776ddda83bc08b584ebdefad2ee8a50449a43cfa02049260b/httpr-0.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:861b4c3eb4caa8dd07fc9f237df433568a9e252755749fa8bcfe058a21d1ed78", size = 2655292, upload-time = "2026-05-06T11:55:42.519Z" }, - { url = "https://files.pythonhosted.org/packages/f8/88/406d758003aa5c7a728406ab922c689c3852b8ae4b3e0435bd1c83ecda89/httpr-0.4.6-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:c286669e73732df6adeee1bee773a7ab8b7357e1190432da177e64cbf184b818", size = 2596649, upload-time = "2026-05-06T11:55:46.497Z" }, - { url = "https://files.pythonhosted.org/packages/0d/60/17d8b08f1e6a37607def9a4dbbe0249672a85952d25cd8616e9817b5aa53/httpr-0.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:941a57ad7b2611396aef5788678293c69b6445614334a1c04d2d290418387058", size = 2808135, upload-time = "2026-05-06T11:55:51.098Z" }, - { url = "https://files.pythonhosted.org/packages/21/51/a218959143318ae8c5c852e57a8bcb834184b64ec87031b87ed38830ed24/httpr-0.4.6-cp314-cp314t-win32.whl", hash = "sha256:884e36f7a6a31ad924f99b5c7987e3a1dc00fab42e07eda4897aadf8c73f8eb4", size = 2036383, upload-time = "2026-05-06T11:56:01.019Z" }, - { url = "https://files.pythonhosted.org/packages/41/fc/13401f18b3512f83f0962ab5f6031fc83c74d40b9e9a8e2c27dd4a07c55b/httpr-0.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:91aabcf10a126bbb325f895ed3f4660cff987d976d2da1b6a49774e43f7d5a1e", size = 2288837, upload-time = "2026-05-06T11:55:57.026Z" }, - { url = "https://files.pythonhosted.org/packages/b4/62/22bf2611666f3750646e2d0119aaabe4180be57a7e4af7e0f63d40fa2a29/httpr-0.4.6-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bf51350febb5ea9621be03f808361cbcd94c53d8f4b93e737a43e2f54b32ad3f", size = 2401233, upload-time = "2026-05-06T11:55:39.54Z" }, - { url = "https://files.pythonhosted.org/packages/9d/16/bd5d6fe0f2f679b837b750b19b47729d58e3686ea3c90f1259236be8d225/httpr-0.4.6-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8d3864551a570ad8002dc723dfec71faf7eea0db83d18ec7028b06913a2a3461", size = 2232366, upload-time = "2026-05-06T11:55:35.605Z" }, - { url = "https://files.pythonhosted.org/packages/ac/4c/77db1bf1a4b11ef8bdebf7370a1ec8f904452344cf0c71f4386c60ed9234/httpr-0.4.6-cp39-abi3-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:53a1cd633ace27b5c9958e571eb644f46f76fdb392070bbbef0f2ca80eb1c12e", size = 2443966, upload-time = "2026-05-06T11:55:26.65Z" }, - { url = "https://files.pythonhosted.org/packages/c7/c4/f03b99a07e2878da336deab5264d51d1ac9525ef5645704601f72847be24/httpr-0.4.6-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5d80a7fd0b25ac97dddb6c0613793d79bdc8adc92bcb7a3a8c2fde81b944986", size = 2481939, upload-time = "2026-05-06T11:55:17.811Z" }, - { url = "https://files.pythonhosted.org/packages/25/96/9dfee8b8e944cdbd5e93b675a9093c4fafb6e39442bc932e3dd28df84c3e/httpr-0.4.6-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9ddde03376530a2625b2344f5826f33bc47b7f5187cfdfcd2f3b4cf1594ab6b", size = 2339030, upload-time = "2026-05-06T11:55:22.45Z" }, - { url = "https://files.pythonhosted.org/packages/38/ba/6d0b1b58e890c2d362ea8efd392f28f46a126d667a401352e2dbe25e919f/httpr-0.4.6-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0b880ed647863a237ee38ef74689afc17d89da316fb569d961d7c2af831cd2e", size = 2564885, upload-time = "2026-05-06T11:55:31.267Z" }, - { url = "https://files.pythonhosted.org/packages/d3/64/e7459ab98305562eac31844a25353909d8e03eaf5c79322089f9a59fc218/httpr-0.4.6-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:5bc55a45abe0be8e807ef654ff3138f85e755d6bf0360eaee9fda1edcca6714a", size = 2657653, upload-time = "2026-05-06T11:55:44.133Z" }, - { url = "https://files.pythonhosted.org/packages/89/05/c4465cf68bd9b39849aa15db371f5dfda55a389ba61061422ea2b8188e67/httpr-0.4.6-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:f9daf1a4601bdaeaf6fc88fbe8d02f8084008e98d2e3d963fce5a320855ddc28", size = 2597595, upload-time = "2026-05-06T11:55:47.888Z" }, - { url = "https://files.pythonhosted.org/packages/81/67/c5f58ea3f84da7fad9339fe872a1c9a99620db931bbfb96f3f753a8c89f7/httpr-0.4.6-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cf1981be978fd411832177e7752ee119f9d129f5dd9d6a7abb46c3125884049a", size = 2807360, upload-time = "2026-05-06T11:55:52.574Z" }, - { url = "https://files.pythonhosted.org/packages/40/e1/1be6db94a93d4852690fa264bb2115f041be92bac726ac3105204666318d/httpr-0.4.6-cp39-abi3-win32.whl", hash = "sha256:f4640609f1606c9ac19f3027b55ad1abda7d23d3fb736890757b7e614c8f42e5", size = 2039287, upload-time = "2026-05-06T11:56:02.334Z" }, - { url = "https://files.pythonhosted.org/packages/56/c0/12fd48e5297604c5169f8da47401d65f91c977e2353046709d8474e2629c/httpr-0.4.6-cp39-abi3-win_amd64.whl", hash = "sha256:63e865c81db62382ee10d37c3a5f9f763f4134ecc2f08ff30bfe8656c79b7e7f", size = 2286951, upload-time = "2026-05-06T11:55:58.469Z" }, +version = "0.4.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/79/23d302611ead1a9e82f08f4fcae9c9f56e5f1dee648870699bd380f7db4a/httpr-0.4.8.tar.gz", hash = "sha256:09f256d149a6a851ff31d2a5c0ce78f7c5229d730294bb6ec16cb49bad48a479", size = 333345, upload-time = "2026-05-12T11:31:37.641Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/96/381d8cfbcb80e8f04f0d47c75b1606a67363523c40e60dd041cdb548272a/httpr-0.4.8-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:8b3141f7ab0a2ed4aaa585d66977ae781a6f4a22ecc11846ce59e8cecdf82cad", size = 2398595, upload-time = "2026-05-12T11:31:15.42Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d6/2cb473267c6bbaaf2cca29837194c2121d5cac6881df3c4e9febb7146e84/httpr-0.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:11c4db24a4c05bcdcee99c64ae5a1306d79bba63a15ac08b30cf5441817061f6", size = 2227821, upload-time = "2026-05-12T11:31:09.426Z" }, + { url = "https://files.pythonhosted.org/packages/30/ae/7761ca41baaf0a8f4a0b1f8a17864fc47e28f6b72a55eba4c99c9ed42dac/httpr-0.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:90d0012346294c56ee8dc442836ee48360276e931d3a992ab7edd0aee304cfd9", size = 2441639, upload-time = "2026-05-12T11:30:57.9Z" }, + { url = "https://files.pythonhosted.org/packages/13/48/8da6fabceb388efa8a8c762bf8b5659496b4babe108734ac2815c0a7076e/httpr-0.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc51ce9a50bbe3ff6137841c5149c6805a002cc7beb808feda9c57fba3562c78", size = 2477981, upload-time = "2026-05-12T11:30:46.337Z" }, + { url = "https://files.pythonhosted.org/packages/d0/de/3b79d023e0fad47ef02ccd3ebf07f211cdb784655556d327895c055f584c/httpr-0.4.8-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:394bc8efc529812466e8efdc7d77edbaf5468f7456ae16be6e2adaa0c91553d9", size = 2336333, upload-time = "2026-05-12T11:30:52.112Z" }, + { url = "https://files.pythonhosted.org/packages/a8/8c/91c164a37240348c413c8af3d28471989b7e7efb3c0cbef8b745820de5c5/httpr-0.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57cbbac3b4644fd0340fbce1a6b4cc15ecfb3171b007866fa8654325273a9cd2", size = 2563849, upload-time = "2026-05-12T11:31:03.651Z" }, + { url = "https://files.pythonhosted.org/packages/2f/c9/fd069eec6c4b90d61487b3d91820244701d4ee56a7fb10e65fe1e05c8d6c/httpr-0.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:480fc7d51a90c9c58534d94f4bb9e4714fde746d9a621bccec3d1a283503f05b", size = 2653387, upload-time = "2026-05-12T11:31:20.675Z" }, + { url = "https://files.pythonhosted.org/packages/3e/07/1f05a0f7af66d2468b6d78a6d2c7ab38448eb836165e1c851d79dce3a8f2/httpr-0.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:989bfcb481e278f47f36ea67e0924ec8fb59f011d06ccf88fd29b3894a24e8ea", size = 2598952, upload-time = "2026-05-12T11:31:26.152Z" }, + { url = "https://files.pythonhosted.org/packages/8e/38/4467187fb1094d6edfe7598e5f9937d4871cec4dbf2184ec8ac3d57afac9/httpr-0.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6857b01f755545c900601d25aeae408405bbf9b10ff412debd0ddafdc5792f94", size = 2806682, upload-time = "2026-05-12T11:31:31.74Z" }, + { url = "https://files.pythonhosted.org/packages/97/b9/5ae3ef82f8dc9ea96c1acd5a37f75a5504851a9572be655430b44d48822e/httpr-0.4.8-cp313-cp313t-win32.whl", hash = "sha256:78c9906c1b179a23e1a486396a7d1b2e80918d1f03b0df1794ea6c0238638ddb", size = 2035568, upload-time = "2026-05-12T11:31:44.786Z" }, + { url = "https://files.pythonhosted.org/packages/82/03/9b40a34a2371b8d4f96464bbb20b425d580e991c0e5b466df8d4d5ff7110/httpr-0.4.8-cp313-cp313t-win_amd64.whl", hash = "sha256:3addc3c6ce5c355c7647ed2677eba5d16969c4a3fd608a844c9c94f7b0687127", size = 2287144, upload-time = "2026-05-12T11:31:39.117Z" }, + { url = "https://files.pythonhosted.org/packages/9e/fd/85fe95554da69bf572f8992b421ec8a14963a9e2d38098aacb7ffd71c80e/httpr-0.4.8-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:86c042f59c742200d410c0ba3ade198f2b7dbf9fdfd62bc90b4189a6a7501e3f", size = 2399586, upload-time = "2026-05-12T11:31:17.146Z" }, + { url = "https://files.pythonhosted.org/packages/18/24/e49f28ef14e640790821c329490fb75044f031773be43c40386ba0801a78/httpr-0.4.8-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8f20dc617038fd19eaf21af3998849b5be959da474a3975cf3af70d97367b105", size = 2228440, upload-time = "2026-05-12T11:31:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/3a/d5/c3341fd3875c81555c86d3803008c75ccd6a62d877575e67f2ffab58c15c/httpr-0.4.8-cp314-cp314t-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:406e8a8b15a2b0e31a14e49aa0aeb9c9b2d28f538adf87dc411b656dccd48cfe", size = 2442259, upload-time = "2026-05-12T11:30:59.878Z" }, + { url = "https://files.pythonhosted.org/packages/0d/f4/30bcbd881f70dfac221fd518cea5419c06ea32afd5cac396c09b705aaaa0/httpr-0.4.8-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:112b04476248bc177520edaf8e36b76c32d941a139ed8bd2abca0ce9fc422f58", size = 2479045, upload-time = "2026-05-12T11:30:48.305Z" }, + { url = "https://files.pythonhosted.org/packages/dd/57/e7371db4f2b282bf616cf9bf35a583dbd98c31a01fd373fd4aa27aa63460/httpr-0.4.8-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9931838707bc996027fbb9f67d3c336d97e2fc87c0d7e99f8d32011029bb5299", size = 2337239, upload-time = "2026-05-12T11:30:53.845Z" }, + { url = "https://files.pythonhosted.org/packages/49/7e/55a294e628a1e50347633aad90d89d60075b8af02c53e4507d3c9e8a6835/httpr-0.4.8-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea6dfe6f6c75538c2b06bf656d8a9c63f4c6e4dd70d26e406edf1c4650eee5ec", size = 2565624, upload-time = "2026-05-12T11:31:05.753Z" }, + { url = "https://files.pythonhosted.org/packages/20/eb/acbf7b65080b4693e4281de5d016591490f91628112b9a807c7cb6b69d1a/httpr-0.4.8-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9ac54e003d56619fc3f8eec0ebf74796660723f463f15bd42eca73acc6d64863", size = 2654483, upload-time = "2026-05-12T11:31:22.592Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8e/64053da09697a3a2691c37024ec353348ea01eaf4947bdca9daddcebcfea/httpr-0.4.8-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:81676efc431857d6456c6aceba991d60d7dfce5a86b8bd80a6f5e7080bf59f52", size = 2599379, upload-time = "2026-05-12T11:31:28.023Z" }, + { url = "https://files.pythonhosted.org/packages/38/f8/6967f7c5c01ae17263d78caae4b61ab40ae16704be68219440aee28eae90/httpr-0.4.8-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:450d085621a371ffad86b33f578c690fdd91a26e510518655435daf72b2bb7a8", size = 2808293, upload-time = "2026-05-12T11:31:33.565Z" }, + { url = "https://files.pythonhosted.org/packages/ed/b5/47ac999490a9329d77af5fe15e33c782a68efbececec0624ecb547103c29/httpr-0.4.8-cp314-cp314t-win32.whl", hash = "sha256:b7760964854651a30a4e3e9f581decaf252e98c9820248f1554ded4e8150fd2f", size = 2038596, upload-time = "2026-05-12T11:31:46.529Z" }, + { url = "https://files.pythonhosted.org/packages/40/24/bd8f72da1e23567e06489203b27784450892de45bf4782761e5a83bba14c/httpr-0.4.8-cp314-cp314t-win_amd64.whl", hash = "sha256:d9c13998c7cdf54e224aafd3ef1bc5a829e7155b91e160cdcf95f22e169053da", size = 2289321, upload-time = "2026-05-12T11:31:40.904Z" }, + { url = "https://files.pythonhosted.org/packages/56/a8/f454134c8f0e2f724f8f596e2c480a9c969dc4b602805ddfda43e5c909f2/httpr-0.4.8-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:df309d5d3616ccfc53d4decf178d119039fab2e8ff2bb5f4bc96eb9ffab675cb", size = 2401798, upload-time = "2026-05-12T11:31:18.973Z" }, + { url = "https://files.pythonhosted.org/packages/92/57/911894755cc1906f5dcef8dd692debaa21ae402e26b33d2d369f0e8679c4/httpr-0.4.8-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:f446a6d4ca42159fae36f6d7721d3035b277a81bed3a62abff356034ed09fa35", size = 2232344, upload-time = "2026-05-12T11:31:13.203Z" }, + { url = "https://files.pythonhosted.org/packages/36/47/2efef42fd10c8f98d6d0565b6c278a574cb39ecb1175168a971123c9363f/httpr-0.4.8-cp39-abi3-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5c9b41527b4c5eb1e5de9e6a5f30915601ac67caccedf5c89d1103ce667d460f", size = 2443445, upload-time = "2026-05-12T11:31:01.946Z" }, + { url = "https://files.pythonhosted.org/packages/cc/e8/e1e9d80f13ec5389cbf4d9c87a1aa16fc0bb364999ee9b618608e78d5aa2/httpr-0.4.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4cce8b7c71b3726eae739545f202b91f869d54896d39dc80eb27e2626823843", size = 2481257, upload-time = "2026-05-12T11:30:50.381Z" }, + { url = "https://files.pythonhosted.org/packages/3f/fd/c18b6c508e2825dedb861a8f0115eed800ae217b74ddae87780ea688d1c9/httpr-0.4.8-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:319ec5be742aac4c715598b0c21971f98499bbf1a77fffd2b2af5228629e9ad0", size = 2339848, upload-time = "2026-05-12T11:30:55.96Z" }, + { url = "https://files.pythonhosted.org/packages/52/fd/1cc25db0b8600e392b392aa8ce7cbcd240627d25216f1d2c5c9cb0ab463c/httpr-0.4.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9c7e3637b2a4809640be393e000837f34b97112dc0ec36aa77a4724323ea35", size = 2564589, upload-time = "2026-05-12T11:31:07.629Z" }, + { url = "https://files.pythonhosted.org/packages/fb/70/7fbce11d3cb263f8f4c8687a5b3464ffdf9009aeae3aa007eedecd86a502/httpr-0.4.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a20644906f8c3aaa69916abd6085239bc46f34d5707af3691861becee256e61a", size = 2657412, upload-time = "2026-05-12T11:31:24.361Z" }, + { url = "https://files.pythonhosted.org/packages/22/aa/3b60e79b07643f477e835f292bc1ee3d29860a6e3340ac1ef57090f6bff1/httpr-0.4.8-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:bb3105471b262adca5908f19eb4e45772ef41a7d58e8585e4514432361fc402c", size = 2600323, upload-time = "2026-05-12T11:31:29.799Z" }, + { url = "https://files.pythonhosted.org/packages/64/35/87919b5a6e5ce6da9a2422472b4576a383ec8ec126bfdb0a243d04e03eba/httpr-0.4.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cbe0cc48572d2f337cc146e3e38a8ee0f2996f5395e7dd903590771fb2206301", size = 2807557, upload-time = "2026-05-12T11:31:35.829Z" }, + { url = "https://files.pythonhosted.org/packages/53/f5/79638fdda846771c088a836744ceee18193693c57344ed0ca3ae84f39317/httpr-0.4.8-cp39-abi3-win32.whl", hash = "sha256:702e15b5f175137b9b8833fbac2eb533bf993492ea5fc8d9eea554a33bd23d70", size = 2039458, upload-time = "2026-05-12T11:31:48.309Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c0/3f4b93cf465b1385522005e0b96bc24443a852c68f1917ae73713d00fd6b/httpr-0.4.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa3d0873f23844106abfe37018a0c5dca39dad5c099b4487fee81e396be1aad9", size = 2286807, upload-time = "2026-05-12T11:31:42.816Z" }, ] [[package]] @@ -13602,11 +13614,11 @@ wheels = [ [[package]] name = "idna" -version = "3.14" +version = "3.15" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/05/b1/efac073e0c297ecf2fb33c346989a529d4e19164f1759102dee5953ee17e/idna-3.14.tar.gz", hash = "sha256:466d810d7a2cc1022bea9b037c39728d51ae7dad40d480fc9b7d7ecf98ba8ee3", size = 198272, upload-time = "2026-05-10T20:32:15.935Z" } +sdist = { url = "https://files.pythonhosted.org/packages/82/77/7b3966d0b9d1d31a36ddf1746926a11dface89a83409bf1483f0237aa758/idna-3.15.tar.gz", hash = "sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc", size = 199245, upload-time = "2026-05-12T22:45:57.011Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/3c/3f62dee257eb3d6b2c1ef2a09d36d9793c7111156a73b5654d2c2305e5ce/idna-3.14-py3-none-any.whl", hash = "sha256:e677eaf072e290f7b725f9acf0b3a2bd55f9fd6f7c70abe5f0e34823d0accf69", size = 72184, upload-time = "2026-05-10T20:32:14.295Z" }, + { url = "https://files.pythonhosted.org/packages/d2/23/408243171aa9aaba178d3e2559159c24c1171a641aa83b67bdd3394ead8e/idna-3.15-py3-none-any.whl", hash = "sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8", size = 72340, upload-time = "2026-05-12T22:45:55.733Z" }, ] [[package]] @@ -14754,7 +14766,7 @@ wheels = [ [[package]] name = "looker-sdk" -version = "26.6.1" +version = "26.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -14762,9 +14774,9 @@ dependencies = [ { name = "requests" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/97/2b/b38441b1b77a5eefaa1ec9cf65b00d18f565644ad6df274f6a271ae11c9f/looker_sdk-26.6.1.tar.gz", hash = "sha256:caba0212a8b0d1d7d3e2ed21102c52b2398ed0eb6a899d1bcb2dac1d99b753f8", size = 235122, upload-time = "2026-03-25T14:12:03.313Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ed/25/2f71fe62ae31f5c55c30347763f62e9472244ee9ca1c736d25fdc8790348/looker_sdk-26.8.0.tar.gz", hash = "sha256:d57c9ea7046a8cafd852d33048f2434b16c5b189d49e6d73ed8537bc8594a3a1", size = 236302, upload-time = "2026-05-11T16:52:26.553Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/ee/3085fcc6920b35562870a5b9b753207ad205adc07c3a8800396f7a65e3ec/looker_sdk-26.6.1-py3-none-any.whl", hash = "sha256:c1e8bb4f969adbda9649694dae4b241ce8820e15b736c8135489b804256ac99c", size = 256649, upload-time = "2026-03-25T14:12:01.991Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ba/1019b98f95413f9a922a6cdfc58064d714e55e5bab40e6c9f6552e1012b3/looker_sdk-26.8.0-py3-none-any.whl", hash = "sha256:803abc8b95ca3c901659cbae79f7a4677dbe5307f39df6cb1db98bbdf5bda573", size = 257912, upload-time = "2026-05-11T16:52:24.613Z" }, ] [[package]] @@ -15137,14 +15149,14 @@ wheels = [ [[package]] name = "mdit-py-plugins" -version = "0.6.0" +version = "0.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d8/3d/e0e8d9d1cee04f758120915e2b2a3a07eb41f8cf4654b4734788a522bcd1/mdit_py_plugins-0.6.0.tar.gz", hash = "sha256:2436f14a7295837ac9228a36feeabda867c4abc488c8d019ad5c0bda88eee040", size = 56025, upload-time = "2026-05-07T12:20:42.295Z" } +sdist = { url = "https://files.pythonhosted.org/packages/59/fc/f8d0863f8862f25602c0404d75568e89fb6b4109804645e5cdfb1be5cf56/mdit_py_plugins-0.6.1.tar.gz", hash = "sha256:a2bca0f039f39dbd35fb74ae1b5f998608c437463371f0ff7f49a19a17a114d0", size = 56114, upload-time = "2026-05-13T09:03:38.91Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/71/d6/48f5b9e44e2e760855d7b489b1317cd7620e82dcb73197961e5cc1391348/mdit_py_plugins-0.6.0-py3-none-any.whl", hash = "sha256:f7e7a25d8b616fee99cb1e330da73451d11a8061baf39bb9663ab9ce0e005b90", size = 66655, upload-time = "2026-05-07T12:20:41.226Z" }, + { url = "https://files.pythonhosted.org/packages/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.1-py3-none-any.whl", hash = "sha256:214c82fb2ac524472ab6a5bcab1de80f73b50443e187f401bfd77efbc7c6481d", size = 66663, upload-time = "2026-05-13T09:03:37.76Z" }, ] [[package]] @@ -16399,7 +16411,7 @@ wheels = [ [[package]] name = "openlineage-integration-common" -version = "1.47.0" +version = "1.47.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -16408,12 +16420,12 @@ dependencies = [ { name = "pyyaml" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/10/ee/ddb3e68fd3b796edd899d9bafb1d22cf9bcbe49c05dbbb30c8bdf9c7712c/openlineage_integration_common-1.47.0-py3-none-any.whl", hash = "sha256:a7457dc826e85212cfc199e7f7eeb95fe916799339e0e7805be26a8ebb023088", size = 60218, upload-time = "2026-05-08T16:09:46.485Z" }, + { url = "https://files.pythonhosted.org/packages/d6/71/5725c8e6f95ca94e241eb2dc56580a2a30aac6cd9fefa799d096d69a6c71/openlineage_integration_common-1.47.1-py3-none-any.whl", hash = "sha256:2fad64ec0dd5f1e179112a8fd0a7f8eca5731a40e3d7307a8ec165ba4d6e089d", size = 60213, upload-time = "2026-05-12T14:51:26.751Z" }, ] [[package]] name = "openlineage-python" -version = "1.47.0" +version = "1.47.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -16424,18 +16436,18 @@ dependencies = [ { name = "requests" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/cd/d376aca3344b30e6b5160cf3031d134ab4d31d596c1d89c3609099acd556/openlineage_python-1.47.0-py3-none-any.whl", hash = "sha256:fcdee97c9466dfb3c87b9f798b9db441f6f8fcb8aa8d65ff9eaffeeb3901747a", size = 113172, upload-time = "2026-05-08T16:09:47.901Z" }, + { url = "https://files.pythonhosted.org/packages/c4/fd/94f17f2b9c1099a1081954e3fb08195d90897198a1180bdd61846452d60c/openlineage_python-1.47.1-py3-none-any.whl", hash = "sha256:44ca34b0b38c9a49f6b7200ace37612334a34a455361af29adcfb80e27d258dd", size = 113174, upload-time = "2026-05-12T14:51:28.072Z" }, ] [[package]] name = "openlineage-sql" -version = "1.47.0" +version = "1.47.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c0/97/59cce16f3997697d514f4bbfa312f4e8ebcded0bc5186f5f5e9c4b23f51d/openlineage_sql-1.47.0.tar.gz", hash = "sha256:6a0e474592dd015cbe9a13bb57b2ebc366906aa98081cc1b0acac154876311e4", size = 39925, upload-time = "2026-05-08T16:09:53.747Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ed/fa/c3aedc82e265235472174d4cc05bf595ba0869b7632307f00013864f2e12/openlineage_sql-1.47.1.tar.gz", hash = "sha256:eed4a8ac1ac565f7aa8f958042b986d93124fb7173245c0a00e2a946d2bdc64c", size = 39941, upload-time = "2026-05-12T14:51:33.542Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/4e/f37bc1c9869dcfff795c6c641c0761b9fb7c273ba237d4a6c13ebd620e5d/openlineage_sql-1.47.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:88a1756fa3e5b711a6b8948461cea7fb22bb139160bb72850cddfa8b087b6417", size = 4932997, upload-time = "2026-05-08T16:09:49.485Z" }, - { url = "https://files.pythonhosted.org/packages/04/99/9b52ed757a0fae81c6ff70a5019e1b19b3bbb7ec711acc21436a3b3fbdc0/openlineage_sql-1.47.0-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0be967ffc436e5c5868b028210d206d2015d33e31d39b9a340e6fd9aedcd4582", size = 2479577, upload-time = "2026-05-08T16:09:50.982Z" }, - { url = "https://files.pythonhosted.org/packages/d3/d0/2b040dbf488db990c31ee881ca1a65e5d01e60368558e64ded2c99d0fdd9/openlineage_sql-1.47.0-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:e960283860d5c7bb87c7f32082957f6854b3df8b51a265d60e3b101b8bc294a9", size = 2650965, upload-time = "2026-05-08T16:09:52.185Z" }, + { url = "https://files.pythonhosted.org/packages/56/98/fdc5ef36594b4379df19be5b18352e26697d3e87d97bad7fcc2f3f4036a4/openlineage_sql-1.47.1-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:5f2b9419a5af38842f8e09dd1268adf4d9a301a91ff0a1920918fe8bcca5e78d", size = 4932522, upload-time = "2026-05-12T14:51:29.36Z" }, + { url = "https://files.pythonhosted.org/packages/90/b3/ebb42164e9846900f52e58c70ce70c3d36eab6fd673e4887642e591f2671/openlineage_sql-1.47.1-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:00d5dfc2630772ddd2df1ae32df277ca719d5b426ac1b45f4b5ccab29bfabce2", size = 2479364, upload-time = "2026-05-12T14:51:30.908Z" }, + { url = "https://files.pythonhosted.org/packages/73/48/adff13c7fab0f5f170644addd28197bd19f60bc0c545a39b1111dd74ff2f/openlineage_sql-1.47.1-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b1f73736a7f4a1d20555825a03d9faffed2d0f0af185fc7609628c9b4f8b5299", size = 2650985, upload-time = "2026-05-12T14:51:32.418Z" }, ] [[package]] @@ -17941,7 +17953,7 @@ wheels = [ [[package]] name = "pydantic-ai-slim" -version = "1.93.0" +version = "1.95.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, @@ -17953,9 +17965,9 @@ dependencies = [ { name = "pydantic-graph" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bb/44/438dd99c7d044094037e767dab969d704232aab73e4fffd9f9a1f69bded9/pydantic_ai_slim-1.93.0.tar.gz", hash = "sha256:977364ecd3b6a2201e25d917f4efe80895210e44e66cb6983e1fc0477c78910b", size = 639585, upload-time = "2026-05-09T00:23:25.604Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/3b/ec8f475367ba9ba5c74560dd8bc1dc7837448b1e37d1dcd29111b059b1de/pydantic_ai_slim-1.95.0.tar.gz", hash = "sha256:2057b2a6280022145a9d00d5b103bfb2a7b54be2f6bffa3fa5e8d41561c59dc1", size = 697344, upload-time = "2026-05-13T02:29:53.74Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/67/bbfa2eda2493de6027e3322bccc676c8a7062dc5fe89d68cacf9e50889ce/pydantic_ai_slim-1.93.0-py3-none-any.whl", hash = "sha256:6733e3f19c83f4121fb9fe42aee918bd8f402ce670a519ecc898f108378fadb7", size = 804814, upload-time = "2026-05-09T00:23:17.122Z" }, + { url = "https://files.pythonhosted.org/packages/be/cb/fbbe540ee0969de757b5efb571b7fa67ec422425eaf98bbb6ef46142eca4/pydantic_ai_slim-1.95.0-py3-none-any.whl", hash = "sha256:5ede0ab79b981a64e938143ac2a8542b493503864b2aae32f07d879e18b5adf2", size = 868288, upload-time = "2026-05-13T02:29:44.731Z" }, ] [package.optional-dependencies] @@ -18107,7 +18119,7 @@ wheels = [ [[package]] name = "pydantic-graph" -version = "1.93.0" +version = "1.95.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "httpx" }, @@ -18115,9 +18127,9 @@ dependencies = [ { name = "pydantic" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/40/4addcd3c9d06fbdf6c0776026d8a5b87e7ebb17c9896ac2452e714bb17c6/pydantic_graph-1.93.0.tar.gz", hash = "sha256:17effd900200aa7b72ec0509a79f36d3e161c2a6ef02dda6285a381e867ab195", size = 59250, upload-time = "2026-05-09T00:23:28.081Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/4c/8d504470360bed05bf65c05a31018a81eaa7a205837a9061208356da5ecb/pydantic_graph-1.95.0.tar.gz", hash = "sha256:66ebe9f6ef49026e84a60e8ebcd708f46e6d35da35d9139dea0268d552ce6b14", size = 59252, upload-time = "2026-05-13T02:29:56.203Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2b/bc/5f9eb611c6b9315fb0c6ae58bb82a63d9d9f17340b6c8778319261593fbb/pydantic_graph-1.93.0-py3-none-any.whl", hash = "sha256:ef1b0dcd55a6b5a3544de53a9594216ee8f51ac26bf4be79f7ef310747be598a", size = 73066, upload-time = "2026-05-09T00:23:20.847Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9b/3703b6b1b72c2abd05e7b499a723320ad92c13868f02121889b553fe205b/pydantic_graph-1.95.0-py3-none-any.whl", hash = "sha256:c58dbbee18df24daf1a4ac9feceaa935c2d3489b3920fc8bb4147bc5019a8776", size = 73047, upload-time = "2026-05-13T02:29:48.708Z" }, ] [[package]] @@ -18859,15 +18871,15 @@ wheels = [ [[package]] name = "pytest-rerunfailures" -version = "16.1" +version = "16.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/de/04/71e9520551fc8fe2cf5c1a1842e4e600265b0815f2016b7c27ec85688682/pytest_rerunfailures-16.1.tar.gz", hash = "sha256:c38b266db8a808953ebd71ac25c381cb1981a78ff9340a14bcb9f1b9bff1899e", size = 30889, upload-time = "2025-10-10T07:06:01.238Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/27/fd0209642f3a1069da3e0be3c7e339f942d052d81ccb1fb4eb9b187d3633/pytest_rerunfailures-16.2.tar.gz", hash = "sha256:5f5a32f15674a3d54f7598388fcd3cc1bc5c37284731a4704a44485dcdda5e23", size = 32121, upload-time = "2026-05-13T08:13:26.998Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/54/60eabb34445e3db3d3d874dc1dfa72751bfec3265bd611cb13c8b290adea/pytest_rerunfailures-16.1-py3-none-any.whl", hash = "sha256:5d11b12c0ca9a1665b5054052fcc1084f8deadd9328962745ef6b04e26382e86", size = 14093, upload-time = "2025-10-10T07:06:00.019Z" }, + { url = "https://files.pythonhosted.org/packages/3f/a5/d8c1ad74529b483044b787ead2d24ecc624bca4084a509002102e4bab8cc/pytest_rerunfailures-16.2-py3-none-any.whl", hash = "sha256:c22a53d2827becc76f057d4ded123c0e726523f2f0e5f0bb4efb31fd59e1f14e", size = 14505, upload-time = "2026-05-13T08:13:25.485Z" }, ] [[package]] @@ -18946,15 +18958,15 @@ wheels = [ [[package]] name = "python-discovery" -version = "1.3.0" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ae/e0/cc5a8653e9a24f6cf84768f05064aa8ed5a83dcefd5e2a043db14a1c5f44/python_discovery-1.3.0.tar.gz", hash = "sha256:d098f1e86be5d45fe4d14bf1029294aabbd332f4321179dec85e76cddce834b0", size = 63925, upload-time = "2026-05-05T14:38:39.769Z" } +sdist = { url = "https://files.pythonhosted.org/packages/48/60/e88788207d81e46362cfbef0d4aaf4c0f49efc3c12d4c3fa3f542c34ebec/python_discovery-1.3.1.tar.gz", hash = "sha256:62f6db28064c9613e7ca76cb3f00c38c839a07c31c00dfe7ed0986493d2150a6", size = 68011, upload-time = "2026-05-12T20:53:36.336Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/30/d4/24d543ab8b8158b7f5a97113c831205f5c900c92c8762b1e7f44b7ea0405/python_discovery-1.3.0-py3-none-any.whl", hash = "sha256:441d9ced3dfce36e113beb35ca302c71c7ef06f3c0f9c227a0b9bb3bd49b9e9f", size = 33124, upload-time = "2026-05-05T14:38:38.539Z" }, + { url = "https://files.pythonhosted.org/packages/b7/6f/a05a317a66fee0aad270011461f1a63a453ed12471249f172f7d2e2bc7b4/python_discovery-1.3.1-py3-none-any.whl", hash = "sha256:ed188687ebb3b82c01a17cd5ac62fc94d9f6487a7f1a0f9dfe89753fec91039c", size = 33185, upload-time = "2026-05-12T20:53:34.969Z" }, ] [[package]] @@ -19127,7 +19139,7 @@ wheels = [ [[package]] name = "pyvespa" -version = "1.2.0" +version = "1.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -19145,9 +19157,9 @@ dependencies = [ { name = "tenacity" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/41/fa/5574bc513b86b6784709f2d40690791e6aa317b5a04fcbcfec57d482ae7b/pyvespa-1.2.0.tar.gz", hash = "sha256:fd59bfaa0a70c5bb2998e485c709167d881bfb7262d8201582ea5d46aca71b73", size = 157458, upload-time = "2026-05-07T10:48:11.07Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/4c/53f76c6d4a3183f587b16361465a95722ff0cd167c482f0030432225b74f/pyvespa-1.2.1.tar.gz", hash = "sha256:91b8e2749c650fc5759bec5083854f122cc8c1de100a91f8ee20415f513bd7ea", size = 157469, upload-time = "2026-05-13T12:37:18.16Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/d0/57d6e3a65211c820434d1f7721645325ab8ae6bd5986729742fa889d3a58/pyvespa-1.2.0-py3-none-any.whl", hash = "sha256:01f03f447d11d92dbf150e4b0de3de8fa0e15e17c489b29e315b3bbd9002458d", size = 167622, upload-time = "2026-05-07T10:48:09.657Z" }, + { url = "https://files.pythonhosted.org/packages/2f/d3/189d8b63c481382b89c129068ec1bf8037312a296cd63a5c57df880a7f6d/pyvespa-1.2.1-py3-none-any.whl", hash = "sha256:e532bd050cee80d4f8004a184393878247924e7e73c4fbdd387f313c870286eb", size = 167651, upload-time = "2026-05-13T12:37:16.404Z" }, ] [[package]] @@ -19358,7 +19370,7 @@ wheels = [ [[package]] name = "qdrant-client" -version = "1.17.1" +version = "1.18.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "grpcio" }, @@ -19370,9 +19382,9 @@ dependencies = [ { name = "pydantic" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/30/dd/f8a8261b83946af3cd65943c93c4f83e044f01184e8525404989d22a81a5/qdrant_client-1.17.1.tar.gz", hash = "sha256:22f990bbd63485ed97ba551a4c498181fcb723f71dcab5d6e4e43fe1050a2bc0", size = 344979, upload-time = "2026-03-13T17:13:44.678Z" } +sdist = { url = "https://files.pythonhosted.org/packages/65/45/5b1bdd15a3c7730eefb9c113600829e20d689b82b5a23f9e07d107094004/qdrant_client-1.18.0.tar.gz", hash = "sha256:52e8ece1a7d40519801bf0b70713bfa0f6b7ae28c7275bbe0b0286fbed7f6db4", size = 352580, upload-time = "2026-05-11T14:12:38.702Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/68/69/77d1a971c4b933e8c79403e99bcbb790463da5e48333cc4fd5d412c63c98/qdrant_client-1.17.1-py3-none-any.whl", hash = "sha256:6cda4064adfeaf211c751f3fbc00edbbdb499850918c7aff4855a9a759d56cbd", size = 389947, upload-time = "2026-03-13T17:13:43.156Z" }, + { url = "https://files.pythonhosted.org/packages/d6/10/c437bd2ac41ef30d3019063e6ce537dc111e9214473b337ee88f7fa6359a/qdrant_client-1.18.0-py3-none-any.whl", hash = "sha256:093aa8cf8a420ee3ad2a68b007e1378d7992b2600e0b53c193fc172674f659cd", size = 398126, upload-time = "2026-05-11T14:12:36.998Z" }, ] [[package]] @@ -19623,7 +19635,7 @@ wheels = [ [[package]] name = "requests" -version = "2.33.1" +version = "2.34.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, @@ -19631,9 +19643,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120, upload-time = "2026-03-30T16:09:15.531Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/b8/7a707d60fea4c49094e40262cc0e2ca6c768cca21587e34d3f705afec47e/requests-2.34.0.tar.gz", hash = "sha256:7d62fe92f50eb82c529b0916bb445afa1531a566fc8f35ffdc64446e771b856a", size = 142436, upload-time = "2026-05-11T19:29:51.717Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-py3-none-any.whl", hash = "sha256:917520a21b767485ce7c588f4ebb917c436b24a31231b44228715eaeb5a52c60", size = 73021, upload-time = "2026-05-11T19:29:49.923Z" }, ] [[package]] @@ -19817,16 +19829,16 @@ wheels = [ [[package]] name = "rich-toolkit" -version = "0.19.7" +version = "0.19.9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "rich" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/42/ba/dae9e3096651042754da419a4042bc1c75e07d615f9b15066d738838e4df/rich_toolkit-0.19.7.tar.gz", hash = "sha256:133c0915872da91d4c25d85342d5ec1dfacc69b63448af1a08a0d4b4f23ef46e", size = 195877, upload-time = "2026-02-24T16:06:20.555Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8f/10/dc6e64e85244971671981dc26b09353a1564f5e61b977c80180dc42ad90b/rich_toolkit-0.19.9.tar.gz", hash = "sha256:fce5c6f41f79382ecf60a79851b2543f627568e3e07c78ab4b8542e1ca247d1c", size = 197653, upload-time = "2026-05-13T09:55:04.286Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/3c/c923619f6d2f5fafcc96fec0aaf9550a46cd5b6481f06e0c6b66a2a4fed0/rich_toolkit-0.19.7-py3-none-any.whl", hash = "sha256:0288e9203728c47c5a4eb60fd2f0692d9df7455a65901ab6f898437a2ba5989d", size = 32963, upload-time = "2026-02-24T16:06:22.066Z" }, + { url = "https://files.pythonhosted.org/packages/8f/60/5a7de329d0b5b619757c169bbf8a5146c20fe49bd4d74045937fcd45a7d0/rich_toolkit-0.19.9-py3-none-any.whl", hash = "sha256:a1341f88feed5f295f001bb1c6b6cf1e208674187dd900416a30fd9d6f74fcce", size = 33711, upload-time = "2026-05-13T09:55:05.345Z" }, ] [[package]] @@ -20381,15 +20393,15 @@ wheels = [ [[package]] name = "sentry-sdk" -version = "2.59.0" +version = "2.60.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/65/e0/9bf5e5fc7442b10880f3ec0eff0ef4208b84a099606f343ec4f5445227fb/sentry_sdk-2.59.0.tar.gz", hash = "sha256:cd265808ef8bf3f3edf69b527c0a0b2b6b1322762679e55b8987db2e9584aec1", size = 447331, upload-time = "2026-05-04T12:19:06.538Z" } +sdist = { url = "https://files.pythonhosted.org/packages/54/a2/2e6c090db384cc515069f4f85542bd5baf6786852073020ea73d4a76d3ea/sentry_sdk-2.60.0.tar.gz", hash = "sha256:0bd25e54e78ca02d0be512529fa644bbbf9e8470d7b26371294012d4ca93c978", size = 452946, upload-time = "2026-05-13T13:34:52.516Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bf/00/b8cc413748fb6383d1582e7cda51314f99743351c462a92dc690d5b5853b/sentry_sdk-2.59.0-py2.py3-none-any.whl", hash = "sha256:abcf65ee9a9d9cdebf9ad369782408ecca9c1c792686ef06ba34f5ab233527fe", size = 468432, upload-time = "2026-05-04T12:19:04.741Z" }, + { url = "https://files.pythonhosted.org/packages/29/41/f2b800b7f12a05dd48c2a6280d4dd812d1425fc66ed3fe3fd99420c41d1a/sentry_sdk-2.60.0-py3-none-any.whl", hash = "sha256:28a536c03291c8bcb363cf35c611b32738ec118ff64d8d6383b096448ac4c803", size = 475616, upload-time = "2026-05-13T13:34:50.259Z" }, ] [[package]] @@ -20582,7 +20594,7 @@ wheels = [ [[package]] name = "snowflake-connector-python" -version = "4.4.0" +version = "4.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "asn1crypto" }, @@ -20603,28 +20615,28 @@ dependencies = [ { name = "tomlkit" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/01/b1/11c03e05bd2a2da590c1b77c8455f40eb505888a2683c4e41b487d79568c/snowflake_connector_python-4.4.0.tar.gz", hash = "sha256:648f49029d699591af0f253e81c5bf60efc4411c7b0149ef074a59a038210a3b", size = 924803, upload-time = "2026-03-25T23:31:27.368Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/31/0d6a1da486dc13263f43cdad0bbacdd041616c32220b9bcbff79160bdcc1/snowflake_connector_python-4.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fb628d5ea1999e23bfbaabce4125eb44d56605ca5634b8b1d6092ab22d555598", size = 11917625, upload-time = "2026-03-25T23:31:30.065Z" }, - { url = "https://files.pythonhosted.org/packages/7a/7f/a10371c829a40baa5a9f4b50802e999b7d6c2d4b882356d9c540b0ff9cb0/snowflake_connector_python-4.4.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:16fdca775f7ca5ce4a973c07c434f5ab72bef5284e81a5e4ae2fb4d54d28965c", size = 2800549, upload-time = "2026-03-25T23:31:07.636Z" }, - { url = "https://files.pythonhosted.org/packages/ab/2f/4e1d2c1f93fa0009a4f34ba5168060e719cb1d9fef319fb0970f1e0bd8d6/snowflake_connector_python-4.4.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9b1a28f843c1c0b582db7854789525d0c8aac4ea5c56e31113684e38220d0af9", size = 2829928, upload-time = "2026-03-25T23:31:10.042Z" }, - { url = "https://files.pythonhosted.org/packages/e0/93/7306d64173153b0ba0d52a651f4715df9c6af5dfc86ad61723ce5b759931/snowflake_connector_python-4.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:693a1bef97509f09b7e6f42ea6f743d27819413c04fb3dc543b060d029871c56", size = 12069021, upload-time = "2026-03-25T23:31:44.985Z" }, - { url = "https://files.pythonhosted.org/packages/f1/31/28e7a2c631a41a90b033be99253afe5f5c7e3fe538b2bcba76b1df4b8e71/snowflake_connector_python-4.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5d0e90e68a899c13fda5ca842ff77b5759b1674adf2c72702d3c2b53ca9d27b", size = 11917509, upload-time = "2026-03-25T23:31:32.508Z" }, - { url = "https://files.pythonhosted.org/packages/38/f8/f5e6cfd7cbc93baf32e6857ff075882487d4d8efee8de336085415716570/snowflake_connector_python-4.4.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:19d0c1ed033abae715a71b74c53010b180a5247c6924f851e4f7d0b0d58066c4", size = 2813111, upload-time = "2026-03-25T23:31:11.923Z" }, - { url = "https://files.pythonhosted.org/packages/49/8f/842946698af2903133c277611341fe23097bfd628cc3228fe16d58fc5ece/snowflake_connector_python-4.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:52efe2d6543a09807283748dd50a36ec01d52b4f342868132f8f9856b9c95a42", size = 2842644, upload-time = "2026-03-25T23:31:13.315Z" }, - { url = "https://files.pythonhosted.org/packages/0e/41/5e6da37c8129e23faa4926a07984a1f8603bc71bc9b74cd8e20b38d3a008/snowflake_connector_python-4.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:85a01338d282423611f357cd5392dca2219bbda9a66b44761b11d6ae8ebf1e50", size = 12068958, upload-time = "2026-03-25T23:31:47.056Z" }, - { url = "https://files.pythonhosted.org/packages/52/14/3a6e3c8685688554bc4dfb2ad44bd04e6b4867eb3cd624b57c9eeadc9b2d/snowflake_connector_python-4.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e8e7ce0e8b33aec8b1fc6741eb51dbeb54e2c3a6d282a0d459c355a85f089b08", size = 11916622, upload-time = "2026-03-25T23:31:34.7Z" }, - { url = "https://files.pythonhosted.org/packages/28/7c/fe422007388dc7e222f710a57e3b89295d7cd79a90f88f8fd3ff98c33fea/snowflake_connector_python-4.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a088f108da4653ad1396ddb63a1c757ad614d0862c38f6f69cc77344bdcfeccb", size = 2868496, upload-time = "2026-03-25T23:31:14.995Z" }, - { url = "https://files.pythonhosted.org/packages/59/88/4ecb989e878f8766dd0e66bb1a7e2eea84f4b5083cea3a0b7be102fb53b7/snowflake_connector_python-4.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b9f0ac0c00075321e1720d3876e936ee0256f54832e7463c5193a8dfa54913d5", size = 2900797, upload-time = "2026-03-25T23:31:16.738Z" }, - { url = "https://files.pythonhosted.org/packages/91/05/dc07125f05465eb34bb35903f7be94919f422f9fad22c6887292ad77e65f/snowflake_connector_python-4.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea6e4083ebea0a814b46f029d64a2fb0ba6e7732952cd8af4406041708ce0e21", size = 12067958, upload-time = "2026-03-25T23:31:49.111Z" }, - { url = "https://files.pythonhosted.org/packages/01/6a/34b472fb23c8e7e31d856d89260681a7eb27839cc6f91e4c167def60cea6/snowflake_connector_python-4.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2a6f6a514a10c3bb2d4554132f0b639f43d7e9fbb73fa1fae1c8a75333102686", size = 11917483, upload-time = "2026-03-25T23:31:36.848Z" }, - { url = "https://files.pythonhosted.org/packages/b8/3a/633668de05c41f6907b0cd2b9e0cdf6c63468fe3f44bf4077ab26d1dc47a/snowflake_connector_python-4.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8304b4818d3e9de552dcfbdd0bca61bae1583e1c9794e242e58fe44bce701604", size = 2834042, upload-time = "2026-03-25T23:31:18.291Z" }, - { url = "https://files.pythonhosted.org/packages/94/c5/658a136c3ebed7064b2d509a9fc7bcb17f9b62f3c47356486f1ba7c59b05/snowflake_connector_python-4.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c828248214a49f77b903e05acf887d3ccb9d958b5a979f2ed3663bba1bd0f2b3", size = 2868361, upload-time = "2026-03-25T23:31:20.14Z" }, - { url = "https://files.pythonhosted.org/packages/4d/72/cba3cc8b7099adf95f0af454ccf0af78673d8e16ec742cff74d79928869e/snowflake_connector_python-4.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:56ff04dd9e17edc82128f412aa3776687dc94088f3d6b9144971e169952623cb", size = 12068046, upload-time = "2026-03-25T23:31:51.275Z" }, - { url = "https://files.pythonhosted.org/packages/1e/be/59642cf1c5b254561bd9775dc9511fe7c935894af567f94870e69dda644d/snowflake_connector_python-4.4.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:96fdca994c4d9f7780e82fc7b4bd3398d856b43de3bae57d44e242ff435a2431", size = 11917786, upload-time = "2026-03-25T23:31:39.233Z" }, - { url = "https://files.pythonhosted.org/packages/75/d2/e1cc3871439a8b73cd2e9ab0398290a66a504c64b31804d847845831b230/snowflake_connector_python-4.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9fa43d330389df27024757c4f97dabddafbedc74b8bcc189b6a86e8b4d036014", size = 2834023, upload-time = "2026-03-25T23:31:21.536Z" }, - { url = "https://files.pythonhosted.org/packages/30/e3/53cb5b019b5a06a627e279c0bde410dfa23e0c5dfaa462e83e9200a9b20a/snowflake_connector_python-4.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:43e1a2f3ac51d24406d4eb0c23a8ceb9d6f5cb4854c941e5e1375d8c481e2844", size = 2864401, upload-time = "2026-03-25T23:31:23.297Z" }, - { url = "https://files.pythonhosted.org/packages/0d/22/2a02e6af15bb1070a09543e7d11a33a297d171bdca39566a0e307f5c7deb/snowflake_connector_python-4.4.0-cp314-cp314-win_amd64.whl", hash = "sha256:d8ac1659c8e588b9502f8d3d03c1ded2f274de0da9c09e62fe007cba5b46d6a5", size = 12206879, upload-time = "2026-03-25T23:31:53.355Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/99/e7/f0ab30895256c4d8e0b6e33857150d10d465bdfaef3f0ed471ba83b1444f/snowflake_connector_python-4.5.0.tar.gz", hash = "sha256:376eb9d956f6b9287df448e483ec862b94fb9ccb06cefc945b68ddac1c7d1c48", size = 932644, upload-time = "2026-05-12T11:57:10.475Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/df/3769bb640e89bc5aa1e43969d696415d91339d0151719d56eaa90b9e25ab/snowflake_connector_python-4.5.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:e4481849c65d4eeaef89efd589c7690bc51d7535524f278dde9b29012fdf5084", size = 11936508, upload-time = "2026-05-12T11:57:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/5e/79/e8e8978033ba6b01563336ca38dcaae39113f21e71146384d3501faf32ad/snowflake_connector_python-4.5.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee03a9b8f61192d72374e3785650460ed0c996c7153a8b38140be6e162ac4fb1", size = 2806562, upload-time = "2026-05-12T11:56:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/19/e9/3a21c4c86abebc81d378c2b688bd8ca4a39d4ba69057b98c0ce746360d09/snowflake_connector_python-4.5.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:206ea5e947ac346d121dd344048b7dd1b2ab4a0da03375ce3d90321a8ce598db", size = 2835721, upload-time = "2026-05-12T11:56:48.781Z" }, + { url = "https://files.pythonhosted.org/packages/f8/9d/f96babe4fd42bfd3a4fa20be7b96cdf3b531b3873f556b95ad70819e2c05/snowflake_connector_python-4.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:2c04c2a7ee5a183be1204417077584c07569e66997e8d093403bb1604b5463bd", size = 12074893, upload-time = "2026-05-12T11:57:31.459Z" }, + { url = "https://files.pythonhosted.org/packages/15/0f/a0b03dbb3dc8fd3622a790a28ec5ccab2d3e060e119f4dab4a8cfb117a3f/snowflake_connector_python-4.5.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:16311dc9c4a0e2d6cd14ecd43f1f607e291ba5397832123a0b04a326897ef8b0", size = 11936317, upload-time = "2026-05-12T11:57:16.518Z" }, + { url = "https://files.pythonhosted.org/packages/d1/0d/6def81849add7b0f363427ab344e29b9d47244d10e6de56f9b93b7213868/snowflake_connector_python-4.5.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a1aa9128aa43d09771e845a1af1fc2a5d5a014ab0bea8bea4b72501662ba601f", size = 2819069, upload-time = "2026-05-12T11:56:50.695Z" }, + { url = "https://files.pythonhosted.org/packages/b2/4b/18c8576e5016ff9e9b7650432b415b88b753ff3c33ccdd8ceb6dfc097b74/snowflake_connector_python-4.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1897be7487587d9ce7feae132a288e714b3b07f3b3f3404e62b6dfcebde94bb9", size = 2848357, upload-time = "2026-05-12T11:56:52.642Z" }, + { url = "https://files.pythonhosted.org/packages/70/aa/64ca991d6e1026118f838d02b6b6bef9f544dff9a757980d15ae7eeed75c/snowflake_connector_python-4.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:a28a9391b464f9060304d8468a24bff6a2d13bf5801c92fbf8c05907e5fb06f4", size = 12074827, upload-time = "2026-05-12T11:57:33.858Z" }, + { url = "https://files.pythonhosted.org/packages/4e/4c/015364f864d6bc86f48ee56159817407f209976575ea31115ae77c3dce96/snowflake_connector_python-4.5.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:39c2b9d17da9a23475ad52a8e7b389001d7277bf400428c4c6af6bd1099bc62e", size = 11936605, upload-time = "2026-05-12T11:57:19.082Z" }, + { url = "https://files.pythonhosted.org/packages/4e/17/c4cecd881b6defe5f95be2133b0b8e72e8d60b43ef3a31a05fe2cff8c17f/snowflake_connector_python-4.5.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:93febe6d69c4dc46a64d16a0b6ed65b523d869f1691ead791eb22ebd8b6725ce", size = 2874376, upload-time = "2026-05-12T11:56:54.681Z" }, + { url = "https://files.pythonhosted.org/packages/ed/93/1a066159c6b14b66a0935d9b57aa88a145b16eb4a299c9cb14ad0035777b/snowflake_connector_python-4.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4870858f2fa312343b0063fb4da57b3e893d80aa00e371bc637981f3eed9c254", size = 2906767, upload-time = "2026-05-12T11:56:56.714Z" }, + { url = "https://files.pythonhosted.org/packages/27/c4/618f5af54dc3b6fc6070d91943eed87f156170c5b45075062932dc9d6fde/snowflake_connector_python-4.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:583adc49b38316d3023dc80bef81a27a3027a2f8109a36e69a0083785b7f8662", size = 12073830, upload-time = "2026-05-12T11:57:36.576Z" }, + { url = "https://files.pythonhosted.org/packages/44/30/f8a7161b62445aea45fd569522e998c9c718973afa7b10afa7a021a79fa8/snowflake_connector_python-4.5.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:7badadc59d7e75550c7f35bdb9414895cae5898a4f9901b02231d0eaa694a4a0", size = 11935196, upload-time = "2026-05-12T11:57:21.76Z" }, + { url = "https://files.pythonhosted.org/packages/d4/dd/3f6c8196c1d906590eea2348c74ec307dd2f3ec479c548b864bb6f802856/snowflake_connector_python-4.5.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:64ec9b5dddf19c7f4ce4355d1b8e16239a26d1d161d92219919953510664269c", size = 2839990, upload-time = "2026-05-12T11:56:58.338Z" }, + { url = "https://files.pythonhosted.org/packages/a6/31/26d9614d67b374efa5248f4a9fc0280e57cc3dae34ec50ce0a52ad8ead74/snowflake_connector_python-4.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d7f5e2ea42521c033c4ac0e60685c50a47082715eb57cdaf92b438d9bb44d220", size = 2874205, upload-time = "2026-05-12T11:57:00.866Z" }, + { url = "https://files.pythonhosted.org/packages/25/58/4e6347760e93293126c28cbabc9711d7292c8eb7298fcf04765fa3627ba4/snowflake_connector_python-4.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:5f73f1b0ed24e01d9dd627b088cc83e62e81ea5b19bee679946941f6d1947ef9", size = 12073914, upload-time = "2026-05-12T11:57:44.62Z" }, + { url = "https://files.pythonhosted.org/packages/3c/84/7e61dd03722bc8e7a66701cd1f70c4f9bbfcc038f6d7af929034994097fc/snowflake_connector_python-4.5.0-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:9a17b5a8e43611bd7eae289de2b8f71679bb386b8d82036f0b36436827308f81", size = 11935205, upload-time = "2026-05-12T11:57:24.415Z" }, + { url = "https://files.pythonhosted.org/packages/16/aa/a545aca4b7e68f9db64e88e362e9778f665d1faab293c5e4988f5b1505d6/snowflake_connector_python-4.5.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9c0cc17ceb915842dfdee7baaccbdcd5b5e3de06977231b8a31704c2ed8532d8", size = 2839909, upload-time = "2026-05-12T11:57:02.511Z" }, + { url = "https://files.pythonhosted.org/packages/a8/45/3795b0c9d506de2f921a5b4d41bb29a03aafbe21e1b0853f5a1b20a76018/snowflake_connector_python-4.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0c92794e56faaafbdf6fedfa0473bd29f40ea89ad258b322c92b27b27f57bc35", size = 2870250, upload-time = "2026-05-12T11:57:04.447Z" }, + { url = "https://files.pythonhosted.org/packages/74/e1/c35f605a3dad7dd733a0feca1f1eacfbdd51a2e15b5979861a3e3e1b482f/snowflake_connector_python-4.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:56baa39a1fa9f0cdcdad3da022508396268d0bf6bb6df28087b02e4826e88bd1", size = 12212850, upload-time = "2026-05-12T11:57:47.084Z" }, ] [[package]] @@ -21215,11 +21227,11 @@ wheels = [ [[package]] name = "sqlglot" -version = "30.7.0" +version = "30.8.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/56/56d234bb267009a4b5fbaf56bd11eb5db91e0eaf0235b3ab53759d0cac2f/sqlglot-30.7.0.tar.gz", hash = "sha256:eaf90c7d61978ce98fb52718b7a578054bd0cebcc9ab6f3818ad4391ea9d6b69", size = 5860425, upload-time = "2026-05-04T17:02:23.346Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/64/89299aefc6ebdf4fc899f5dc14c7fcb7eb9da9290a2b4d615ae7ab884b17/sqlglot-30.8.0.tar.gz", hash = "sha256:1c5f93fb742dd9aaa75eee6bb33a637794a858b9a86375fac23a2dc0f7bc127e", size = 5869750, upload-time = "2026-05-13T09:04:38.923Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/08/bdc2fbd41b61173dade9ebb96b56e072a1cd7bdac24d8195e6dc5005186e/sqlglot-30.7.0-py3-none-any.whl", hash = "sha256:30421efcf3d57f95e57deaa755f65976c8b10735923f79986595dea912dc8206", size = 683613, upload-time = "2026-05-04T17:02:21.623Z" }, + { url = "https://files.pythonhosted.org/packages/88/4e/80705091aaf9c95e125d243f0aa871bc9f3670b4c9d963e6bad3b3dce8ff/sqlglot-30.8.0-py3-none-any.whl", hash = "sha256:af903378c331d5b72277a1b41118f07bc3e50cf4478e2d47eed12c96ee6a22a4", size = 687831, upload-time = "2026-05-13T09:04:36.336Z" }, ] [[package]] @@ -21233,15 +21245,15 @@ wheels = [ [[package]] name = "sse-starlette" -version = "3.4.2" +version = "3.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, { name = "starlette" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/82/10cdfab4ab663a6b6bd624d33f55b2cfa41af5105be033a6d5d135a92c5f/sse_starlette-3.4.2.tar.gz", hash = "sha256:2f9a7f51ed84395a0427fb9f66cb1ec11f7899d977a72cbc9070b962a2e14489", size = 35236, upload-time = "2026-05-06T19:42:13.727Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/2b/58abc2d1fd397e7dde08e947e05c884d8ef2f78d5e2588c17a12d42d6994/sse_starlette-3.4.4.tar.gz", hash = "sha256:07e0fa0460138baf25cdd5fb28683472c3995dc1642225191b3832d62526bcb0", size = 31819, upload-time = "2026-05-12T17:37:17.019Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/27/351c71e803c56090d8d3bf9520422debeb8ed938871fd4f7ef519805a6c5/sse_starlette-3.4.2-py3-none-any.whl", hash = "sha256:6ea5d35b7ce979a3de5a0db5f77fe886b1616e4b3e1ad93fba502bd9b5fb662f", size = 16516, upload-time = "2026-05-06T19:42:12.201Z" }, + { url = "https://files.pythonhosted.org/packages/dc/67/805710444ea8cc75fbf70b920ed431a560c4bf9c57f7d5a3117213189399/sse_starlette-3.4.4-py3-none-any.whl", hash = "sha256:3f4dd50d8aed2771a091f3a83000323fc3844541c16b4fe585ae2420cc6df973", size = 16514, upload-time = "2026-05-12T17:37:15.601Z" }, ] [[package]] @@ -22063,14 +22075,14 @@ wheels = [ [[package]] name = "types-requests" -version = "2.33.0.20260508" +version = "2.33.0.20260513" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c7/6b/eb226bdd61a982c9a03e02c657fb4ab001733506e6423906ac142331f2e3/types_requests-2.33.0.20260508.tar.gz", hash = "sha256:81b2ae5f0d20967714a6aa5ef9284c05570d7cb06b7de8f2a77b918b63ddd411", size = 23991, upload-time = "2026-05-08T04:50:56.818Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/f7/3228dd3794941bcb92ca6ca2045a6671a828ec0b47becbef23310bc45559/types_requests-2.33.0.20260513.tar.gz", hash = "sha256:bd845450e954e751373d5d33526742592f298808a3ee3bda7e858e46b839b57f", size = 24714, upload-time = "2026-05-13T05:39:23.481Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/96/080db0afdf2c5cc5fe512b41354e8d114fe8f65e9510c56ff8dfd40216ce/types_requests-2.33.0.20260508-py3-none-any.whl", hash = "sha256:fa01459cca184229713df03709db46a905325906d27e042cd4fd7ea3d15d3400", size = 20722, upload-time = "2026-05-08T04:50:55.548Z" }, + { url = "https://files.pythonhosted.org/packages/51/f5/233a78be8367a9888de718f002fb27b1ea4be39471cd88aedeafceed872e/types_requests-2.33.0.20260513-py3-none-any.whl", hash = "sha256:d5a965f9d18b6e06b72039a69565de9027e58f36a7f709857da747fbe7521122", size = 21390, upload-time = "2026-05-13T05:39:22.262Z" }, ] [[package]] @@ -22344,7 +22356,7 @@ wheels = [ [[package]] name = "virtualenv" -version = "21.3.1" +version = "21.3.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, @@ -22353,9 +22365,9 @@ dependencies = [ { name = "python-discovery" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ec/0d/915c02c94d207b85580eb09bffab54438a709e7288524094fe781da526c2/virtualenv-21.3.1.tar.gz", hash = "sha256:c2305bc1fddeec40699b8370d13f8d431b0701f00ce895061ce493aeded4426b", size = 7613791, upload-time = "2026-05-05T01:34:31.402Z" } +sdist = { url = "https://files.pythonhosted.org/packages/69/e1/665267cea4767debd19f584667a9197c2098b5e7f67a502da9f3a086ab37/virtualenv-21.3.2.tar.gz", hash = "sha256:3ecda97894a6fc1c53106356f488690e5c86278c1f693f3fc0805ac85a513686", size = 7613810, upload-time = "2026-05-12T14:44:18.01Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/4f/f71e641e504111a5a74e3a20bc52d01bd86788b22699dd3fee1c63253cf6/virtualenv-21.3.1-py3-none-any.whl", hash = "sha256:d1a71cf58f2f9228fff23a1f6ec15d39785c6b32e03658d104974247145edd35", size = 7594539, upload-time = "2026-05-05T01:34:28.98Z" }, + { url = "https://files.pythonhosted.org/packages/20/5b/885f479093f6627669d39b57bc3d4e674da532e1a4b247d473a61d8d2118/virtualenv-21.3.2-py3-none-any.whl", hash = "sha256:c58ea748fa50bb2a4367da5ba3d30b02458ed40b4ea888faad94021f3309f764", size = 7594558, upload-time = "2026-05-12T14:44:15.193Z" }, ] [[package]] @@ -22835,7 +22847,7 @@ wheels = [ [[package]] name = "yandexcloud" -version = "0.389.0" +version = "0.390.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography" }, @@ -22848,9 +22860,9 @@ dependencies = [ { name = "requests" }, { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d1/88/c09bb3cd847b1874c08b7a22be1b48dbbfe639fc7e4284ac2c820f76cf39/yandexcloud-0.389.0.tar.gz", hash = "sha256:459d7466992c25c54913ccfaed4b787f76b60a20b3356245d10f391166be174d", size = 3884793, upload-time = "2026-05-04T15:46:48.029Z" } +sdist = { url = "https://files.pythonhosted.org/packages/14/0d/84f44fd11f3f37d6990d5947da3cf4ea1a34d461feb6717eaa54870a1982/yandexcloud-0.390.0.tar.gz", hash = "sha256:5b6fbb270f9281778e5805e4434c0da15168357159266d6a8d54f4d70afea8b1", size = 3898276, upload-time = "2026-05-11T16:03:55.668Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b2/e0/188f8d9be8b092b2aec00c770656752d10ca1858f605e6ef160ffd95f4c9/yandexcloud-0.389.0-py3-none-any.whl", hash = "sha256:69b71dde9315e41958836ff4b067871d1c7df87edeac669df85f3299a3f99162", size = 5928975, upload-time = "2026-05-04T15:46:45.814Z" }, + { url = "https://files.pythonhosted.org/packages/ae/03/d5d5996a58092647af074fd2eb5c6e5822041d37e8708a3435b1291bbec9/yandexcloud-0.390.0-py3-none-any.whl", hash = "sha256:189936ae3a13c42c388e53b903ab56171d5b7900c58d21b41ec26472a8416232", size = 5943666, upload-time = "2026-05-11T16:03:53.19Z" }, ] [[package]] @@ -23010,14 +23022,14 @@ wheels = [ [[package]] name = "ydb-dbapi" -version = "0.1.21" +version = "0.1.22" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ydb" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7e/11/3257b937253147690937a88e4ee6e151355d24fdade2521c9f0565ddf369/ydb_dbapi-0.1.21.tar.gz", hash = "sha256:8a305fd1b719705834da0f8a47c2ba913a393db256cf6ac7a7e6c8ca0d108990", size = 18818, upload-time = "2026-05-07T19:01:15.015Z" } +sdist = { url = "https://files.pythonhosted.org/packages/69/29/473641a18ab54333d8c0d4f2fe46d7acad03688378e9e7e79cf7c95cc4d7/ydb_dbapi-0.1.22.tar.gz", hash = "sha256:79df761d2bd67d532a7bae2e9a155f2f083e8de9a71c8398bbdeaceca692677f", size = 18856, upload-time = "2026-05-12T16:12:05.738Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/8e/2a17a3c72c3e56dad584090cbf4793fbb50601b7573b0774f98c480bbc65/ydb_dbapi-0.1.21-py3-none-any.whl", hash = "sha256:b90199ba76b18f564feeb256eec4740ccfa5f6cef7836a8873611141e1c11e76", size = 19096, upload-time = "2026-05-07T19:01:13.535Z" }, + { url = "https://files.pythonhosted.org/packages/3d/14/d3a1b14737d95f8192e66b08814a7fbddb4160a4ef4731fe795e9ca24708/ydb_dbapi-0.1.22-py3-none-any.whl", hash = "sha256:6825d004441fce4a4ab701f619c2d6045809ee764a26d246e546ac5ae7d7be12", size = 19123, upload-time = "2026-05-12T16:12:04.328Z" }, ] [[package]]