From d41da98f5d43b1a542336b850bdb4b33d6b0f9e3 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Fri, 13 Sep 2024 09:52:27 +0100 Subject: [PATCH 01/24] refactor: unified project name variables --- src/ot_orchestration/dynamic_dags.py | 2 +- src/ot_orchestration/utils/common.py | 2 +- src/ot_orchestration/utils/dataproc.py | 16 ++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/ot_orchestration/dynamic_dags.py b/src/ot_orchestration/dynamic_dags.py index 4217721..6ddfe6a 100644 --- a/src/ot_orchestration/dynamic_dags.py +++ b/src/ot_orchestration/dynamic_dags.py @@ -128,7 +128,7 @@ def generic_genetics_dag(): batch_job = ManifestSubmitBatchJobOperator( task_id="gwas-catalog_batch_job", manifests=consolidated_manifests, # type: ignore - gcp_project=common.GCP_PROJECT, + gcp_project=common.GCP_PROJECT_GENETICS, gcp_region=common.GCP_REGION, job_name=f"gwas-catalog-job-{time.strftime('%Y%m%d-%H%M%S')}", step="gwas-catalog-etl", diff --git a/src/ot_orchestration/utils/common.py b/src/ot_orchestration/utils/common.py index a595981..73809f2 100644 --- a/src/ot_orchestration/utils/common.py +++ b/src/ot_orchestration/utils/common.py @@ -11,7 +11,7 @@ GENTROPY_VERSION = "0.0.0" # Cloud configuration. -GCP_PROJECT = "open-targets-genetics-dev" +GCP_PROJECT_GENETICS = "open-targets-genetics-dev" GCP_PROJECT_PLATFORM = "open-targets-eu-dev" GCP_PROJECT_ZONE = "europe-west1-b" GCP_REGION = "europe-west1" diff --git a/src/ot_orchestration/utils/dataproc.py b/src/ot_orchestration/utils/dataproc.py index 573834b..67d118f 100644 --- a/src/ot_orchestration/utils/dataproc.py +++ b/src/ot_orchestration/utils/dataproc.py @@ -20,7 +20,7 @@ CONFIG_TAG, GCP_AUTOSCALING_POLICY, GCP_DATAPROC_IMAGE, - GCP_PROJECT, + GCP_PROJECT_GENETICS, GCP_REGION, GCP_ZONE, GENTROPY_VERSION, @@ -58,7 +58,7 @@ def create_cluster( """ # Create base cluster configuration. cluster_config = ClusterGenerator( - project_id=GCP_PROJECT, + project_id=GCP_PROJECT_GENETICS, zone=GCP_ZONE, master_machine_type=master_machine_type, worker_machine_type=worker_machine_type, @@ -74,7 +74,7 @@ def create_cluster( "PACKAGE": PACKAGE_WHEEL, }, idle_delete_ttl=30 * 60, # In seconds. - autoscaling_policy=f"projects/{GCP_PROJECT}/regions/{GCP_REGION}/autoscalingPolicies/{autoscaling_policy}", + autoscaling_policy=f"projects/{GCP_PROJECT_GENETICS}/regions/{GCP_REGION}/autoscalingPolicies/{autoscaling_policy}", ).make() # If specified, amend the configuration to include local SSDs for worker nodes. @@ -90,7 +90,7 @@ def create_cluster( # Return the cluster creation operator. return DataprocCreateClusterOperator( task_id="create_cluster", - project_id=GCP_PROJECT, + project_id=GCP_PROJECT_GENETICS, cluster_config=cluster_config, region=GCP_REGION, cluster_name=cluster_name, @@ -120,10 +120,10 @@ def submit_job( return DataprocSubmitJobOperator( task_id=task_id, region=GCP_REGION, - project_id=GCP_PROJECT, + project_id=GCP_PROJECT_GENETICS, job={ "job_uuid": f"airflow-{task_id}", - "reference": {"project_id": GCP_PROJECT}, + "reference": {"project_id": GCP_PROJECT_GENETICS}, "placement": {"cluster_name": cluster_name}, job_type: job_specification, }, @@ -242,7 +242,7 @@ def delete_cluster(cluster_name: str) -> DataprocDeleteClusterOperator: """ return DataprocDeleteClusterOperator( task_id="delete_cluster", - project_id=GCP_PROJECT, + project_id=GCP_PROJECT_GENETICS, cluster_name=cluster_name, region=GCP_REGION, trigger_rule=TriggerRule.ALL_DONE, @@ -312,5 +312,5 @@ def submit_pyspark_job_no_operator( } ) job_client.submit_job( - project_id=GCP_PROJECT, region=GCP_REGION, job=job_description + project_id=GCP_PROJECT_GENETICS, region=GCP_REGION, job=job_description ) From b1d3924cc9d17952c4defaa422d127aed6f725d8 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Fri, 13 Sep 2024 09:53:06 +0100 Subject: [PATCH 02/24] fix: drop old exported names that no longer exist --- src/ot_orchestration/utils/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/ot_orchestration/utils/__init__.py b/src/ot_orchestration/utils/__init__.py index f8227a2..4738ab6 100644 --- a/src/ot_orchestration/utils/__init__.py +++ b/src/ot_orchestration/utils/__init__.py @@ -24,8 +24,6 @@ "IOManager", "GCSPath", "NativePath", - "bucket_name", - "bucket_path", "clean_name", "check_gcp_folder_exists", "random_id", From 527c351bcb20be8089e4c954012e6f38f4bf2588 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 06:02:08 +0100 Subject: [PATCH 03/24] fix: added missing hash to dev command --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b846d9c..9d8a0c0 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ DOCKER_IMAGE := "Orchestration-Airflow" .PHONY: $(shell sed -n -e '/^$$/ { n ; /^[^ .\#][^ ]*:/ { s/:.*$$// ; p ; } ; }' $(MAKEFILE_LIST)) .DEFAULT_GOAL := help -dev: # setup dev environment +dev: ## setup dev environment . setup-dev.sh help: ## This is help From 8b880c9b8811bdde65c0375cb3e92a69ae2b41fc Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 06:11:16 +0100 Subject: [PATCH 04/24] chore: do not activate poetry shell on setup --- setup-dev.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/setup-dev.sh b/setup-dev.sh index d7c0a5a..c3d06e1 100755 --- a/setup-dev.sh +++ b/setup-dev.sh @@ -38,6 +38,3 @@ make generate-requirements echo "Building airflow image" make build-airflow-image - -echo "Starting Poetry shell" -poetry shell From 61d6b78d88e17c76eabd9cc447e47f190016e1fc Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 06:20:40 +0100 Subject: [PATCH 05/24] chore: enable zsh shell in dev env --- setup-dev.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/setup-dev.sh b/setup-dev.sh index c3d06e1..2105113 100755 --- a/setup-dev.sh +++ b/setup-dev.sh @@ -1,13 +1,14 @@ #!/usr/bin/env bash +export SHELL_RC=$(echo "$HOME/.${SHELL##*/}rc") if ! command -v pyenv &>/dev/null; then echo "Installing Pyenv, a tool to manage multiple Python versions..." curl -sSL https://pyenv.run | bash # Add Pyenv configuration to ~/.bashrc. - echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc - echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc - echo 'eval "$(pyenv init -)"' >> ~/.bashrc + echo 'export PYENV_ROOT="$HOME/.pyenv"' >> $SHELL_RC + echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> $SHELL_RC + echo 'eval "$(pyenv init -)"' >> $SHELL_RC # And also execute it right now. - . <(tail -n3 ~/.bashrc) + . <(tail -n3 $SHELL_RC) fi echo "Activating Pyenv environment with a Python version required for the project..." @@ -30,7 +31,6 @@ poetry env use $PYTHON_VERSION poetry install --sync echo "Setting up pre-commit..." -poetry run pre-commit install poetry run pre-commit install --hook-type commit-msg echo "Generating requirements for the docker image" From 66f65d3dbd58e492325d9b8f70ffc80e334d9158 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 06:25:19 +0100 Subject: [PATCH 06/24] refactor: updated type definitions --- src/ot_orchestration/types.py | 126 +++++++++++++++++----------------- 1 file changed, 64 insertions(+), 62 deletions(-) diff --git a/src/ot_orchestration/types.py b/src/ot_orchestration/types.py index 0181e95..025416d 100644 --- a/src/ot_orchestration/types.py +++ b/src/ot_orchestration/types.py @@ -1,64 +1,66 @@ """Types introduced in the library.""" -from typing import Literal - -from typing_extensions import Required, TypedDict - -ManifestObject = TypedDict( - "ManifestObject", - { - "studyId": Required[str], - "rawPath": Required[str], - "harmonisedPath": Required[str], - "passHarmonisation": bool | None, - "passQC": bool | None, - "qcPath": Required[str], - "manifestPath": Required[str], - "studyType": str | None, - "analysisFlag": str | None, - "isCurated": bool | None, - "pubmedId": str | None, - "status": Literal["success", "failure", "pending"], - }, -) - - -GCSMountObject = TypedDict( - "GCSMountObject", {"remote_path": Required[str], "mount_point": Required[str]} -) - -BatchTaskSpecs = TypedDict( - "BatchTaskSpecs", - { - "max_retry_count": Required[int], - "max_run_duration": Required[str], - }, -) - -BatchResourceSpecs = TypedDict( - "BatchResourceSpecs", - { - "cpu_milli": Required[int], - "memory_mib": Required[int], - "boot_disk_mib": Required[int], - }, -) - -BatchPolicySpecs = TypedDict( - "BatchPolicySpecs", - { - "machine_type": Required[str], - }, -) - - -BatchSpecs = TypedDict( - "BatchSpecs", - { - "resource_specs": BatchResourceSpecs, - "task_specs": BatchTaskSpecs, - "policy_specs": BatchPolicySpecs, - "image": str, - "commands": list[str], - }, -) +from __future__ import annotations + +from typing import Any, Literal, TypedDict + + +class ManifestObject(TypedDict): + studyId: str + rawPath: str + harmonisedPath: str + passHarmonisation: bool | None + passQC: bool | None + qcPath: str + manifestPath: str + studyType: str | None + analysisFlag: str | None + isCurated: bool | None + pubmedId: str | None + status: Literal["success", "failure", "pending"] + + +class GCSMountObject(TypedDict): + remote_path: str + mount_point: str + + +class BatchTaskSpecs(TypedDict): + max_retry_count: int + max_run_duration: str + + +class BatchResourceSpecs(TypedDict): + cpu_milli: int + memory_mib: int + boot_disk_mib: int + + +class BatchPolicySpecs(TypedDict): + machine_type: str + + +class GoogleBatchSpecs(TypedDict): + resource_specs: BatchResourceSpecs + task_specs: BatchTaskSpecs + policy_specs: BatchPolicySpecs + image: str + commands: list[str] + environment: list[dict[str, Any]] + entrypoint: str + + +class DataprocSpecs(TypedDict): + python_main_module: str + cluster_init_script: str + cluster_metadata: dict[str, str] + cluster_name: str + + +class ConfigNode(TypedDict): + id: str + kind: Literal["Task", "TaskGroup"] + prerequisites: list[str] + params: dict[str, Any] + google_batch: GoogleBatchSpecs + nodes: list[ConfigNode] From 9cf2d8da9591070f1c622f72008abd20f31ff90c Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 06:29:31 +0100 Subject: [PATCH 07/24] feat: functions to handle structured node configs --- src/ot_orchestration/utils/__init__.py | 6 +++ src/ot_orchestration/utils/utils.py | 57 +++++++++++++++++++++----- 2 files changed, 52 insertions(+), 11 deletions(-) diff --git a/src/ot_orchestration/utils/__init__.py b/src/ot_orchestration/utils/__init__.py index 4738ab6..2adfdf4 100644 --- a/src/ot_orchestration/utils/__init__.py +++ b/src/ot_orchestration/utils/__init__.py @@ -9,8 +9,11 @@ NativePath, ) from ot_orchestration.utils.utils import ( + chain_dependencies, check_gcp_folder_exists, clean_name, + convert_params_to_hydra_positional_arg, + find_node_in_config, random_id, read_hocon_config, read_yaml_config, @@ -37,4 +40,7 @@ "create_batch_job", "extract_study_id_from_path", "URI_PATTERN", + "convert_params_to_hydra_positional_arg", + "find_node_in_config", + "chain_dependencies", ] diff --git a/src/ot_orchestration/utils/utils.py b/src/ot_orchestration/utils/utils.py index 6902456..d14aa79 100644 --- a/src/ot_orchestration/utils/utils.py +++ b/src/ot_orchestration/utils/utils.py @@ -13,6 +13,8 @@ import yaml from google.cloud.storage import Client +from ot_orchestration.types import ConfigNode + def check_gcp_folder_exists(bucket_name: str, folder_path: str) -> bool: """Check if a folder exists in a Google Cloud bucket. @@ -119,14 +121,47 @@ def time_to_seconds(time_str: str) -> int: return 0 -__all__ = [ - "bucket_name", - "bucket_path", - "check_gcp_folder_exists", - "clean_label", - "clean_name", - "create_name", - "read_yaml_config", - "strhash", - "time_to_seconds", -] +def chain_dependencies(nodes: list[ConfigNode], tasks_or_task_groups: dict[str, Any]): + """Compare two dictionaries left containing task definitions and right containing tasks. + + Map the dependencies between tasks. + + """ + node_dependencies = {node["id"]: node.get("prerequisites", []) for node in nodes} + for label, node in tasks_or_task_groups.items(): + for dependency in node_dependencies[label]: + node.set_upstream(tasks_or_task_groups[dependency]) + + +def convert_params_to_hydra_positional_arg( + params: dict[str, Any] | None, +) -> list[str]: + """Convert configuration parameters to form that can be passed to hydra step positional arguments. + + This function parses to get the overwrite syntax used by hydra. + https://hydra.cc/docs/advanced/override_grammar/basic/. Parameter keys have to start with `step.` + The first parameter should be the step: "step_name". + + Args: + params (dict[str, Any]] | None): Parameters for the step to convert. + + Raises: + ValueError: When keys passed to the function params dict does not contain the `step.` prefix. + + Returns: + list[str] | None: List of strings that represents the positional arguments for hydra gentropy step. + """ + if not params: + raise ValueError("Expected at least one parameter with the step: 'step_name'") + incorrect_param_keys = [key for key in params if "step" not in key] + if incorrect_param_keys: + raise ValueError(f"Passed incorrect param keys {incorrect_param_keys}") + return [f"{k}={v}" for k, v in params.items()] + + +def find_node_in_config(config: list[ConfigNode], node_id: str) -> ConfigNode: + """Find node in the genetics etl config.""" + for node_config in config: + if node_config["id"] == node_id: + return node_config + raise KeyError(f"Config for {node_id} was not found") From fbd5319ed1d783433b939dfe6eeac92d1c5e2fa2 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 06:42:53 +0100 Subject: [PATCH 08/24] chore: tests for new functions --- src/ot_orchestration/utils/utils.py | 3 +- tests/test_utils.py | 77 ++++++++++++++++++++++++++++- 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/src/ot_orchestration/utils/utils.py b/src/ot_orchestration/utils/utils.py index d14aa79..ef6ec53 100644 --- a/src/ot_orchestration/utils/utils.py +++ b/src/ot_orchestration/utils/utils.py @@ -156,11 +156,12 @@ def convert_params_to_hydra_positional_arg( incorrect_param_keys = [key for key in params if "step" not in key] if incorrect_param_keys: raise ValueError(f"Passed incorrect param keys {incorrect_param_keys}") + return [f"{k}={v}" for k, v in params.items()] def find_node_in_config(config: list[ConfigNode], node_id: str) -> ConfigNode: - """Find node in the genetics etl config.""" + """Find node config list.""" for node_config in config: if node_config["id"] == node_id: return node_config diff --git a/tests/test_utils.py b/tests/test_utils.py index 9971761..98e44f4 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,7 +1,12 @@ """Tests for package util functions.""" import pytest -from ot_orchestration.utils import time_to_seconds +from ot_orchestration.utils import ( + chain_dependencies, + convert_params_to_hydra_positional_arg, + find_node_in_config, + time_to_seconds, +) @pytest.mark.parametrize( @@ -16,3 +21,73 @@ def test_time_to_seconds(input: str, output: int) -> None: """Test different date intervals to seconds.""" assert time_to_seconds(input) == output + + +@pytest.mark.parametrize( + ["input", "output"], + [ + pytest.param( + {"step": "some_step", "step.b": 2, "+step.c": 3}, + ["step=some_step", "step.b=2", "+step.c=3"], + id="step configuration", + ), + pytest.param( + {"step": "some_step", "step.b": {"c": 2, "d": 3}}, + ["step=some_step", "step.b.c=2", "step.b.d=3"], + id="nested dict", + marks=pytest.mark.xfail( + reason="Structured configuration not supported yet." + ), + ), + ], +) +def test_convert_params_to_hydra_positional_arg(input: dict, output: list[str]) -> None: + """Test conversion of dictionary to hydra positional arguments.""" + assert convert_params_to_hydra_positional_arg(input) == output + + +def test_find_node_in_config() -> None: + """Test finding a node in a configuration.""" + config = [ + {"id": "A", "kind": "Task", "prerequisites": []}, + {"id": "B", "kind": "Task", "prerequisites": ["A"]}, + {"id": "C", "kind": "Task", "prerequisites": ["B"]}, + ] + + assert find_node_in_config(config, "A") == { + "id": "A", + "kind": "Task", + "prerequisites": [], + } + assert find_node_in_config(config, "B") == { + "id": "B", + "kind": "Task", + "prerequisites": ["A"], + } + assert find_node_in_config(config, "C") == { + "id": "C", + "kind": "Task", + "prerequisites": ["B"], + } + with pytest.raises(KeyError): + find_node_in_config(config, "D") + + +@pytest.mark.xfail(reason="Need to mock the Task class and set_upstream method.") +def test_chain_dependencies() -> None: + """Test chaining dependencies between tasks.""" + nodes = [ + {"id": "A", "kind": "Task", "prerequisites": []}, + {"id": "B", "kind": "Task", "prerequisites": ["A"]}, + {"id": "C", "kind": "Task", "prerequisites": ["B"]}, + ] + tasks_or_task_groups = { + "A": "Task A", + "B": "Task B", + "C": "Task C", + } + + chain_dependencies(nodes, tasks_or_task_groups) + assert tasks_or_task_groups["A"].upstream_task_ids == set() + assert tasks_or_task_groups["B"].upstream_task_ids == {"A"} + assert tasks_or_task_groups["C"].upstream_task_ids == {"B"} From 37c15b4b162d6f3d828087c59c03383682b8ae14 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 06:46:47 +0100 Subject: [PATCH 09/24] feat: added path property for gcs path obj --- src/ot_orchestration/utils/path.py | 9 ++++++++- tests/test_io_manager.py | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/ot_orchestration/utils/path.py b/src/ot_orchestration/utils/path.py index 384c5fd..059bb01 100644 --- a/src/ot_orchestration/utils/path.py +++ b/src/ot_orchestration/utils/path.py @@ -6,6 +6,7 @@ import multiprocessing import re from abc import abstractmethod +from dataclasses import dataclass from functools import cached_property from pathlib import Path from typing import Any, Protocol, TypedDict @@ -37,6 +38,7 @@ class PathSegments(TypedDict): class ProtoPath(Protocol): segments: PathSegments + path: str @abstractmethod def dump(self, data: Any) -> None: @@ -127,6 +129,11 @@ def exists(self) -> bool: """ return self.native_path.exists() + @cached_property + def path(self) -> str: + """Get path segment.""" + return str(self.native_path) + @cached_property def segments(self) -> PathSegments: """Get path segments. @@ -176,7 +183,7 @@ def client(self) -> storage.Client: adapter = HTTPAdapter(pool_connections=128, pool_maxsize=1024, max_retries=3) client._http.mount("https://", adapter) client._http._auth_request.session.mount("https://", adapter) - return + return client @cached_property def _match(self) -> re.Match: diff --git a/tests/test_io_manager.py b/tests/test_io_manager.py index 11b6f67..38ab5e7 100644 --- a/tests/test_io_manager.py +++ b/tests/test_io_manager.py @@ -188,3 +188,18 @@ def test_bucket_property(self, gcs_path: str, bucket: str) -> None: """Test GCSPath object bucket property.""" gcs_path_obj = GCSPath(gcs_path) assert gcs_path_obj.bucket == bucket + + @pytest.mark.parametrize( + ["gcs_path", "path"], + [ + pytest.param( + "gs://bucket/prefix/filename", + "prefix/filename", + id="GCS path with bucket", + ), + ], + ) + def test_path_property(self, gcs_path: str, path: str) -> None: + """Test GCSPath object bucket property.""" + gcs_path_obj = GCSPath(gcs_path) + assert gcs_path_obj.path == path From c535dcb1e609cbf7e63accecaad5c45412f6df3c Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 10:01:08 +0100 Subject: [PATCH 10/24] refactor: changes to dataproc --- src/ot_orchestration/utils/common.py | 24 --- src/ot_orchestration/utils/dataproc.py | 221 ++++++++++--------------- src/ot_orchestration/utils/utils.py | 12 +- tests/test_io_manager.py | 15 -- 4 files changed, 98 insertions(+), 174 deletions(-) diff --git a/src/ot_orchestration/utils/common.py b/src/ot_orchestration/utils/common.py index 73809f2..8caa35f 100644 --- a/src/ot_orchestration/utils/common.py +++ b/src/ot_orchestration/utils/common.py @@ -70,27 +70,3 @@ "environment": "development" if "dev" in project else "production", "created_by": "unified-orchestrator", } - - -def convert_params_to_hydra_positional_arg( - step: dict[str, dict[str, Any]], -) -> list[str] | None: - """Convert configuration parameters to form that can be passed to hydra step positional arguments. - - In case the step does not have a "params" key, there are no parameters to convert. - - Args: - step (dict[str, dict[str, Any]]): Config parameters for the step to convert. - - Returns: - list[str] | None: List of strings that represents the positional arguments for hydra gentropy step. - - Example: - >>> convert_params_to_hydra_positional_arg({"params": {"sig": 1, "pval": 0.05}}) - ["step.sig=1", "step.pval=0.05"] - >>> convert_params_to_hydra_positional_arg({"id": "step1"}) - None - """ - if "params" not in step.keys() or not step["params"]: - return None - return [f"step.{k}={v}" for k, v in step["params"].items()] diff --git a/src/ot_orchestration/utils/dataproc.py b/src/ot_orchestration/utils/dataproc.py index 67d118f..f376446 100644 --- a/src/ot_orchestration/utils/dataproc.py +++ b/src/ot_orchestration/utils/dataproc.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import Any, Optional +from typing import Any from airflow.providers.google.cloud.operators.dataproc import ( ClusterGenerator, @@ -11,23 +11,16 @@ DataprocSubmitJobOperator, ) from airflow.utils.trigger_rule import TriggerRule -from google.cloud import dataproc_v1 -from google.cloud.dataproc_v1 import Job +from ot_orchestration.utils import convert_params_to_hydra_positional_arg + +# from ot_orchestration.utils import GCSPath from ot_orchestration.utils.common import ( - CLUSTER_CONFIG_DIR, - CONFIG_NAME, - CONFIG_TAG, GCP_AUTOSCALING_POLICY, GCP_DATAPROC_IMAGE, GCP_PROJECT_GENETICS, GCP_REGION, GCP_ZONE, - GENTROPY_VERSION, - INITIALISATION_BASE_PATH, - INITIALISATION_EXECUTABLE_FILE, - PACKAGE_WHEEL, - PYTHON_CLI, ) @@ -40,6 +33,8 @@ def create_cluster( num_local_ssds: int = 1, autoscaling_policy: str = GCP_AUTOSCALING_POLICY, master_disk_size: int = 500, + cluster_init_script: str | None = None, + cluster_metadata: dict[str, str] | None = None, ) -> DataprocCreateClusterOperator: """Generate an Airflow task to create a Dataproc cluster. Common parameters are reused, and varying parameters can be specified as needed. @@ -52,6 +47,8 @@ def create_cluster( num_local_ssds (int): How many local SSDs to attach to each worker node, both primary and secondary. Defaults to 1. autoscaling_policy (str): Name of the autoscaling policy to use. Defaults to GCP_AUTOSCALING_POLICY. master_disk_size (int): Size of the master node's boot disk in GB. Defaults to 500. + cluster_init_script (str | None): Cluster initialization scripts. + cluster_metadata (str | None): Cluster METADATA. Returns: DataprocCreateClusterOperator: Airflow task to create a Dataproc cluster. @@ -68,12 +65,9 @@ def create_cluster( num_workers=num_workers, image_version=GCP_DATAPROC_IMAGE, enable_component_gateway=True, - init_actions_uris=INITIALISATION_EXECUTABLE_FILE, - metadata={ - "CONFIGTAR": CONFIG_TAG, - "PACKAGE": PACKAGE_WHEEL, - }, - idle_delete_ttl=30 * 60, # In seconds. + metadata=cluster_metadata, + # idle_delete_ttl=30 * 60, # In seconds. + init_actions_uris=[cluster_init_script] if cluster_init_script else None, autoscaling_policy=f"projects/{GCP_PROJECT_GENETICS}/regions/{GCP_REGION}/autoscalingPolicies/{autoscaling_policy}", ).make() @@ -98,43 +92,48 @@ def create_cluster( ) -def submit_job( +def submit_gentropy_step( cluster_name: str, - task_id: str, - job_type: str, - job_specification: dict[str, Any], + step_name: str, + python_main_module: str, trigger_rule: TriggerRule = TriggerRule.ALL_SUCCESS, + params: dict[str, Any] | None = None, ) -> DataprocSubmitJobOperator: - """Submit an arbitrary job to a Dataproc cluster. + """Submit a PySpark job from a gentropy step to execute a specific CLI step. Args: cluster_name (str): Name of the cluster. - task_id (str): Name of the task. - job_type (str): Type of the job to submit. - job_specification (dict[str, Any]): Specification of the job to submit. + step_name (str): Name of the gentropy step to run. trigger_rule (TriggerRule): Trigger rule for the task. Defaults to TriggerRule.ALL_SUCCESS. + python_main_module (str): GCS path to the gentropy CLI wrapper script. + params (list[str]): Optional parameters to append to the gentropy step, must be in key:value. Returns: - DataprocSubmitJobOperator: Airflow task to submit an arbitrary job to a Dataproc cluster. + DataprocSubmitJobOperator: Airflow task to submit a PySpark job to execute a specific CLI step. + + First parameter should represent the gentropy step to run and be in format `step: 'step_name'`. + The rest of parameter values can be of any non non nested data type (int, float, str, bool, None, list, dict). + The values can not be nested data types, like dict of lists. In that context, one should refer to + https://hydra.cc/docs/advanced/override_grammar/basic/. The key has to be passed in a format `*step*:key` + + Complex examples: + * step: "validate_study" + * step.session.write_mode: "overwrite" + * +step.session.extended_spark_conf: "{spark.jars:https://storage.googleapis.com/hadoop-lib/gcs/gcs-connector-hadoop3-latest.jar}" """ - return DataprocSubmitJobOperator( - task_id=task_id, - region=GCP_REGION, - project_id=GCP_PROJECT_GENETICS, - job={ - "job_uuid": f"airflow-{task_id}", - "reference": {"project_id": GCP_PROJECT_GENETICS}, - "placement": {"cluster_name": cluster_name}, - job_type: job_specification, - }, + return submit_pyspark_job( + cluster_name=cluster_name, + task_id=step_name, + python_main_module=python_main_module, trigger_rule=trigger_rule, + args=convert_params_to_hydra_positional_arg(params=params), ) def submit_pyspark_job( cluster_name: str, task_id: str, - python_module_path: str, + python_main_module: str, args: list[str], trigger_rule: TriggerRule = TriggerRule.ALL_SUCCESS, ) -> DataprocSubmitJobOperator: @@ -143,7 +142,7 @@ def submit_pyspark_job( Args: cluster_name (str): Name of the cluster. task_id (str): Name of the task. - python_module_path (str): Path to the Python module to run. + python_main_module (str): Path to the Python module to run. args (list[str]): Arguments to pass to the Python module. trigger_rule (TriggerRule): Trigger rule for the task. Defaults to TriggerRule.ALL_SUCCESS. @@ -156,7 +155,7 @@ def submit_pyspark_job( job_type="pyspark_job", trigger_rule=trigger_rule, job_specification={ - "main_python_file_uri": python_module_path, + "main_python_file_uri": python_main_module, "args": args, "properties": { "spark.jars": "/opt/conda/miniconda3/lib/python3.10/site-packages/hail/backend/hail-all-spark.jar", @@ -169,65 +168,36 @@ def submit_pyspark_job( ) -def submit_step( +def submit_job( cluster_name: str, - step_id: str, - task_id: str = "", + task_id: str, + job_type: str, + job_specification: dict[str, Any], trigger_rule: TriggerRule = TriggerRule.ALL_SUCCESS, - other_args: Optional[list[str]] = None, ) -> DataprocSubmitJobOperator: - """Submit a PySpark job to execute a specific CLI step. + """Submit an arbitrary job to a Dataproc cluster. Args: cluster_name (str): Name of the cluster. - step_id (str): Name of the step in gentropy. - task_id (str): Name of the task. Defaults to step_id. + task_id (str): Name of the task. + job_type (str): Type of the job to submit. + job_specification (dict[str, Any]): Specification of the job to submit. trigger_rule (TriggerRule): Trigger rule for the task. Defaults to TriggerRule.ALL_SUCCESS. - other_args (Optional[list[str]]): Other arguments to pass to the CLI step. Defaults to None. Returns: - DataprocSubmitJobOperator: Airflow task to submit a PySpark job to execute a specific CLI step. + DataprocSubmitJobOperator: Airflow task to submit an arbitrary job to a Dataproc cluster. """ - if task_id == "": - task_id = step_id - return submit_pyspark_job( - cluster_name=cluster_name, + return DataprocSubmitJobOperator( task_id=task_id, - python_module_path=f"{INITIALISATION_BASE_PATH}/{PYTHON_CLI}", - trigger_rule=trigger_rule, - args=[f"step={step_id}"] - + (other_args if other_args is not None else []) - + [ - f"--config-dir={CLUSTER_CONFIG_DIR}", - f"--config-name={CONFIG_NAME}", - ], - ) - - -def install_dependencies(cluster_name: str) -> DataprocSubmitJobOperator: - """Install dependencies on a Dataproc cluster. - - Args: - cluster_name (str): Name of the cluster. - - Returns: - DataprocSubmitJobOperator: Airflow task to install dependencies on a Dataproc cluster. - """ - return submit_job( - cluster_name=cluster_name, - task_id="install_dependencies", - job_type="pig_job", - job_specification={ - "jar_file_uris": [ - f"gs://genetics_etl_python_playground/initialisation/{GENTROPY_VERSION}/install_dependencies_on_cluster.sh" - ], - "query_list": { - "queries": [ - "sh chmod 750 ${PWD}/install_dependencies_on_cluster.sh", - "sh ${PWD}/install_dependencies_on_cluster.sh", - ] - }, + region=GCP_REGION, + project_id=GCP_PROJECT_GENETICS, + job={ + "job_uuid": f"airflow-{task_id}", + "reference": {"project_id": GCP_PROJECT_GENETICS}, + "placement": {"cluster_name": cluster_name}, + job_type: job_specification, }, + trigger_rule=trigger_rule, ) @@ -245,21 +215,35 @@ def delete_cluster(cluster_name: str) -> DataprocDeleteClusterOperator: project_id=GCP_PROJECT_GENETICS, cluster_name=cluster_name, region=GCP_REGION, - trigger_rule=TriggerRule.ALL_DONE, + trigger_rule=TriggerRule.ALL_SUCCESS, ) -def generate_dag(cluster_name: str, tasks: list[DataprocSubmitJobOperator]) -> Any: - """For a list of tasks, generate a complete DAG. +def generate_dataproc_task_chain( + cluster_name: str, + cluster_init_script: str, + cluster_metadata: dict[str, str], + tasks: list[DataprocSubmitJobOperator], +) -> Any: + """For a list of Dataproc tasks, generate a complete chain of tasks. + + This function adds create_cluster, install_dependencies to the task that does not have any upstream tasks (first one in the DAG) + and adds delete_cluster tasks to the task that does not have any downstream tasks (last one in the DAG) Args: cluster_name (str): Name of the cluster. + cluster_init_script (str): URI to the cluster initialization script. + cluster_metadata: (dict[str, str]): METADATA to fill into the cluster during initialization. tasks (list[DataprocSubmitJobOperator]): List of tasks to execute. Returns: - Any: Airflow DAG. + list[DataprocSubmitJobOperator]: list of input tasks with muted chain. """ - create_cluster_task = create_cluster(cluster_name) + create_cluster_task = create_cluster( + cluster_name, + cluster_metadata=cluster_metadata, + cluster_init_script=cluster_init_script, + ) delete_cluster_task = delete_cluster(cluster_name) for task in tasks: if not task.get_direct_relatives(upstream=True): @@ -270,47 +254,22 @@ def generate_dag(cluster_name: str, tasks: list[DataprocSubmitJobOperator]) -> A return tasks -def submit_pyspark_job_no_operator( - cluster_name: str, - step_id: str, - other_args: Optional[list[str]] = None, -) -> None: - """Submits the Pyspark job to the cluster. +def generate_dag(cluster_name: str, tasks: list[DataprocSubmitJobOperator]) -> Any: + """For a list of tasks, generate a complete DAG. Args: - cluster_name (str): Cluster name - step_id (str): Step id - other_args (Optional[list[str]]): Other arguments to pass to the CLI step. Defaults to None. + cluster_name (str): Name of the cluster. + tasks (list[DataprocSubmitJobOperator]): List of tasks to execute. + + Returns: + Any: Airflow DAG. """ - # Create the job client. - job_client = dataproc_v1.JobControllerClient( - client_options={"api_endpoint": f"{GCP_REGION}-dataproc.googleapis.com:443"} - ) + create_cluster_task = create_cluster(cluster_name) + delete_cluster_task = delete_cluster(cluster_name) + for task in tasks: + if not task.get_direct_relatives(upstream=True): + task.set_upstream(create_cluster_task) + if not task.get_direct_relatives(upstream=False): + task.set_downstream(delete_cluster_task) - python_uri = f"{INITIALISATION_BASE_PATH}/{PYTHON_CLI}" - # Create the job config. 'main_jar_file_uri' can also be a - # Google Cloud Storage URL. - job_description = Job( - { - "placement": {"cluster_name": cluster_name}, - "pyspark_job": { - "main_python_file_uri": python_uri, - "args": [f"step={step_id}"] - + (other_args if other_args is not None else []) - + [ - f"--config-dir={CLUSTER_CONFIG_DIR}", - f"--config-name={CONFIG_NAME}", - ], - "properties": { - "spark.jars": "/opt/conda/miniconda3/lib/python3.10/site-packages/hail/backend/hail-all-spark.jar", - "spark.driver.extraClassPath": "/opt/conda/miniconda3/lib/python3.10/site-packages/hail/backend/hail-all-spark.jar", - "spark.executor.extraClassPath": "./hail-all-spark.jar", - "spark.serializer": "org.apache.spark.serializer.KryoSerializer", - "spark.kryo.registrator": "is.hail.kryo.HailKryoRegistrator", - }, - }, - } - ) - job_client.submit_job( - project_id=GCP_PROJECT_GENETICS, region=GCP_REGION, job=job_description - ) + return tasks diff --git a/src/ot_orchestration/utils/utils.py b/src/ot_orchestration/utils/utils.py index ef6ec53..57aa1f6 100644 --- a/src/ot_orchestration/utils/utils.py +++ b/src/ot_orchestration/utils/utils.py @@ -127,10 +127,14 @@ def chain_dependencies(nodes: list[ConfigNode], tasks_or_task_groups: dict[str, Map the dependencies between tasks. """ - node_dependencies = {node["id"]: node.get("prerequisites", []) for node in nodes} - for label, node in tasks_or_task_groups.items(): - for dependency in node_dependencies[label]: - node.set_upstream(tasks_or_task_groups[dependency]) + if nodes: + node_dependencies = { + node["id"]: node.get("prerequisites", []) for node in nodes + } + for label, node in tasks_or_task_groups.items(): + print(node_dependencies) + for dependency in node_dependencies[label]: + node.set_upstream(tasks_or_task_groups[dependency]) def convert_params_to_hydra_positional_arg( diff --git a/tests/test_io_manager.py b/tests/test_io_manager.py index 38ab5e7..11b6f67 100644 --- a/tests/test_io_manager.py +++ b/tests/test_io_manager.py @@ -188,18 +188,3 @@ def test_bucket_property(self, gcs_path: str, bucket: str) -> None: """Test GCSPath object bucket property.""" gcs_path_obj = GCSPath(gcs_path) assert gcs_path_obj.bucket == bucket - - @pytest.mark.parametrize( - ["gcs_path", "path"], - [ - pytest.param( - "gs://bucket/prefix/filename", - "prefix/filename", - id="GCS path with bucket", - ), - ], - ) - def test_path_property(self, gcs_path: str, path: str) -> None: - """Test GCSPath object bucket property.""" - gcs_path_obj = GCSPath(gcs_path) - assert gcs_path_obj.path == path From 74de473ac870129ba56d19f7b80323454a10025e Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 10:03:01 +0100 Subject: [PATCH 11/24] refactor: gwas_catalog old dags --- .../step/ot_gwas_catalog_study_curation.yaml | 7 - .../step/ot_gwas_catalog_study_inclusion.yaml | 11 - config/step/ot_ld_based_clumping.yaml | 6 - .../dags/config/gwas_catalog_preprocess.yaml | 119 +++++++++ .../dags/gwas_catalog_preprocess.py | 230 +++++------------- .../dags/gwas_curation_update.py | 36 ++- 6 files changed, 204 insertions(+), 205 deletions(-) delete mode 100644 config/step/ot_gwas_catalog_study_curation.yaml delete mode 100644 config/step/ot_gwas_catalog_study_inclusion.yaml delete mode 100644 config/step/ot_ld_based_clumping.yaml create mode 100644 src/ot_orchestration/dags/config/gwas_catalog_preprocess.yaml diff --git a/config/step/ot_gwas_catalog_study_curation.yaml b/config/step/ot_gwas_catalog_study_curation.yaml deleted file mode 100644 index 39b4dd0..0000000 --- a/config/step/ot_gwas_catalog_study_curation.yaml +++ /dev/null @@ -1,7 +0,0 @@ -defaults: - - gwas_catalog_study_curation -catalog_study_files: ${datasets.gwas_catalog_studies} -catalog_ancestry_files: ${datasets.gwas_catalog_ancestries} -catalog_sumstats_lut: ${datasets.gwas_catalog_sumstats_lut} -gwas_catalog_study_curation_file: ${datasets.gwas_catalog_study_curation} -gwas_catalog_study_curation_out: ??? diff --git a/config/step/ot_gwas_catalog_study_inclusion.yaml b/config/step/ot_gwas_catalog_study_inclusion.yaml deleted file mode 100644 index c9dda83..0000000 --- a/config/step/ot_gwas_catalog_study_inclusion.yaml +++ /dev/null @@ -1,11 +0,0 @@ -defaults: - - gwas_catalog_study_inclusion -catalog_study_files: ${datasets.gwas_catalog_studies} -catalog_ancestry_files: ${datasets.gwas_catalog_ancestries} -catalog_associations_file: ${datasets.gwas_catalog_associations} -variant_annotation_path: ${datasets.variant_annotation} -gwas_catalog_study_curation_file: ${datasets.gwas_catalog_study_curation} -harmonised_study_file: ${datasets.gwas_catalog_summary_stats_list} -criteria: ??? -inclusion_list_path: ??? -exclusion_list_path: ??? diff --git a/config/step/ot_ld_based_clumping.yaml b/config/step/ot_ld_based_clumping.yaml deleted file mode 100644 index 4294504..0000000 --- a/config/step/ot_ld_based_clumping.yaml +++ /dev/null @@ -1,6 +0,0 @@ -defaults: - - ld_based_clumping -ld_index_path: ${datasets.ld_index}/2.1.1 -study_locus_input_path: ??? -study_index_path: ??? -clumped_study_locus_output_path: ??? diff --git a/src/ot_orchestration/dags/config/gwas_catalog_preprocess.yaml b/src/ot_orchestration/dags/config/gwas_catalog_preprocess.yaml new file mode 100644 index 0000000..cd29688 --- /dev/null +++ b/src/ot_orchestration/dags/config/gwas_catalog_preprocess.yaml @@ -0,0 +1,119 @@ +gwas_catalog_harmonised_sumstat_glob: gs://gwas_catalog_data/harmonised_summary_statistics/**_SUCCESS +harmonised_sumstat_list: gs://gwas_catalog_data/manifests/gwas_catalog_harmonised_summary_statistics_list.txt +dataproc: + cluster_name: otg-preprocess-gwascatalog + autoscaling_policy: otg-preprocess-gwascatalog + python_main_module: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/cli.py + cluster_metadata: + PACKAGE: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/gentropy-0.0.0-py3-none-any.whl + cluster_init_script: gs://genetics_etl_python_playground/initialisation/0.0.0/install_dependencies_on_cluster.sh + num_workers: 5 + +nodes: + - id: top_hits_processing + kind: TaskGroup + prerequisites: [] + nodes: + - id: gwas_catalog_study_inclusion + kind: Task + prerequisites: [] + params: + step.catalog_study_files: + - gs://gwas_catalog_data/curated_inputs/gwas_catalog_download_studies.tsv + - gs://gwas_catalog_data/curated_inputs/gwas_catalog_unpublished_studies.tsv + step.ancestry_files: + - gs://gwas_catalog_data/curated_inputs/gwas_catalog_download_ancestries.tsv + - gs://gwas_catalog_data/curated_inputs/gwas_catalog_unpublished_ancestries.tsv + step.associations_file: gs://gwas_catalog_data/curated_inputs/gwas_catalog_associations_ontology_annotated.tsv + step.variant_annotation_path: gs://genetics_etl_python_playground/static_assets/gnomad_variants + step.harmonised_study_file: gs://gwas_catalog_data/manifests/gwas_catalog_harmonised_summary_statistics_list.txt + step.criteria: curation + step.inclusion_list_path: gs://gwas_catalog_data/manifests/gwas_catalog_summary_statistics_included_studies + step.exclusion_list_path: gs://gwas_catalog_data/manifests/gwas_catalog_summary_statistics_excluded_studies + step.session.write_mode: overwrite + - id: gwas_catalog_ingestion + kind: Task + prerequisites: + - gwas_catalog_study_inclusion + params: + step.catalog_study_files: + - gs://gwas_catalog_data/curated_inputs/gwas_catalog_download_studies.tsv + - gs://gwas_catalog_data/curated_inputs/gwas_catalog_unpublished_studies.tsv + step.catalog_ancestry_files: + - gs://gwas_catalog_data/curated_inputs/gwas_catalog_download_ancestries.tsv + - gs://gwas_catalog_data/curated_inputs/gwas_catalog_unpublished_ancestries.tsv + step.catalog_associations_file: gs://gwas_catalog_data/curated_inputs/gwas_catalog_associations_ontology_annotated.tsv + step.variant_annotation_path: gs://genetics_etl_python_playground/static_assets/gnomad_variants + step.catalog_sumstats_lut: gs://gwas_catalog_data//curated_inputs/harmonised_list.txt + step.catalog_studies_out: gs://gwas_catalog_data/study_index + step.catalog_associations_out: ${datasets.gwas_catalog_study_locus_folder}/gwas_catalog_curated_associations + step.gwas_catalog_study_curation_file: gs://gwas_catalog_data/manifests/gwas_catalog_study_curation.tsv + step.inclusion_list_path: gw://gwas_catalog_data/manifests/gwas_catalog_curation_included_studies + step.step.session.write_mode: overwrite + - id: ld_based_clumping + kind: Task + prerequisites: + - gwas_catalog_ingestion + params: + step.ld_index_path: gs://genetics_etl_python_playground/static_assets/ld_index + step.study_locus_input_path: gs://gwas_catalog_data/study_locus_datasets/gwas_catalog_curated_associations + step.clumped_study_locus_output_path: gs://gwas_catalog_data/study_locus_datasets/gwas_catalog_curated_associations_ld_clumped + step.study_index_path: gs://gwas_catalog_data/study_index + step.session.write_mode: overwrite + - id: pics + kind: Task + prerequisites: + - ld_based_clumping + params: + step.study_locus_ld_annotated_in: gs://gwas_catalog_data/study_locus_datasets/gwas_catalog_curated_associations_ld_clumped + step.picsed_study_locus_out: gs://gwas_catalog_data/credible_set_datasets/gwas_catalog_PICSed_curated_associations + step.session.write_mode: overwrite + + - id: summary_statistics_processing + kind: TaskGroup + prerequisites: [] + nodes: + - id: gwas_catalog_study_inclusion + kind: Task + prerequisites: [] + params: + step.catalog_study_files: + - gs://gwas_catalog_data/curated_inputs/gwas_catalog_download_studies.tsv + - gs://gwas_catalog_data/curated_inputs/gwas_catalog_unpublished_studies.tsv + step.ancestry_files: + - gs://gwas_catalog_data/curated_inputs/gwas_catalog_download_ancestries.tsv + - gs://gwas_catalog_data/curated_inputs/gwas_catalog_unpublished_ancestries.tsv + step.associations_file: gs://gwas_catalog_data/curated_inputs/gwas_catalog_associations_ontology_annotated.tsv + step.variant_annotation_path: gs://genetics_etl_python_playground/static_assets/gnomad_variants + step.harmonised_study_file: gs://gwas_catalog_data/manifests/gwas_catalog_harmonised_summary_statistics_list.txt + step.criteria: summary_stats + step.inclusion_list_path: gs://gwas_catalog_data/manifests/gwas_catalog_summary_statistics_included_studies + step.exclusion_list_path: gs://gwas_catalog_data/manifests/gwas_catalog_summary_statistics_excluded_studies + step.session.write_mode: overwrite + - id: window_based_clumping + kind: Task + prerequisites: + - gwas_catalog_study_inclusion + params: + step.summary_statistics_input_path: gs://gwas_catalog_data/harmonised_summary_statistics + step.inclusion_list_path: gs://gwas_catalog_data/manifests/gwas_catalog_summary_statistics_included_studies + step.study_locus_output_path: gs://gwas_catalog_data/study_locus_datasets/gwas_catalog_summary_stats_window_clumped + step.session.write_mode: overwrite + - id: ld_based_clumping + kind: Task + prerequisites: + - window_based_clumping + params: + step.ld_index_path: gs://genetics_etl_python_playground/static_assets/ld_index + step.study_locus_input_path: gs://gwas_catalog_data/study_locus_datasets/gwas_catalog_summary_stats_window_clumped + step.clumped_study_locus_output_path: gs://gwas_catalog_data/study_locus_datasets/gwas_catalog_summary_stats_ld_clumped + step.study_index_path: gs://gwas_catalog_data/study_index + step.session.write_mode: overwrite + - id: pics + kind: Task + prerequisites: + - ld_based_clumping + params: + step.study_locus_ld_annotated_in: gs://gwas_catalog_data/study_locus_datasets/gwas_catalog_summary_stats_ld_clumped + step.picsed_study_locus_out: gs://gwas_catalog_data/credible_set_datasets/gwas_catalog_PICSed_summary_statistics + step.session.write_mode: overwrite diff --git a/src/ot_orchestration/dags/gwas_catalog_preprocess.py b/src/ot_orchestration/dags/gwas_catalog_preprocess.py index 811498b..683779e 100644 --- a/src/ot_orchestration/dags/gwas_catalog_preprocess.py +++ b/src/ot_orchestration/dags/gwas_catalog_preprocess.py @@ -11,49 +11,25 @@ from airflow.providers.google.cloud.operators.gcs import GCSListObjectsOperator from airflow.utils.task_group import TaskGroup +from ot_orchestration.utils import ( + chain_dependencies, + find_node_in_config, + read_yaml_config, +) from ot_orchestration.utils.common import shared_dag_args, shared_dag_kwargs from ot_orchestration.utils.dataproc import ( create_cluster, delete_cluster, - install_dependencies, - submit_step, -) - -CLUSTER_NAME = "otg-preprocess-gwascatalog" -AUTOSCALING = "otg-preprocess-gwascatalog" - -# Setting up bucket name and output object names: -GWAS_CATALOG_BUCKET_NAME = "gwas_catalog_data" -HARMONISED_SUMSTATS_PREFIX = "harmonised_summary_statistics" - -# Manifest paths: -MANIFESTS_PATH = "gs://gwas_catalog_data/manifests/" -HARMONISED_SUMSTATS_LIST_FULL_NAME = "gs://gwas_catalog_data/manifests/gwas_catalog_harmonised_summary_statistics_list.txt" - -# The name of the manifest files have to be consistent with the config file: -HARMONISED_SUMSTATS_LIST_OBJECT_NAME = ( - "manifests/gwas_catalog_harmonised_summary_statistics_list.txt" -) -CURATION_INCLUSION_NAME = f"{MANIFESTS_PATH}/gwas_catalog_curation_included_studies" -CURATION_EXCLUSION_NAME = f"{MANIFESTS_PATH}/gwas_catalog_curation_excluded_studies" -SUMMARY_STATISTICS_INCLUSION_NAME = ( - f"{MANIFESTS_PATH}/gwas_catalog_summary_statistics_included_studies" -) -SUMMARY_STATISTICS_EXCLUSION_NAME = ( - f"{MANIFESTS_PATH}/gwas_catalog_summary_statistics_excluded_studies" + submit_gentropy_step, ) +from ot_orchestration.utils.path import GCSPath -STUDY_INDEX = "gs://gwas_catalog_data/study_index" -CURATED_STUDY_LOCI = ( - "gs://gwas_catalog_data/study_locus_datasets/gwas_catalog_curated_associations" -) -CURATED_LD_CLUMPED = "gs://gwas_catalog_data/study_locus_datasets/gwas_catalog_curated_associations_ld_clumped" -WINDOW_BASED_CLUMPED = "gs://gwas_catalog_data/study_locus_datasets/gwas_catalog_summary_stats_window_clumped" -LD_BASED_CLUMPED = ( - "gs://gwas_catalog_data/study_locus_datasets/gwas_catalog_summary_stats_ld_clumped" -) -CURATED_CREDIBLE_SETS = "gs://gwas_catalog_data/credible_set_datasets/gwas_catalog_PICSed_curated_associations" -SUMMARY_STATISTICS_CREDIBLE_SETS = "gs://gwas_catalog_data/credible_set_datasets/gwas_catalog_PICSed_summary_statistics" +CONFIG_PATH = Path(__file__).parent / "config" / "gwas_catalog_preprocess.yaml" +config = read_yaml_config(CONFIG_PATH) +sumstat_glob = GCSPath(config["gwas_catalog_harmonised_sumstat_glob"]) +harmonised_sumstat_list = GCSPath(config["harmonised_sumstat_list"]) +sumstat_config = find_node_in_config(config["nodes"], "summary_statistics_processing") +top_hits_config = find_node_in_config(config["nodes"], "top_hits_processing") def upload_harmonized_study_list( @@ -80,13 +56,13 @@ def upload_harmonized_study_list( description="Open Targets Genetics — GWAS Catalog preprocess", default_args=shared_dag_args, **shared_dag_kwargs, -): +) as dag: # Getting list of folders (each a gwas study with summary statistics) list_harmonised_sumstats = GCSListObjectsOperator( - task_id="list_harmonised_parquet", - bucket=GWAS_CATALOG_BUCKET_NAME, - prefix=HARMONISED_SUMSTATS_PREFIX, - match_glob="**/_SUCCESS", + task_id="list_harmonised_sumstats", + bucket=sumstat_glob.bucket, + prefix=sumstat_glob.segments["prefix"], + match_glob=sumstat_glob.segments["filename"], ) # Upload resuling list to a bucket: @@ -94,143 +70,59 @@ def upload_harmonized_study_list( task_id="uploader", python_callable=upload_harmonized_study_list, op_kwargs={ - "concatenated_studies": '{{ "\n".join(ti.xcom_pull( key="return_value", task_ids="list_harmonised_parquet")) }}', - "bucket_name": GWAS_CATALOG_BUCKET_NAME, - "object_name": HARMONISED_SUMSTATS_LIST_OBJECT_NAME, + "concatenated_studies": '{{ "\n".join(ti.xcom_pull( key="return_value", task_ids="list_harmonised_sumstats")) }}', + "bucket_name": harmonised_sumstat_list.bucket, + "object_name": harmonised_sumstat_list.path, }, ) # Processing curated GWAS Catalog top-bottom: - with TaskGroup(group_id="curation_processing") as curation_processing: - # Generate inclusion list: - curation_calculate_inclusion_list = submit_step( - cluster_name=CLUSTER_NAME, - step_id="ot_gwas_catalog_study_inclusion", - task_id="catalog_curation_inclusion_list", - other_args=[ - "step.criteria=curation", - f"step.inclusion_list_path={CURATION_INCLUSION_NAME}", - f"step.exclusion_list_path={CURATION_EXCLUSION_NAME}", - f"step.harmonised_study_file={HARMONISED_SUMSTATS_LIST_FULL_NAME}", - "step.session.write_mode=overwrite", - ], - ) - - # Ingest curated associations from GWAS Catalog: - curation_ingest_data = submit_step( - cluster_name=CLUSTER_NAME, - step_id="ot_gwas_catalog_ingestion", - task_id="ingest_curated_gwas_catalog_data", - other_args=[ - f"step.inclusion_list_path={CURATION_INCLUSION_NAME}", - "step.session.write_mode=overwrite", - ], - ) - - # Run LD-annotation and clumping on curated data: - curation_ld_clumping = submit_step( - cluster_name=CLUSTER_NAME, - step_id="ot_ld_based_clumping", - task_id="catalog_curation_ld_clumping", - other_args=[ - f"step.study_locus_input_path={CURATED_STUDY_LOCI}", - f"step.study_index_path={STUDY_INDEX}", - f"step.clumped_study_locus_output_path={CURATED_LD_CLUMPED}", - "step.session.write_mode=overwrite", - ], - ) - - # Do PICS based finemapping: - curation_pics = submit_step( - cluster_name=CLUSTER_NAME, - step_id="pics", - task_id="catalog_curation_pics", - other_args=[ - f"step.study_locus_ld_annotated_in={CURATED_LD_CLUMPED}", - f"step.picsed_study_locus_out={CURATED_CREDIBLE_SETS}", - "step.session.write_mode=overwrite", - ], - ) - - # Define order of steps: - ( - curation_calculate_inclusion_list - >> curation_ingest_data - >> curation_ld_clumping - >> curation_pics - ) + with TaskGroup(group_id=top_hits_config["id"]) as top_hits_processing: + tasks = {} + if top_hits_config["nodes"]: + for step in top_hits_config["nodes"]: + task = submit_gentropy_step( + cluster_name=config["dataproc"]["cluster_name"], + step_name=step["id"], + python_main_module=config["dataproc"]["python_main_module"], + params=step["params"], + ) + tasks[step["id"]] = task + chain_dependencies( + nodes=top_hits_config["nodes"], tasks_or_task_groups=tasks + ) # type: ignore # Processing summary statistics from GWAS Catalog: - with TaskGroup( - group_id="summary_statistics_processing" - ) as summary_statistics_processing: - # Generate inclusion study lists: - summary_stats_calculate_inclusion_list = submit_step( - cluster_name=CLUSTER_NAME, - step_id="ot_gwas_catalog_study_inclusion", - task_id="catalog_sumstats_inclusion_list", - other_args=[ - "step.criteria=summary_stats", - f"step.inclusion_list_path={SUMMARY_STATISTICS_INCLUSION_NAME}", - f"step.exclusion_list_path={SUMMARY_STATISTICS_EXCLUSION_NAME}", - f"step.harmonised_study_file={HARMONISED_SUMSTATS_LIST_FULL_NAME}", - "step.session.write_mode=overwrite", - ], - ) - - # Run window-based clumping: - summary_stats_window_based_clumping = submit_step( - cluster_name=CLUSTER_NAME, - step_id="window_based_clumping", - task_id="catalog_sumstats_window_clumping", - other_args=[ - f"step.summary_statistics_input_path=gs://{GWAS_CATALOG_BUCKET_NAME}/{HARMONISED_SUMSTATS_PREFIX}", - f"step.inclusion_list_path={SUMMARY_STATISTICS_INCLUSION_NAME}", - f"step.study_locus_output_path={WINDOW_BASED_CLUMPED}", - "step.session.write_mode=overwrite", - ], - ) - - # Run LD based clumping: - summary_stats_ld_clumping = submit_step( - cluster_name=CLUSTER_NAME, - step_id="ot_ld_based_clumping", - task_id="catalog_sumstats_ld_clumping", - other_args=[ - f"step.study_locus_input_path={WINDOW_BASED_CLUMPED}", - f"step.study_index_path={STUDY_INDEX}", - f"step.clumped_study_locus_output_path={LD_BASED_CLUMPED}", - "step.session.write_mode=overwrite", - ], - ) - - # Run PICS finemapping: - summary_stats_pics = submit_step( - cluster_name=CLUSTER_NAME, - step_id="pics", - task_id="catalog_sumstats_pics", - other_args=[ - f"step.study_locus_ld_annotated_in={LD_BASED_CLUMPED}", - f"step.picsed_study_locus_out={SUMMARY_STATISTICS_CREDIBLE_SETS}", - "step.session.write_mode=overwrite", - ], - ) - - # Order of steps within the group: - ( - summary_stats_calculate_inclusion_list - >> summary_stats_window_based_clumping - >> summary_stats_ld_clumping - >> summary_stats_pics - ) + with TaskGroup(group_id=sumstat_config["id"]) as summary_statistics_processing: + tasks = {} + if sumstat_config["nodes"]: + for step in sumstat_config["nodes"]: + task = submit_gentropy_step( + cluster_name=config["dataproc"]["cluster_name"], + step_name=step["id"], + python_main_module=config["dataproc"]["python_main_module"], + params=step["params"], + ) + tasks[step["id"]] = task + chain_dependencies( + nodes=sumstat_config["nodes"], tasks_or_task_groups=tasks + ) # type: ignore # DAG description: chain( - create_cluster(CLUSTER_NAME, autoscaling_policy=AUTOSCALING, num_workers=5), - install_dependencies(CLUSTER_NAME), + create_cluster( + cluster_name=config["dataproc"]["cluster_name"], + autoscaling_policy=config["dataproc"]["autoscaling_policy"], + num_workers=config["dataproc"]["num_workers"], + cluster_metadata=config["dataproc"]["cluster_metadata"], + cluster_init_script=config["dataproc"]["cluster_init_script"], + ), list_harmonised_sumstats, upload_task, - curation_processing, + top_hits_processing, summary_statistics_processing, - delete_cluster(CLUSTER_NAME), + delete_cluster(config["dataproc"]["cluster_name"]), ) + +if __name__ == "__main__": + pass diff --git a/src/ot_orchestration/dags/gwas_curation_update.py b/src/ot_orchestration/dags/gwas_curation_update.py index cf8bae5..29b945b 100644 --- a/src/ot_orchestration/dags/gwas_curation_update.py +++ b/src/ot_orchestration/dags/gwas_curation_update.py @@ -5,16 +5,18 @@ from datetime import datetime from pathlib import Path +from airflow.models.baseoperator import chain from airflow.models.dag import DAG from ot_orchestration.utils.common import shared_dag_args, shared_dag_kwargs from ot_orchestration.utils.dataproc import ( create_cluster, - install_dependencies, - submit_step, + delete_cluster, + submit_gentropy_step, ) CLUSTER_NAME = "otg-gwascatalog-curation" +PYTHON_MAIN_MODULE = "gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/cli.py" RUN_DATE = datetime.now().strftime("%Y-%m-%d") with DAG( @@ -23,18 +25,28 @@ default_args=shared_dag_args, **shared_dag_kwargs, ): - update_gwas_curation = submit_step( + update_gwas_curation = submit_gentropy_step( cluster_name=CLUSTER_NAME, - step_id="ot_gwas_catalog_study_curation", - task_id="gwas_catalog_curation_update", - other_args=[ - f"step.gwas_catalog_study_curation_out=gs://genetics_etl_python_playground/input/v2d/GWAS_Catalog_study_curation_{RUN_DATE}.tsv", - ], + step_name="gwas_catalog_study_curation", + python_main_module=PYTHON_MAIN_MODULE, + params={ + "step.catalog_study_files": [ + "gs://gwas_catalog_data/curated_inputs/gwas_catalog_download_studies.tsv", + "gs://gwas_catalog_data/curated_inputs/gwas_catalog_unpublished_studies.tsv", + ], + "step.catalog_ancestry_files": [ + "gs://gwas_catalog_data/curated_inputs/gwas_catalog_download_ancestries.tsv", + "gs://gwas_catalog_data/curated_inputs/gwas_catalog_unpublished_ancestries.tsv", + ], + "step.catalog_sumstats_lut": "gs://gwas_catalog_data/curated_inputs/harmonised_list.txt", + "step.gwas_catalog_study_curation_file": "gs://gwas_catalg_data//manifests/gwas_catalog_study_curation.tsv", + "step.gwas_catalog_study_curation_out": f"gs://genetics_etl_python_playground/input/v2d/GWAS_Catalog_study_curation_{RUN_DATE}.tsv", + }, ) # DAG description: - ( - create_cluster(CLUSTER_NAME, num_workers=2) - >> install_dependencies(CLUSTER_NAME) - >> update_gwas_curation + chain( + create_cluster(CLUSTER_NAME, num_workers=2), + update_gwas_curation, + delete_cluster(CLUSTER_NAME), ) From b11b3f00b0b2f72c0427f875dfbd5f32462a9276 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 10:03:39 +0100 Subject: [PATCH 12/24] refactor: ukbppp harmonisation dag --- .../config/ukb_ppp_eur_harmonisation.yaml | 24 +++++++++++------ .../dags/ukb_ppp_eur_harmonisation.py | 26 +++++++------------ 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/ot_orchestration/dags/config/ukb_ppp_eur_harmonisation.yaml b/src/ot_orchestration/dags/config/ukb_ppp_eur_harmonisation.yaml index c1011ef..b444da4 100644 --- a/src/ot_orchestration/dags/config/ukb_ppp_eur_harmonisation.yaml +++ b/src/ot_orchestration/dags/config/ukb_ppp_eur_harmonisation.yaml @@ -1,10 +1,18 @@ -cluster_name: otg-ukb-ppp-eur -steps: +dataproc: + python_main_module: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/cli.py + cluster_metadata: + PACKAGE: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/gentropy-0.0.0-py3-none-any.whl + cluster_init_script: gs://genetics_etl_python_playground/initialisation/0.0.0/install_dependencies_on_cluster.sh + cluster_name: otg-ukb-ppp-eur +nodes: - id: ukb_ppp_eur_sumstat_preprocess + kind: Task + prerequisites: [] params: - raw_study_index_path_from_tsv: gs://gentropy-tmp/batch/output/ukb_ppp_eur/study_index.tsv - raw_summary_stats_path: gs://gentropy-tmp/batch/output/ukb_ppp_eur/summary_stats.parquet - variant_annotation_path: gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/variant_annotation - tmp_variant_annotation_path: gs://gentropy-tmp/variant_annotation - study_index_output_path: gs://ukb_ppp_eur_data/study_index - summary_stats_output_path: gs://ukb_ppp_eur_data/summary_stats + step.raw_study_index_path_from_tsv: gs://gentropy-tmp/batch/output/ukb_ppp_eur/study_index.tsv + step.raw_summary_stats_path: gs://gentropy-tmp/batch/output/ukb_ppp_eur/summary_stats.parquet + step.variant_annotation_path: gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/variant_annotation + step.tmp_variant_annotation_path: gs://gentropy-tmp/variant_annotation + step.study_index_output_path: gs://ukb_ppp_eur_data/study_index + step.summary_stats_output_path: gs://ukb_ppp_eur_data/summary_stats + step.session.write_mode: overwrite diff --git a/src/ot_orchestration/dags/ukb_ppp_eur_harmonisation.py b/src/ot_orchestration/dags/ukb_ppp_eur_harmonisation.py index 9f4e89f..af7e5bb 100644 --- a/src/ot_orchestration/dags/ukb_ppp_eur_harmonisation.py +++ b/src/ot_orchestration/dags/ukb_ppp_eur_harmonisation.py @@ -1,16 +1,12 @@ -"""Airflow DAG to ingest and harmonise UKB PPP (EUR) data.""" +"""Airflow DAG to ingest and harmonize UKB PPP (EUR) data.""" from pathlib import Path from airflow.models.dag import DAG from ot_orchestration.utils import read_yaml_config -from ot_orchestration.utils.common import ( - convert_params_to_hydra_positional_arg, - shared_dag_args, - shared_dag_kwargs, -) -from ot_orchestration.utils.dataproc import generate_dag, submit_step +from ot_orchestration.utils.common import shared_dag_args, shared_dag_kwargs +from ot_orchestration.utils.dataproc import generate_dag, submit_gentropy_step config = read_yaml_config( Path(__file__).parent / "config" / "ukb_ppp_eur_harmonisation.yaml" @@ -23,14 +19,12 @@ **shared_dag_kwargs, ): tasks = [] - for step in config["steps"]: - step_id = step["id"] - step_params = convert_params_to_hydra_positional_arg(step) - task = submit_step( - cluster_name=config["cluster_name"], - step_id=step_id, - task_id=step_id, - other_args=step_params, + for step in config["nodes"]: + task = submit_gentropy_step( + cluster_name=config["dataproc"]["cluster_name"], + step_name=step["id"], + python_main_module=config["dataproc"]["python_main_module"], + params=step["params"], ) tasks.append(task) - dag = generate_dag(cluster_name=config["cluster_name"], tasks=tasks) + dag = generate_dag(cluster_name=config["dataproc"]["cluster_name"], tasks=tasks) From 43e3d326f10c08cc730cfdaa614f03ed38aa59f4 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 10:47:35 +0100 Subject: [PATCH 13/24] refactor: eqtl_catalogue dag --- config/step/ot_eqtl_catalogue.yaml | 9 --- .../dags/config/eqtl_ingestion.yaml | 26 ++++++ src/ot_orchestration/dags/eqtl_ingestion.py | 72 +++++++++++++++++ src/ot_orchestration/dags/eqtl_preprocess.py | 79 ------------------- 4 files changed, 98 insertions(+), 88 deletions(-) delete mode 100644 config/step/ot_eqtl_catalogue.yaml create mode 100644 src/ot_orchestration/dags/config/eqtl_ingestion.yaml create mode 100644 src/ot_orchestration/dags/eqtl_ingestion.py delete mode 100644 src/ot_orchestration/dags/eqtl_preprocess.py diff --git a/config/step/ot_eqtl_catalogue.yaml b/config/step/ot_eqtl_catalogue.yaml deleted file mode 100644 index 7a53244..0000000 --- a/config/step/ot_eqtl_catalogue.yaml +++ /dev/null @@ -1,9 +0,0 @@ -defaults: - - eqtl_catalogue -eqtl_catalogue_paths_imported: ??? -eqtl_catalogue_study_index_out: ??? -eqtl_catalogue_credible_sets_out: ??? -mqtl_quantification_methods_blacklist: [] -session: - extended_spark_conf: - "spark.sql.shuffle.partitions": "3200" diff --git a/src/ot_orchestration/dags/config/eqtl_ingestion.yaml b/src/ot_orchestration/dags/config/eqtl_ingestion.yaml new file mode 100644 index 0000000..3015346 --- /dev/null +++ b/src/ot_orchestration/dags/config/eqtl_ingestion.yaml @@ -0,0 +1,26 @@ +eqtl_catalogue_raw_susie_glob: gs://eqtl_catalogue_data/ebi_ftp/susie/**/*.gz +eqtl_catalogue_decompressed_susie_path: gs://eqtl_catalogue_data/ebi_ftp/susie_decompressed_tmp +decompression_logs: gs://eqtl_catalogue_data/ebi_ftp/susie_decompressed_tmp/logs.log + + +dataproc: + python_main_module: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/cli.py + cluster_metadata: + PACKAGE: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/gentropy-0.0.0-py3-none-any.whl + cluster_init_script: gs://genetics_etl_python_playground/initialisation/0.0.0/install_dependencies_on_cluster.sh + cluster_name: otg-preprocess-eqtl + autoscaling_policy: otg-preprocess + num_workers: 4 + worker_machine_type: n1-highmem-8 + +nodes: + - id: eqtl_catalogue + kind: Task + prerequisites: [] + params: + step.eqtl_catalogue_paths_imported: gs://eqtl_catalogue_data/ebi_ftp/susie_decompressed_tmp + step.eqtl_catalogue_study_index_out: gs://eqtl_catalogue_data/study_index + step.eqtl_catalogue_credible_sets_out: gs://eqtl_catalogue_data/credible_set_datasets/eqtl_catalogue_susie + step.mqtl_quantification_methods_blacklist: [] + step.session.write_mode: overwrite + +step.session.extended_spark_conf: "{spark.sql.shuffle.partitions: '3200'}" diff --git a/src/ot_orchestration/dags/eqtl_ingestion.py b/src/ot_orchestration/dags/eqtl_ingestion.py new file mode 100644 index 0000000..85e3032 --- /dev/null +++ b/src/ot_orchestration/dags/eqtl_ingestion.py @@ -0,0 +1,72 @@ +"""Airflow DAG to extract credible sets and a study index from eQTL Catalogue's finemapping results.""" + +from __future__ import annotations + +from pathlib import Path + +from airflow.models.baseoperator import chain +from airflow.models.dag import DAG +from airflow.providers.google.cloud.operators.dataflow import ( + DataflowTemplatedJobStartOperator, +) +from airflow.providers.google.cloud.operators.gcs import GCSDeleteObjectsOperator + +from ot_orchestration.utils import find_node_in_config, read_yaml_config +from ot_orchestration.utils.common import ( + GCP_PROJECT_GENETICS, + shared_dag_args, + shared_dag_kwargs, +) +from ot_orchestration.utils.dataproc import ( + create_cluster, + delete_cluster, + submit_gentropy_step, +) + +CONFIG_PATH = Path(__file__).parent / "config" / "eqtl_ingestion.yaml" +config = read_yaml_config(CONFIG_PATH) + +with DAG( + dag_id=Path(__file__).stem, + description="Open Targets Genetics — eQTL preprocess", + default_args=shared_dag_args, + **shared_dag_kwargs, +): + # SuSIE fine mapping results are stored as gzipped files in a GCS bucket. + # To improve processing performance, we decompress the files before processing to a temporary location in GCS. + decompression_job = DataflowTemplatedJobStartOperator( + task_id="decompress_susie_outputs", + template="gs://dataflow-templates/latest/Bulk_Decompress_GCS_Files", + location="europe-west1", + project_id=GCP_PROJECT_GENETICS, + parameters={ + "inputFilePattern": config["eqtl_catalogue_raw_susie_glob"], + "outputDirectory": config["eqtl_catalogue_decompressed_susie_path"], + "outputFailureFile": config["decompression_logs"], + }, + ) + step_config = find_node_in_config(config["nodes"], "eqtl_catalogue") + ingestion_job = submit_gentropy_step( + cluster_name=config["dataproc"]["cluster_name"], + step_name=step_config["id"], + python_main_module=config["dataproc"]["python_main_module"], + params=step_config["params"], + ) + + delete_decompressed_job = GCSDeleteObjectsOperator( + task_id="delete_decompressed_files", + bucket_name=config["eqtl_catalogue_decompressed_susie_path"].split("/")[2], + prefix=f"{config['eqtl_catalogue_decompressed_susie_path'].split('/')[-1]}/", + ) + + chain( + decompression_job, + create_cluster( + cluster_name=config["dataproc"]["cluster_name"], + autoscaling_policy=config["dataproc"]["autoscaling_policy"], + num_workers=config["dataproc"]["num_workers"], + worker_machine_type=config["dataproc"]["worker_machine_type"], + ), + ingestion_job, + [delete_decompressed_job, delete_cluster(config["dataproc"]["cluster_name"])], + ) diff --git a/src/ot_orchestration/dags/eqtl_preprocess.py b/src/ot_orchestration/dags/eqtl_preprocess.py deleted file mode 100644 index 08ddbc5..0000000 --- a/src/ot_orchestration/dags/eqtl_preprocess.py +++ /dev/null @@ -1,79 +0,0 @@ -"""Airflow DAG to extract credible sets and a study index from eQTL Catalogue's finemapping results.""" - -from __future__ import annotations - -from pathlib import Path - -from airflow.models.dag import DAG -from airflow.providers.google.cloud.operators.dataflow import ( - DataflowTemplatedJobStartOperator, -) -from airflow.providers.google.cloud.operators.gcs import GCSDeleteObjectsOperator - -from ot_orchestration.utils.common import shared_dag_args, shared_dag_kwargs -from ot_orchestration.utils.dataproc import ( - create_cluster, - delete_cluster, - install_dependencies, - submit_step, -) - -CLUSTER_NAME = "otg-preprocess-eqtl" -AUTOSCALING = "eqtl-preprocess" -PROJECT_ID = "open-targets-genetics-dev" - -EQTL_CATALOGUE_SUSIE_LOCATION = "gs://eqtl_catalogue_data/ebi_ftp/susie" -TEMP_DECOMPRESS_LOCATION = f"{EQTL_CATALOGUE_SUSIE_LOCATION}_decompressed_tmp" -DECOMPRESS_FAILED_LOG = f"{TEMP_DECOMPRESS_LOCATION}/logs.log" -STUDY_INDEX_PATH = "gs://eqtl_catalogue_data/study_index" -CREDIBLE_SET_PATH = "gs://eqtl_catalogue_data/credible_set_datasets/susie" - -with DAG( - dag_id=Path(__file__).stem, - description="Open Targets Genetics — eQTL preprocess", - default_args=shared_dag_args, - **shared_dag_kwargs, -): - # SuSIE fine mapping results are stored as gzipped files in a GCS bucket. - # To improve processing performance, we decompress the files before processing to a temporary location in GCS. - decompression_job = DataflowTemplatedJobStartOperator( - task_id="decompress_susie_outputs", - template="gs://dataflow-templates/latest/Bulk_Decompress_GCS_Files", - location="europe-west1", - project_id=PROJECT_ID, - parameters={ - "inputFilePattern": f"{EQTL_CATALOGUE_SUSIE_LOCATION}/**/*.gz", - "outputDirectory": TEMP_DECOMPRESS_LOCATION, - "outputFailureFile": DECOMPRESS_FAILED_LOG, - }, - ) - - ingestion_job = submit_step( - cluster_name=CLUSTER_NAME, - step_id="ot_eqtl_catalogue", - task_id="ot_eqtl_ingestion", - other_args=[ - f"step.eqtl_catalogue_paths_imported={TEMP_DECOMPRESS_LOCATION}", - f"step.eqtl_catalogue_study_index_out={STUDY_INDEX_PATH}", - f"step.eqtl_catalogue_credible_sets_out={CREDIBLE_SET_PATH}", - ], - ) - - delete_decompressed_job = GCSDeleteObjectsOperator( - task_id="delete_decompressed_files", - bucket_name=TEMP_DECOMPRESS_LOCATION.split("/")[2], - prefix=f"{TEMP_DECOMPRESS_LOCATION.split('/')[-1]}/", - ) - - ( - decompression_job - >> create_cluster( - CLUSTER_NAME, - autoscaling_policy=AUTOSCALING, - num_workers=4, - worker_machine_type="n1-highmem-8", - ) - >> install_dependencies(CLUSTER_NAME) - >> ingestion_job - >> [delete_decompressed_job, delete_cluster(CLUSTER_NAME)] - ) From ec52f8761fb93982dbb4e6d10043ba82d46afde6 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 11:22:53 +0100 Subject: [PATCH 14/24] refactor: finngen ingestion dag --- .../dags/config/finngen_ingestion.yaml | 48 +++++++++----- .../dags/finngen_ingestion.py | 62 +++++++------------ 2 files changed, 54 insertions(+), 56 deletions(-) diff --git a/src/ot_orchestration/dags/config/finngen_ingestion.yaml b/src/ot_orchestration/dags/config/finngen_ingestion.yaml index cfd3707..5263dc0 100644 --- a/src/ot_orchestration/dags/config/finngen_ingestion.yaml +++ b/src/ot_orchestration/dags/config/finngen_ingestion.yaml @@ -1,17 +1,33 @@ -finngen_release_prefix: FINNGEN_R11_ +finngen_release_prefix: &release_prefix FINNGEN_R11_ +dataproc: + python_main_module: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/cli.py + cluster_metadata: + PACKAGE: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/gentropy-0.0.0-py3-none-any.whl + cluster_init_script: gs://genetics_etl_python_playground/initialisation/0.0.0/install_dependencies_on_cluster.sh + cluster_name: otg-ingestion-finngen + autoscaling_policy: finngen-preprocess + master_disk_size: 2000 + num_workers: 6 -# inputs -efo_mappings_path: https://raw.githubusercontent.com/opentargets/curation/24.09.1/mappings/disease/manual_string.tsv -finngen_credible_set_input_glob: gs://finngen-public-data-r11/finemap/summary/*.cred.summary.tsv -finngen_snp_input_glob: gs://finngen-public-data-r11/finemap/full/susie/*.snp.bgz -phenotype_table_url: https://r11.finngen.fi/api/phenos -finngen_summary_stats_url_prefix: gs://finngen-public-data-r11/summary_stats/finngen_R11_ -finngen_summary_stats_url_suffix: ".gz" - -# outputs -credible_set_output_path: gs://finngen_data/r11/credible_set_datasets/finngen_r11_susie -study_index_output_path: gs://finngen_data/r11/study_index - -# cluster setup -cluster_name: otg-ingestion-finngen -autoscaling_policy: finngen-preprocess +nodes: + - id: finngen_studies + kind: Task + prerequisites: [] + params: + step.finngen_study_index_out: gs://finngen_data/r11/study_index + step.finngen_phenotype_table_url: https://r11.finngen.fi/api/phenos + step.finngen_release_prefix: *release_prefix + step.finngen_summary_stats_url_prefix: gs://finngen-public-data-r11/summary_stats/finngen_R11_ + step.sample_size: 453733 + step.finngen_summary_stats_url_suffix: ".gz" + step.efo_mappings_path: https://raw.githubusercontent.com/opentargets/curation/24.09.1/mappings/disease/manual_string.tsv + step.session.write_mode: overwrite + - id: finngen_finemapping_ingestion + kind: Task + prerequisites: [] + params: + step.finngen_finemapping_out: gs://finngen_data/r11/credible_set_datasets/finngen_r11_susie + step.finngen_susie_finemapping_snp_files: gs://finngen-public-data-r11/finemap/full/susie/*.snp.bgz + step.finngen_susie_finemapping_cs_summary_files: gs://finngen-public-data-r11/finemap/summary/*.cred.summary.tsv + step.session.start_hail: true + step.session.write_mode: overwrite diff --git a/src/ot_orchestration/dags/finngen_ingestion.py b/src/ot_orchestration/dags/finngen_ingestion.py index bddeb40..7e46abf 100644 --- a/src/ot_orchestration/dags/finngen_ingestion.py +++ b/src/ot_orchestration/dags/finngen_ingestion.py @@ -8,12 +8,12 @@ from airflow.models.dag import DAG from airflow.utils.trigger_rule import TriggerRule -from ot_orchestration.utils import common, read_yaml_config +from ot_orchestration.utils import chain_dependencies, read_yaml_config +from ot_orchestration.utils.common import shared_dag_args, shared_dag_kwargs from ot_orchestration.utils.dataproc import ( create_cluster, delete_cluster, - install_dependencies, - submit_step, + submit_gentropy_step, ) SOURCE_CONFIG_FILE_PATH = Path(__file__).parent / "config" / "finngen_ingestion.yaml" @@ -22,46 +22,28 @@ with DAG( dag_id=Path(__file__).stem, description="Open Targets Genetics — Finngen Susie Finemapping Results Ingestion", - default_args=common.shared_dag_args, - **common.shared_dag_kwargs, + default_args=shared_dag_args, + **shared_dag_kwargs, ): - finngen_finemapping_ingestion = submit_step( - cluster_name=config["cluster_name"], - step_id="finngen_finemapping_ingestion", - task_id="finngen_finemapping_ingestion", - other_args=[ - f"step.finngen_finemapping_out={config['credible_set_output_path']}", - f"step.finngen_susie_finemapping_snp_files={config['finngen_snp_input_glob']}", - f"step.finngen_susie_finemapping_cs_summary_files={config['finngen_credible_set_input_glob']}", - "step.session.start_hail=true", - "step.session.write_mode=overwrite", - ], - trigger_rule=TriggerRule.ALL_DONE, - ) + tasks = {} + for step in config["nodes"]: + task = submit_gentropy_step( + cluster_name=config["dataproc"]["cluster_name"], + step_name=step["id"], + python_main_module=config["dataproc"]["python_main_module"], + params=step["params"], + trigger_rule=TriggerRule.ALL_DONE, + ) + tasks[step["id"]] = task + chain_dependencies(nodes=config["nodes"], tasks_or_task_groups=tasks) - finngen_study_index = submit_step( - cluster_name=config["cluster_name"], - step_id="finngen_studies", - task_id="finngen_studies", - other_args=[ - f"step.finngen_study_index_out={config['study_index_output_path']}", - f"step.finngen_phenotype_table_url={config['phenotype_table_url']}", - f"step.finngen_release_prefix={config['finngen_release_prefix']}", - f"step.finngen_summary_stats_url_prefix={config['finngen_summary_stats_url_prefix']}", - f"step.finngen_summary_stats_url_suffix={config['finngen_summary_stats_url_suffix']}", - "step.session.write_mode=overwrite", - ], - trigger_rule=TriggerRule.ALL_DONE, - ) chain( create_cluster( - config["cluster_name"], - autoscaling_policy=config["autoscaling_policy"], - master_disk_size=2000, - num_workers=6, + config["dataproc"]["cluster_name"], + autoscaling_policy=config["dataproc"]["autoscaling_policy"], + master_disk_size=config["dataproc"]["master_disk_size"], + num_workers=config["dataproc"]["num_workers"], ), - install_dependencies(config["cluster_name"]), - finngen_study_index, - finngen_finemapping_ingestion, - delete_cluster(config["cluster_name"]), + [t for t in tasks.values()], + delete_cluster(config["dataproc"]["cluster_name"]), ) From 054174289b2f850b9d6dacf32310c823379e7d7e Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 11:55:40 +0100 Subject: [PATCH 15/24] refactor: unify dag structures --- config/step/ot_gwas_catalog_ingestion.yaml | 11 -- config/step/ot_ld_index.yaml | 19 --- .../dags/config/finngen_ingestion.yaml | 3 +- .../finngen_ukb_meta_harmonisation.yaml | 25 ++-- .../dags/config/gnomad_ingestion.yaml | 32 +++++ .../dags/finngen_ukb_meta_harmonisation.py | 36 +++-- src/ot_orchestration/dags/gnomad_ingestion.py | 41 ++++++ .../dags/gnomad_preprocess.py | 30 ---- .../dags/gwas_catalog_harmonisation.py | 129 ------------------ .../dags/ukb_ppp_eur_harmonisation.py | 20 ++- 10 files changed, 128 insertions(+), 218 deletions(-) delete mode 100644 config/step/ot_gwas_catalog_ingestion.yaml delete mode 100644 config/step/ot_ld_index.yaml create mode 100644 src/ot_orchestration/dags/config/gnomad_ingestion.yaml create mode 100644 src/ot_orchestration/dags/gnomad_ingestion.py delete mode 100644 src/ot_orchestration/dags/gnomad_preprocess.py delete mode 100644 src/ot_orchestration/dags/gwas_catalog_harmonisation.py diff --git a/config/step/ot_gwas_catalog_ingestion.yaml b/config/step/ot_gwas_catalog_ingestion.yaml deleted file mode 100644 index 8de4f1d..0000000 --- a/config/step/ot_gwas_catalog_ingestion.yaml +++ /dev/null @@ -1,11 +0,0 @@ -defaults: - - gwas_catalog_ingestion -catalog_study_files: ${datasets.gwas_catalog_studies} -catalog_ancestry_files: ${datasets.gwas_catalog_ancestries} -catalog_associations_file: ${datasets.gwas_catalog_associations} -catalog_sumstats_lut: ${datasets.gwas_catalog_sumstats_lut} -variant_annotation_path: ${datasets.variant_annotation} -catalog_studies_out: ${datasets.gwas_catalog_study_index} -catalog_associations_out: ${datasets.gwas_catalog_study_locus_folder}/gwas_catalog_curated_associations -gwas_catalog_study_curation_file: ${datasets.gwas_catalog_study_curation} -inclusion_list_path: ${datasets.gwas_catalog_curated_inclusion_list} diff --git a/config/step/ot_ld_index.yaml b/config/step/ot_ld_index.yaml deleted file mode 100644 index b2d3567..0000000 --- a/config/step/ot_ld_index.yaml +++ /dev/null @@ -1,19 +0,0 @@ -defaults: - - ld_index -ld_index_out: ${datasets.ld_index} -ld_matrix_template: ${datasets.ld_matrix_template} -ld_index_raw_template: ${datasets.ld_index_raw_template} -grch37_to_grch38_chain_path: ${datasets.chain_37_38} -liftover_ht_path: ${datasets.liftover_ht_path} -ld_populations: - - afr # African-American - - amr # American Admixed/Latino - - asj # Ashkenazi Jewish - - eas # East Asian - - est # Estonian - - fin # Finnish - - nfe # Non-Finnish European - - nwe # Northwestern European - - seu # Southeastern European -# The version will of the gnomad will be inferred from ld_matrix_template and appended to the ld_index_out. -use_version_from_input: true diff --git a/src/ot_orchestration/dags/config/finngen_ingestion.yaml b/src/ot_orchestration/dags/config/finngen_ingestion.yaml index 5263dc0..1c5ae4d 100644 --- a/src/ot_orchestration/dags/config/finngen_ingestion.yaml +++ b/src/ot_orchestration/dags/config/finngen_ingestion.yaml @@ -1,4 +1,3 @@ -finngen_release_prefix: &release_prefix FINNGEN_R11_ dataproc: python_main_module: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/cli.py cluster_metadata: @@ -16,7 +15,7 @@ nodes: params: step.finngen_study_index_out: gs://finngen_data/r11/study_index step.finngen_phenotype_table_url: https://r11.finngen.fi/api/phenos - step.finngen_release_prefix: *release_prefix + step.finngen_release_prefix: FINNGEN_R11_ step.finngen_summary_stats_url_prefix: gs://finngen-public-data-r11/summary_stats/finngen_R11_ step.sample_size: 453733 step.finngen_summary_stats_url_suffix: ".gz" diff --git a/src/ot_orchestration/dags/config/finngen_ukb_meta_harmonisation.yaml b/src/ot_orchestration/dags/config/finngen_ukb_meta_harmonisation.yaml index a5ab582..fbe3ca2 100644 --- a/src/ot_orchestration/dags/config/finngen_ukb_meta_harmonisation.yaml +++ b/src/ot_orchestration/dags/config/finngen_ukb_meta_harmonisation.yaml @@ -1,10 +1,19 @@ -cluster_name: otg-finngen-ukb-meta -steps: +dataproc: + python_main_module: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/cli.py + cluster_metadata: + PACKAGE: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/gentropy-0.0.0-py3-none-any.whl + cluster_init_script: gs://genetics_etl_python_playground/initialisation/0.0.0/install_dependencies_on_cluster.sh + cluster_name: otg-finngen-ukb-meta + + +nodes: - id: finngen_ukb_meta_ingestion + king: Task + prerequisites: [] params: - raw_study_index_path_from_tsv: gs://gentropy-tmp/batch/output/finngen_ukb_meta/study_index.tsv - raw_summary_stats_path: gs://gentropy-tmp/batch/output/finngen_ukb_meta/summary_stats.parquet - variant_annotation_path: gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/variant_annotation - tmp_variant_annotation_path: gs://gentropy-tmp/variant_annotation - study_index_output_path: gs://finngen_ukb_meta_data/study_index - summary_stats_output_path: gs://finngen_ukb_meta_data/summary_stats + step.raw_study_index_path_from_tsv: gs://gentropy-tmp/batch/output/finngen_ukb_meta/study_index.tsv + step.raw_summary_stats_path: gs://gentropy-tmp/batch/output/finngen_ukb_meta/summary_stats.parquet + step.variant_annotation_path: gs://genetics_etl_python_playground/output/python_etl/parquet/XX.XX/variant_annotation + step.tmp_variant_annotation_path: gs://gentropy-tmp/variant_annotation + step.study_index_output_path: gs://finngen_ukb_meta_data/study_index + step.summary_stats_output_path: gs://finngen_ukb_meta_data/summary_stats diff --git a/src/ot_orchestration/dags/config/gnomad_ingestion.yaml b/src/ot_orchestration/dags/config/gnomad_ingestion.yaml new file mode 100644 index 0000000..b678b73 --- /dev/null +++ b/src/ot_orchestration/dags/config/gnomad_ingestion.yaml @@ -0,0 +1,32 @@ +dataproc: + python_main_module: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/cli.py + cluster_metadata: + PACKAGE: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/gentropy-0.0.0-py3-none-any.whl + cluster_init_script: gs://genetics_etl_python_playground/initialisation/0.0.0/install_dependencies_on_cluster.sh + cluster_name: gnomad-preprocess + +# FIXME: ot_variant_annotation was replaced by ot_gnomad_variants, but +# the configuration for the latter does not exist yet. + +nodes: + - id: ld_index + kind: Task + prerequisites: [] + params: + step.ld_index_out: ${datasets.ld_index} + step.ld_matrix_template: ${datasets.ld_matrix_template} + step.ld_index_raw_template: ${datasets.ld_index_raw_template} + step.grch37_to_grch38_chain_path: ${datasets.chain_37_38} + step.liftover_ht_path: ${datasets.liftover_ht_path} + step.ld_populations: + - afr # African-American + - amr # American Admixed/Latino + - asj # Ashkenazi Jewish + - eas # East Asian + - est # Estonian + - fin # Finnish + - nfe # Non-Finnish European + - nwe # Northwestern European + - seu # Southeastern European + # The version will of the gnomad will be inferred from ld_matrix_template and appended to the ld_index_out. + step.use_version_from_input: true diff --git a/src/ot_orchestration/dags/finngen_ukb_meta_harmonisation.py b/src/ot_orchestration/dags/finngen_ukb_meta_harmonisation.py index 310e197..34928f9 100644 --- a/src/ot_orchestration/dags/finngen_ukb_meta_harmonisation.py +++ b/src/ot_orchestration/dags/finngen_ukb_meta_harmonisation.py @@ -1,16 +1,18 @@ -"""Airflow DAG to ingest and harmonise FinnGen UKB meta-analysis data.""" +"""Airflow DAG to ingest and harmonize FinnGen UKB meta-analysis data.""" from pathlib import Path from airflow.models.dag import DAG -from ot_orchestration.utils import read_yaml_config +from ot_orchestration.utils import chain_dependencies, read_yaml_config from ot_orchestration.utils.common import ( - convert_params_to_hydra_positional_arg, shared_dag_args, shared_dag_kwargs, ) -from ot_orchestration.utils.dataproc import generate_dag, submit_step +from ot_orchestration.utils.dataproc import ( + generate_dataproc_task_chain, + submit_gentropy_step, +) config = read_yaml_config( Path(__file__).parent / "config" / "finngen_ukb_meta_harmonisation.yaml" @@ -22,15 +24,21 @@ default_args=shared_dag_args, **shared_dag_kwargs, ): - tasks = [] - for step in config["steps"]: + tasks = {} + for step in config["nodes"]: step_id = step["id"] - step_params = convert_params_to_hydra_positional_arg(step) - task = submit_step( - cluster_name=config["cluster_name"], - step_id=step_id, - task_id=step_id, - other_args=step_params, + task = submit_gentropy_step( + cluster_name=config["dataproc"]["cluster_name"], + step_name=step["id"], + python_main_module=config["dataproc"]["python_main_module"], + params=step["params"], ) - tasks.append(task) - dag = generate_dag(cluster_name=config["cluster_name"], tasks=tasks) + tasks[step["id"]] = task + + chain_dependencies(nodes=config["nodes"], tasks_or_task_groups=tasks) + dag = generate_dataproc_task_chain( + cluster_name=config["dataproc"]["cluster_name"], + cluster_init_script=config["dataproc"]["cluster_init_script"], + cluster_metadata=config["dataproc"]["cluster_metadata"], + tasks=[t for t in tasks.values()], + ) diff --git a/src/ot_orchestration/dags/gnomad_ingestion.py b/src/ot_orchestration/dags/gnomad_ingestion.py new file mode 100644 index 0000000..d21a2b8 --- /dev/null +++ b/src/ot_orchestration/dags/gnomad_ingestion.py @@ -0,0 +1,41 @@ +"""Airflow DAG for the Preprocess part of the pipeline.""" + +from __future__ import annotations + +from pathlib import Path + +from airflow.models.dag import DAG + +from ot_orchestration.utils import chain_dependencies, read_yaml_config +from ot_orchestration.utils.common import shared_dag_args, shared_dag_kwargs +from ot_orchestration.utils.dataproc import ( + generate_dataproc_task_chain, + submit_gentropy_step, +) + +CONFIG_FILE_PATH = Path(__file__).parent / "config" / "gnomad_ingestion.yaml" +config = read_yaml_config(CONFIG_FILE_PATH) + +with DAG( + dag_id=Path(__file__).stem, + description="Open Targets Genetics — Gnomad Ingestion", + default_args=shared_dag_args, + **shared_dag_kwargs, +): + tasks = {} + for step in config["nodes"]: + task = submit_gentropy_step( + cluster_name=config["dataproc"]["cluster_name"], + step_name=step["id"], + python_main_module=config["dataproc"]["python_main_module"], + params=step["params"], + ) + tasks[step["id"]] = task + + chain_dependencies(nodes=config["nodes"], tasks_or_task_groups=tasks) + dag = generate_dataproc_task_chain( + cluster_name=config["dataproc"]["cluster_name"], + cluster_init_script=config["dataproc"]["cluster_init_script"], + cluster_metadata=config["dataproc"]["cluster_metadata"], + tasks=[t for t in tasks.values()], + ) diff --git a/src/ot_orchestration/dags/gnomad_preprocess.py b/src/ot_orchestration/dags/gnomad_preprocess.py deleted file mode 100644 index f369b24..0000000 --- a/src/ot_orchestration/dags/gnomad_preprocess.py +++ /dev/null @@ -1,30 +0,0 @@ -"""Airflow DAG for the Preprocess part of the pipeline.""" - -from __future__ import annotations - -from pathlib import Path - -from airflow.models.dag import DAG - -from ot_orchestration.utils.common import shared_dag_args, shared_dag_kwargs -from ot_orchestration.utils.dataproc import generate_dag, submit_step - -CLUSTER_NAME = "gnomad-preprocess" - -ALL_STEPS = [ - "ot_ld_index", - "ot_variant_annotation", -] - - -with DAG( - dag_id=Path(__file__).stem, - description="Open Targets Genetics — Preprocess", - default_args=shared_dag_args, - **shared_dag_kwargs, -): - all_tasks = [ - submit_step(cluster_name=CLUSTER_NAME, step_id=step, task_id=step) - for step in ALL_STEPS - ] - dag = generate_dag(cluster_name=CLUSTER_NAME, tasks=all_tasks) diff --git a/src/ot_orchestration/dags/gwas_catalog_harmonisation.py b/src/ot_orchestration/dags/gwas_catalog_harmonisation.py deleted file mode 100644 index 815e20f..0000000 --- a/src/ot_orchestration/dags/gwas_catalog_harmonisation.py +++ /dev/null @@ -1,129 +0,0 @@ -"""Airflow DAG for the harmonisation part of the pipeline.""" - -from __future__ import annotations - -import re -import time -from pathlib import Path -from typing import Any - -from airflow.decorators import task -from airflow.models.dag import DAG -from airflow.providers.google.cloud.operators.gcs import GCSListObjectsOperator - -from ot_orchestration.utils.common import shared_dag_args, shared_dag_kwargs -from ot_orchestration.utils.dataproc import ( - create_cluster, - install_dependencies, - submit_pyspark_job_no_operator, -) - -CLUSTER_NAME = "otg-gwascatalog-harmonisation" -AUTOSCALING = "gwascatalog-harmonisation" - -SUMMARY_STATS_BUCKET_NAME = "gwas_catalog_data" -RAW_SUMMARY_STATISTICS_PREFIX = "raw_summary_statistics" -HARMONISED_SUMMARY_STATISTICS_PREFIX = "harmonised_summary_statistics" - -with DAG( - dag_id=Path(__file__).stem, - description="Open Targets Genetics — GWAS Catalog harmonisation", - default_args=shared_dag_args, - **shared_dag_kwargs, -): - # List raw harmonised files from GWAS Catalog - list_inputs = GCSListObjectsOperator( - task_id="list_raw_harmonised", - bucket=SUMMARY_STATS_BUCKET_NAME, - prefix=RAW_SUMMARY_STATISTICS_PREFIX, - match_glob="**/*.h.tsv.gz", - ) - # List parquet files that have been previously processed - list_outputs = GCSListObjectsOperator( - task_id="list_harmonised_parquet", - bucket=SUMMARY_STATS_BUCKET_NAME, - prefix=HARMONISED_SUMMARY_STATISTICS_PREFIX, - match_glob="**/_SUCCESS", - ) - - # Create list of pending jobs - @task(task_id="create_to_do_list") - def create_to_do_list(**kwargs: Any) -> Any: - """Create the to-do list of studies. - - Args: - **kwargs (Any): Keyword arguments. - - Returns: - Any: To-do list. - """ - ti = kwargs["ti"] - raw_harmonised = ti.xcom_pull( - task_ids="list_raw_harmonised", key="return_value" - ) - print("Number of raw harmonised files: ", len(raw_harmonised)) # noqa: T201 - to_do_list = [] - # Remove the ones that have been processed - parquets = ti.xcom_pull(task_ids="list_harmonised_parquet", key="return_value") - print("Number of parquet files: ", len(parquets)) # noqa: T201 - for path in raw_harmonised: - match_result = re.search( - rf"{RAW_SUMMARY_STATISTICS_PREFIX}/(.*)/(GCST\d+)/harmonised/(.*)\.h\.tsv\.gz", - path, - ) - if match_result: - study_id = match_result.group(2) - if ( - f"{HARMONISED_SUMMARY_STATISTICS_PREFIX}/{study_id}.parquet/_SUCCESS" - not in parquets - ): - to_do_list.append(path) - print("Number of jobs to submit: ", len(to_do_list)) # noqa: T201 - ti.xcom_push(key="to_do_list", value=to_do_list) - - # Submit jobs to dataproc - @task(task_id="submit_jobs") - def submit_jobs(**kwargs: Any) -> None: - """Submit jobs to dataproc. - - Args: - **kwargs (Any): Keyword arguments. - """ - ti = kwargs["ti"] - todo = ti.xcom_pull(task_ids="create_to_do_list", key="to_do_list") - print("Number of jobs to submit: ", len(todo)) # noqa: T201 - for i in range(len(todo)): - # Not to exceed default quota 400 jobs per minute - if i > 0 and i % 399 == 0: - time.sleep(60) - input_path = todo[i] - match_result = re.search( - rf"{RAW_SUMMARY_STATISTICS_PREFIX}/(.*)/(GCST\d+)/harmonised/(.*)\.h\.tsv\.gz", - input_path, - ) - if match_result: - study_id = match_result.group(2) - print("Submitting job for study: ", study_id) # noqa: T201 - submit_pyspark_job_no_operator( - cluster_name=CLUSTER_NAME, - step_id="gwas_catalog_sumstat_preprocess", - other_args=[ - f"step.raw_sumstats_path=gs://{SUMMARY_STATS_BUCKET_NAME}/{input_path}", - f"step.out_sumstats_path=gs://{SUMMARY_STATS_BUCKET_NAME}/{HARMONISED_SUMMARY_STATISTICS_PREFIX}/{study_id}.parquet", - ], - ) - - ( - [list_inputs, list_outputs] - >> create_to_do_list() - >> create_cluster( - CLUSTER_NAME, - autoscaling_policy=AUTOSCALING, - num_workers=8, - num_preemptible_workers=8, - master_machine_type="n1-highmem-64", - worker_machine_type="n1-standard-2", - ) - >> install_dependencies(CLUSTER_NAME) - >> submit_jobs() - ) diff --git a/src/ot_orchestration/dags/ukb_ppp_eur_harmonisation.py b/src/ot_orchestration/dags/ukb_ppp_eur_harmonisation.py index af7e5bb..b23048f 100644 --- a/src/ot_orchestration/dags/ukb_ppp_eur_harmonisation.py +++ b/src/ot_orchestration/dags/ukb_ppp_eur_harmonisation.py @@ -4,9 +4,12 @@ from airflow.models.dag import DAG -from ot_orchestration.utils import read_yaml_config +from ot_orchestration.utils import chain_dependencies, read_yaml_config from ot_orchestration.utils.common import shared_dag_args, shared_dag_kwargs -from ot_orchestration.utils.dataproc import generate_dag, submit_gentropy_step +from ot_orchestration.utils.dataproc import ( + generate_dataproc_task_chain, + submit_gentropy_step, +) config = read_yaml_config( Path(__file__).parent / "config" / "ukb_ppp_eur_harmonisation.yaml" @@ -18,7 +21,7 @@ default_args=shared_dag_args, **shared_dag_kwargs, ): - tasks = [] + tasks = {} for step in config["nodes"]: task = submit_gentropy_step( cluster_name=config["dataproc"]["cluster_name"], @@ -26,5 +29,12 @@ python_main_module=config["dataproc"]["python_main_module"], params=step["params"], ) - tasks.append(task) - dag = generate_dag(cluster_name=config["dataproc"]["cluster_name"], tasks=tasks) + tasks[step["id"]] = task + chain_dependencies(nodes=config["nodes"], tasks_or_task_groups=tasks) + + dag = generate_dataproc_task_chain( + cluster_name=config["dataproc"]["cluster_name"], + cluster_init_script=config["dataproc"]["cluster_init_script"], + cluster_metadata=config["dataproc"]["cluster_metadata"], + tasks=[t for t in tasks.values()], + ) From 0a7f7a7a65e68a8f5a9c052f96767adbbe7b6d12 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 11:57:32 +0100 Subject: [PATCH 16/24] fix: import in tests --- tests/test_common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_common.py b/tests/test_common.py index 49b7fca..8c906c0 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -1,7 +1,7 @@ """Test common functions.""" import pytest -from ot_orchestration.utils.common import convert_params_to_hydra_positional_arg +from ot_orchestration.utils.dataproc import convert_params_to_hydra_positional_arg @pytest.mark.parametrize( From 6b99a1e4acdd9271ae95a8f60117c135d12bbf78 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 13:10:07 +0100 Subject: [PATCH 17/24] fix: removed import --- src/ot_orchestration/utils/path.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ot_orchestration/utils/path.py b/src/ot_orchestration/utils/path.py index 059bb01..f0e5825 100644 --- a/src/ot_orchestration/utils/path.py +++ b/src/ot_orchestration/utils/path.py @@ -6,7 +6,6 @@ import multiprocessing import re from abc import abstractmethod -from dataclasses import dataclass from functools import cached_property from pathlib import Path from typing import Any, Protocol, TypedDict From fd4e9e68716a415babd2f68bf09dfe4fa25a8187 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 13:30:59 +0100 Subject: [PATCH 18/24] fix: refactor tests --- tests/test_common.py | 39 ------------------------------------- tests/test_dataproc.py | 44 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 39 deletions(-) delete mode 100644 tests/test_common.py create mode 100644 tests/test_dataproc.py diff --git a/tests/test_common.py b/tests/test_common.py deleted file mode 100644 index 8c906c0..0000000 --- a/tests/test_common.py +++ /dev/null @@ -1,39 +0,0 @@ -"""Test common functions.""" - -import pytest -from ot_orchestration.utils.dataproc import convert_params_to_hydra_positional_arg - - -@pytest.mark.parametrize( - [ - "step_config", - "output", - ], - [ - pytest.param( - {"id": "step1", "params": {"param1": "value1"}}, - ["step.param1=value1"], - id="Step with one parameter.", - ), - pytest.param( - {"id": "step1"}, - None, - id="Step without parameters.", - ), - pytest.param( - {"id": "step1", "params": {}}, - None, - id="Step with zero parameters.", - ), - pytest.param( - {"id": "step1", "params": {"param1": "value1", "params2": "value2"}}, - ["step.param1=value1", "step.params2=value2"], - id="Step with multiple parameters.", - ), - ], -) -def test_convert_params_to_hydra_positional_arg( - step_config: dict, output: list[str] | None -) -> None: - """Test conversion between step configuration and hydra positional arguments.""" - assert convert_params_to_hydra_positional_arg(step_config) == output diff --git a/tests/test_dataproc.py b/tests/test_dataproc.py new file mode 100644 index 0000000..d4a8b4f --- /dev/null +++ b/tests/test_dataproc.py @@ -0,0 +1,44 @@ +"""Test common functions.""" + +from typing import Any + +import pytest +from ot_orchestration.utils import convert_params_to_hydra_positional_arg + + +@pytest.mark.parametrize( + [ + "params", + "output", + "error", + ], + [ + pytest.param( + {"step.param1": "value1", "step.param2": "value2"}, + ["step.param1=value1", "step.param2=value2"], + False, + id="Step with two parameters.", + ), + pytest.param( + [], + None, + ValueError, + id="Step without parameters.", + ), + pytest.param( + {"+step.param1": "value1"}, + ["+step.param1=value1"], + False, + id="Step with + parameter.", + ), + ], +) +def test_convert_params_to_hydra_positional_arg( + params: dict[str, Any] | None, output: list[str], error: Any +) -> None: + """Test conversion between step configuration and hydra positional arguments.""" + if error: + with pytest.raises(error): + convert_params_to_hydra_positional_arg(params) + else: + assert convert_params_to_hydra_positional_arg(params) == output From 112c95fbaa0d87852d45707af3500160bd4db22f Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 13:33:57 +0100 Subject: [PATCH 19/24] chore: drop import --- src/ot_orchestration/utils/common.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/ot_orchestration/utils/common.py b/src/ot_orchestration/utils/common.py index 8caa35f..c436482 100644 --- a/src/ot_orchestration/utils/common.py +++ b/src/ot_orchestration/utils/common.py @@ -2,8 +2,6 @@ from __future__ import annotations -from typing import Any - import pendulum from ot_orchestration.utils import strhash From cea50f8476d92c9d3401c9843df107969de4551b Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 13:42:03 +0100 Subject: [PATCH 20/24] chore: drop typing_extensions --- poetry.lock | 1736 +++++++++-------- pyproject.toml | 1 - .../dags/config/eqtl_ingestion.yaml | 1 - 3 files changed, 892 insertions(+), 846 deletions(-) diff --git a/poetry.lock b/poetry.lock index 871ae4e..a956f1b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -194,13 +194,13 @@ files = [ [[package]] name = "anyio" -version = "4.4.0" +version = "4.6.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, - {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, + {file = "anyio-4.6.0-py3-none-any.whl", hash = "sha256:c7d2e9d63e31599eeb636c8c5c03a7e108d73b345f064f1c19fdc87b79036a9a"}, + {file = "anyio-4.6.0.tar.gz", hash = "sha256:137b4559cbb034c477165047febb6ff83f390fc3b20bf181c1fc0a728cb8beeb"}, ] [package.dependencies] @@ -210,19 +210,19 @@ sniffio = ">=1.1" typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.23)"] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.21.0b1)"] +trio = ["trio (>=0.26.1)"] [[package]] name = "apache-airflow" -version = "2.10.0" +version = "2.10.2" description = "Programmatically author, schedule and monitor data pipelines" optional = false python-versions = "<3.13,~=3.8" files = [ - {file = "apache_airflow-2.10.0-py3-none-any.whl", hash = "sha256:a8985379cb923adf6c2da9df36e30efb23aab31e32332803a7be8ce7958b7dd4"}, - {file = "apache_airflow-2.10.0.tar.gz", hash = "sha256:1948c72dfe58d2979e06819c6b9441a572b20395dc6b4e0dae5e4cfecbb07209"}, + {file = "apache_airflow-2.10.2-py3-none-any.whl", hash = "sha256:1b3a2a29a8e62702be8d1a6eb7a692f99407408d9c8cd91dff17b4b90985c6ba"}, + {file = "apache_airflow-2.10.2.tar.gz", hash = "sha256:8049d29798fda50b8f8778fe4cf4cb3eb956ba1cb2121f0e6709397beb73efa7"}, ] [package.dependencies] @@ -303,7 +303,7 @@ tabulate = ">=0.7.5" tenacity = ">=8.0.0,<8.2.0 || >8.2.0" termcolor = ">=1.1.0" unicodecsv = ">=0.14.1" -universal-pathlib = ">=0.2.2" +universal-pathlib = ">=0.2.2,<0.2.4 || >0.2.4" werkzeug = ">=2.0,<3" [package.extras] @@ -837,42 +837,42 @@ sshtunnel = ">=0.3.2" [[package]] name = "apache-beam" -version = "2.59.0rc1" +version = "2.59.0" description = "Apache Beam SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "apache_beam-2.59.0rc1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:334a588aea78b062df7ac4441a9f9807027623beef8d0e3add0dc92a3f799a4b"}, - {file = "apache_beam-2.59.0rc1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d269737ab4db0408ff86cab8c8254fdeaed1f99b1075c55071e34f4a63c6133f"}, - {file = "apache_beam-2.59.0rc1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:717fb3c6d9919fff90e9ba7e973c7c0361e679546bd0497b611e5db4c0cae56a"}, - {file = "apache_beam-2.59.0rc1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68d84084bbd94c9c70da178089e13b8f68b6220e9cb6e1da41c1aa5356ef5c36"}, - {file = "apache_beam-2.59.0rc1-cp310-cp310-win32.whl", hash = "sha256:6f20ffdd028668d1e1cdcfa4f4c35d1bbb66a7d9e08b1002ad9290f87a97d757"}, - {file = "apache_beam-2.59.0rc1-cp310-cp310-win_amd64.whl", hash = "sha256:c40818f7cb75f7a659564eb05c24fa8a8aa2bad4d02a6f08ae9e178fe254495d"}, - {file = "apache_beam-2.59.0rc1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a05b3a8e1ead2f8c36ee840e332f849dbaeba740e7a6819577b4004f8fd3c04"}, - {file = "apache_beam-2.59.0rc1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f2275f70cee4a74f2cd2975437eef77e9257ec43053a610be207acf207c9967"}, - {file = "apache_beam-2.59.0rc1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93be7abc7233d178785910bb6371b24c4f97fea67062239d0e888d50fc3e4e0f"}, - {file = "apache_beam-2.59.0rc1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac689bea00f73682beae16a45ab2f5f0a13620014017531dc300341fa1c00137"}, - {file = "apache_beam-2.59.0rc1-cp311-cp311-win32.whl", hash = "sha256:c1025c2fe701a27801cf225720745e0cbee57a972ed9376205b910037cf42441"}, - {file = "apache_beam-2.59.0rc1-cp311-cp311-win_amd64.whl", hash = "sha256:7f7b4b5236e7960b1740ea9936d63f67d75dbfc1879a1058ae22aa6874ecb2b5"}, - {file = "apache_beam-2.59.0rc1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:14b0e4be85c9c443939f6793ce745127dda5358fd66de161958972b6cc41c4fd"}, - {file = "apache_beam-2.59.0rc1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d882dc3a820e9f3d5756681f94e7584b9048c4ee1dc0e2247b3413b32f8c54b"}, - {file = "apache_beam-2.59.0rc1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:388bb6a70e1187abc6e18bb272cff10bedbba85bd126833b07c2dd436a218838"}, - {file = "apache_beam-2.59.0rc1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35be964dc1e9563aaed163faa049d9fbe3095a3178869914184a7b0e464da3be"}, - {file = "apache_beam-2.59.0rc1-cp312-cp312-win32.whl", hash = "sha256:9f137fbb59d52069bfb4ffa8dcd05fe75b1935684da048cd97426d0cc8c78feb"}, - {file = "apache_beam-2.59.0rc1-cp312-cp312-win_amd64.whl", hash = "sha256:2a7f7b7a209715b1137f849069c02c3cd55c6599d3dbfb9b0a1647373e5b0918"}, - {file = "apache_beam-2.59.0rc1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9aea6757fceb8727de4740efc8da66d22db2302de6a8a3bcb240eed6e30cfa95"}, - {file = "apache_beam-2.59.0rc1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d016e1346d5cbbc864081e7b5d9d5f5451646292dfee1f9f150dab7d3a3c8db"}, - {file = "apache_beam-2.59.0rc1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b06df0a7a312af8677cc7dc0210553d180da3b417dbcb4bf5a9b0542205aa848"}, - {file = "apache_beam-2.59.0rc1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5a407c28debbcc52e36baee9cbfe5e1fe69384229b8334b6207888b78999a9"}, - {file = "apache_beam-2.59.0rc1-cp38-cp38-win32.whl", hash = "sha256:1acc33462a08cfef6b4182aca446267e640230f19f60dcdb2b92de5177d62a43"}, - {file = "apache_beam-2.59.0rc1-cp38-cp38-win_amd64.whl", hash = "sha256:ec9677e93b7c3ebbf2484d27c02b4b9bf54dca265d5fe46c6a11d38bacee3ffe"}, - {file = "apache_beam-2.59.0rc1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7e6d1105e20e77f86ea8727494e94dcb6a735a18ee12dc18a738632c65b688f4"}, - {file = "apache_beam-2.59.0rc1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdde92b8d6e6b9af47f218c88c6a392a519eefd5589077754bf34a97374d838"}, - {file = "apache_beam-2.59.0rc1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61496e65cc5aacd6042ca5337dadf77289db41db6c28abc48864dfb7fd5e68b9"}, - {file = "apache_beam-2.59.0rc1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:edcd718975e869e43065e41e15642b81173dfea3dab11c8fca5ffb103fc4a6ed"}, - {file = "apache_beam-2.59.0rc1-cp39-cp39-win32.whl", hash = "sha256:cb1e72a949d37b2aed53866fd3889113d8e056256eabbb3dd9b6f3aea7f3165c"}, - {file = "apache_beam-2.59.0rc1-cp39-cp39-win_amd64.whl", hash = "sha256:08c5349d0a4dce28551f41c19b5c2a8d2d8b55698b837e9f6a50de25040edfeb"}, - {file = "apache_beam-2.59.0rc1.tar.gz", hash = "sha256:6b51be738b6fe18cc65ff14cecd936f0ea7bbad3a47aff27dfa687b258ebc9cc"}, + {file = "apache_beam-2.59.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c9fbbc16d3575559f1c2259d00adf96a2eb0e9a2f708f65d32089e85d2be0239"}, + {file = "apache_beam-2.59.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cfa06daefd356cc318140ad9e0dc66fdbaa93e5a3e59f187d7c74252072fe9"}, + {file = "apache_beam-2.59.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3a90d5f9c453442ceccc95c67c918fa28f567759f718d9064ac75ecb985b77e"}, + {file = "apache_beam-2.59.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cae208c16929a8bd2b6d31011de553dd458e88acfee9649dbd72c1617d9c39"}, + {file = "apache_beam-2.59.0-cp310-cp310-win32.whl", hash = "sha256:bf85fe978889e39b8ac3e52f22ebe8169d48460b637342ba3a8bd2024c3b5ef4"}, + {file = "apache_beam-2.59.0-cp310-cp310-win_amd64.whl", hash = "sha256:9b33a4a168a895dc5c18b1a4d2b9176f76cb3109bcc8c68cce3573f72e490e6d"}, + {file = "apache_beam-2.59.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f1b7c019af38b4f1ff899824dbf8380a6e7245c158814546b62e8b4ab7a1d483"}, + {file = "apache_beam-2.59.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea315ec12637c5ca474f3bf7f8afabe9981cf6f1a67ddfff8bef1c8f035b228c"}, + {file = "apache_beam-2.59.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a97f302b434df44d6f3dcb241c475ebff445f34459425d7f3bbb982011afad81"}, + {file = "apache_beam-2.59.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc0788f7313762eaedffbda4e8139e8a65b658a84dc577a5a4e106e4b0a21556"}, + {file = "apache_beam-2.59.0-cp311-cp311-win32.whl", hash = "sha256:7baea8eb6b021d794552316e8cdccb681d5a7a811727b00fb9d51683e03f3a7c"}, + {file = "apache_beam-2.59.0-cp311-cp311-win_amd64.whl", hash = "sha256:55e4cbf0f8fc2a759addfd6e58913383c54631c933ee04e280aad058f6cf744c"}, + {file = "apache_beam-2.59.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e281ca1e447ee4858984a3c72f1846ec867002e0a31c874b18c440604f745245"}, + {file = "apache_beam-2.59.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3311cd1ef7848df444c75a2f502bd04b40f6e565c7ca0044da8b9362d4bdca73"}, + {file = "apache_beam-2.59.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0764d1f83b6010e1712d783c5c9bd46c4aa1e8064f00480eb53ef59a64573adb"}, + {file = "apache_beam-2.59.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02239d5290f79bf22c651d15d8e8f667da19dcca32922a7cd0acb5cfd78c03ac"}, + {file = "apache_beam-2.59.0-cp312-cp312-win32.whl", hash = "sha256:abbc1c7b23e340c5091b791545079c14d32ecae0cb7c840f762e9abe6540fe2b"}, + {file = "apache_beam-2.59.0-cp312-cp312-win_amd64.whl", hash = "sha256:0e834fc077111ad86610f0a69e4ea76f58874f557b9fc08a13476ab03689a0e6"}, + {file = "apache_beam-2.59.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:db2e7e51565d1b29ce9e599542e3ee716bc36745d9c1253377c9690cfe764d0e"}, + {file = "apache_beam-2.59.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eab5b461936751d849decba594c1c0a081492cfeca3fe241eda6bc51816be9b1"}, + {file = "apache_beam-2.59.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d8e38068783ad3ecab0e2beaab389ff4796375604c9104f7b1e19945e496970"}, + {file = "apache_beam-2.59.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:269d85a44f32fd279d80b27b0ef8a20e38d2715e5c24d009d90363c4b6b54c86"}, + {file = "apache_beam-2.59.0-cp38-cp38-win32.whl", hash = "sha256:b428dd82522ad926c2172e8741723b66a6662c9033c744b25fd069e1c8e5e1db"}, + {file = "apache_beam-2.59.0-cp38-cp38-win_amd64.whl", hash = "sha256:6405ad1612b232acfad2b8def68db7d54cd4b16bd4fdca121bc8bd03c6263fe9"}, + {file = "apache_beam-2.59.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1c7a90cebddd5175077bab59cfb1909e5c8a5341c59ea2a7d7622ecd3ac1d829"}, + {file = "apache_beam-2.59.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:116950f1cf4f5e3769a5f6b5b97b579c7bea71a59dfc82a335d7d8765ca0c655"}, + {file = "apache_beam-2.59.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6324eb39bfaabb4dab6e4210f95d84811c88dcad6577fa6e6e5cc560ba18bea7"}, + {file = "apache_beam-2.59.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29294cb3b9033d92c0f1ef4474f42ec45c8dc3eefdb89f6d30a2337ca43452a1"}, + {file = "apache_beam-2.59.0-cp39-cp39-win32.whl", hash = "sha256:ecf74d123ddd10a114ca47f7b9c74b354121c1c1911da2b05e0e964e86ecbac8"}, + {file = "apache_beam-2.59.0-cp39-cp39-win_amd64.whl", hash = "sha256:6678d5c9408be842a7f87842925a5468423bb3eed8182c99d34a95541ad0d2b2"}, + {file = "apache_beam-2.59.0.tar.gz", hash = "sha256:4002abe6c0b872dfba99d4785211d15ec368a0c6f67fe989db5342fba022e260"}, ] [package.dependencies] @@ -1113,13 +1113,13 @@ lxml = ["lxml"] [[package]] name = "billiard" -version = "4.2.0" +version = "4.2.1" description = "Python multiprocessing fork with improvements and bugfixes" optional = false python-versions = ">=3.7" files = [ - {file = "billiard-4.2.0-py3-none-any.whl", hash = "sha256:07aa978b308f334ff8282bd4a746e681b3513db5c9a514cbdd810cbbdc19714d"}, - {file = "billiard-4.2.0.tar.gz", hash = "sha256:9a3c3184cb275aa17a732f93f65b20c525d3d9f253722d26a82194803ade5a2c"}, + {file = "billiard-4.2.1-py3-none-any.whl", hash = "sha256:40b59a4ac8806ba2c2369ea98d876bc6108b051c227baffd928c644d15d8f3cb"}, + {file = "billiard-4.2.1.tar.gz", hash = "sha256:12b641b0c539073fc8d3f5b8b7be998956665c4233c7c1fcd66a7e677c4fb36f"}, ] [[package]] @@ -1157,13 +1157,13 @@ files = [ [[package]] name = "cattrs" -version = "24.1.0" +version = "24.1.2" description = "Composable complex class support for attrs and dataclasses." optional = false python-versions = ">=3.8" files = [ - {file = "cattrs-24.1.0-py3-none-any.whl", hash = "sha256:043bb8af72596432a7df63abcff0055ac0f198a4d2e95af8db5a936a7074a761"}, - {file = "cattrs-24.1.0.tar.gz", hash = "sha256:8274f18b253bf7674a43da851e3096370d67088165d23138b04a1c04c8eaf48e"}, + {file = "cattrs-24.1.2-py3-none-any.whl", hash = "sha256:67c7495b760168d931a10233f979b28dc04daf853b30752246f4f8471c6d68d0"}, + {file = "cattrs-24.1.2.tar.gz", hash = "sha256:8028cfe1ff5382df59dd36474a86e02d817b06eaf8af84555441bac915d2ef85"}, ] [package.dependencies] @@ -1251,78 +1251,78 @@ files = [ [[package]] name = "cffi" -version = "1.17.0" +version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" files = [ - {file = "cffi-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9338cc05451f1942d0d8203ec2c346c830f8e86469903d5126c1f0a13a2bcbb"}, - {file = "cffi-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0ce71725cacc9ebf839630772b07eeec220cbb5f03be1399e0457a1464f8e1a"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c815270206f983309915a6844fe994b2fa47e5d05c4c4cef267c3b30e34dbe42"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6bdcd415ba87846fd317bee0774e412e8792832e7805938987e4ede1d13046d"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a98748ed1a1df4ee1d6f927e151ed6c1a09d5ec21684de879c7ea6aa96f58f2"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a048d4f6630113e54bb4b77e315e1ba32a5a31512c31a273807d0027a7e69ab"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24aa705a5f5bd3a8bcfa4d123f03413de5d86e497435693b638cbffb7d5d8a1b"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:856bf0924d24e7f93b8aee12a3a1095c34085600aa805693fb7f5d1962393206"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4304d4416ff032ed50ad6bb87416d802e67139e31c0bde4628f36a47a3164bfa"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:331ad15c39c9fe9186ceaf87203a9ecf5ae0ba2538c9e898e3a6967e8ad3db6f"}, - {file = "cffi-1.17.0-cp310-cp310-win32.whl", hash = "sha256:669b29a9eca6146465cc574659058ed949748f0809a2582d1f1a324eb91054dc"}, - {file = "cffi-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:48b389b1fd5144603d61d752afd7167dfd205973a43151ae5045b35793232aa2"}, - {file = "cffi-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5d97162c196ce54af6700949ddf9409e9833ef1003b4741c2b39ef46f1d9720"}, - {file = "cffi-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ba5c243f4004c750836f81606a9fcb7841f8874ad8f3bf204ff5e56332b72b9"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb9333f58fc3a2296fb1d54576138d4cf5d496a2cc118422bd77835e6ae0b9cb"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:435a22d00ec7d7ea533db494da8581b05977f9c37338c80bc86314bec2619424"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1df34588123fcc88c872f5acb6f74ae59e9d182a2707097f9e28275ec26a12d"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df8bb0010fdd0a743b7542589223a2816bdde4d94bb5ad67884348fa2c1c67e8"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8b5b9712783415695663bd463990e2f00c6750562e6ad1d28e072a611c5f2a6"}, - {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ffef8fd58a36fb5f1196919638f73dd3ae0db1a878982b27a9a5a176ede4ba91"}, - {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e67d26532bfd8b7f7c05d5a766d6f437b362c1bf203a3a5ce3593a645e870b8"}, - {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45f7cd36186db767d803b1473b3c659d57a23b5fa491ad83c6d40f2af58e4dbb"}, - {file = "cffi-1.17.0-cp311-cp311-win32.whl", hash = "sha256:a9015f5b8af1bb6837a3fcb0cdf3b874fe3385ff6274e8b7925d81ccaec3c5c9"}, - {file = "cffi-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:b50aaac7d05c2c26dfd50c3321199f019ba76bb650e346a6ef3616306eed67b0"}, - {file = "cffi-1.17.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aec510255ce690d240f7cb23d7114f6b351c733a74c279a84def763660a2c3bc"}, - {file = "cffi-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2770bb0d5e3cc0e31e7318db06efcbcdb7b31bcb1a70086d3177692a02256f59"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db9a30ec064129d605d0f1aedc93e00894b9334ec74ba9c6bdd08147434b33eb"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a47eef975d2b8b721775a0fa286f50eab535b9d56c70a6e62842134cf7841195"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3e0992f23bbb0be00a921eae5363329253c3b86287db27092461c887b791e5e"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6107e445faf057c118d5050560695e46d272e5301feffda3c41849641222a828"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb862356ee9391dc5a0b3cbc00f416b48c1b9a52d252d898e5b7696a5f9fe150"}, - {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1c13185b90bbd3f8b5963cd8ce7ad4ff441924c31e23c975cb150e27c2bf67a"}, - {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17c6d6d3260c7f2d94f657e6872591fe8733872a86ed1345bda872cfc8c74885"}, - {file = "cffi-1.17.0-cp312-cp312-win32.whl", hash = "sha256:c3b8bd3133cd50f6b637bb4322822c94c5ce4bf0d724ed5ae70afce62187c492"}, - {file = "cffi-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:dca802c8db0720ce1c49cce1149ff7b06e91ba15fa84b1d59144fef1a1bc7ac2"}, - {file = "cffi-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ce01337d23884b21c03869d2f68c5523d43174d4fc405490eb0091057943118"}, - {file = "cffi-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cab2eba3830bf4f6d91e2d6718e0e1c14a2f5ad1af68a89d24ace0c6b17cced7"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14b9cbc8f7ac98a739558eb86fabc283d4d564dafed50216e7f7ee62d0d25377"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b00e7bcd71caa0282cbe3c90966f738e2db91e64092a877c3ff7f19a1628fdcb"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41f4915e09218744d8bae14759f983e466ab69b178de38066f7579892ff2a555"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4760a68cab57bfaa628938e9c2971137e05ce48e762a9cb53b76c9b569f1204"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:011aff3524d578a9412c8b3cfaa50f2c0bd78e03eb7af7aa5e0df59b158efb2f"}, - {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a003ac9edc22d99ae1286b0875c460351f4e101f8c9d9d2576e78d7e048f64e0"}, - {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ef9528915df81b8f4c7612b19b8628214c65c9b7f74db2e34a646a0a2a0da2d4"}, - {file = "cffi-1.17.0-cp313-cp313-win32.whl", hash = "sha256:70d2aa9fb00cf52034feac4b913181a6e10356019b18ef89bc7c12a283bf5f5a"}, - {file = "cffi-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:b7b6ea9e36d32582cda3465f54c4b454f62f23cb083ebc7a94e2ca6ef011c3a7"}, - {file = "cffi-1.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:964823b2fc77b55355999ade496c54dde161c621cb1f6eac61dc30ed1b63cd4c"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:516a405f174fd3b88829eabfe4bb296ac602d6a0f68e0d64d5ac9456194a5b7e"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dec6b307ce928e8e112a6bb9921a1cb00a0e14979bf28b98e084a4b8a742bd9b"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4094c7b464cf0a858e75cd14b03509e84789abf7b79f8537e6a72152109c76e"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2404f3de742f47cb62d023f0ba7c5a916c9c653d5b368cc966382ae4e57da401"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa9d43b02a0c681f0bfbc12d476d47b2b2b6a3f9287f11ee42989a268a1833c"}, - {file = "cffi-1.17.0-cp38-cp38-win32.whl", hash = "sha256:0bb15e7acf8ab35ca8b24b90af52c8b391690ef5c4aec3d31f38f0d37d2cc499"}, - {file = "cffi-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:93a7350f6706b31f457c1457d3a3259ff9071a66f312ae64dc024f049055f72c"}, - {file = "cffi-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a2ddbac59dc3716bc79f27906c010406155031a1c801410f1bafff17ea304d2"}, - {file = "cffi-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6327b572f5770293fc062a7ec04160e89741e8552bf1c358d1a23eba68166759"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbc183e7bef690c9abe5ea67b7b60fdbca81aa8da43468287dae7b5c046107d4"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bdc0f1f610d067c70aa3737ed06e2726fd9d6f7bfee4a351f4c40b6831f4e82"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d872186c1617d143969defeadac5a904e6e374183e07977eedef9c07c8953bf"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d46ee4764b88b91f16661a8befc6bfb24806d885e27436fdc292ed7e6f6d058"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f76a90c345796c01d85e6332e81cab6d70de83b829cf1d9762d0a3da59c7932"}, - {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e60821d312f99d3e1569202518dddf10ae547e799d75aef3bca3a2d9e8ee693"}, - {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:eb09b82377233b902d4c3fbeeb7ad731cdab579c6c6fda1f763cd779139e47c3"}, - {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24658baf6224d8f280e827f0a50c46ad819ec8ba380a42448e24459daf809cf4"}, - {file = "cffi-1.17.0-cp39-cp39-win32.whl", hash = "sha256:0fdacad9e0d9fc23e519efd5ea24a70348305e8d7d85ecbb1a5fa66dc834e7fb"}, - {file = "cffi-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:7cbc78dc018596315d4e7841c8c3a7ae31cc4d638c9b627f87d52e8abaaf2d29"}, - {file = "cffi-1.17.0.tar.gz", hash = "sha256:f3157624b7558b914cb039fd1af735e5e8049a87c817cc215109ad1c8779df76"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, + {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, + {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, + {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, + {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, + {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, + {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, + {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, + {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, + {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, + {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, + {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, + {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, + {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, + {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] [package.dependencies] @@ -1737,38 +1737,38 @@ pytz = ">2021.1" [[package]] name = "cryptography" -version = "43.0.0" +version = "43.0.1" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-43.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:64c3f16e2a4fc51c0d06af28441881f98c5d91009b8caaff40cf3548089e9c74"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3dcdedae5c7710b9f97ac6bba7e1052b95c7083c9d0e9df96e02a1932e777895"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d9a1eca329405219b605fac09ecfc09ac09e595d6def650a437523fcd08dd22"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ea9e57f8ea880eeea38ab5abf9fbe39f923544d7884228ec67d666abd60f5a47"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9a8d6802e0825767476f62aafed40532bd435e8a5f7d23bd8b4f5fd04cc80ecf"}, - {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cc70b4b581f28d0a254d006f26949245e3657d40d8857066c2ae22a61222ef55"}, - {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a997df8c1c2aae1e1e5ac49c2e4f610ad037fc5a3aadc7b64e39dea42249431"}, - {file = "cryptography-43.0.0-cp37-abi3-win32.whl", hash = "sha256:6e2b11c55d260d03a8cf29ac9b5e0608d35f08077d8c087be96287f43af3ccdc"}, - {file = "cryptography-43.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:31e44a986ceccec3d0498e16f3d27b2ee5fdf69ce2ab89b52eaad1d2f33d8778"}, - {file = "cryptography-43.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:7b3f5fe74a5ca32d4d0f302ffe6680fcc5c28f8ef0dc0ae8f40c0f3a1b4fca66"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac1955ce000cb29ab40def14fd1bbfa7af2017cca696ee696925615cafd0dce5"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:299d3da8e00b7e2b54bb02ef58d73cd5f55fb31f33ebbf33bd00d9aa6807df7e"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ee0c405832ade84d4de74b9029bedb7b31200600fa524d218fc29bfa371e97f5"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb013933d4c127349b3948aa8aaf2f12c0353ad0eccd715ca789c8a0f671646f"}, - {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fdcb265de28585de5b859ae13e3846a8e805268a823a12a4da2597f1f5afc9f0"}, - {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2905ccf93a8a2a416f3ec01b1a7911c3fe4073ef35640e7ee5296754e30b762b"}, - {file = "cryptography-43.0.0-cp39-abi3-win32.whl", hash = "sha256:47ca71115e545954e6c1d207dd13461ab81f4eccfcb1345eac874828b5e3eaaf"}, - {file = "cryptography-43.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:0663585d02f76929792470451a5ba64424acc3cd5227b03921dab0e2f27b1709"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c6d112bf61c5ef44042c253e4859b3cbbb50df2f78fa8fae6747a7814484a70"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:844b6d608374e7d08f4f6e6f9f7b951f9256db41421917dfb2d003dde4cd6b66"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51956cf8730665e2bdf8ddb8da0056f699c1a5715648c1b0144670c1ba00b48f"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:aae4d918f6b180a8ab8bf6511a419473d107df4dbb4225c7b48c5c9602c38c7f"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:232ce02943a579095a339ac4b390fbbe97f5b5d5d107f8a08260ea2768be8cc2"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5bcb8a5620008a8034d39bce21dc3e23735dfdb6a33a06974739bfa04f853947"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:08a24a7070b2b6804c1940ff0f910ff728932a9d0e80e7814234269f9d46d069"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e9c5266c432a1e23738d178e51c2c7a5e2ddf790f248be939448c0ba2021f9d1"}, - {file = "cryptography-43.0.0.tar.gz", hash = "sha256:b88075ada2d51aa9f18283532c9f60e72170041bba88d7f37e49cbb10275299e"}, + {file = "cryptography-43.0.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d"}, + {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062"}, + {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962"}, + {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277"}, + {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a"}, + {file = "cryptography-43.0.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042"}, + {file = "cryptography-43.0.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494"}, + {file = "cryptography-43.0.1-cp37-abi3-win32.whl", hash = "sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2"}, + {file = "cryptography-43.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d"}, + {file = "cryptography-43.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d"}, + {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806"}, + {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85"}, + {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c"}, + {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1"}, + {file = "cryptography-43.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa"}, + {file = "cryptography-43.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4"}, + {file = "cryptography-43.0.1-cp39-abi3-win32.whl", hash = "sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47"}, + {file = "cryptography-43.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb"}, + {file = "cryptography-43.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034"}, + {file = "cryptography-43.0.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d"}, + {file = "cryptography-43.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289"}, + {file = "cryptography-43.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84"}, + {file = "cryptography-43.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365"}, + {file = "cryptography-43.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96"}, + {file = "cryptography-43.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172"}, + {file = "cryptography-43.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2"}, + {file = "cryptography-43.0.1.tar.gz", hash = "sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d"}, ] [package.dependencies] @@ -1781,7 +1781,7 @@ nox = ["nox"] pep8test = ["check-sdist", "click", "mypy", "ruff"] sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "cryptography-vectors (==43.0.0)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi", "cryptography-vectors (==43.0.1)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] [[package]] @@ -1947,13 +1947,13 @@ idna = ">=2.0.0" [[package]] name = "eventlet" -version = "0.36.1" +version = "0.37.0" description = "Highly concurrent networking library" optional = false python-versions = ">=3.7" files = [ - {file = "eventlet-0.36.1-py3-none-any.whl", hash = "sha256:e42d0f73b718e654c223a033b8692d1a94d778a6c1deb6c3d21442746f3f727f"}, - {file = "eventlet-0.36.1.tar.gz", hash = "sha256:d227fe76a63d9e6a6cef53beb8ad0b2dc40a5e7737c801f4b474cfae1db07bc5"}, + {file = "eventlet-0.37.0-py3-none-any.whl", hash = "sha256:801ac231401e41f33a799457c78fdbfabc1c2f28bf9346d4ec4188e9aebc2067"}, + {file = "eventlet-0.37.0.tar.gz", hash = "sha256:fa49bf5a549cdbaa06919679979ea022ac8f8f3cf0499f26849a1cd8e64c30b1"}, ] [package.dependencies] @@ -1993,42 +1993,42 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] [[package]] name = "fastavro" -version = "1.9.5" +version = "1.9.7" description = "Fast read/write of AVRO files" optional = false python-versions = ">=3.8" files = [ - {file = "fastavro-1.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:61253148e95dd2b6457247b441b7555074a55de17aef85f5165bfd5facf600fc"}, - {file = "fastavro-1.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b604935d671ad47d888efc92a106f98e9440874108b444ac10e28d643109c937"}, - {file = "fastavro-1.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0adbf4956fd53bd74c41e7855bb45ccce953e0eb0e44f5836d8d54ad843f9944"}, - {file = "fastavro-1.9.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:53d838e31457db8bf44460c244543f75ed307935d5fc1d93bc631cc7caef2082"}, - {file = "fastavro-1.9.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:07b6288e8681eede16ff077632c47395d4925c2f51545cd7a60f194454db2211"}, - {file = "fastavro-1.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:ef08cf247fdfd61286ac0c41854f7194f2ad05088066a756423d7299b688d975"}, - {file = "fastavro-1.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c52d7bb69f617c90935a3e56feb2c34d4276819a5c477c466c6c08c224a10409"}, - {file = "fastavro-1.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85e05969956003df8fa4491614bc62fe40cec59e94d06e8aaa8d8256ee3aab82"}, - {file = "fastavro-1.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06e6df8527493a9f0d9a8778df82bab8b1aa6d80d1b004e5aec0a31dc4dc501c"}, - {file = "fastavro-1.9.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:27820da3b17bc01cebb6d1687c9d7254b16d149ef458871aaa207ed8950f3ae6"}, - {file = "fastavro-1.9.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:195a5b8e33eb89a1a9b63fa9dce7a77d41b3b0cd785bac6044df619f120361a2"}, - {file = "fastavro-1.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:be612c109efb727bfd36d4d7ed28eb8e0506617b7dbe746463ebbf81e85eaa6b"}, - {file = "fastavro-1.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b133456c8975ec7d2a99e16a7e68e896e45c821b852675eac4ee25364b999c14"}, - {file = "fastavro-1.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf586373c3d1748cac849395aad70c198ee39295f92e7c22c75757b5c0300fbe"}, - {file = "fastavro-1.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:724ef192bc9c55d5b4c7df007f56a46a21809463499856349d4580a55e2b914c"}, - {file = "fastavro-1.9.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bfd11fe355a8f9c0416803afac298960eb4c603a23b1c74ff9c1d3e673ea7185"}, - {file = "fastavro-1.9.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9827d1654d7bcb118ef5efd3e5b2c9ab2a48d44dac5e8c6a2327bc3ac3caa828"}, - {file = "fastavro-1.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:d84b69dca296667e6137ae7c9a96d060123adbc0c00532cc47012b64d38b47e9"}, - {file = "fastavro-1.9.5-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:fb744e9de40fb1dc75354098c8db7da7636cba50a40f7bef3b3fb20f8d189d88"}, - {file = "fastavro-1.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:240df8bacd13ff5487f2465604c007d686a566df5cbc01d0550684eaf8ff014a"}, - {file = "fastavro-1.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3bb35c25bbc3904e1c02333bc1ae0173e0a44aa37a8e95d07e681601246e1f1"}, - {file = "fastavro-1.9.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b47a54a9700de3eabefd36dabfb237808acae47bc873cada6be6990ef6b165aa"}, - {file = "fastavro-1.9.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:48c7b5e6d2f3bf7917af301c275b05c5be3dd40bb04e80979c9e7a2ab31a00d1"}, - {file = "fastavro-1.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:05d13f98d4e325be40387e27da9bd60239968862fe12769258225c62ec906f04"}, - {file = "fastavro-1.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5b47948eb196263f6111bf34e1cd08d55529d4ed46eb50c1bc8c7c30a8d18868"}, - {file = "fastavro-1.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85b7a66ad521298ad9373dfe1897a6ccfc38feab54a47b97922e213ae5ad8870"}, - {file = "fastavro-1.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44cb154f863ad80e41aea72a709b12e1533b8728c89b9b1348af91a6154ab2f5"}, - {file = "fastavro-1.9.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b5f7f2b1fe21231fd01f1a2a90e714ae267fe633cd7ce930c0aea33d1c9f4901"}, - {file = "fastavro-1.9.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:88fbbe16c61d90a89d78baeb5a34dc1c63a27b115adccdbd6b1fb6f787deacf2"}, - {file = "fastavro-1.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:753f5eedeb5ca86004e23a9ce9b41c5f25eb64a876f95edcc33558090a7f3e4b"}, - {file = "fastavro-1.9.5.tar.gz", hash = "sha256:6419ebf45f88132a9945c51fe555d4f10bb97c236288ed01894f957c6f914553"}, + {file = "fastavro-1.9.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cc811fb4f7b5ae95f969cda910241ceacf82e53014c7c7224df6f6e0ca97f52f"}, + {file = "fastavro-1.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb8749e419a85f251bf1ac87d463311874972554d25d4a0b19f6bdc56036d7cf"}, + {file = "fastavro-1.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b2f9bafa167cb4d1c3dd17565cb5bf3d8c0759e42620280d1760f1e778e07fc"}, + {file = "fastavro-1.9.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e87d04b235b29f7774d226b120da2ca4e60b9e6fdf6747daef7f13f218b3517a"}, + {file = "fastavro-1.9.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b525c363e267ed11810aaad8fbdbd1c3bd8837d05f7360977d72a65ab8c6e1fa"}, + {file = "fastavro-1.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:6312fa99deecc319820216b5e1b1bd2d7ebb7d6f221373c74acfddaee64e8e60"}, + {file = "fastavro-1.9.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ec8499dc276c2d2ef0a68c0f1ad11782b2b956a921790a36bf4c18df2b8d4020"}, + {file = "fastavro-1.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d9d96f98052615ab465c63ba8b76ed59baf2e3341b7b169058db104cbe2aa0"}, + {file = "fastavro-1.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:919f3549e07a8a8645a2146f23905955c35264ac809f6c2ac18142bc5b9b6022"}, + {file = "fastavro-1.9.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9de1fa832a4d9016724cd6facab8034dc90d820b71a5d57c7e9830ffe90f31e4"}, + {file = "fastavro-1.9.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1d09227d1f48f13281bd5ceac958650805aef9a4ef4f95810128c1f9be1df736"}, + {file = "fastavro-1.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:2db993ae6cdc63e25eadf9f93c9e8036f9b097a3e61d19dca42536dcc5c4d8b3"}, + {file = "fastavro-1.9.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4e1289b731214a7315884c74b2ec058b6e84380ce9b18b8af5d387e64b18fc44"}, + {file = "fastavro-1.9.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eac69666270a76a3a1d0444f39752061195e79e146271a568777048ffbd91a27"}, + {file = "fastavro-1.9.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9be089be8c00f68e343bbc64ca6d9a13e5e5b0ba8aa52bcb231a762484fb270e"}, + {file = "fastavro-1.9.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d576eccfd60a18ffa028259500df67d338b93562c6700e10ef68bbd88e499731"}, + {file = "fastavro-1.9.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ee9bf23c157bd7dcc91ea2c700fa3bd924d9ec198bb428ff0b47fa37fe160659"}, + {file = "fastavro-1.9.7-cp312-cp312-win_amd64.whl", hash = "sha256:b6b2ccdc78f6afc18c52e403ee68c00478da12142815c1bd8a00973138a166d0"}, + {file = "fastavro-1.9.7-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:7313def3aea3dacface0a8b83f6d66e49a311149aa925c89184a06c1ef99785d"}, + {file = "fastavro-1.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:536f5644737ad21d18af97d909dba099b9e7118c237be7e4bd087c7abde7e4f0"}, + {file = "fastavro-1.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2af559f30383b79cf7d020a6b644c42ffaed3595f775fe8f3d7f80b1c43dfdc5"}, + {file = "fastavro-1.9.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:edc28ab305e3c424de5ac5eb87b48d1e07eddb6aa08ef5948fcda33cc4d995ce"}, + {file = "fastavro-1.9.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ec2e96bdabd58427fe683329b3d79f42c7b4f4ff6b3644664a345a655ac2c0a1"}, + {file = "fastavro-1.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:3b683693c8a85ede496ebebe115be5d7870c150986e34a0442a20d88d7771224"}, + {file = "fastavro-1.9.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:58f76a5c9a312fbd37b84e49d08eb23094d36e10d43bc5df5187bc04af463feb"}, + {file = "fastavro-1.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56304401d2f4f69f5b498bdd1552c13ef9a644d522d5de0dc1d789cf82f47f73"}, + {file = "fastavro-1.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fcce036c6aa06269fc6a0428050fcb6255189997f5e1a728fc461e8b9d3e26b"}, + {file = "fastavro-1.9.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:17de68aae8c2525f5631d80f2b447a53395cdc49134f51b0329a5497277fc2d2"}, + {file = "fastavro-1.9.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7c911366c625d0a997eafe0aa83ffbc6fd00d8fd4543cb39a97c6f3b8120ea87"}, + {file = "fastavro-1.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:912283ed48578a103f523817fdf0c19b1755cea9b4a6387b73c79ecb8f8f84fc"}, + {file = "fastavro-1.9.7.tar.gz", hash = "sha256:13e11c6cb28626da85290933027cd419ce3f9ab8e45410ef24ce6b89d20a1f6c"}, ] [package.extras] @@ -2050,19 +2050,19 @@ files = [ [[package]] name = "filelock" -version = "3.15.4" +version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"}, - {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"}, + {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, + {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] -typing = ["typing-extensions (>=4.8)"] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +typing = ["typing-extensions (>=4.12.2)"] [[package]] name = "flask" @@ -2372,13 +2372,13 @@ files = [ [[package]] name = "fsspec" -version = "2024.6.1" +version = "2024.9.0" description = "File-system specification" optional = false python-versions = ">=3.8" files = [ - {file = "fsspec-2024.6.1-py3-none-any.whl", hash = "sha256:3cb443f8bcd2efb31295a5b9fdb02aee81d8452c80d28f97a6d0959e6cee101e"}, - {file = "fsspec-2024.6.1.tar.gz", hash = "sha256:fad7d7e209dd4c1208e3bbfda706620e0da5142bebbd9c384afb95b07e798e49"}, + {file = "fsspec-2024.9.0-py3-none-any.whl", hash = "sha256:a0947d552d8a6efa72cc2c730b12c41d043509156966cca4fb157b0f2a0c574b"}, + {file = "fsspec-2024.9.0.tar.gz", hash = "sha256:4b0afb90c2f21832df142f292649035d80b421f60a9e1c027802e5a0da2b04e8"}, ] [package.extras] @@ -2460,19 +2460,19 @@ rsa = ">=3.1.4,<5.0.0" [[package]] name = "gcsfs" -version = "2024.6.1" +version = "2024.9.0.post1" description = "Convenient Filesystem interface over GCS" optional = false python-versions = ">=3.8" files = [ - {file = "gcsfs-2024.6.1-py2.py3-none-any.whl", hash = "sha256:13fd18095425e54e248870594fd155812723966b1bda3b102b3a5c44ec436a03"}, - {file = "gcsfs-2024.6.1.tar.gz", hash = "sha256:e8858c7a893b2265e9bfce2fe270a024a2e348c74c23528801db388fc0224ed7"}, + {file = "gcsfs-2024.9.0.post1-py2.py3-none-any.whl", hash = "sha256:f3ab9d3bedc45da8cf40baed7c3a1e1694e8f599160d9138d78f0ef25e4a3ca1"}, + {file = "gcsfs-2024.9.0.post1.tar.gz", hash = "sha256:7ca70ee9d7c7dbce1a3e36b4883e14102c2d7b4284f49e242843a437bc684684"}, ] [package.dependencies] aiohttp = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1" decorator = ">4.1.2" -fsspec = "2024.6.1" +fsspec = "2024.9.0" google-auth = ">=1.2" google-auth-oauthlib = "*" google-cloud-storage = "*" @@ -2602,13 +2602,13 @@ protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4 [[package]] name = "google-api-core" -version = "2.19.2" +version = "2.20.0" description = "Google API client core library" optional = false python-versions = ">=3.7" files = [ - {file = "google_api_core-2.19.2-py3-none-any.whl", hash = "sha256:53ec0258f2837dd53bbd3d3df50f5359281b3cc13f800c941dd15a9b5a415af4"}, - {file = "google_api_core-2.19.2.tar.gz", hash = "sha256:ca07de7e8aa1c98a8bfca9321890ad2340ef7f2eb136e558cee68f24b94b0a8f"}, + {file = "google_api_core-2.20.0-py3-none-any.whl", hash = "sha256:ef0591ef03c30bb83f79b3d0575c3f31219001fc9c5cf37024d08310aeffed8a"}, + {file = "google_api_core-2.20.0.tar.gz", hash = "sha256:f74dff1889ba291a4b76c5079df0711810e2d9da81abfdc99957bc961c1eb28f"}, ] [package.dependencies] @@ -2627,13 +2627,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.143.0" +version = "2.146.0" description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" files = [ - {file = "google_api_python_client-2.143.0-py2.py3-none-any.whl", hash = "sha256:d5654134522b9b574b82234e96f7e0aeeabcbf33643fbabcd449ef0068e3a476"}, - {file = "google_api_python_client-2.143.0.tar.gz", hash = "sha256:6a75441f9078e6e2fcdf4946a153fda1e2cc81b5e9c8d6e8c0750c85c7f8a566"}, + {file = "google_api_python_client-2.146.0-py2.py3-none-any.whl", hash = "sha256:b1e62c9889c5ef6022f11d30d7ef23dc55100300f0e8aaf8aa09e8e92540acad"}, + {file = "google_api_python_client-2.146.0.tar.gz", hash = "sha256:41f671be10fa077ee5143ee9f0903c14006d39dc644564f4e044ae96b380bf68"}, ] [package.dependencies] @@ -2645,13 +2645,13 @@ uritemplate = ">=3.0.1,<5" [[package]] name = "google-auth" -version = "2.34.0" +version = "2.35.0" description = "Google Authentication Library" optional = false python-versions = ">=3.7" files = [ - {file = "google_auth-2.34.0-py2.py3-none-any.whl", hash = "sha256:72fd4733b80b6d777dcde515628a9eb4a577339437012874ea286bca7261ee65"}, - {file = "google_auth-2.34.0.tar.gz", hash = "sha256:8eb87396435c19b20d32abd2f984e31c191a15284af72eb922f10e5bde9c04cc"}, + {file = "google_auth-2.35.0-py2.py3-none-any.whl", hash = "sha256:25df55f327ef021de8be50bad0dfd4a916ad0de96da86cd05661c9297723ad3f"}, + {file = "google_auth-2.35.0.tar.gz", hash = "sha256:f4c64ed4e01e8e8b646ef34c018f8bf3338df0c8e37d8b3bba40e7f574a3278a"}, ] [package.dependencies] @@ -2701,13 +2701,13 @@ tool = ["click (>=6.0.0)"] [[package]] name = "google-cloud-aiplatform" -version = "1.64.0" +version = "1.67.1" description = "Vertex AI API client library" optional = false python-versions = ">=3.8" files = [ - {file = "google-cloud-aiplatform-1.64.0.tar.gz", hash = "sha256:475a612829b283eb8f783e773d37115c30db42e2e50065c8653db0c9bd18b0da"}, - {file = "google_cloud_aiplatform-1.64.0-py2.py3-none-any.whl", hash = "sha256:3a79ce2ec047868c348336624a60993464ca977fd258bcf609cc79309a8101c4"}, + {file = "google-cloud-aiplatform-1.67.1.tar.gz", hash = "sha256:701a19061c8c670baa93464ca0b8a1a8720494f802187cef06bc9fcf952db315"}, + {file = "google_cloud_aiplatform-1.67.1-py2.py3-none-any.whl", hash = "sha256:2ff0e1794839fcf74d644f3f54ff2de5d8099b3e388edecc48f6d620c1f3582c"}, ] [package.dependencies] @@ -2724,25 +2724,24 @@ pydantic = "<3" shapely = "<3.0.0dev" [package.extras] -autologging = ["mlflow (>=1.27.0,<=2.1.1)"] +autologging = ["mlflow (>=1.27.0,<=2.16.0)"] cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] datasets = ["pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)"] endpoint = ["requests (>=2.28.1)"] -evaluation = ["immutabledict", "pandas (>=1.0.0,<2.2.0)", "tqdm (>=4.23.0)"] -full = ["cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.109.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "setuptools (<70.0.0)", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)"] +evaluation = ["pandas (>=1.0.0,<2.2.0)", "tqdm (>=4.23.0)"] +full = ["docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.114.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.16.0)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "requests (>=2.28.1)", "setuptools (<70.0.0)", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)"] langchain = ["langchain (>=0.1.16,<0.3)", "langchain-core (<0.3)", "langchain-google-vertexai (<2)", "openinference-instrumentation-langchain (>=0.1.19,<0.2)", "orjson (<=3.10.6)", "tenacity (<=8.3)"] langchain-testing = ["absl-py", "cloudpickle (>=3.0,<4.0)", "google-cloud-trace (<2)", "langchain (>=0.1.16,<0.3)", "langchain-core (<0.3)", "langchain-google-vertexai (<2)", "openinference-instrumentation-langchain (>=0.1.19,<0.2)", "opentelemetry-exporter-gcp-trace (<2)", "opentelemetry-sdk (<2)", "orjson (<=3.10.6)", "pydantic (>=2.6.3,<3)", "pytest-xdist", "tenacity (<=8.3)"] lit = ["explainable-ai-sdk (>=1.0.0)", "lit-nlp (==0.4.0)", "pandas (>=1.0.0)", "tensorflow (>=2.3.0,<3.0.0dev)"] metadata = ["numpy (>=1.15.0)", "pandas (>=1.0.0)"] pipelines = ["pyyaml (>=5.3.1,<7)"] -prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<=0.109.1)", "httpx (>=0.23.0,<0.25.0)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"] -preview = ["cloudpickle (<3.0)", "google-cloud-logging (<4.0)"] +prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<=0.114.0)", "httpx (>=0.23.0,<0.25.0)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"] private-endpoints = ["requests (>=2.28.1)", "urllib3 (>=1.21.1,<1.27)"] -ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "setuptools (<70.0.0)"] -ray-testing = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pytest-xdist", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "ray[train] (==2.9.3)", "scikit-learn", "setuptools (<70.0.0)", "tensorflow", "torch (>=2.0.0,<2.1.0)", "xgboost", "xgboost-ray"] +ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "setuptools (<70.0.0)"] +ray-testing = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pytest-xdist", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "ray[train] (==2.9.3)", "scikit-learn", "setuptools (<70.0.0)", "tensorflow", "torch (>=2.0.0,<2.1.0)", "xgboost", "xgboost-ray"] reasoningengine = ["cloudpickle (>=3.0,<4.0)", "google-cloud-trace (<2)", "opentelemetry-exporter-gcp-trace (<2)", "opentelemetry-sdk (<2)", "pydantic (>=2.6.3,<3)"] tensorboard = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] -testing = ["bigframes", "cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.109.1)", "google-api-core (>=2.11,<3.0.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "ipython", "kfp (>=2.6.0,<3.0.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "nltk", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyfakefs", "pytest-asyncio", "pytest-xdist", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn", "sentencepiece (>=0.2.0)", "setuptools (<70.0.0)", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (==2.13.0)", "tensorflow (==2.16.1)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0)", "torch (>=2.2.0)", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost"] +testing = ["bigframes", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.114.0)", "google-api-core (>=2.11,<3.0.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "ipython", "kfp (>=2.6.0,<3.0.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.16.0)", "nltk", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pytest-asyncio", "pytest-xdist", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn", "sentencepiece (>=0.2.0)", "setuptools (<70.0.0)", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (==2.13.0)", "tensorflow (==2.16.1)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0)", "torch (>=2.2.0)", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost"] tokenization = ["sentencepiece (>=0.2.0)"] vizier = ["google-vizier (>=0.1.6)"] xai = ["tensorflow (>=2.3.0,<3.0.0dev)"] @@ -2803,13 +2802,13 @@ storage = ["google-cloud-storage (>=1.18.0,<3.0.0dev)"] [[package]] name = "google-cloud-batch" -version = "0.17.26" +version = "0.17.28" description = "Google Cloud Batch API client library" optional = false python-versions = ">=3.7" files = [ - {file = "google_cloud_batch-0.17.26-py2.py3-none-any.whl", hash = "sha256:2cbed78f6fe612b540c08f92e01cca22fa66c38505b4a084d0c6e4da88dea335"}, - {file = "google_cloud_batch-0.17.26.tar.gz", hash = "sha256:9d86f703ed990d223c386883047c83a70ecab2378e1a686c8f67b113b00644cf"}, + {file = "google_cloud_batch-0.17.28-py2.py3-none-any.whl", hash = "sha256:4a4eeb280ac9124a31fcff67f9f9fefce1dcf635172a9c768ef61059308c9a42"}, + {file = "google_cloud_batch-0.17.28.tar.gz", hash = "sha256:333fd08b448239983a26384681fb9ff8fd714a4fdde11d22410056f4d807acd0"}, ] [package.dependencies] @@ -2851,13 +2850,13 @@ tqdm = ["tqdm (>=4.7.4,<5.0.0dev)"] [[package]] name = "google-cloud-bigquery-datatransfer" -version = "3.15.6" +version = "3.15.7" description = "Google Cloud Bigquery Datatransfer API client library" optional = false python-versions = ">=3.7" files = [ - {file = "google_cloud_bigquery_datatransfer-3.15.6-py2.py3-none-any.whl", hash = "sha256:5b54257fd79ece8fde8ec5a15752d729f25de9fed0e2e60c2106bba361bf9ee4"}, - {file = "google_cloud_bigquery_datatransfer-3.15.6.tar.gz", hash = "sha256:a0edfbd33d624bad6f595c478be5d834d463c22d37df3206e9884b8bb0676178"}, + {file = "google_cloud_bigquery_datatransfer-3.15.7-py2.py3-none-any.whl", hash = "sha256:c8d2d3c25f346cdb18b86498bc60fbd1d41b88701736477dd812d845aafc84cb"}, + {file = "google_cloud_bigquery_datatransfer-3.15.7.tar.gz", hash = "sha256:18b6ab46f2367ae77f88dc23eee8d9c08a4afdbd029613b45d47418b827d2e9d"}, ] [package.dependencies] @@ -2925,13 +2924,13 @@ protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4 [[package]] name = "google-cloud-container" -version = "2.50.0" +version = "2.51.0" description = "Google Cloud Container API client library" optional = false python-versions = ">=3.7" files = [ - {file = "google_cloud_container-2.50.0-py2.py3-none-any.whl", hash = "sha256:de44c14c3cb818f586e01f1566db4a75f8c9fda9a579d5bb3b7f9798e9aa79bd"}, - {file = "google_cloud_container-2.50.0.tar.gz", hash = "sha256:c6af26e2333a45c54025519d3f471986b8994264fbdc01090cb957a3dae36908"}, + {file = "google_cloud_container-2.51.0-py2.py3-none-any.whl", hash = "sha256:2e65fd37c913b5b6875ef958ac49f5f68779241a75758f0d2c4dee4cf3532092"}, + {file = "google_cloud_container-2.51.0.tar.gz", hash = "sha256:ab517efeecf2558d74a4ffd7ac5d6c2f4fbaa3bb8a7c84d2b994dcf8da80fd9c"}, ] [package.dependencies] @@ -3031,13 +3030,13 @@ protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4 [[package]] name = "google-cloud-dataproc" -version = "5.10.2" +version = "5.12.0" description = "Google Cloud Dataproc API client library" optional = false python-versions = ">=3.7" files = [ - {file = "google_cloud_dataproc-5.10.2-py2.py3-none-any.whl", hash = "sha256:776c556450fdf5593ff34a8020b587683a45840c49eeee07bd313b4beb1a466c"}, - {file = "google_cloud_dataproc-5.10.2.tar.gz", hash = "sha256:6a3732edd1a5b4df58a7c5cf198a660c11cf9d89ae10bd7f9ee1244e1f621771"}, + {file = "google_cloud_dataproc-5.12.0-py2.py3-none-any.whl", hash = "sha256:0a64a9202e2f3781e90e0e281b148df55da6039ffee540581acd06542d7b1a19"}, + {file = "google_cloud_dataproc-5.12.0.tar.gz", hash = "sha256:4b58d720f020c4e35378a29ea87ce8286af631eb3bc382ccbcbff39dc0199e29"}, ] [package.dependencies] @@ -3178,13 +3177,13 @@ pandas = ["pandas (>=0.23.2)"] [[package]] name = "google-cloud-orchestration-airflow" -version = "1.13.1" +version = "1.14.0" description = "Google Cloud Orchestration Airflow API client library" optional = false python-versions = ">=3.7" files = [ - {file = "google_cloud_orchestration_airflow-1.13.1-py2.py3-none-any.whl", hash = "sha256:f8dd83663002d8260bb52d35c1a09e54e1026e6db08f2cfcf7ace2968cd15143"}, - {file = "google_cloud_orchestration_airflow-1.13.1.tar.gz", hash = "sha256:cb259f6bafeb1a9b5c25f839096c249be36d678873d25e9e0e3d2f3f82b06587"}, + {file = "google_cloud_orchestration_airflow-1.14.0-py2.py3-none-any.whl", hash = "sha256:5365d589413741f73ea7082911d8d10883ea0f956c70bc189a29052558b7c7d7"}, + {file = "google_cloud_orchestration_airflow-1.14.0.tar.gz", hash = "sha256:9fb8aeec3699da859d70f08815df900af381b8c76248b9349c849ab8e86b75e4"}, ] [package.dependencies] @@ -3212,13 +3211,13 @@ protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4 [[package]] name = "google-cloud-pubsub" -version = "2.23.0" +version = "2.23.1" description = "Google Cloud Pub/Sub API client library" optional = false python-versions = ">=3.7" files = [ - {file = "google_cloud_pubsub-2.23.0-py2.py3-none-any.whl", hash = "sha256:d341b2df8b105d0e3774b4bc9173bc0cf26bced31a4736cd9eefa33453b75dff"}, - {file = "google_cloud_pubsub-2.23.0.tar.gz", hash = "sha256:cf3d6f2ab11b5c8dfc0aa7d4cae5ee1d66b408d9666f1762c9c17e269cd8b658"}, + {file = "google_cloud_pubsub-2.23.1-py2.py3-none-any.whl", hash = "sha256:a173292a699851eb622016d3f2796ecf2d69692e708ea0e7382f338fc1679f8a"}, + {file = "google_cloud_pubsub-2.23.1.tar.gz", hash = "sha256:e1fde79b5b64b721290af4c022907afcbb83512d92f4e5c334c391cfbb022acb"}, ] [package.dependencies] @@ -3306,13 +3305,13 @@ protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4 [[package]] name = "google-cloud-spanner" -version = "3.48.0" +version = "3.49.1" description = "Google Cloud Spanner API client library" optional = false python-versions = ">=3.7" files = [ - {file = "google_cloud_spanner-3.48.0-py2.py3-none-any.whl", hash = "sha256:7dde8e890b8aab09fdf36d4ffa617ce16b9983d062ec759509601068d8e60952"}, - {file = "google_cloud_spanner-3.48.0.tar.gz", hash = "sha256:8d0b224ba3a29ad3c19b075da8577106e3f298753198b71e0a0e00b0e5f86359"}, + {file = "google_cloud_spanner-3.49.1-py2.py3-none-any.whl", hash = "sha256:261eafb63b0dd55256afcb5f7149b7527e55b5c8aca8059f77771dfe935ab03b"}, + {file = "google_cloud_spanner-3.49.1.tar.gz", hash = "sha256:c064d1175319f8c9b634a3888de226f4ec70493f7ec08a45321a4b17a47fc3ca"}, ] [package.dependencies] @@ -3627,69 +3626,84 @@ grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] [[package]] name = "greenlet" -version = "3.0.3" +version = "3.1.1" description = "Lightweight in-process concurrent programming" optional = false python-versions = ">=3.7" files = [ - {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405"}, - {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f"}, - {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb"}, - {file = "greenlet-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9"}, - {file = "greenlet-3.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22"}, - {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3"}, - {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d"}, - {file = "greenlet-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728"}, - {file = "greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf"}, - {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305"}, - {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6"}, - {file = "greenlet-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2"}, - {file = "greenlet-3.0.3-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41"}, - {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7"}, - {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6"}, - {file = "greenlet-3.0.3-cp37-cp37m-win32.whl", hash = "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d"}, - {file = "greenlet-3.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67"}, - {file = "greenlet-3.0.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4"}, - {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5"}, - {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da"}, - {file = "greenlet-3.0.3-cp38-cp38-win32.whl", hash = "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3"}, - {file = "greenlet-3.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf"}, - {file = "greenlet-3.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b"}, - {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6"}, - {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113"}, - {file = "greenlet-3.0.3-cp39-cp39-win32.whl", hash = "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e"}, - {file = "greenlet-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067"}, - {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"}, + {file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36b89d13c49216cadb828db8dfa6ce86bbbc476a82d3a6c397f0efae0525bdd0"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94b6150a85e1b33b40b1464a3f9988dcc5251d6ed06842abff82e42632fac120"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93147c513fac16385d1036b7e5b102c7fbbdb163d556b791f0f11eada7ba65dc"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da7a9bff22ce038e19bf62c4dd1ec8391062878710ded0a845bcf47cc0200617"}, + {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b2795058c23988728eec1f36a4e5e4ebad22f8320c85f3587b539b9ac84128d7"}, + {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ed10eac5830befbdd0c32f83e8aa6288361597550ba669b04c48f0f9a2c843c6"}, + {file = "greenlet-3.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:77c386de38a60d1dfb8e55b8c1101d68c79dfdd25c7095d51fec2dd800892b80"}, + {file = "greenlet-3.1.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e4d333e558953648ca09d64f13e6d8f0523fa705f51cae3f03b5983489958c70"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fc016b73c94e98e29af67ab7b9a879c307c6731a2c9da0db5a7d9b7edd1159"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5e975ca70269d66d17dd995dafc06f1b06e8cb1ec1e9ed54c1d1e4a7c4cf26e"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2813dc3de8c1ee3f924e4d4227999285fd335d1bcc0d2be6dc3f1f6a318ec1"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e347b3bfcf985a05e8c0b7d462ba6f15b1ee1c909e2dcad795e49e91b152c383"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e8f8c9cb53cdac7ba9793c276acd90168f416b9ce36799b9b885790f8ad6c0a"}, + {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62ee94988d6b4722ce0028644418d93a52429e977d742ca2ccbe1c4f4a792511"}, + {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1776fd7f989fc6b8d8c8cb8da1f6b82c5814957264d1f6cf818d475ec2bf6395"}, + {file = "greenlet-3.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:48ca08c771c268a768087b408658e216133aecd835c0ded47ce955381105ba39"}, + {file = "greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c3a701fe5a9695b238503ce5bbe8218e03c3bcccf7e204e455e7462d770268aa"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2846930c65b47d70b9d178e89c7e1a69c95c1f68ea5aa0a58646b7a96df12441"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99cfaa2110534e2cf3ba31a7abcac9d328d1d9f1b95beede58294a60348fba36"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9"}, + {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b7cede291382a78f7bb5f04a529cb18e068dd29e0fb27376074b6d0317bf4dd0"}, + {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:23f20bb60ae298d7d8656c6ec6db134bca379ecefadb0b19ce6f19d1f232a942"}, + {file = "greenlet-3.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01"}, + {file = "greenlet-3.1.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:05175c27cb459dcfc05d026c4232f9de8913ed006d42713cb8a5137bd49375f1"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935e943ec47c4afab8965954bf49bfa639c05d4ccf9ef6e924188f762145c0ff"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:667a9706c970cb552ede35aee17339a18e8f2a87a51fba2ed39ceeeb1004798a"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8a678974d1f3aa55f6cc34dc480169d58f2e6d8958895d68845fa4ab566509e"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efc0f674aa41b92da8c49e0346318c6075d734994c3c4e4430b1c3f853e498e4"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0153404a4bb921f0ff1abeb5ce8a5131da56b953eda6e14b88dc6bbc04d2049e"}, + {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:275f72decf9932639c1c6dd1013a1bc266438eb32710016a1c742df5da6e60a1"}, + {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c4aab7f6381f38a4b42f269057aee279ab0fc7bf2e929e3d4abfae97b682a12c"}, + {file = "greenlet-3.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1695e76146579f8c06c1509c7ce4dfe0706f49c6831a817ac04eebb2fd02011"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7876452af029456b3f3549b696bb36a06db7c90747740c5302f74a9e9fa14b13"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ead44c85f8ab905852d3de8d86f6f8baf77109f9da589cb4fa142bd3b57b475"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8320f64b777d00dd7ccdade271eaf0cad6636343293a25074cc5566160e4de7b"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6510bf84a6b643dabba74d3049ead221257603a253d0a9873f55f6a59a65f822"}, + {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:04b013dc07c96f83134b1e99888e7a79979f1a247e2a9f59697fa14b5862ed01"}, + {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:411f015496fec93c1c8cd4e5238da364e1da7a124bcb293f085bf2860c32c6f6"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47da355d8687fd65240c364c90a31569a133b7b60de111c255ef5b606f2ae291"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98884ecf2ffb7d7fe6bd517e8eb99d31ff7855a840fa6d0d63cd07c037f6a981"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1d4aeb8891338e60d1ab6127af1fe45def5259def8094b9c7e34690c8858803"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db32b5348615a04b82240cc67983cb315309e88d444a288934ee6ceaebcad6cc"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dcc62f31eae24de7f8dce72134c8651c58000d3b1868e01392baea7c32c247de"}, + {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1d3755bcb2e02de341c55b4fca7a745a24a9e7212ac953f6b3a48d117d7257aa"}, + {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b8da394b34370874b4572676f36acabac172602abf054cbc4ac910219f3340af"}, + {file = "greenlet-3.1.1-cp37-cp37m-win32.whl", hash = "sha256:a0dfc6c143b519113354e780a50381508139b07d2177cb6ad6a08278ec655798"}, + {file = "greenlet-3.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54558ea205654b50c438029505def3834e80f0869a70fb15b871c29b4575ddef"}, + {file = "greenlet-3.1.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:346bed03fe47414091be4ad44786d1bd8bef0c3fcad6ed3dee074a032ab408a9"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfc59d69fc48664bc693842bd57acfdd490acafda1ab52c7836e3fc75c90a111"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21e10da6ec19b457b82636209cbe2331ff4306b54d06fa04b7c138ba18c8a81"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37b9de5a96111fc15418819ab4c4432e4f3c2ede61e660b1e33971eba26ef9ba"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef9ea3f137e5711f0dbe5f9263e8c009b7069d8a1acea822bd5e9dae0ae49c8"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85f3ff71e2e60bd4b4932a043fbbe0f499e263c628390b285cb599154a3b03b1"}, + {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:95ffcf719966dd7c453f908e208e14cde192e09fde6c7186c8f1896ef778d8cd"}, + {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:03a088b9de532cbfe2ba2034b2b85e82df37874681e8c470d6fb2f8c04d7e4b7"}, + {file = "greenlet-3.1.1-cp38-cp38-win32.whl", hash = "sha256:8b8b36671f10ba80e159378df9c4f15c14098c4fd73a36b9ad715f057272fbef"}, + {file = "greenlet-3.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:7017b2be767b9d43cc31416aba48aab0d2309ee31b4dbf10a1d38fb7972bdf9d"}, + {file = "greenlet-3.1.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:396979749bd95f018296af156201d6211240e7a23090f50a8d5d18c370084dc3"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca9d0ff5ad43e785350894d97e13633a66e2b50000e8a183a50a88d834752d42"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94ebba31df2aa506d7b14866fed00ac141a867e63143fe5bca82a8e503b36437"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73aaad12ac0ff500f62cebed98d8789198ea0e6f233421059fa68a5aa7220145"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63e4844797b975b9af3a3fb8f7866ff08775f5426925e1e0bbcfe7932059a12c"}, + {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7939aa3ca7d2a1593596e7ac6d59391ff30281ef280d8632fa03d81f7c5f955e"}, + {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d0028e725ee18175c6e422797c407874da24381ce0690d6b9396c204c7f7276e"}, + {file = "greenlet-3.1.1-cp39-cp39-win32.whl", hash = "sha256:5e06afd14cbaf9e00899fae69b24a32f2196c19de08fcb9f4779dd4f004e5e7c"}, + {file = "greenlet-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:3319aa75e0e0639bc15ff54ca327e8dc7a6fe404003496e3c6925cd3142e0e22"}, + {file = "greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467"}, ] [package.extras] @@ -3945,13 +3959,13 @@ tests = ["freezegun", "pytest", "pytest-cov"] [[package]] name = "identify" -version = "2.6.0" +version = "2.6.1" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.6.0-py2.py3-none-any.whl", hash = "sha256:e79ae4406387a9d300332b5fd366d8994f1525e8414984e1a59e058b2eda2dd0"}, - {file = "identify-2.6.0.tar.gz", hash = "sha256:cb171c685bdc31bcc4c1734698736a7d5b6c8bf2e0c15117f4d469c8640ae5cf"}, + {file = "identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0"}, + {file = "identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98"}, ] [package.extras] @@ -3959,15 +3973,18 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.8" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" files = [ - {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"}, - {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + [[package]] name = "importlib-metadata" version = "8.4.0" @@ -3989,13 +4006,13 @@ test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "p [[package]] name = "importlib-resources" -version = "6.4.4" +version = "6.4.5" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.4.4-py3-none-any.whl", hash = "sha256:dda242603d1c9cd836c3368b1174ed74cb4049ecd209e7a1a0104620c18c5c11"}, - {file = "importlib_resources-6.4.4.tar.gz", hash = "sha256:20600c8b7361938dc0bb2d5ec0297802e575df486f5a544fa414da65e13721f7"}, + {file = "importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717"}, + {file = "importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"}, ] [package.extras] @@ -4171,17 +4188,18 @@ referencing = ">=0.31.0" [[package]] name = "kombu" -version = "5.4.0" +version = "5.4.2" description = "Messaging library for Python." optional = false python-versions = ">=3.8" files = [ - {file = "kombu-5.4.0-py3-none-any.whl", hash = "sha256:c8dd99820467610b4febbc7a9e8a0d3d7da2d35116b67184418b51cc520ea6b6"}, - {file = "kombu-5.4.0.tar.gz", hash = "sha256:ad200a8dbdaaa2bbc5f26d2ee7d707d9a1fded353a0f4bd751ce8c7d9f449c60"}, + {file = "kombu-5.4.2-py3-none-any.whl", hash = "sha256:14212f5ccf022fc0a70453bb025a1dcc32782a588c49ea866884047d66e14763"}, + {file = "kombu-5.4.2.tar.gz", hash = "sha256:eef572dd2fd9fc614b37580e3caeafdd5af46c1eff31e7fba89138cdb406f2cf"}, ] [package.dependencies] amqp = ">=5.1.1,<6.0.0" +tzdata = {version = "*", markers = "python_version >= \"3.9\""} vine = "5.1.0" [package.extras] @@ -4191,7 +4209,7 @@ confluentkafka = ["confluent-kafka (>=2.2.0)"] consul = ["python-consul2 (==0.1.5)"] librabbitmq = ["librabbitmq (>=2.0.0)"] mongodb = ["pymongo (>=4.1.1)"] -msgpack = ["msgpack (==1.0.8)"] +msgpack = ["msgpack (==1.1.0)"] pyro = ["pyro4 (==4.82)"] qpid = ["qpid-python (>=0.26)", "qpid-tools (>=0.26)"] redis = ["redis (>=4.5.2,!=4.5.5,!=5.0.2)"] @@ -4355,13 +4373,13 @@ files = [ [[package]] name = "looker-sdk" -version = "24.14.0" +version = "24.16.2" description = "Looker REST API" optional = false python-versions = ">=3.6" files = [ - {file = "looker_sdk-24.14.0-py3-none-any.whl", hash = "sha256:81f75bd77330193e8870da0327da7eb350d72e11a69d86bd2f0d6cb2510c83d5"}, - {file = "looker_sdk-24.14.0.tar.gz", hash = "sha256:4c23ec8687bdb29358e7c96656d53954172f6146e559f896023d711c3c7fa216"}, + {file = "looker_sdk-24.16.2-py3-none-any.whl", hash = "sha256:7c940eb4a004dc457bb0adf5dd702292e231c2ae2f5c4c60ab5a1edfffdfd6d6"}, + {file = "looker_sdk-24.16.2.tar.gz", hash = "sha256:898484cc86c5c2442bfc02fc5aeedf1338b659349e9cf707d4b80902a1e1ef77"}, ] [package.dependencies] @@ -4543,13 +4561,13 @@ tests = ["pytest", "pytest-lazy-fixture (>=0.6.2)"] [[package]] name = "mdit-py-plugins" -version = "0.4.1" +version = "0.4.2" description = "Collection of plugins for markdown-it-py" optional = false python-versions = ">=3.8" files = [ - {file = "mdit_py_plugins-0.4.1-py3-none-any.whl", hash = "sha256:1020dfe4e6bfc2c79fb49ae4e3f5b297f5ccd20f010187acc52af2921e27dc6a"}, - {file = "mdit_py_plugins-0.4.1.tar.gz", hash = "sha256:834b8ac23d1cd60cec703646ffd22ae97b7955a6d596eb1d304be1e251ae499c"}, + {file = "mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636"}, + {file = "mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5"}, ] [package.dependencies] @@ -4590,113 +4608,118 @@ test = ["functools32 (>=3.2.3-2)", "pytest (>=4.6.7)", "pytest-cov (>=2.6.1)"] [[package]] name = "more-itertools" -version = "10.4.0" +version = "10.5.0" description = "More routines for operating on iterables, beyond itertools" optional = false python-versions = ">=3.8" files = [ - {file = "more-itertools-10.4.0.tar.gz", hash = "sha256:fe0e63c4ab068eac62410ab05cccca2dc71ec44ba8ef29916a0090df061cf923"}, - {file = "more_itertools-10.4.0-py3-none-any.whl", hash = "sha256:0f7d9f83a0a8dcfa8a2694a770590d98a67ea943e3d9f5298309a484758c4e27"}, + {file = "more-itertools-10.5.0.tar.gz", hash = "sha256:5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6"}, + {file = "more_itertools-10.5.0-py3-none-any.whl", hash = "sha256:037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef"}, ] [[package]] name = "multidict" -version = "6.0.5" +version = "6.1.0" description = "multidict implementation" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, - {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, - {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, - {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, - {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, - {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, - {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, - {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, - {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, - {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, - {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, - {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, - {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, - {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, - {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, - {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, - {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, - {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, -] + {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, + {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, + {file = "multidict-6.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7"}, + {file = "multidict-6.1.0-cp310-cp310-win32.whl", hash = "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0"}, + {file = "multidict-6.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753"}, + {file = "multidict-6.1.0-cp311-cp311-win32.whl", hash = "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80"}, + {file = "multidict-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3"}, + {file = "multidict-6.1.0-cp312-cp312-win32.whl", hash = "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133"}, + {file = "multidict-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6"}, + {file = "multidict-6.1.0-cp313-cp313-win32.whl", hash = "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81"}, + {file = "multidict-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd"}, + {file = "multidict-6.1.0-cp38-cp38-win32.whl", hash = "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167"}, + {file = "multidict-6.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43"}, + {file = "multidict-6.1.0-cp39-cp39-win32.whl", hash = "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada"}, + {file = "multidict-6.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a"}, + {file = "multidict-6.1.0-py3-none-any.whl", hash = "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506"}, + {file = "multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} [[package]] name = "mypy" @@ -4845,19 +4868,19 @@ docs = ["myst-parser", "sphinx", "sphinx-markdown-builder (>=0.6.0)", "sphinx-rt [[package]] name = "openlineage-integration-common" -version = "1.21.1" +version = "1.22.0" description = "OpenLineage common python library for integrations" optional = false python-versions = ">=3.8" files = [ - {file = "openlineage-integration-common-1.21.1.tar.gz", hash = "sha256:6f8bf4cebcc679373d3e8bb33dfbc3067190d09c6353227a2d521373689d763e"}, - {file = "openlineage_integration_common-1.21.1-py3-none-any.whl", hash = "sha256:9d15ce7fa37dd816082f0c607ccf0a99de424d69c5f0b9b3946957cfd9269e53"}, + {file = "openlineage-integration-common-1.22.0.tar.gz", hash = "sha256:1942ca0e7662bc0443f1e26340b2aa4518788e0bf66f03974df237e9e2ed2679"}, + {file = "openlineage_integration_common-1.22.0-py3-none-any.whl", hash = "sha256:e053e9b0cd88649fdd10a3a959b630ea7abde4ed71e5df36f0fbe8990a370bd4"}, ] [package.dependencies] attrs = ">=19.3.0" -openlineage-python = "1.21.1" -openlineage-sql = "1.21.1" +openlineage-python = "1.22.0" +openlineage-sql = "1.22.0" [package.extras] bigquery = ["google-api-core (>=1.26.3)", "google-auth (>=1.30.0)", "google-cloud-bigquery (>=2.15.0,<4.0.0)", "google-cloud-core (>=1.6.0)", "google-crc32c (>=1.1.2)"] @@ -4870,13 +4893,13 @@ tests = ["jinja2", "mock", "mypy (>=0.960)", "pandas", "pytest", "pytest-cov", " [[package]] name = "openlineage-python" -version = "1.21.1" +version = "1.22.0" description = "OpenLineage Python Client" optional = false python-versions = ">=3.8" files = [ - {file = "openlineage_python-1.21.1-py3-none-any.whl", hash = "sha256:a8b88fed3bd70afadca3df3c2f235e92d6545bfc8516273b90954c22cea07f12"}, - {file = "openlineage_python-1.21.1.tar.gz", hash = "sha256:88e0609cb88e591e1398fa8e8e2bd46729e9e9eef772fa22595e0165e933e42f"}, + {file = "openlineage_python-1.22.0-py3-none-any.whl", hash = "sha256:507843daa5db297ff464c36bf910f8e28f26f402113185f8124d3101f065e874"}, + {file = "openlineage_python-1.22.0.tar.gz", hash = "sha256:d288faf0af8582ea80d2018a2193095e164dd227a12f6a3a1a24bc27d26a074e"}, ] [package.dependencies] @@ -4894,15 +4917,15 @@ test = ["covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest [[package]] name = "openlineage-sql" -version = "1.21.1" +version = "1.22.0" description = "Python interface for the Rust OpenLineage lineage extraction library" optional = false python-versions = ">=3.8" files = [ - {file = "openlineage_sql-1.21.1-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:4bf7dd4652d382c57dd6d9ccc09bcc744b8fbac0b0ac6689b6d51a236770ee20"}, - {file = "openlineage_sql-1.21.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0a090fdfd0276f820d6c92d8ed4336dbfe08620129b0cfbf28c9418e1967bf"}, - {file = "openlineage_sql-1.21.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:680d98ba6395ac25b7d6a37bfe01a6fe43fc4ec7ba8d67ee19307a80cfd23e4b"}, - {file = "openlineage_sql-1.21.1.tar.gz", hash = "sha256:d6260c3066225c7543844fe14acc06c27c709ed85ccc67756c2b87ca87ba52a4"}, + {file = "openlineage_sql-1.22.0-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:ef22bb7ad3f2d48fcccb14dc8eda3fcf1d1e938e124aab69580f35020f96004e"}, + {file = "openlineage_sql-1.22.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64ab0e159b332e8fd133699518d970516e5657cd3dfc3c130f78877f8bb5cf8d"}, + {file = "openlineage_sql-1.22.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a77eb6d30ca09413f63bfce736fd3d25bb4bb90dda531a36ca6eb271c700b38"}, + {file = "openlineage_sql-1.22.0.tar.gz", hash = "sha256:3e1fdb78a6eec6dc881ba49bb1f4658aa7b621882363ce4484cd769b47c9f8ca"}, ] [[package]] @@ -5219,13 +5242,13 @@ tqdm = ["tqdm (>=4.23.0)"] [[package]] name = "paramiko" -version = "3.4.1" +version = "3.5.0" description = "SSH2 protocol library" optional = false python-versions = ">=3.6" files = [ - {file = "paramiko-3.4.1-py3-none-any.whl", hash = "sha256:8e49fd2f82f84acf7ffd57c64311aa2b30e575370dc23bdb375b10262f7eac32"}, - {file = "paramiko-3.4.1.tar.gz", hash = "sha256:8b15302870af7f6652f2e038975c1d2973f06046cb5d7d65355668b3ecbece0c"}, + {file = "paramiko-3.5.0-py3-none-any.whl", hash = "sha256:1fedf06b085359051cd7d0d270cebe19e755a8a921cc2ddbfa647fb0cd7d68f9"}, + {file = "paramiko-3.5.0.tar.gz", hash = "sha256:ad11e540da4f55cedda52931f1a3f812a8238a7af7f62a60de538cd80bb28124"}, ] [package.dependencies] @@ -5350,19 +5373,19 @@ test = ["time-machine (>=2.6.0)"] [[package]] name = "platformdirs" -version = "4.2.2" +version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, - {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] -type = ["mypy (>=1.8)"] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] [[package]] name = "pluggy" @@ -5416,13 +5439,13 @@ dev = ["nose", "pipreqs", "twine"] [[package]] name = "prometheus-client" -version = "0.20.0" +version = "0.21.0" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.8" files = [ - {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, - {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, + {file = "prometheus_client-0.21.0-py3-none-any.whl", hash = "sha256:4fa6b4dd0ac16d58bb587c04b1caae65b8c5043e85f778f42f5f632f6af2e166"}, + {file = "prometheus_client-0.21.0.tar.gz", hash = "sha256:96c83c606b71ff2b0a433c98889d275f51ffec6c5e267de37c7a2b5c9aa9233e"}, ] [package.extras] @@ -5461,22 +5484,22 @@ testing = ["google-api-core (>=1.31.5)"] [[package]] name = "protobuf" -version = "4.25.4" +version = "4.25.5" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "protobuf-4.25.4-cp310-abi3-win32.whl", hash = "sha256:db9fd45183e1a67722cafa5c1da3e85c6492a5383f127c86c4c4aa4845867dc4"}, - {file = "protobuf-4.25.4-cp310-abi3-win_amd64.whl", hash = "sha256:ba3d8504116a921af46499471c63a85260c1a5fc23333154a427a310e015d26d"}, - {file = "protobuf-4.25.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:eecd41bfc0e4b1bd3fa7909ed93dd14dd5567b98c941d6c1ad08fdcab3d6884b"}, - {file = "protobuf-4.25.4-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:4c8a70fdcb995dcf6c8966cfa3a29101916f7225e9afe3ced4395359955d3835"}, - {file = "protobuf-4.25.4-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:3319e073562e2515c6ddc643eb92ce20809f5d8f10fead3332f71c63be6a7040"}, - {file = "protobuf-4.25.4-cp38-cp38-win32.whl", hash = "sha256:7e372cbbda66a63ebca18f8ffaa6948455dfecc4e9c1029312f6c2edcd86c4e1"}, - {file = "protobuf-4.25.4-cp38-cp38-win_amd64.whl", hash = "sha256:051e97ce9fa6067a4546e75cb14f90cf0232dcb3e3d508c448b8d0e4265b61c1"}, - {file = "protobuf-4.25.4-cp39-cp39-win32.whl", hash = "sha256:90bf6fd378494eb698805bbbe7afe6c5d12c8e17fca817a646cd6a1818c696ca"}, - {file = "protobuf-4.25.4-cp39-cp39-win_amd64.whl", hash = "sha256:ac79a48d6b99dfed2729ccccee547b34a1d3d63289c71cef056653a846a2240f"}, - {file = "protobuf-4.25.4-py3-none-any.whl", hash = "sha256:bfbebc1c8e4793cfd58589acfb8a1026be0003e852b9da7db5a4285bde996978"}, - {file = "protobuf-4.25.4.tar.gz", hash = "sha256:0dc4a62cc4052a036ee2204d26fe4d835c62827c855c8a03f29fe6da146b380d"}, + {file = "protobuf-4.25.5-cp310-abi3-win32.whl", hash = "sha256:5e61fd921603f58d2f5acb2806a929b4675f8874ff5f330b7d6f7e2e784bbcd8"}, + {file = "protobuf-4.25.5-cp310-abi3-win_amd64.whl", hash = "sha256:4be0571adcbe712b282a330c6e89eae24281344429ae95c6d85e79e84780f5ea"}, + {file = "protobuf-4.25.5-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:b2fde3d805354df675ea4c7c6338c1aecd254dfc9925e88c6d31a2bcb97eb173"}, + {file = "protobuf-4.25.5-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:919ad92d9b0310070f8356c24b855c98df2b8bd207ebc1c0c6fcc9ab1e007f3d"}, + {file = "protobuf-4.25.5-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fe14e16c22be926d3abfcb500e60cab068baf10b542b8c858fa27e098123e331"}, + {file = "protobuf-4.25.5-cp38-cp38-win32.whl", hash = "sha256:98d8d8aa50de6a2747efd9cceba361c9034050ecce3e09136f90de37ddba66e1"}, + {file = "protobuf-4.25.5-cp38-cp38-win_amd64.whl", hash = "sha256:b0234dd5a03049e4ddd94b93400b67803c823cfc405689688f59b34e0742381a"}, + {file = "protobuf-4.25.5-cp39-cp39-win32.whl", hash = "sha256:abe32aad8561aa7cc94fc7ba4fdef646e576983edb94a73381b03c53728a626f"}, + {file = "protobuf-4.25.5-cp39-cp39-win_amd64.whl", hash = "sha256:7a183f592dc80aa7c8da7ad9e55091c4ffc9497b3054452d629bb85fa27c2a45"}, + {file = "protobuf-4.25.5-py3-none-any.whl", hash = "sha256:0aebecb809cae990f8129ada5ca273d9d670b76d9bfc9b1809f0a9c02b7dbf41"}, + {file = "protobuf-4.25.5.tar.gz", hash = "sha256:7f8249476b4a9473645db7f8ab42b02fe1488cbe5fb72fddd445e0665afd8584"}, ] [[package]] @@ -5661,13 +5684,13 @@ files = [ [[package]] name = "pyasn1" -version = "0.6.0" +version = "0.6.1" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = false python-versions = ">=3.8" files = [ - {file = "pyasn1-0.6.0-py2.py3-none-any.whl", hash = "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473"}, - {file = "pyasn1-0.6.0.tar.gz", hash = "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"}, + {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, + {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, ] [[package]] @@ -5697,119 +5720,120 @@ files = [ [[package]] name = "pydantic" -version = "2.8.2" +version = "2.9.2" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"}, - {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"}, + {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, + {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, ] [package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.20.1" +annotated-types = ">=0.6.0" +pydantic-core = "2.23.4" typing-extensions = {version = ">=4.6.1", markers = "python_version < \"3.13\""} [package.extras] email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.20.1" +version = "2.23.4" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3"}, - {file = "pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840"}, - {file = "pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250"}, - {file = "pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c"}, - {file = "pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312"}, - {file = "pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b"}, - {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"}, - {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b"}, - {file = "pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a"}, - {file = "pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2"}, - {file = "pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231"}, - {file = "pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24"}, - {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1"}, - {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd"}, - {file = "pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688"}, - {file = "pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d"}, - {file = "pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686"}, - {file = "pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83"}, - {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203"}, - {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0"}, - {file = "pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e"}, - {file = "pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20"}, - {file = "pydantic_core-2.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91"}, - {file = "pydantic_core-2.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd"}, - {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa"}, - {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987"}, - {file = "pydantic_core-2.20.1-cp38-none-win32.whl", hash = "sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a"}, - {file = "pydantic_core-2.20.1-cp38-none-win_amd64.whl", hash = "sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434"}, - {file = "pydantic_core-2.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c"}, - {file = "pydantic_core-2.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1"}, - {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09"}, - {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab"}, - {file = "pydantic_core-2.20.1-cp39-none-win32.whl", hash = "sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2"}, - {file = "pydantic_core-2.20.1-cp39-none-win_amd64.whl", hash = "sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7"}, - {file = "pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071"}, + {file = "pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119"}, + {file = "pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64"}, + {file = "pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f"}, + {file = "pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24"}, + {file = "pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84"}, + {file = "pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f"}, + {file = "pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769"}, + {file = "pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb"}, + {file = "pydantic_core-2.23.4-cp38-none-win32.whl", hash = "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6"}, + {file = "pydantic_core-2.23.4-cp38-none-win_amd64.whl", hash = "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605"}, + {file = "pydantic_core-2.23.4-cp39-none-win32.whl", hash = "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6"}, + {file = "pydantic_core-2.23.4-cp39-none-win_amd64.whl", hash = "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e"}, + {file = "pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863"}, ] [package.dependencies] @@ -5905,61 +5929,70 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pymongo" -version = "4.8.0" +version = "4.9.1" description = "Python driver for MongoDB " optional = false python-versions = ">=3.8" files = [ - {file = "pymongo-4.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f2b7bec27e047e84947fbd41c782f07c54c30c76d14f3b8bf0c89f7413fac67a"}, - {file = "pymongo-4.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3c68fe128a171493018ca5c8020fc08675be130d012b7ab3efe9e22698c612a1"}, - {file = "pymongo-4.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:920d4f8f157a71b3cb3f39bc09ce070693d6e9648fb0e30d00e2657d1dca4e49"}, - {file = "pymongo-4.8.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52b4108ac9469febba18cea50db972605cc43978bedaa9fea413378877560ef8"}, - {file = "pymongo-4.8.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:180d5eb1dc28b62853e2f88017775c4500b07548ed28c0bd9c005c3d7bc52526"}, - {file = "pymongo-4.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aec2b9088cdbceb87e6ca9c639d0ff9b9d083594dda5ca5d3c4f6774f4c81b33"}, - {file = "pymongo-4.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0cf61450feadca81deb1a1489cb1a3ae1e4266efd51adafecec0e503a8dcd84"}, - {file = "pymongo-4.8.0-cp310-cp310-win32.whl", hash = "sha256:8b18c8324809539c79bd6544d00e0607e98ff833ca21953df001510ca25915d1"}, - {file = "pymongo-4.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e5df28f74002e37bcbdfdc5109799f670e4dfef0fb527c391ff84f078050e7b5"}, - {file = "pymongo-4.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6b50040d9767197b77ed420ada29b3bf18a638f9552d80f2da817b7c4a4c9c68"}, - {file = "pymongo-4.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:417369ce39af2b7c2a9c7152c1ed2393edfd1cbaf2a356ba31eb8bcbd5c98dd7"}, - {file = "pymongo-4.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf821bd3befb993a6db17229a2c60c1550e957de02a6ff4dd0af9476637b2e4d"}, - {file = "pymongo-4.8.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9365166aa801c63dff1a3cb96e650be270da06e3464ab106727223123405510f"}, - {file = "pymongo-4.8.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc8b8582f4209c2459b04b049ac03c72c618e011d3caa5391ff86d1bda0cc486"}, - {file = "pymongo-4.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16e5019f75f6827bb5354b6fef8dfc9d6c7446894a27346e03134d290eb9e758"}, - {file = "pymongo-4.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b5802151fc2b51cd45492c80ed22b441d20090fb76d1fd53cd7760b340ff554"}, - {file = "pymongo-4.8.0-cp311-cp311-win32.whl", hash = "sha256:4bf58e6825b93da63e499d1a58de7de563c31e575908d4e24876234ccb910eba"}, - {file = "pymongo-4.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:b747c0e257b9d3e6495a018309b9e0c93b7f0d65271d1d62e572747f4ffafc88"}, - {file = "pymongo-4.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e6a720a3d22b54183352dc65f08cd1547204d263e0651b213a0a2e577e838526"}, - {file = "pymongo-4.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:31e4d21201bdf15064cf47ce7b74722d3e1aea2597c6785882244a3bb58c7eab"}, - {file = "pymongo-4.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6b804bb4f2d9dc389cc9e827d579fa327272cdb0629a99bfe5b83cb3e269ebf"}, - {file = "pymongo-4.8.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f2fbdb87fe5075c8beb17a5c16348a1ea3c8b282a5cb72d173330be2fecf22f5"}, - {file = "pymongo-4.8.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd39455b7ee70aabee46f7399b32ab38b86b236c069ae559e22be6b46b2bbfc4"}, - {file = "pymongo-4.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:940d456774b17814bac5ea7fc28188c7a1338d4a233efbb6ba01de957bded2e8"}, - {file = "pymongo-4.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:236bbd7d0aef62e64caf4b24ca200f8c8670d1a6f5ea828c39eccdae423bc2b2"}, - {file = "pymongo-4.8.0-cp312-cp312-win32.whl", hash = "sha256:47ec8c3f0a7b2212dbc9be08d3bf17bc89abd211901093e3ef3f2adea7de7a69"}, - {file = "pymongo-4.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:e84bc7707492f06fbc37a9f215374d2977d21b72e10a67f1b31893ec5a140ad8"}, - {file = "pymongo-4.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:519d1bab2b5e5218c64340b57d555d89c3f6c9d717cecbf826fb9d42415e7750"}, - {file = "pymongo-4.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:87075a1feb1e602e539bdb1ef8f4324a3427eb0d64208c3182e677d2c0718b6f"}, - {file = "pymongo-4.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f53429515d2b3e86dcc83dadecf7ff881e538c168d575f3688698a8707b80a"}, - {file = "pymongo-4.8.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fdc20cd1e1141b04696ffcdb7c71e8a4a665db31fe72e51ec706b3bdd2d09f36"}, - {file = "pymongo-4.8.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:284d0717d1a7707744018b0b6ee7801b1b1ff044c42f7be7a01bb013de639470"}, - {file = "pymongo-4.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5bf0eb8b6ef40fa22479f09375468c33bebb7fe49d14d9c96c8fd50355188b0"}, - {file = "pymongo-4.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ecd71b9226bd1d49416dc9f999772038e56f415a713be51bf18d8676a0841c8"}, - {file = "pymongo-4.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0061af6e8c5e68b13f1ec9ad5251247726653c5af3c0bbdfbca6cf931e99216"}, - {file = "pymongo-4.8.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:658d0170f27984e0d89c09fe5c42296613b711a3ffd847eb373b0dbb5b648d5f"}, - {file = "pymongo-4.8.0-cp38-cp38-win32.whl", hash = "sha256:3ed1c316718a2836f7efc3d75b4b0ffdd47894090bc697de8385acd13c513a70"}, - {file = "pymongo-4.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:7148419eedfea9ecb940961cfe465efaba90595568a1fb97585fb535ea63fe2b"}, - {file = "pymongo-4.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8400587d594761e5136a3423111f499574be5fd53cf0aefa0d0f05b180710b0"}, - {file = "pymongo-4.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af3e98dd9702b73e4e6fd780f6925352237f5dce8d99405ff1543f3771201704"}, - {file = "pymongo-4.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de3a860f037bb51f968de320baef85090ff0bbb42ec4f28ec6a5ddf88be61871"}, - {file = "pymongo-4.8.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fc18b3a093f3db008c5fea0e980dbd3b743449eee29b5718bc2dc15ab5088bb"}, - {file = "pymongo-4.8.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18c9d8f975dd7194c37193583fd7d1eb9aea0c21ee58955ecf35362239ff31ac"}, - {file = "pymongo-4.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:408b2f8fdbeca3c19e4156f28fff1ab11c3efb0407b60687162d49f68075e63c"}, - {file = "pymongo-4.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6564780cafd6abeea49759fe661792bd5a67e4f51bca62b88faab497ab5fe89"}, - {file = "pymongo-4.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d18d86bc9e103f4d3d4f18b85a0471c0e13ce5b79194e4a0389a224bb70edd53"}, - {file = "pymongo-4.8.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9097c331577cecf8034422956daaba7ec74c26f7b255d718c584faddd7fa2e3c"}, - {file = "pymongo-4.8.0-cp39-cp39-win32.whl", hash = "sha256:d5428dbcd43d02f6306e1c3c95f692f68b284e6ee5390292242f509004c9e3a8"}, - {file = "pymongo-4.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:ef7225755ed27bfdb18730c68f6cb023d06c28f2b734597480fb4c0e500feb6f"}, - {file = "pymongo-4.8.0.tar.gz", hash = "sha256:454f2295875744dc70f1881e4b2eb99cdad008a33574bc8aaf120530f66c0cde"}, + {file = "pymongo-4.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dc3d070d746ab79e9b393a5c236df20e56607389af2b79bf1bfe9a841117558e"}, + {file = "pymongo-4.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fe709d05654c12fc513617c8d5c8d05b7e9cf1d5d94ada68add4e89530c867d2"}, + {file = "pymongo-4.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa4493f304b33c5d2ecee3055c98889ac6724d56f5f922d47420a45d0d4099c9"}, + {file = "pymongo-4.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8e8b8deba6a4bff3dd5421071083219521c74d2acae0322de5c06f1a66c56af"}, + {file = "pymongo-4.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3645aff8419ca60f9ccd08966b2f6b0d78053f9f98a814d025426f1d874c19a"}, + {file = "pymongo-4.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51dbc6251c6783dfcc7d657c346986d8bad7210989b2fe15de16db5204a8e7ae"}, + {file = "pymongo-4.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d7aa9cc2d92e73bdb036c578ba019da94ea165eb147e691cd910a6fab7ce3b7"}, + {file = "pymongo-4.9.1-cp310-cp310-win32.whl", hash = "sha256:8b632e01617f2608880f7b9926f54a5f5ebb51631996e0540fff7fc7980663c9"}, + {file = "pymongo-4.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:f05e34d401be871d7c87cb10727d49315444e4ded07ff876a595e4c23b7436da"}, + {file = "pymongo-4.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6bb3d5282278594753089dc7da48bfae4a7f337a2dd4d397eabb591c649e58d0"}, + {file = "pymongo-4.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8f0d5258bc85a4e6b5bcae8160628168e71ec4625a58ceb53327c3280a0b6914"}, + {file = "pymongo-4.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96462fb2175f740701d229f52018ea6e4adc4148c4112e6628bb359dd534a3df"}, + {file = "pymongo-4.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:286fb275267f0293364ba579f6354452599161f1902ad411061c7f744ab88328"}, + {file = "pymongo-4.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cddb51cead9700c4dccc916952bc0321b8d766bf782d374bfa0e93ef47c1d20"}, + {file = "pymongo-4.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d79f20f9c7cbc1c708fb80b648b6fbd3220fd3437a9bd6017c1eb592e03b361"}, + {file = "pymongo-4.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd3352eaf578f8e9bdea7a5692910eedad1e8680f60726fc70e99c8af51a5449"}, + {file = "pymongo-4.9.1-cp311-cp311-win32.whl", hash = "sha256:ea3f0196e7c311b9944a609ac175bd91ab97952164a1246716fdd38d53ca3bcc"}, + {file = "pymongo-4.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:b4c793db8457c856f333f396798470b9bfe405e17c307d581532c74cec70150c"}, + {file = "pymongo-4.9.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:47b4896544095d172c366dd4d4ea1da6b0ab1a77d8416897cc1801e2421b1e67"}, + {file = "pymongo-4.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fbb1c7dfcf6c44e9e1928290631c7603817991cdf570691c9e15fca594918435"}, + {file = "pymongo-4.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7689da1d1b444284e4ea9ab2eb64a15307b6b795918c0f3cd7774dd1d8a7556"}, + {file = "pymongo-4.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f962d74201c772555f7a78792fed820a5ea76db5c7ee6cf43748e411b44e430"}, + {file = "pymongo-4.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08fbab69f3fb6f8088c81f4c4a8abd84a99c132034f5e27e47f894bbcb6bf439"}, + {file = "pymongo-4.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4327c0d9bd616b8289691360f2d4a09a72fe35479795832eae0d4ff78af53923"}, + {file = "pymongo-4.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34e4993ae78be56f9e27a141168a1ab78253576fa3e893fa335a719ce204c3ef"}, + {file = "pymongo-4.9.1-cp312-cp312-win32.whl", hash = "sha256:e1f346811d4a2369f88ab7a6f886fa9c3bbc9ed4e4f4a3becca8717a73d465cb"}, + {file = "pymongo-4.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:a2b12c74cfd90147babb77f9728646bcedfdbd2bd2a5b4130a00e3a0af1a3d34"}, + {file = "pymongo-4.9.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a40ea8bc9cffb61c5c9c426c430d22235e085e610ee81ae075ddf51f12f76236"}, + {file = "pymongo-4.9.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:75d5974f874acdb2f125bdbe785045b23a39ecce1d3143dd5712800c7b6d25eb"}, + {file = "pymongo-4.9.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f23a046531030318622414f21198e232cf93c5640da9a80b45596a059c8cc090"}, + {file = "pymongo-4.9.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91b1a92214c3912af5467f77c2f6435cd76f6de64c70cba7bb4ee43eba7f459e"}, + {file = "pymongo-4.9.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a846423c4535428f69a90a1451df3718bc59f0c4ab685b9e96d3071951e0be4"}, + {file = "pymongo-4.9.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d476d91a5c9e6c37bc8ec3fb294e1c01d95736ccf01a59bb1540fe2f710f826e"}, + {file = "pymongo-4.9.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:172d8ba0f567e351a18765db23dab7dbcfdffd91a8788d90d46b350f80a40781"}, + {file = "pymongo-4.9.1-cp313-cp313-win32.whl", hash = "sha256:95418e334629440f70fe5ceeefc6cbbd50defb566901c8d68179ffbaec8d5f01"}, + {file = "pymongo-4.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:1dfd2aa30174d36a3ef1dae4ee4c89710c2d65cac52ce6e13f17c710edbd61cf"}, + {file = "pymongo-4.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c4204fad54830a3173a5c939cd052d0561fba03dba7e0ff6852fd631f3314aa4"}, + {file = "pymongo-4.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:375765ec81b1f0a26d08928afea0c3dff897c36080a090be53fc7b70cc51d497"}, + {file = "pymongo-4.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d1b959a3dda0775d9111622ee47ad47772aed3a9da2e7d5f2f513fa68175dea"}, + {file = "pymongo-4.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:42c19d2b094cdd0ead7dbb38860bbe8268c140334ce55d8b39204ddb4ebd4904"}, + {file = "pymongo-4.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1fac1def9e9073f1c80198c99f0ec39c2528236c8912d96d7fd3b0237f4c523a"}, + {file = "pymongo-4.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b347052d510989d1f52b8553b31297f21cf74bd9f6aed71ee84e563492f4ff17"}, + {file = "pymongo-4.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b4b961fce213f2bcdc92268f85111a3668c61b9b4d4e7ece27dce3a137cfcbd"}, + {file = "pymongo-4.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a0b10cf51ec14a487c94709d294c00e1fb6a0a4c38cdc3acfb2ced5ef60972a0"}, + {file = "pymongo-4.9.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:679b8d55854da7c7fdb82aa5e092ab4de0144daf6758defed8ab00ff9ce05360"}, + {file = "pymongo-4.9.1-cp38-cp38-win32.whl", hash = "sha256:432ad395d2233056b042ccc73234e7136aa65d944d6bd8b5138394bd38aaff79"}, + {file = "pymongo-4.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:9fbe9fad27619ac4cfda5df0ade26a99906da7dfe7b01deddc25997eb1804e4c"}, + {file = "pymongo-4.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:99b611ff75b5d9e17183dcf9584a7b04f9db07e51a162f23ea05e485e0735c0a"}, + {file = "pymongo-4.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8089003a99127f917bdbeec177d41cef019cda8ec70534c1018cb60aacd23c2a"}, + {file = "pymongo-4.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d78adf25967c06298c7e488f4cfab79a390fc32c2b1d428613976f99031603d"}, + {file = "pymongo-4.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56877cfcdf7dfc5c6408e4551ec0d6d65ebbca4d744a0bc90400f09ef6bbcc8a"}, + {file = "pymongo-4.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d2efe559d0d96bc0b74b3ff76701ad6f6e1a65f6581b573dcacc29158131c8"}, + {file = "pymongo-4.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f838f613e74b4dad8ace0d90f42346005bece4eda5bf6d389cfadb8322d39316"}, + {file = "pymongo-4.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db5b299e11284f8d82ce2983d8e19fcc28f98f902a179709ef1982b4cca6f8b8"}, + {file = "pymongo-4.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b23211c031b45d0f32de83ab7d77f9c26f1025c2d2c91463a5d8594a16103655"}, + {file = "pymongo-4.9.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:687cf70e096381bc65b4273a6a9319617618f7ace65caffc356e1099c4a68511"}, + {file = "pymongo-4.9.1-cp39-cp39-win32.whl", hash = "sha256:e02b03e3815b80a63e773e4c32aed3cf5633d406f376477be74550295c211256"}, + {file = "pymongo-4.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:0492ef43f3342354cf581712e431621c221f60c877ebded84e3f3e53b71bbbe0"}, + {file = "pymongo-4.9.1.tar.gz", hash = "sha256:b7f2d34390acf60e229c30037d1473fcf69f4536cd7f48f6f78c0c931c61c505"}, ] [package.dependencies] @@ -5967,12 +6000,12 @@ dnspython = ">=1.16.0,<3.0.0" [package.extras] aws = ["pymongo-auth-aws (>=1.1.0,<2.0.0)"] -docs = ["furo (==2023.9.10)", "readthedocs-sphinx-search (>=0.3,<1.0)", "sphinx (>=5.3,<8)", "sphinx-rtd-theme (>=2,<3)", "sphinxcontrib-shellcheck (>=1,<2)"] -encryption = ["certifi", "pymongo-auth-aws (>=1.1.0,<2.0.0)", "pymongocrypt (>=1.6.0,<2.0.0)"] +docs = ["furo (==2023.9.10)", "readthedocs-sphinx-search (>=0.3,<1.0)", "sphinx (>=5.3,<8)", "sphinx-autobuild (>=2020.9.1)", "sphinx-rtd-theme (>=2,<3)", "sphinxcontrib-shellcheck (>=1,<2)"] +encryption = ["certifi", "pymongo-auth-aws (>=1.1.0,<2.0.0)", "pymongocrypt (>=1.10.0,<2.0.0)"] gssapi = ["pykerberos", "winkerberos (>=0.5.0)"] ocsp = ["certifi", "cryptography (>=2.5)", "pyopenssl (>=17.2.0)", "requests (<3.0.0)", "service-identity (>=18.1.0)"] snappy = ["python-snappy"] -test = ["pytest (>=7)"] +test = ["pytest (>=8.2)", "pytest-asyncio (>=0.24.0)"] zstd = ["zstandard"] [[package]] @@ -6035,13 +6068,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "8.3.2" +version = "8.3.3" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, - {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, + {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, + {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, ] [package.dependencies] @@ -6179,13 +6212,13 @@ unidecode = ["Unidecode (>=1.1.1)"] [[package]] name = "pytz" -version = "2024.1" +version = "2024.2" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, - {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, + {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, + {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, ] [[package]] @@ -6285,90 +6318,105 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2024.7.24" +version = "2024.9.11" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" files = [ - {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b0d3f567fafa0633aee87f08b9276c7062da9616931382993c03808bb68ce"}, - {file = "regex-2024.7.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3426de3b91d1bc73249042742f45c2148803c111d1175b283270177fdf669024"}, - {file = "regex-2024.7.24-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f273674b445bcb6e4409bf8d1be67bc4b58e8b46fd0d560055d515b8830063cd"}, - {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23acc72f0f4e1a9e6e9843d6328177ae3074b4182167e34119ec7233dfeccf53"}, - {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65fd3d2e228cae024c411c5ccdffae4c315271eee4a8b839291f84f796b34eca"}, - {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c414cbda77dbf13c3bc88b073a1a9f375c7b0cb5e115e15d4b73ec3a2fbc6f59"}, - {file = "regex-2024.7.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7a89eef64b5455835f5ed30254ec19bf41f7541cd94f266ab7cbd463f00c41"}, - {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19c65b00d42804e3fbea9708f0937d157e53429a39b7c61253ff15670ff62cb5"}, - {file = "regex-2024.7.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a5486ca56c8869070a966321d5ab416ff0f83f30e0e2da1ab48815c8d165d46"}, - {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f51f9556785e5a203713f5efd9c085b4a45aecd2a42573e2b5041881b588d1f"}, - {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a4997716674d36a82eab3e86f8fa77080a5d8d96a389a61ea1d0e3a94a582cf7"}, - {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c0abb5e4e8ce71a61d9446040c1e86d4e6d23f9097275c5bd49ed978755ff0fe"}, - {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:18300a1d78cf1290fa583cd8b7cde26ecb73e9f5916690cf9d42de569c89b1ce"}, - {file = "regex-2024.7.24-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:416c0e4f56308f34cdb18c3f59849479dde5b19febdcd6e6fa4d04b6c31c9faa"}, - {file = "regex-2024.7.24-cp310-cp310-win32.whl", hash = "sha256:fb168b5924bef397b5ba13aabd8cf5df7d3d93f10218d7b925e360d436863f66"}, - {file = "regex-2024.7.24-cp310-cp310-win_amd64.whl", hash = "sha256:6b9fc7e9cc983e75e2518496ba1afc524227c163e43d706688a6bb9eca41617e"}, - {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:382281306e3adaaa7b8b9ebbb3ffb43358a7bbf585fa93821300a418bb975281"}, - {file = "regex-2024.7.24-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4fdd1384619f406ad9037fe6b6eaa3de2749e2e12084abc80169e8e075377d3b"}, - {file = "regex-2024.7.24-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3d974d24edb231446f708c455fd08f94c41c1ff4f04bcf06e5f36df5ef50b95a"}, - {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2ec4419a3fe6cf8a4795752596dfe0adb4aea40d3683a132bae9c30b81e8d73"}, - {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb563dd3aea54c797adf513eeec819c4213d7dbfc311874eb4fd28d10f2ff0f2"}, - {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45104baae8b9f67569f0f1dca5e1f1ed77a54ae1cd8b0b07aba89272710db61e"}, - {file = "regex-2024.7.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:994448ee01864501912abf2bad9203bffc34158e80fe8bfb5b031f4f8e16da51"}, - {file = "regex-2024.7.24-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fac296f99283ac232d8125be932c5cd7644084a30748fda013028c815ba3364"}, - {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e37e809b9303ec3a179085415cb5f418ecf65ec98cdfe34f6a078b46ef823ee"}, - {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:01b689e887f612610c869421241e075c02f2e3d1ae93a037cb14f88ab6a8934c"}, - {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f6442f0f0ff81775eaa5b05af8a0ffa1dda36e9cf6ec1e0d3d245e8564b684ce"}, - {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:871e3ab2838fbcb4e0865a6e01233975df3a15e6fce93b6f99d75cacbd9862d1"}, - {file = "regex-2024.7.24-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c918b7a1e26b4ab40409820ddccc5d49871a82329640f5005f73572d5eaa9b5e"}, - {file = "regex-2024.7.24-cp311-cp311-win32.whl", hash = "sha256:2dfbb8baf8ba2c2b9aa2807f44ed272f0913eeeba002478c4577b8d29cde215c"}, - {file = "regex-2024.7.24-cp311-cp311-win_amd64.whl", hash = "sha256:538d30cd96ed7d1416d3956f94d54e426a8daf7c14527f6e0d6d425fcb4cca52"}, - {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fe4ebef608553aff8deb845c7f4f1d0740ff76fa672c011cc0bacb2a00fbde86"}, - {file = "regex-2024.7.24-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:74007a5b25b7a678459f06559504f1eec2f0f17bca218c9d56f6a0a12bfffdad"}, - {file = "regex-2024.7.24-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7df9ea48641da022c2a3c9c641650cd09f0cd15e8908bf931ad538f5ca7919c9"}, - {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a1141a1dcc32904c47f6846b040275c6e5de0bf73f17d7a409035d55b76f289"}, - {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80c811cfcb5c331237d9bad3bea2c391114588cf4131707e84d9493064d267f9"}, - {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7214477bf9bd195894cf24005b1e7b496f46833337b5dedb7b2a6e33f66d962c"}, - {file = "regex-2024.7.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d55588cba7553f0b6ec33130bc3e114b355570b45785cebdc9daed8c637dd440"}, - {file = "regex-2024.7.24-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:558a57cfc32adcf19d3f791f62b5ff564922942e389e3cfdb538a23d65a6b610"}, - {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a512eed9dfd4117110b1881ba9a59b31433caed0c4101b361f768e7bcbaf93c5"}, - {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:86b17ba823ea76256b1885652e3a141a99a5c4422f4a869189db328321b73799"}, - {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5eefee9bfe23f6df09ffb6dfb23809f4d74a78acef004aa904dc7c88b9944b05"}, - {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:731fcd76bbdbf225e2eb85b7c38da9633ad3073822f5ab32379381e8c3c12e94"}, - {file = "regex-2024.7.24-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eaef80eac3b4cfbdd6de53c6e108b4c534c21ae055d1dbea2de6b3b8ff3def38"}, - {file = "regex-2024.7.24-cp312-cp312-win32.whl", hash = "sha256:185e029368d6f89f36e526764cf12bf8d6f0e3a2a7737da625a76f594bdfcbfc"}, - {file = "regex-2024.7.24-cp312-cp312-win_amd64.whl", hash = "sha256:2f1baff13cc2521bea83ab2528e7a80cbe0ebb2c6f0bfad15be7da3aed443908"}, - {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:66b4c0731a5c81921e938dcf1a88e978264e26e6ac4ec96a4d21ae0354581ae0"}, - {file = "regex-2024.7.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:88ecc3afd7e776967fa16c80f974cb79399ee8dc6c96423321d6f7d4b881c92b"}, - {file = "regex-2024.7.24-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64bd50cf16bcc54b274e20235bf8edbb64184a30e1e53873ff8d444e7ac656b2"}, - {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb462f0e346fcf41a901a126b50f8781e9a474d3927930f3490f38a6e73b6950"}, - {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a82465ebbc9b1c5c50738536fdfa7cab639a261a99b469c9d4c7dcbb2b3f1e57"}, - {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:68a8f8c046c6466ac61a36b65bb2395c74451df2ffb8458492ef49900efed293"}, - {file = "regex-2024.7.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac8e84fff5d27420f3c1e879ce9929108e873667ec87e0c8eeb413a5311adfe"}, - {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba2537ef2163db9e6ccdbeb6f6424282ae4dea43177402152c67ef869cf3978b"}, - {file = "regex-2024.7.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:43affe33137fcd679bdae93fb25924979517e011f9dea99163f80b82eadc7e53"}, - {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c9bb87fdf2ab2370f21e4d5636e5317775e5d51ff32ebff2cf389f71b9b13750"}, - {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:945352286a541406f99b2655c973852da7911b3f4264e010218bbc1cc73168f2"}, - {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:8bc593dcce679206b60a538c302d03c29b18e3d862609317cb560e18b66d10cf"}, - {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3f3b6ca8eae6d6c75a6cff525c8530c60e909a71a15e1b731723233331de4169"}, - {file = "regex-2024.7.24-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c51edc3541e11fbe83f0c4d9412ef6c79f664a3745fab261457e84465ec9d5a8"}, - {file = "regex-2024.7.24-cp38-cp38-win32.whl", hash = "sha256:d0a07763776188b4db4c9c7fb1b8c494049f84659bb387b71c73bbc07f189e96"}, - {file = "regex-2024.7.24-cp38-cp38-win_amd64.whl", hash = "sha256:8fd5afd101dcf86a270d254364e0e8dddedebe6bd1ab9d5f732f274fa00499a5"}, - {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0ffe3f9d430cd37d8fa5632ff6fb36d5b24818c5c986893063b4e5bdb84cdf24"}, - {file = "regex-2024.7.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25419b70ba00a16abc90ee5fce061228206173231f004437730b67ac77323f0d"}, - {file = "regex-2024.7.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33e2614a7ce627f0cdf2ad104797d1f68342d967de3695678c0cb84f530709f8"}, - {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d33a0021893ede5969876052796165bab6006559ab845fd7b515a30abdd990dc"}, - {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04ce29e2c5fedf296b1a1b0acc1724ba93a36fb14031f3abfb7abda2806c1535"}, - {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b16582783f44fbca6fcf46f61347340c787d7530d88b4d590a397a47583f31dd"}, - {file = "regex-2024.7.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:836d3cc225b3e8a943d0b02633fb2f28a66e281290302a79df0e1eaa984ff7c1"}, - {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:438d9f0f4bc64e8dea78274caa5af971ceff0f8771e1a2333620969936ba10be"}, - {file = "regex-2024.7.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:973335b1624859cb0e52f96062a28aa18f3a5fc77a96e4a3d6d76e29811a0e6e"}, - {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c5e69fd3eb0b409432b537fe3c6f44ac089c458ab6b78dcec14478422879ec5f"}, - {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fbf8c2f00904eaf63ff37718eb13acf8e178cb940520e47b2f05027f5bb34ce3"}, - {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2757ace61bc4061b69af19e4689fa4416e1a04840f33b441034202b5cd02d4"}, - {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:44fc61b99035fd9b3b9453f1713234e5a7c92a04f3577252b45feefe1b327759"}, - {file = "regex-2024.7.24-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:84c312cdf839e8b579f504afcd7b65f35d60b6285d892b19adea16355e8343c9"}, - {file = "regex-2024.7.24-cp39-cp39-win32.whl", hash = "sha256:ca5b2028c2f7af4e13fb9fc29b28d0ce767c38c7facdf64f6c2cd040413055f1"}, - {file = "regex-2024.7.24-cp39-cp39-win_amd64.whl", hash = "sha256:7c479f5ae937ec9985ecaf42e2e10631551d909f203e31308c12d703922742f9"}, - {file = "regex-2024.7.24.tar.gz", hash = "sha256:9cfd009eed1a46b27c14039ad5bbc5e71b6367c5b2e6d5f5da0ea91600817506"}, + {file = "regex-2024.9.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1494fa8725c285a81d01dc8c06b55287a1ee5e0e382d8413adc0a9197aac6408"}, + {file = "regex-2024.9.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0e12c481ad92d129c78f13a2a3662317e46ee7ef96c94fd332e1c29131875b7d"}, + {file = "regex-2024.9.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:16e13a7929791ac1216afde26f712802e3df7bf0360b32e4914dca3ab8baeea5"}, + {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46989629904bad940bbec2106528140a218b4a36bb3042d8406980be1941429c"}, + {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a906ed5e47a0ce5f04b2c981af1c9acf9e8696066900bf03b9d7879a6f679fc8"}, + {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a091b0550b3b0207784a7d6d0f1a00d1d1c8a11699c1a4d93db3fbefc3ad35"}, + {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ddcd9a179c0a6fa8add279a4444015acddcd7f232a49071ae57fa6e278f1f71"}, + {file = "regex-2024.9.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6b41e1adc61fa347662b09398e31ad446afadff932a24807d3ceb955ed865cc8"}, + {file = "regex-2024.9.11-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ced479f601cd2f8ca1fd7b23925a7e0ad512a56d6e9476f79b8f381d9d37090a"}, + {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:635a1d96665f84b292e401c3d62775851aedc31d4f8784117b3c68c4fcd4118d"}, + {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c0256beda696edcf7d97ef16b2a33a8e5a875affd6fa6567b54f7c577b30a137"}, + {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3ce4f1185db3fbde8ed8aa223fc9620f276c58de8b0d4f8cc86fd1360829edb6"}, + {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:09d77559e80dcc9d24570da3745ab859a9cf91953062e4ab126ba9d5993688ca"}, + {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a22ccefd4db3f12b526eccb129390942fe874a3a9fdbdd24cf55773a1faab1a"}, + {file = "regex-2024.9.11-cp310-cp310-win32.whl", hash = "sha256:f745ec09bc1b0bd15cfc73df6fa4f726dcc26bb16c23a03f9e3367d357eeedd0"}, + {file = "regex-2024.9.11-cp310-cp310-win_amd64.whl", hash = "sha256:01c2acb51f8a7d6494c8c5eafe3d8e06d76563d8a8a4643b37e9b2dd8a2ff623"}, + {file = "regex-2024.9.11-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2cce2449e5927a0bf084d346da6cd5eb016b2beca10d0013ab50e3c226ffc0df"}, + {file = "regex-2024.9.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b37fa423beefa44919e009745ccbf353d8c981516e807995b2bd11c2c77d268"}, + {file = "regex-2024.9.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64ce2799bd75039b480cc0360907c4fb2f50022f030bf9e7a8705b636e408fad"}, + {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4cc92bb6db56ab0c1cbd17294e14f5e9224f0cc6521167ef388332604e92679"}, + {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d05ac6fa06959c4172eccd99a222e1fbf17b5670c4d596cb1e5cde99600674c4"}, + {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:040562757795eeea356394a7fb13076ad4f99d3c62ab0f8bdfb21f99a1f85664"}, + {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6113c008a7780792efc80f9dfe10ba0cd043cbf8dc9a76ef757850f51b4edc50"}, + {file = "regex-2024.9.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e5fb5f77c8745a60105403a774fe2c1759b71d3e7b4ca237a5e67ad066c7199"}, + {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:54d9ff35d4515debf14bc27f1e3b38bfc453eff3220f5bce159642fa762fe5d4"}, + {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df5cbb1fbc74a8305b6065d4ade43b993be03dbe0f8b30032cced0d7740994bd"}, + {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7fb89ee5d106e4a7a51bce305ac4efb981536301895f7bdcf93ec92ae0d91c7f"}, + {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a738b937d512b30bf75995c0159c0ddf9eec0775c9d72ac0202076c72f24aa96"}, + {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e28f9faeb14b6f23ac55bfbbfd3643f5c7c18ede093977f1df249f73fd22c7b1"}, + {file = "regex-2024.9.11-cp311-cp311-win32.whl", hash = "sha256:18e707ce6c92d7282dfce370cd205098384b8ee21544e7cb29b8aab955b66fa9"}, + {file = "regex-2024.9.11-cp311-cp311-win_amd64.whl", hash = "sha256:313ea15e5ff2a8cbbad96ccef6be638393041b0a7863183c2d31e0c6116688cf"}, + {file = "regex-2024.9.11-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b0d0a6c64fcc4ef9c69bd5b3b3626cc3776520a1637d8abaa62b9edc147a58f7"}, + {file = "regex-2024.9.11-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:49b0e06786ea663f933f3710a51e9385ce0cba0ea56b67107fd841a55d56a231"}, + {file = "regex-2024.9.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5b513b6997a0b2f10e4fd3a1313568e373926e8c252bd76c960f96fd039cd28d"}, + {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee439691d8c23e76f9802c42a95cfeebf9d47cf4ffd06f18489122dbb0a7ad64"}, + {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8f877c89719d759e52783f7fe6e1c67121076b87b40542966c02de5503ace42"}, + {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23b30c62d0f16827f2ae9f2bb87619bc4fba2044911e2e6c2eb1af0161cdb766"}, + {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ab7824093d8f10d44330fe1e6493f756f252d145323dd17ab6b48733ff6c0a"}, + {file = "regex-2024.9.11-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dee5b4810a89447151999428fe096977346cf2f29f4d5e29609d2e19e0199c9"}, + {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98eeee2f2e63edae2181c886d7911ce502e1292794f4c5ee71e60e23e8d26b5d"}, + {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:57fdd2e0b2694ce6fc2e5ccf189789c3e2962916fb38779d3e3521ff8fe7a822"}, + {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d552c78411f60b1fdaafd117a1fca2f02e562e309223b9d44b7de8be451ec5e0"}, + {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a0b2b80321c2ed3fcf0385ec9e51a12253c50f146fddb2abbb10f033fe3d049a"}, + {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:18406efb2f5a0e57e3a5881cd9354c1512d3bb4f5c45d96d110a66114d84d23a"}, + {file = "regex-2024.9.11-cp312-cp312-win32.whl", hash = "sha256:e464b467f1588e2c42d26814231edecbcfe77f5ac414d92cbf4e7b55b2c2a776"}, + {file = "regex-2024.9.11-cp312-cp312-win_amd64.whl", hash = "sha256:9e8719792ca63c6b8340380352c24dcb8cd7ec49dae36e963742a275dfae6009"}, + {file = "regex-2024.9.11-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c157bb447303070f256e084668b702073db99bbb61d44f85d811025fcf38f784"}, + {file = "regex-2024.9.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4db21ece84dfeefc5d8a3863f101995de646c6cb0536952c321a2650aa202c36"}, + {file = "regex-2024.9.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:220e92a30b426daf23bb67a7962900ed4613589bab80382be09b48896d211e92"}, + {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb1ae19e64c14c7ec1995f40bd932448713d3c73509e82d8cd7744dc00e29e86"}, + {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f47cd43a5bfa48f86925fe26fbdd0a488ff15b62468abb5d2a1e092a4fb10e85"}, + {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9d4a76b96f398697fe01117093613166e6aa8195d63f1b4ec3f21ab637632963"}, + {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ea51dcc0835eea2ea31d66456210a4e01a076d820e9039b04ae8d17ac11dee6"}, + {file = "regex-2024.9.11-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7aaa315101c6567a9a45d2839322c51c8d6e81f67683d529512f5bcfb99c802"}, + {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c57d08ad67aba97af57a7263c2d9006d5c404d721c5f7542f077f109ec2a4a29"}, + {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f8404bf61298bb6f8224bb9176c1424548ee1181130818fcd2cbffddc768bed8"}, + {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dd4490a33eb909ef5078ab20f5f000087afa2a4daa27b4c072ccb3cb3050ad84"}, + {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:eee9130eaad130649fd73e5cd92f60e55708952260ede70da64de420cdcad554"}, + {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6a2644a93da36c784e546de579ec1806bfd2763ef47babc1b03d765fe560c9f8"}, + {file = "regex-2024.9.11-cp313-cp313-win32.whl", hash = "sha256:e997fd30430c57138adc06bba4c7c2968fb13d101e57dd5bb9355bf8ce3fa7e8"}, + {file = "regex-2024.9.11-cp313-cp313-win_amd64.whl", hash = "sha256:042c55879cfeb21a8adacc84ea347721d3d83a159da6acdf1116859e2427c43f"}, + {file = "regex-2024.9.11-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:35f4a6f96aa6cb3f2f7247027b07b15a374f0d5b912c0001418d1d55024d5cb4"}, + {file = "regex-2024.9.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:55b96e7ce3a69a8449a66984c268062fbaa0d8ae437b285428e12797baefce7e"}, + {file = "regex-2024.9.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cb130fccd1a37ed894824b8c046321540263013da72745d755f2d35114b81a60"}, + {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:323c1f04be6b2968944d730e5c2091c8c89767903ecaa135203eec4565ed2b2b"}, + {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be1c8ed48c4c4065ecb19d882a0ce1afe0745dfad8ce48c49586b90a55f02366"}, + {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5b029322e6e7b94fff16cd120ab35a253236a5f99a79fb04fda7ae71ca20ae8"}, + {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6fff13ef6b5f29221d6904aa816c34701462956aa72a77f1f151a8ec4f56aeb"}, + {file = "regex-2024.9.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:587d4af3979376652010e400accc30404e6c16b7df574048ab1f581af82065e4"}, + {file = "regex-2024.9.11-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:079400a8269544b955ffa9e31f186f01d96829110a3bf79dc338e9910f794fca"}, + {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f9268774428ec173654985ce55fc6caf4c6d11ade0f6f914d48ef4719eb05ebb"}, + {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:23f9985c8784e544d53fc2930fc1ac1a7319f5d5332d228437acc9f418f2f168"}, + {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2941333154baff9838e88aa71c1d84f4438189ecc6021a12c7573728b5838e"}, + {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e93f1c331ca8e86fe877a48ad64e77882c0c4da0097f2212873a69bbfea95d0c"}, + {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:846bc79ee753acf93aef4184c040d709940c9d001029ceb7b7a52747b80ed2dd"}, + {file = "regex-2024.9.11-cp38-cp38-win32.whl", hash = "sha256:c94bb0a9f1db10a1d16c00880bdebd5f9faf267273b8f5bd1878126e0fbde771"}, + {file = "regex-2024.9.11-cp38-cp38-win_amd64.whl", hash = "sha256:2b08fce89fbd45664d3df6ad93e554b6c16933ffa9d55cb7e01182baaf971508"}, + {file = "regex-2024.9.11-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:07f45f287469039ffc2c53caf6803cd506eb5f5f637f1d4acb37a738f71dd066"}, + {file = "regex-2024.9.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4838e24ee015101d9f901988001038f7f0d90dc0c3b115541a1365fb439add62"}, + {file = "regex-2024.9.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6edd623bae6a737f10ce853ea076f56f507fd7726bee96a41ee3d68d347e4d16"}, + {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c69ada171c2d0e97a4b5aa78fbb835e0ffbb6b13fc5da968c09811346564f0d3"}, + {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02087ea0a03b4af1ed6ebab2c54d7118127fee8d71b26398e8e4b05b78963199"}, + {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:69dee6a020693d12a3cf892aba4808fe168d2a4cef368eb9bf74f5398bfd4ee8"}, + {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:297f54910247508e6e5cae669f2bc308985c60540a4edd1c77203ef19bfa63ca"}, + {file = "regex-2024.9.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ecea58b43a67b1b79805f1a0255730edaf5191ecef84dbc4cc85eb30bc8b63b9"}, + {file = "regex-2024.9.11-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eab4bb380f15e189d1313195b062a6aa908f5bd687a0ceccd47c8211e9cf0d4a"}, + {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0cbff728659ce4bbf4c30b2a1be040faafaa9eca6ecde40aaff86f7889f4ab39"}, + {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:54c4a097b8bc5bb0dfc83ae498061d53ad7b5762e00f4adaa23bee22b012e6ba"}, + {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:73d6d2f64f4d894c96626a75578b0bf7d9e56dcda8c3d037a2118fdfe9b1c664"}, + {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:e53b5fbab5d675aec9f0c501274c467c0f9a5d23696cfc94247e1fb56501ed89"}, + {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ffbcf9221e04502fc35e54d1ce9567541979c3fdfb93d2c554f0ca583a19b35"}, + {file = "regex-2024.9.11-cp39-cp39-win32.whl", hash = "sha256:e4c22e1ac1f1ec1e09f72e6c44d8f2244173db7eb9629cc3a346a8d7ccc31142"}, + {file = "regex-2024.9.11-cp39-cp39-win_amd64.whl", hash = "sha256:faa3c142464efec496967359ca99696c896c591c56c53506bac1ad465f66e919"}, + {file = "regex-2024.9.11.tar.gz", hash = "sha256:6c188c307e8433bcb63dc1915022deb553b4203a70722fc542c363bf120a01fd"}, ] [[package]] @@ -6440,13 +6488,13 @@ six = "*" [[package]] name = "rich" -version = "13.8.0" +version = "13.8.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.8.0-py3-none-any.whl", hash = "sha256:2e85306a063b9492dffc86278197a60cbece75bcb766022f3436f567cae11bdc"}, - {file = "rich-13.8.0.tar.gz", hash = "sha256:a5ac1f1cd448ade0d59cc3356f7db7a7ccda2c8cbae9c7a90c28ff463d3e91f4"}, + {file = "rich-13.8.1-py3-none-any.whl", hash = "sha256:1760a3c0848469b97b558fc61c85233e3dafb69c7a071b4d60c38099d3cd4c06"}, + {file = "rich-13.8.1.tar.gz", hash = "sha256:8260cda28e3db6bf04d2d1ef4dbc03ba80a824c88b0e7668a0f23126a424844a"}, ] [package.dependencies] @@ -6724,18 +6772,18 @@ test = ["pytest"] [[package]] name = "setuptools" -version = "74.1.1" +version = "75.1.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-74.1.1-py3-none-any.whl", hash = "sha256:fc91b5f89e392ef5b77fe143b17e32f65d3024744fba66dc3afe07201684d766"}, - {file = "setuptools-74.1.1.tar.gz", hash = "sha256:2353af060c06388be1cecbf5953dcdb1f38362f87a2356c480b6b4d5fcfc8847"}, + {file = "setuptools-75.1.0-py3-none-any.whl", hash = "sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2"}, + {file = "setuptools-75.1.0.tar.gz", hash = "sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] -core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] @@ -6835,55 +6883,55 @@ files = [ [[package]] name = "sqlalchemy" -version = "1.4.53" +version = "1.4.54" description = "Database Abstraction Library" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "SQLAlchemy-1.4.53-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b61ac5457d91b5629a3dea2b258deb4cdd35ac8f6fa2031d2b9b2fff5b3396da"}, - {file = "SQLAlchemy-1.4.53-cp310-cp310-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a96aa8d425047551676b0e178ddb0683421e78eda879ab55775128b2e612cae"}, - {file = "SQLAlchemy-1.4.53-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e10ac36f0b994235c13388b39598bf27219ec8bdea5be99bdac612b01cbe525"}, - {file = "SQLAlchemy-1.4.53-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:437592b341a3229dd0443c9c803b0bf0a466f8f539014fef6cdb9c06b7edb7f9"}, - {file = "SQLAlchemy-1.4.53-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:784272ceb5eb71421fea9568749bcbe8bd019261a0e2e710a7efa76057af2499"}, - {file = "SQLAlchemy-1.4.53-cp310-cp310-win32.whl", hash = "sha256:122d7b5722df1a24402c6748bbb04687ef981493bb559d0cc0beffe722e0e6ed"}, - {file = "SQLAlchemy-1.4.53-cp310-cp310-win_amd64.whl", hash = "sha256:4604d42b2abccba266d3f5bbe883684b5df93e74054024c70d3fbb5eea45e530"}, - {file = "SQLAlchemy-1.4.53-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fb8e15dfa47f5de11ab073e12aadd6b502cfb7ac4bafd18bd18cfd1c7d13dbbc"}, - {file = "SQLAlchemy-1.4.53-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8be4df55e8fde3006d9cb1f6b3df2ba26db613855dc4df2c0fcd5ec15cb3b7"}, - {file = "SQLAlchemy-1.4.53-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b11640251f9a9789fd96cd6e5d176b1c230230c70ad40299bcbcc568451b4c"}, - {file = "SQLAlchemy-1.4.53-cp311-cp311-win32.whl", hash = "sha256:cd534c716f86bdf95b7b984a34ee278c91d1b1d7d183e7e5ff878600b1696046"}, - {file = "SQLAlchemy-1.4.53-cp311-cp311-win_amd64.whl", hash = "sha256:6dd06572872ca13ef5a90306a3e5af787498ddaa17fb00109b1243642646cd69"}, - {file = "SQLAlchemy-1.4.53-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:2774c24c405136c3ef472e2352bdca7330659d481fbf2283f996c0ef9eb90f22"}, - {file = "SQLAlchemy-1.4.53-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68a614765197b3d13a730d631a78c3bb9b3b72ba58ed7ab295d58d517464e315"}, - {file = "SQLAlchemy-1.4.53-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d13d4dfbc6e52363886b47cf02cf68c5d2a37c468626694dc210d7e97d4ad330"}, - {file = "SQLAlchemy-1.4.53-cp312-cp312-win32.whl", hash = "sha256:197065b91456574d70b6459bfa62bc0b52a4960a29ef923c375ec427274a3e05"}, - {file = "SQLAlchemy-1.4.53-cp312-cp312-win_amd64.whl", hash = "sha256:421306c4b936b0271a3ce2dc074928d5ece4a36f9c482daa5770f44ecfc3a883"}, - {file = "SQLAlchemy-1.4.53-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:13fc34b35d8ddb3fbe3f8fcfdf6c2546e676187f0fb20f5774da362ddaf8fa2d"}, - {file = "SQLAlchemy-1.4.53-cp36-cp36m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626be971ff89541cfd3e70b54be00b57a7f8557204decb6223ce0428fec058f3"}, - {file = "SQLAlchemy-1.4.53-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:991e42fdfec561ebc6a4fae7161a86d129d6069fa14210b96b8dd752afa7059c"}, - {file = "SQLAlchemy-1.4.53-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:95123f3a1e0e8020848fd32ba751db889a01a44e4e4fef7e58c87ddd0b2fca59"}, - {file = "SQLAlchemy-1.4.53-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c58e011e9e6373b3a091d83f20601fb335a3b4bace80bfcb914ac168aad3b70d"}, - {file = "SQLAlchemy-1.4.53-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:670c7769bf5dcae9aff331247b5d82fe635c63731088a46ce68ba2ba519ef36e"}, - {file = "SQLAlchemy-1.4.53-cp37-cp37m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07ba54f09033d387ae9df8d62cbe211ed7304e0bfbece1f8c55e21db9fae5c11"}, - {file = "SQLAlchemy-1.4.53-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a38834b4c183c33daf58544281395aad2e985f0b47cca1e88ea5ada88344e63"}, - {file = "SQLAlchemy-1.4.53-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:616492f5315128a847f293a7c552f3561ac7e996d2aa5dc46bef4fb0d3781f1d"}, - {file = "SQLAlchemy-1.4.53-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0cf8c0af9563892c6632f7343bc393dfce6eeef8e4d10c5fadba9c0390520bd"}, - {file = "SQLAlchemy-1.4.53-cp37-cp37m-win32.whl", hash = "sha256:c05fe05941424c2f3747a8952381b7725e24cba2ca00141380e54789d5b616b6"}, - {file = "SQLAlchemy-1.4.53-cp37-cp37m-win_amd64.whl", hash = "sha256:93e90aa3e3b2f8e8cbae4d5509f8e0cf82972378d323c740a8df1c1e9f484172"}, - {file = "SQLAlchemy-1.4.53-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:9d7368df54d3ed45a18955f6cec38ebe075290594ac0d5c87a8ddaff7e10de27"}, - {file = "SQLAlchemy-1.4.53-cp38-cp38-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89d8ac4158ef68eea8bb0f6dd0583127d9aa8720606964ba8eee20b254f9c83a"}, - {file = "SQLAlchemy-1.4.53-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16bb9fa4d00b4581b14d9f0e2224dc7745b854aa4687738279af0f48f7056c98"}, - {file = "SQLAlchemy-1.4.53-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4fe5168d0249c23f537950b6d75935ff2709365a113e29938a979aec36668ecf"}, - {file = "SQLAlchemy-1.4.53-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8608d162d3bd29d807aab32c3fb6e2f8e225a43d1c54c917fed38513785380"}, - {file = "SQLAlchemy-1.4.53-cp38-cp38-win32.whl", hash = "sha256:a9d4d132198844bd6828047135ce7b887687c92925049a2468a605fc775c7a1a"}, - {file = "SQLAlchemy-1.4.53-cp38-cp38-win_amd64.whl", hash = "sha256:c15d1f1fcf1f9bec0499ae1d9132b950fcc7730f2d26d10484c8808b4e077816"}, - {file = "SQLAlchemy-1.4.53-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:edf094a20a386ff2ec73de65ef18014b250259cb860edc61741e240ca22d6981"}, - {file = "SQLAlchemy-1.4.53-cp39-cp39-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83a9c3514ff19d9d30d8a8d378b24cd1dfa5528d20891481cb5f196117db6a48"}, - {file = "SQLAlchemy-1.4.53-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaaeedbceb4dfd688fff2faf25a9a87a391f548811494f7bff7fa701b639abc3"}, - {file = "SQLAlchemy-1.4.53-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d021699b9007deb7aa715629078830c99a5fec2753d9bdd5ff33290d363ef755"}, - {file = "SQLAlchemy-1.4.53-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0465b8a68f8f4de754c1966c45b187ac784ad97bc9747736f913130f0e1adea0"}, - {file = "SQLAlchemy-1.4.53-cp39-cp39-win32.whl", hash = "sha256:5f67b9e9dcac3241781e96575468d55a42332157dee04bdbf781df573dff5f85"}, - {file = "SQLAlchemy-1.4.53-cp39-cp39-win_amd64.whl", hash = "sha256:a8c2f2a0b2c4e3b86eb58c9b6bb98548205eea2fba9dae4edfd29dc6aebbe95a"}, - {file = "SQLAlchemy-1.4.53.tar.gz", hash = "sha256:5e6ab710c4c064755fd92d1a417bef360228a19bdf0eee32b03aa0f5f8e9fe0d"}, + {file = "SQLAlchemy-1.4.54-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:af00236fe21c4d4f4c227b6ccc19b44c594160cc3ff28d104cdce85855369277"}, + {file = "SQLAlchemy-1.4.54-cp310-cp310-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1183599e25fa38a1a322294b949da02b4f0da13dbc2688ef9dbe746df573f8a6"}, + {file = "SQLAlchemy-1.4.54-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1990d5a6a5dc358a0894c8ca02043fb9a5ad9538422001fb2826e91c50f1d539"}, + {file = "SQLAlchemy-1.4.54-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:14b3f4783275339170984cadda66e3ec011cce87b405968dc8d51cf0f9997b0d"}, + {file = "SQLAlchemy-1.4.54-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b24364150738ce488333b3fb48bfa14c189a66de41cd632796fbcacb26b4585"}, + {file = "SQLAlchemy-1.4.54-cp310-cp310-win32.whl", hash = "sha256:a8a72259a1652f192c68377be7011eac3c463e9892ef2948828c7d58e4829988"}, + {file = "SQLAlchemy-1.4.54-cp310-cp310-win_amd64.whl", hash = "sha256:b67589f7955924865344e6eacfdcf70675e64f36800a576aa5e961f0008cde2a"}, + {file = "SQLAlchemy-1.4.54-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b05e0626ec1c391432eabb47a8abd3bf199fb74bfde7cc44a26d2b1b352c2c6e"}, + {file = "SQLAlchemy-1.4.54-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13e91d6892b5fcb94a36ba061fb7a1f03d0185ed9d8a77c84ba389e5bb05e936"}, + {file = "SQLAlchemy-1.4.54-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb59a11689ff3c58e7652260127f9e34f7f45478a2f3ef831ab6db7bcd72108f"}, + {file = "SQLAlchemy-1.4.54-cp311-cp311-win32.whl", hash = "sha256:1390ca2d301a2708fd4425c6d75528d22f26b8f5cbc9faba1ddca136671432bc"}, + {file = "SQLAlchemy-1.4.54-cp311-cp311-win_amd64.whl", hash = "sha256:2b37931eac4b837c45e2522066bda221ac6d80e78922fb77c75eb12e4dbcdee5"}, + {file = "SQLAlchemy-1.4.54-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3f01c2629a7d6b30d8afe0326b8c649b74825a0e1ebdcb01e8ffd1c920deb07d"}, + {file = "SQLAlchemy-1.4.54-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c24dd161c06992ed16c5e528a75878edbaeced5660c3db88c820f1f0d3fe1f4"}, + {file = "SQLAlchemy-1.4.54-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5e0d47d619c739bdc636bbe007da4519fc953393304a5943e0b5aec96c9877c"}, + {file = "SQLAlchemy-1.4.54-cp312-cp312-win32.whl", hash = "sha256:12bc0141b245918b80d9d17eca94663dbd3f5266ac77a0be60750f36102bbb0f"}, + {file = "SQLAlchemy-1.4.54-cp312-cp312-win_amd64.whl", hash = "sha256:f941aaf15f47f316123e1933f9ea91a6efda73a161a6ab6046d1cde37be62c88"}, + {file = "SQLAlchemy-1.4.54-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:a41611835010ed4ea4c7aed1da5b58aac78ee7e70932a91ed2705a7b38e40f52"}, + {file = "SQLAlchemy-1.4.54-cp36-cp36m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e8c1b9ecaf9f2590337d5622189aeb2f0dbc54ba0232fa0856cf390957584a9"}, + {file = "SQLAlchemy-1.4.54-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0de620f978ca273ce027769dc8db7e6ee72631796187adc8471b3c76091b809e"}, + {file = "SQLAlchemy-1.4.54-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c5a2530400a6e7e68fd1552a55515de6a4559122e495f73554a51cedafc11669"}, + {file = "SQLAlchemy-1.4.54-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cf7076c8578b3de4e43a046cc7a1af8466e1c3f5e64167189fe8958a4f9c02"}, + {file = "SQLAlchemy-1.4.54-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:f1e1b92ee4ee9ffc68624ace218b89ca5ca667607ccee4541a90cc44999b9aea"}, + {file = "SQLAlchemy-1.4.54-cp37-cp37m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41cffc63c7c83dfc30c4cab5b4308ba74440a9633c4509c51a0c52431fb0f8ab"}, + {file = "SQLAlchemy-1.4.54-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5933c45d11cbd9694b1540aa9076816cc7406964c7b16a380fd84d3a5fe3241"}, + {file = "SQLAlchemy-1.4.54-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cafe0ba3a96d0845121433cffa2b9232844a2609fce694fcc02f3f31214ece28"}, + {file = "SQLAlchemy-1.4.54-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a19f816f4702d7b1951d7576026c7124b9bfb64a9543e571774cf517b7a50b29"}, + {file = "SQLAlchemy-1.4.54-cp37-cp37m-win32.whl", hash = "sha256:76c2ba7b5a09863d0a8166fbc753af96d561818c572dbaf697c52095938e7be4"}, + {file = "SQLAlchemy-1.4.54-cp37-cp37m-win_amd64.whl", hash = "sha256:a86b0e4be775902a5496af4fb1b60d8a2a457d78f531458d294360b8637bb014"}, + {file = "SQLAlchemy-1.4.54-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:a49730afb716f3f675755afec109895cab95bc9875db7ffe2e42c1b1c6279482"}, + {file = "SQLAlchemy-1.4.54-cp38-cp38-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26e78444bc77d089e62874dc74df05a5c71f01ac598010a327881a48408d0064"}, + {file = "SQLAlchemy-1.4.54-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02d2ecb9508f16ab9c5af466dfe5a88e26adf2e1a8d1c56eb616396ccae2c186"}, + {file = "SQLAlchemy-1.4.54-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:394b0135900b62dbf63e4809cdc8ac923182af2816d06ea61cd6763943c2cc05"}, + {file = "SQLAlchemy-1.4.54-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed3576675c187e3baa80b02c4c9d0edfab78eff4e89dd9da736b921333a2432"}, + {file = "SQLAlchemy-1.4.54-cp38-cp38-win32.whl", hash = "sha256:fc9ffd9a38e21fad3e8c5a88926d57f94a32546e937e0be46142b2702003eba7"}, + {file = "SQLAlchemy-1.4.54-cp38-cp38-win_amd64.whl", hash = "sha256:a01bc25eb7a5688656c8770f931d5cb4a44c7de1b3cec69b84cc9745d1e4cc10"}, + {file = "SQLAlchemy-1.4.54-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:0b76bbb1cbae618d10679be8966f6d66c94f301cfc15cb49e2f2382563fb6efb"}, + {file = "SQLAlchemy-1.4.54-cp39-cp39-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdb2886c0be2c6c54d0651d5a61c29ef347e8eec81fd83afebbf7b59b80b7393"}, + {file = "SQLAlchemy-1.4.54-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:954816850777ac234a4e32b8c88ac1f7847088a6e90cfb8f0e127a1bf3feddff"}, + {file = "SQLAlchemy-1.4.54-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1d83cd1cc03c22d922ec94d0d5f7b7c96b1332f5e122e81b1a61fb22da77879a"}, + {file = "SQLAlchemy-1.4.54-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1576fba3616f79496e2f067262200dbf4aab1bb727cd7e4e006076686413c80c"}, + {file = "SQLAlchemy-1.4.54-cp39-cp39-win32.whl", hash = "sha256:3112de9e11ff1957148c6de1df2bc5cc1440ee36783412e5eedc6f53638a577d"}, + {file = "SQLAlchemy-1.4.54-cp39-cp39-win_amd64.whl", hash = "sha256:6da60fb24577f989535b8fc8b2ddc4212204aaf02e53c4c7ac94ac364150ed08"}, + {file = "sqlalchemy-1.4.54.tar.gz", hash = "sha256:4470fbed088c35dc20b78a39aaf4ae54fe81790c783b3264872a0224f437c31a"}, ] [package.dependencies] @@ -7180,21 +7228,21 @@ files = [ [[package]] name = "universal-pathlib" -version = "0.2.3" +version = "0.2.5" description = "pathlib api extended to use fsspec backends" optional = false python-versions = ">=3.8" files = [ - {file = "universal_pathlib-0.2.3-py3-none-any.whl", hash = "sha256:4e0f6f85ca7ce66aec866a9c5f32d4a081858d2e58c70a6be84fb2df1f2806d3"}, - {file = "universal_pathlib-0.2.3.tar.gz", hash = "sha256:22f5f289fedec4b663956596742652e2177bca24661b6c8a173f5974cfee0052"}, + {file = "universal_pathlib-0.2.5-py3-none-any.whl", hash = "sha256:a634f700eca827b4ad03bfa0267e51161560dd1de83b051cf0fccf39b3e56b32"}, + {file = "universal_pathlib-0.2.5.tar.gz", hash = "sha256:ea5d4fb8178c2ab469cf4fa46d0ceb16ccb378da46dbbc28a8b9c1eebdccc655"}, ] [package.dependencies] fsspec = ">=2022.1.0,<2024.3.1 || >2024.3.1" [package.extras] -dev = ["adlfs", "aiohttp", "cheroot", "gcsfs", "moto[s3,server] (<5)", "mypy (==1.10.0)", "packaging", "pydantic", "pydantic-settings", "pylint (==2.17.4)", "pytest (==8.0.0)", "pytest-cov (==4.1.0)", "pytest-mock (==3.12.0)", "pytest-mypy-plugins (==3.1.2)", "pytest-sugar (==0.9.7)", "requests", "s3fs", "smbprotocol", "webdav4[fsspec]", "wsgidav"] -tests = ["mypy (==1.10.0)", "packaging", "pylint (==2.17.4)", "pytest (==8.0.0)", "pytest-cov (==4.1.0)", "pytest-mock (==3.12.0)", "pytest-mypy-plugins (==3.1.2)", "pytest-sugar (==0.9.7)"] +dev = ["adlfs", "aiohttp", "cheroot", "gcsfs", "moto[s3,server]", "paramiko", "pydantic", "pydantic-settings", "requests", "s3fs", "smbprotocol", "webdav4[fsspec]", "wsgidav"] +tests = ["mypy (>=1.10.0)", "packaging", "pylint (>=2.17.4)", "pytest (>=8)", "pytest-cov (>=4.1.0)", "pytest-mock (>=3.12.0)", "pytest-mypy-plugins (>=3.1.2)", "pytest-sugar (>=0.9.7)"] [[package]] name = "uritemplate" @@ -7209,13 +7257,13 @@ files = [ [[package]] name = "urllib3" -version = "2.2.2" +version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, - {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, ] [package.extras] @@ -7237,13 +7285,13 @@ files = [ [[package]] name = "virtualenv" -version = "20.26.3" +version = "20.26.5" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.26.3-py3-none-any.whl", hash = "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"}, - {file = "virtualenv-20.26.3.tar.gz", hash = "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a"}, + {file = "virtualenv-20.26.5-py3-none-any.whl", hash = "sha256:4f3ac17b81fba3ce3bd6f4ead2749a72da5929c01774948e243db9ba41df4ff6"}, + {file = "virtualenv-20.26.5.tar.gz", hash = "sha256:ce489cac131aa58f4b25e321d6d186171f78e6cb13fafbf32a840cee67733ff4"}, ] [package.dependencies] @@ -7414,103 +7462,103 @@ email = ["email-validator"] [[package]] name = "yarl" -version = "1.9.7" +version = "1.11.1" description = "Yet another URL library" optional = false python-versions = ">=3.8" files = [ - {file = "yarl-1.9.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:60c04415b31a1611ef5989a6084dd6f6b95652c6a18378b58985667b65b2ecb6"}, - {file = "yarl-1.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1787dcfdbe730207acb454548a6e19f80ae75e6d2d1f531c5a777bc1ab6f7952"}, - {file = "yarl-1.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5ddad20363f9f1bbedc95789c897da62f939e6bc855793c3060ef8b9f9407bf"}, - {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdb156a06208fc9645ae7cc0fca45c40dd40d7a8c4db626e542525489ca81a9"}, - {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:522fa3d300d898402ae4e0fa7c2c21311248ca43827dc362a667de87fdb4f1be"}, - {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7f9cabfb8b980791b97a3ae3eab2e38b2ba5eab1af9b7495bdc44e1ce7c89e3"}, - {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fc728857df4087da6544fc68f62d7017fa68d74201d5b878e18ed4822c31fb3"}, - {file = "yarl-1.9.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dba2ebac677184d56374fa3e452b461f5d6a03aa132745e648ae8859361eb6b"}, - {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a95167ae34667c5cc7d9206c024f793e8ffbadfb307d5c059de470345de58a21"}, - {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9d319ac113ca47352319cbea92d1925a37cb7bd61a8c2f3e3cd2e96eb33cccae"}, - {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:2d71a5d818d82586ac46265ae01466e0bda0638760f18b21f1174e0dd58a9d2f"}, - {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ff03f1c1ac474c66d474929ae7e4dd195592c1c7cc8c36418528ed81b1ca0a79"}, - {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78250f635f221dde97d02c57aade3313310469bc291888dfe32acd1012594441"}, - {file = "yarl-1.9.7-cp310-cp310-win32.whl", hash = "sha256:f3aaf9fa960d55bd7876d55d7ea3cc046f3660df1ff73fc1b8c520a741ed1f21"}, - {file = "yarl-1.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:e8362c941e07fbcde851597672a5e41b21dc292b7d5a1dc439b7a93c9a1af5d9"}, - {file = "yarl-1.9.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:596069ddeaf72b5eb36cd714dcd2b5751d0090d05a8d65113b582ed9e1c801fb"}, - {file = "yarl-1.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cb870907e8b86b2f32541403da9455afc1e535ce483e579bea0e6e79a0cc751c"}, - {file = "yarl-1.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ca5e86be84492fa403c4dcd4dcaf8e1b1c4ffc747b5176f7c3d09878c45719b0"}, - {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99cecfb51c84d00132db909e83ae388793ca86e48df7ae57f1be0beab0dcce5"}, - {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25508739e9b44d251172145f54c084b71747b09e4d237dc2abb045f46c36a66e"}, - {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:60f3b5aec3146b6992640592856414870f5b20eb688c1f1d5f7ac010a7f86561"}, - {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1557456afce5db3d655b5f8a31cdcaae1f47e57958760525c44b76e812b4987"}, - {file = "yarl-1.9.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71bb1435a84688ed831220c5305d96161beb65cac4a966374475348aa3de4575"}, - {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f87d8645a7a806ec8f66aac5e3b1dcb5014849ff53ffe2a1f0b86ca813f534c7"}, - {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:58e3f01673873b8573da3abe138debc63e4e68541b2104a55df4c10c129513a4"}, - {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8af0bbd4d84f8abdd9b11be9488e32c76b1501889b73c9e2292a15fb925b378b"}, - {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7fc441408ed0d9c6d2d627a02e281c21f5de43eb5209c16636a17fc704f7d0f8"}, - {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a9552367dc440870556da47bb289a806f08ad06fbc4054072d193d9e5dd619ba"}, - {file = "yarl-1.9.7-cp311-cp311-win32.whl", hash = "sha256:628619008680a11d07243391271b46f07f13b75deb9fe92ef342305058c70722"}, - {file = "yarl-1.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:bc23d870864971c8455cfba17498ccefa53a5719ea9f5fce5e7e9c1606b5755f"}, - {file = "yarl-1.9.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d8cf3d0b67996edc11957aece3fbce4c224d0451c7c3d6154ec3a35d0e55f6b"}, - {file = "yarl-1.9.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3a7748cd66fef49c877e59503e0cc76179caf1158d1080228e67e1db14554f08"}, - {file = "yarl-1.9.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a6fa3aeca8efabb0fbbb3b15e0956b0cb77f7d9db67c107503c30af07cd9e00"}, - {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf37dd0008e5ac5c3880198976063c491b6a15b288d150d12833248cf2003acb"}, - {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87aa5308482f248f8c3bd9311cd6c7dfd98ea1a8e57e35fb11e4adcac3066003"}, - {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:867b13c1b361f9ba5d2f84dc5408082f5d744c83f66de45edc2b96793a9c5e48"}, - {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48ce93947554c2c85fe97fc4866646ec90840bc1162e4db349b37d692a811755"}, - {file = "yarl-1.9.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcd3d94b848cba132f39a5b40d80b0847d001a91a6f35a2204505cdd46afe1b2"}, - {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d06d6a8f98dd87646d98f0c468be14b201e47ec6092ad569adf835810ad0dffb"}, - {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:91567ff4fce73d2e7ac67ed5983ad26ba2343bc28cb22e1e1184a9677df98d7c"}, - {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1d5594512541e63188fea640b7f066c218d2176203d6e6f82abf702ae3dca3b2"}, - {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9c2743e43183e4afbb07d5605693299b8756baff0b086c25236c761feb0e3c56"}, - {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:daa69a3a2204355af39f4cfe7f3870d87c53d77a597b5100b97e3faa9460428b"}, - {file = "yarl-1.9.7-cp312-cp312-win32.whl", hash = "sha256:36b16884336c15adf79a4bf1d592e0c1ffdb036a760e36a1361565b66785ec6c"}, - {file = "yarl-1.9.7-cp312-cp312-win_amd64.whl", hash = "sha256:2ead2f87a1174963cc406d18ac93d731fbb190633d3995fa052d10cefae69ed8"}, - {file = "yarl-1.9.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:808eddabcb6f7b2cdb6929b3e021ac824a2c07dc7bc83f7618e18438b1b65781"}, - {file = "yarl-1.9.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:395ab0d8ce6d104a988da429bcbfd445e03fb4c911148dfd523f69d13f772e47"}, - {file = "yarl-1.9.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:49827dfccbd59c4499605c13805e947349295466e490860a855b7c7e82ec9c75"}, - {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6b8bbdd425d0978311520ea99fb6c0e9e04e64aee84fac05f3157ace9f81b05"}, - {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71d33fd1c219b5b28ee98cd76da0c9398a4ed4792fd75c94135237db05ba5ca8"}, - {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:62440431741d0b7d410e5cbad800885e3289048140a43390ecab4f0b96dde3bb"}, - {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db97210433366dfba55590e48285b89ad0146c52bf248dd0da492dd9f0f72cf"}, - {file = "yarl-1.9.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:653597b615809f2e5f4dba6cd805608b6fd3597128361a22cc612cf7c7a4d1bf"}, - {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:df47612129e66f7ce7c9994d4cd4e6852f6e3bf97699375d86991481796eeec8"}, - {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5e338b6febbae6c9fe86924bac3ea9c1944e33255c249543cd82a4af6df6047b"}, - {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e649d37d04665dddb90994bbf0034331b6c14144cc6f3fbce400dc5f28dc05b7"}, - {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0a1b8fd849567be56342e988e72c9d28bd3c77b9296c38b9b42d2fe4813c9d3f"}, - {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f9d715b2175dff9a49c6dafdc2ab3f04850ba2f3d4a77f69a5a1786b057a9d45"}, - {file = "yarl-1.9.7-cp313-cp313-win32.whl", hash = "sha256:bc9233638b07c2e4a3a14bef70f53983389bffa9e8cb90a2da3f67ac9c5e1842"}, - {file = "yarl-1.9.7-cp313-cp313-win_amd64.whl", hash = "sha256:62e110772330d7116f91e79cd83fef92545cb2f36414c95881477aa01971f75f"}, - {file = "yarl-1.9.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a564155cc2194ecd9c0d8f8dc57059b822a507de5f08120063675eb9540576aa"}, - {file = "yarl-1.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03e917cc44a01e1be60a83ee1a17550b929490aaa5df2a109adc02137bddf06b"}, - {file = "yarl-1.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:eefda67ba0ba44ab781e34843c266a76f718772b348f7c5d798d8ea55b95517f"}, - {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:316c82b499b6df41444db5dea26ee23ece9356e38cea43a8b2af9e6d8a3558e4"}, - {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10452727843bc847596b75e30a7fe92d91829f60747301d1bd60363366776b0b"}, - {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:050f3e4d886be55728fef268587d061c5ce6f79a82baba71840801b63441c301"}, - {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0aabe557446aa615693a82b4d3803c102fd0e7a6a503bf93d744d182a510184"}, - {file = "yarl-1.9.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23404842228e6fa8ace235024519df37f3f8e173620407644d40ddca571ff0f4"}, - {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:34736fcc9d6d7080ebbeb0998ecb91e4f14ad8f18648cf0b3099e2420a225d86"}, - {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:48f7a158f3ca67509d21cb02a96964e4798b6f133691cc0c86cf36e26e26ec8f"}, - {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:6639444d161c693cdabb073baaed1945c717d3982ecedf23a219bc55a242e728"}, - {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:1cd450e10cb53d63962757c3f6f7870be49a3e448c46621d6bd46f8088d532de"}, - {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:74d3ef5e81f81507cea04bf5ae22f18ef538607a7c754aac2b6e3029956a2842"}, - {file = "yarl-1.9.7-cp38-cp38-win32.whl", hash = "sha256:4052dbd0c900bece330e3071c636f99dff06e4628461a29b38c6e222a427cf98"}, - {file = "yarl-1.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:dd08da4f2d171e19bd02083c921f1bef89f8f5f87000d0ffc49aa257bc5a9802"}, - {file = "yarl-1.9.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ab906a956d2109c6ea11e24c66592b06336e2743509290117f0f7f47d2c1dd3"}, - {file = "yarl-1.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d8ad761493d5aaa7ab2a09736e62b8a220cb0b10ff8ccf6968c861cd8718b915"}, - {file = "yarl-1.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d35f9cdab0ec5e20cf6d2bd46456cf599052cf49a1698ef06b9592238d1cf1b1"}, - {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a48d2b9f0ae29a456fb766ae461691378ecc6cf159dd9f938507d925607591c3"}, - {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cf85599c9336b89b92c313519bcaa223d92fa5d98feb4935a47cce2e8722b4b8"}, - {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e8916b1ff7680b1f2b1608c82dc15c569b9f2cb2da100c747c291f1acf18a14"}, - {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29c80890e0a64fb0e5f71350d48da330995073881f8b8e623154aef631febfb0"}, - {file = "yarl-1.9.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9163d21aa40ff8528db2aee2b0b6752efe098055b41ab8e5422b2098457199fe"}, - {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:65e3098969baf221bb45e3b2f60735fc2b154fc95902131ebc604bae4c629ea6"}, - {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cddebd096effe4be90fd378e4224cd575ac99e1c521598a6900e94959006e02e"}, - {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:8525f955a2dcc281573b6aadeb8ab9c37e2d3428b64ca6a2feec2a794a69c1da"}, - {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:5d585c7d834c13f24c7e3e0efaf1a4b7678866940802e11bd6c4d1f99c935e6b"}, - {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:78805148e780a9ca66f3123e04741e344b66cf06b4fb13223e3a209f39a6da55"}, - {file = "yarl-1.9.7-cp39-cp39-win32.whl", hash = "sha256:3f53df493ec80b76969d6e1ae6e4411a55ab1360e02b80c84bd4b33d61a567ba"}, - {file = "yarl-1.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:c81c28221a85add23a0922a6aeb2cdda7f9723e03e2dfae06fee5c57fe684262"}, - {file = "yarl-1.9.7-py3-none-any.whl", hash = "sha256:49935cc51d272264358962d050d726c3e5603a616f53e52ea88e9df1728aa2ee"}, - {file = "yarl-1.9.7.tar.gz", hash = "sha256:f28e602edeeec01fc96daf7728e8052bc2e12a672e2a138561a1ebaf30fd9df7"}, + {file = "yarl-1.11.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:400cd42185f92de559d29eeb529e71d80dfbd2f45c36844914a4a34297ca6f00"}, + {file = "yarl-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8258c86f47e080a258993eed877d579c71da7bda26af86ce6c2d2d072c11320d"}, + {file = "yarl-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2164cd9725092761fed26f299e3f276bb4b537ca58e6ff6b252eae9631b5c96e"}, + {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08ea567c16f140af8ddc7cb58e27e9138a1386e3e6e53982abaa6f2377b38cc"}, + {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:768ecc550096b028754ea28bf90fde071c379c62c43afa574edc6f33ee5daaec"}, + {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2909fa3a7d249ef64eeb2faa04b7957e34fefb6ec9966506312349ed8a7e77bf"}, + {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01a8697ec24f17c349c4f655763c4db70eebc56a5f82995e5e26e837c6eb0e49"}, + {file = "yarl-1.11.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e286580b6511aac7c3268a78cdb861ec739d3e5a2a53b4809faef6b49778eaff"}, + {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4179522dc0305c3fc9782549175c8e8849252fefeb077c92a73889ccbcd508ad"}, + {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:27fcb271a41b746bd0e2a92182df507e1c204759f460ff784ca614e12dd85145"}, + {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f61db3b7e870914dbd9434b560075e0366771eecbe6d2b5561f5bc7485f39efd"}, + {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:c92261eb2ad367629dc437536463dc934030c9e7caca861cc51990fe6c565f26"}, + {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d95b52fbef190ca87d8c42f49e314eace4fc52070f3dfa5f87a6594b0c1c6e46"}, + {file = "yarl-1.11.1-cp310-cp310-win32.whl", hash = "sha256:489fa8bde4f1244ad6c5f6d11bb33e09cf0d1d0367edb197619c3e3fc06f3d91"}, + {file = "yarl-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:476e20c433b356e16e9a141449f25161e6b69984fb4cdbd7cd4bd54c17844998"}, + {file = "yarl-1.11.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:946eedc12895873891aaceb39bceb484b4977f70373e0122da483f6c38faaa68"}, + {file = "yarl-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:21a7c12321436b066c11ec19c7e3cb9aec18884fe0d5b25d03d756a9e654edfe"}, + {file = "yarl-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c35f493b867912f6fda721a59cc7c4766d382040bdf1ddaeeaa7fa4d072f4675"}, + {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25861303e0be76b60fddc1250ec5986c42f0a5c0c50ff57cc30b1be199c00e63"}, + {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4b53f73077e839b3f89c992223f15b1d2ab314bdbdf502afdc7bb18e95eae27"}, + {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:327c724b01b8641a1bf1ab3b232fb638706e50f76c0b5bf16051ab65c868fac5"}, + {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4307d9a3417eea87715c9736d050c83e8c1904e9b7aada6ce61b46361b733d92"}, + {file = "yarl-1.11.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48a28bed68ab8fb7e380775f0029a079f08a17799cb3387a65d14ace16c12e2b"}, + {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:067b961853c8e62725ff2893226fef3d0da060656a9827f3f520fb1d19b2b68a"}, + {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8215f6f21394d1f46e222abeb06316e77ef328d628f593502d8fc2a9117bde83"}, + {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:498442e3af2a860a663baa14fbf23fb04b0dd758039c0e7c8f91cb9279799bff"}, + {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:69721b8effdb588cb055cc22f7c5105ca6fdaa5aeb3ea09021d517882c4a904c"}, + {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e969fa4c1e0b1a391f3fcbcb9ec31e84440253325b534519be0d28f4b6b533e"}, + {file = "yarl-1.11.1-cp311-cp311-win32.whl", hash = "sha256:7d51324a04fc4b0e097ff8a153e9276c2593106a811704025bbc1d6916f45ca6"}, + {file = "yarl-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:15061ce6584ece023457fb8b7a7a69ec40bf7114d781a8c4f5dcd68e28b5c53b"}, + {file = "yarl-1.11.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a4264515f9117be204935cd230fb2a052dd3792789cc94c101c535d349b3dab0"}, + {file = "yarl-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f41fa79114a1d2eddb5eea7b912d6160508f57440bd302ce96eaa384914cd265"}, + {file = "yarl-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:02da8759b47d964f9173c8675710720b468aa1c1693be0c9c64abb9d8d9a4867"}, + {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9361628f28f48dcf8b2f528420d4d68102f593f9c2e592bfc842f5fb337e44fd"}, + {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b91044952da03b6f95fdba398d7993dd983b64d3c31c358a4c89e3c19b6f7aef"}, + {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:74db2ef03b442276d25951749a803ddb6e270d02dda1d1c556f6ae595a0d76a8"}, + {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e975a2211952a8a083d1b9d9ba26472981ae338e720b419eb50535de3c02870"}, + {file = "yarl-1.11.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aef97ba1dd2138112890ef848e17d8526fe80b21f743b4ee65947ea184f07a2"}, + {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a7915ea49b0c113641dc4d9338efa9bd66b6a9a485ffe75b9907e8573ca94b84"}, + {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:504cf0d4c5e4579a51261d6091267f9fd997ef58558c4ffa7a3e1460bd2336fa"}, + {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3de5292f9f0ee285e6bd168b2a77b2a00d74cbcfa420ed078456d3023d2f6dff"}, + {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a34e1e30f1774fa35d37202bbeae62423e9a79d78d0874e5556a593479fdf239"}, + {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:66b63c504d2ca43bf7221a1f72fbe981ff56ecb39004c70a94485d13e37ebf45"}, + {file = "yarl-1.11.1-cp312-cp312-win32.whl", hash = "sha256:a28b70c9e2213de425d9cba5ab2e7f7a1c8ca23a99c4b5159bf77b9c31251447"}, + {file = "yarl-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:17b5a386d0d36fb828e2fb3ef08c8829c1ebf977eef88e5367d1c8c94b454639"}, + {file = "yarl-1.11.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1fa2e7a406fbd45b61b4433e3aa254a2c3e14c4b3186f6e952d08a730807fa0c"}, + {file = "yarl-1.11.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:750f656832d7d3cb0c76be137ee79405cc17e792f31e0a01eee390e383b2936e"}, + {file = "yarl-1.11.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0b8486f322d8f6a38539136a22c55f94d269addb24db5cb6f61adc61eabc9d93"}, + {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fce4da3703ee6048ad4138fe74619c50874afe98b1ad87b2698ef95bf92c96d"}, + {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed653638ef669e0efc6fe2acb792275cb419bf9cb5c5049399f3556995f23c7"}, + {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18ac56c9dd70941ecad42b5a906820824ca72ff84ad6fa18db33c2537ae2e089"}, + {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:688654f8507464745ab563b041d1fb7dab5d9912ca6b06e61d1c4708366832f5"}, + {file = "yarl-1.11.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4973eac1e2ff63cf187073cd4e1f1148dcd119314ab79b88e1b3fad74a18c9d5"}, + {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:964a428132227edff96d6f3cf261573cb0f1a60c9a764ce28cda9525f18f7786"}, + {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6d23754b9939cbab02c63434776df1170e43b09c6a517585c7ce2b3d449b7318"}, + {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c2dc4250fe94d8cd864d66018f8344d4af50e3758e9d725e94fecfa27588ff82"}, + {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09696438cb43ea6f9492ef237761b043f9179f455f405279e609f2bc9100212a"}, + {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:999bfee0a5b7385a0af5ffb606393509cfde70ecca4f01c36985be6d33e336da"}, + {file = "yarl-1.11.1-cp313-cp313-win32.whl", hash = "sha256:ce928c9c6409c79e10f39604a7e214b3cb69552952fbda8d836c052832e6a979"}, + {file = "yarl-1.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:501c503eed2bb306638ccb60c174f856cc3246c861829ff40eaa80e2f0330367"}, + {file = "yarl-1.11.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dae7bd0daeb33aa3e79e72877d3d51052e8b19c9025ecf0374f542ea8ec120e4"}, + {file = "yarl-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3ff6b1617aa39279fe18a76c8d165469c48b159931d9b48239065767ee455b2b"}, + {file = "yarl-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3257978c870728a52dcce8c2902bf01f6c53b65094b457bf87b2644ee6238ddc"}, + {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f351fa31234699d6084ff98283cb1e852270fe9e250a3b3bf7804eb493bd937"}, + {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8aef1b64da41d18026632d99a06b3fefe1d08e85dd81d849fa7c96301ed22f1b"}, + {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7175a87ab8f7fbde37160a15e58e138ba3b2b0e05492d7351314a250d61b1591"}, + {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba444bdd4caa2a94456ef67a2f383710928820dd0117aae6650a4d17029fa25e"}, + {file = "yarl-1.11.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ea9682124fc062e3d931c6911934a678cb28453f957ddccf51f568c2f2b5e05"}, + {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8418c053aeb236b20b0ab8fa6bacfc2feaaf7d4683dd96528610989c99723d5f"}, + {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:61a5f2c14d0a1adfdd82258f756b23a550c13ba4c86c84106be4c111a3a4e413"}, + {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f3a6d90cab0bdf07df8f176eae3a07127daafcf7457b997b2bf46776da2c7eb7"}, + {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:077da604852be488c9a05a524068cdae1e972b7dc02438161c32420fb4ec5e14"}, + {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:15439f3c5c72686b6c3ff235279630d08936ace67d0fe5c8d5bbc3ef06f5a420"}, + {file = "yarl-1.11.1-cp38-cp38-win32.whl", hash = "sha256:238a21849dd7554cb4d25a14ffbfa0ef380bb7ba201f45b144a14454a72ffa5a"}, + {file = "yarl-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:67459cf8cf31da0e2cbdb4b040507e535d25cfbb1604ca76396a3a66b8ba37a6"}, + {file = "yarl-1.11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:884eab2ce97cbaf89f264372eae58388862c33c4f551c15680dd80f53c89a269"}, + {file = "yarl-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a336eaa7ee7e87cdece3cedb395c9657d227bfceb6781295cf56abcd3386a26"}, + {file = "yarl-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87f020d010ba80a247c4abc335fc13421037800ca20b42af5ae40e5fd75e7909"}, + {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:637c7ddb585a62d4469f843dac221f23eec3cbad31693b23abbc2c366ad41ff4"}, + {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:48dfd117ab93f0129084577a07287376cc69c08138694396f305636e229caa1a"}, + {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e0ae31fb5ccab6eda09ba1494e87eb226dcbd2372dae96b87800e1dcc98804"}, + {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f46f81501160c28d0c0b7333b4f7be8983dbbc161983b6fb814024d1b4952f79"}, + {file = "yarl-1.11.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04293941646647b3bfb1719d1d11ff1028e9c30199509a844da3c0f5919dc520"}, + {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:250e888fa62d73e721f3041e3a9abf427788a1934b426b45e1b92f62c1f68366"}, + {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e8f63904df26d1a66aabc141bfd258bf738b9bc7bc6bdef22713b4f5ef789a4c"}, + {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:aac44097d838dda26526cffb63bdd8737a2dbdf5f2c68efb72ad83aec6673c7e"}, + {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:267b24f891e74eccbdff42241c5fb4f974de2d6271dcc7d7e0c9ae1079a560d9"}, + {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6907daa4b9d7a688063ed098c472f96e8181733c525e03e866fb5db480a424df"}, + {file = "yarl-1.11.1-cp39-cp39-win32.whl", hash = "sha256:14438dfc5015661f75f85bc5adad0743678eefee266ff0c9a8e32969d5d69f74"}, + {file = "yarl-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:94d0caaa912bfcdc702a4204cd5e2bb01eb917fc4f5ea2315aa23962549561b0"}, + {file = "yarl-1.11.1-py3-none-any.whl", hash = "sha256:72bf26f66456baa0584eff63e44545c9f0eaed9b73cb6601b647c91f14c11f38"}, + {file = "yarl-1.11.1.tar.gz", hash = "sha256:1bb2d9e212fb7449b8fb73bc461b51eaa17cc8430b4a87d87be7b25052d92f53"}, ] [package.dependencies] @@ -7519,13 +7567,13 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.20.1" +version = "3.20.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.20.1-py3-none-any.whl", hash = "sha256:9960cd8967c8f85a56f920d5d507274e74f9ff813a0ab8889a5b5be2daf44064"}, - {file = "zipp-3.20.1.tar.gz", hash = "sha256:c22b14cc4763c5a5b04134207736c107db42e9d3ef2d9779d465f5f1bcba572b"}, + {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, + {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, ] [package.extras] @@ -7720,4 +7768,4 @@ cffi = ["cffi (>=1.11)"] [metadata] lock-version = "2.0" python-versions = "^3.10, <3.11" -content-hash = "c3a428c92e2c09d5d9b28f4b68a09cf0a309056d538589656ecf271695c46db5" +content-hash = "ce615c6b61d23a10d5f89fea9d1c6e569e5b6300e58506ad25d798cd510bd6e2" diff --git a/pyproject.toml b/pyproject.toml index 2a3d3b5..0594539 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,6 @@ pyyaml = "^6.0.1" google = "^3.0.0" pendulum = "^3.0.0" apache-airflow-providers-apache-beam = "^5.7.1" -typing-extensions = "^4.12.2" requests = "^2.32.3" pyhocon = "^0.3.61" diff --git a/src/ot_orchestration/dags/config/eqtl_ingestion.yaml b/src/ot_orchestration/dags/config/eqtl_ingestion.yaml index 3015346..c3e3c52 100644 --- a/src/ot_orchestration/dags/config/eqtl_ingestion.yaml +++ b/src/ot_orchestration/dags/config/eqtl_ingestion.yaml @@ -2,7 +2,6 @@ eqtl_catalogue_raw_susie_glob: gs://eqtl_catalogue_data/ebi_ftp/susie/**/*.gz eqtl_catalogue_decompressed_susie_path: gs://eqtl_catalogue_data/ebi_ftp/susie_decompressed_tmp decompression_logs: gs://eqtl_catalogue_data/ebi_ftp/susie_decompressed_tmp/logs.log - dataproc: python_main_module: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/cli.py cluster_metadata: From ebdf0bf93b50bf38f72937aa3ccffb6fc7228e71 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 13:45:42 +0100 Subject: [PATCH 21/24] chore: yaml format --- src/ot_orchestration/dags/config/eqtl_ingestion.yaml | 2 +- .../dags/config/finngen_ukb_meta_harmonisation.yaml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ot_orchestration/dags/config/eqtl_ingestion.yaml b/src/ot_orchestration/dags/config/eqtl_ingestion.yaml index c3e3c52..f0111df 100644 --- a/src/ot_orchestration/dags/config/eqtl_ingestion.yaml +++ b/src/ot_orchestration/dags/config/eqtl_ingestion.yaml @@ -1,6 +1,6 @@ eqtl_catalogue_raw_susie_glob: gs://eqtl_catalogue_data/ebi_ftp/susie/**/*.gz eqtl_catalogue_decompressed_susie_path: gs://eqtl_catalogue_data/ebi_ftp/susie_decompressed_tmp -decompression_logs: gs://eqtl_catalogue_data/ebi_ftp/susie_decompressed_tmp/logs.log +decompression_logs: gs://eqtl_catalogue_data/ebi_ftp/susie_decompressed_tmp/logs.log dataproc: python_main_module: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/cli.py diff --git a/src/ot_orchestration/dags/config/finngen_ukb_meta_harmonisation.yaml b/src/ot_orchestration/dags/config/finngen_ukb_meta_harmonisation.yaml index fbe3ca2..6a5ff38 100644 --- a/src/ot_orchestration/dags/config/finngen_ukb_meta_harmonisation.yaml +++ b/src/ot_orchestration/dags/config/finngen_ukb_meta_harmonisation.yaml @@ -5,7 +5,6 @@ dataproc: cluster_init_script: gs://genetics_etl_python_playground/initialisation/0.0.0/install_dependencies_on_cluster.sh cluster_name: otg-finngen-ukb-meta - nodes: - id: finngen_ukb_meta_ingestion king: Task From f18f47afbc365a95514336f92148de498cabd09e Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 13:15:41 +0100 Subject: [PATCH 22/24] genetics_etl --- src/ot_orchestration/dags/genetics_etl.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/ot_orchestration/dags/genetics_etl.py b/src/ot_orchestration/dags/genetics_etl.py index 544f368..58794d5 100644 --- a/src/ot_orchestration/dags/genetics_etl.py +++ b/src/ot_orchestration/dags/genetics_etl.py @@ -10,12 +10,8 @@ from airflow.providers.google.cloud.transfers.gcs_to_gcs import GCSToGCSOperator from airflow.utils.task_group import TaskGroup -from ot_orchestration.utils.common import ( - convert_params_to_hydra_positional_arg, - shared_dag_args, - shared_dag_kwargs, -) -from ot_orchestration.utils.dataproc import generate_dag, submit_step +from ot_orchestration.utils.common import shared_dag_args, shared_dag_kwargs +from ot_orchestration.utils.dataproc import generate_dataproc_task_chain from ot_orchestration.utils.path import GCSPath from ot_orchestration.utils.utils import check_gcp_folder_exists, read_yaml_config From 3f91173a498daa27d088cd3e719752e990502a40 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 14:33:45 +0100 Subject: [PATCH 23/24] feat: deprecate hydra structured config --- config/datasets/ot_gcp.yaml | 80 ---------------------- config/ot_config.yaml | 5 -- config/step/ot_colocalisation_coloc.yaml | 6 -- config/step/ot_colocalisation_ecaviar.yaml | 6 -- config/step/ot_gene_index.yaml | 4 -- config/step/ot_locus_to_gene_predict.yaml | 11 --- config/step/ot_locus_to_gene_train.yaml | 19 ----- config/step/ot_variant_index.yaml | 6 -- config/step/ot_variant_to_gene.yaml | 12 ---- config/step/session/dataproc.yaml | 4 -- 10 files changed, 153 deletions(-) delete mode 100644 config/datasets/ot_gcp.yaml delete mode 100644 config/ot_config.yaml delete mode 100644 config/step/ot_colocalisation_coloc.yaml delete mode 100644 config/step/ot_colocalisation_ecaviar.yaml delete mode 100644 config/step/ot_gene_index.yaml delete mode 100644 config/step/ot_locus_to_gene_predict.yaml delete mode 100644 config/step/ot_locus_to_gene_train.yaml delete mode 100644 config/step/ot_variant_index.yaml delete mode 100644 config/step/ot_variant_to_gene.yaml delete mode 100644 config/step/session/dataproc.yaml diff --git a/config/datasets/ot_gcp.yaml b/config/datasets/ot_gcp.yaml deleted file mode 100644 index deaaaa0..0000000 --- a/config/datasets/ot_gcp.yaml +++ /dev/null @@ -1,80 +0,0 @@ -# Release specific configuration: -release_version: "24.09" -dev_version: XX.XX -release_folder: gs://genetics_etl_python_playground/releases/${datasets.release_version} - -inputs: gs://genetics_etl_python_playground/input -static_assets: gs://genetics_etl_python_playground/static_assets -outputs: gs://genetics_etl_python_playground/output/python_etl/parquet/${datasets.dev_version} - -## Datasets: -# GWAS -gwas_catalog_dataset: gs://gwas_catalog_data -# Ingestion input files: -gwas_catalog_associations: ${datasets.gwas_catalog_dataset}/curated_inputs/gwas_catalog_associations_ontology_annotated.tsv -gwas_catalog_studies: - - ${datasets.gwas_catalog_dataset}/curated_inputs/gwas_catalog_download_studies.tsv - - ${datasets.gwas_catalog_dataset}/curated_inputs/gwas_catalog_unpublished_studies.tsv -gwas_catalog_ancestries: - - ${datasets.gwas_catalog_dataset}/curated_inputs/gwas_catalog_download_ancestries.tsv - - ${datasets.gwas_catalog_dataset}/curated_inputs/gwas_catalog_unpublished_ancestries.tsv -gwas_catalog_sumstats_lut: ${datasets.gwas_catalog_dataset}/curated_inputs/harmonised_list.txt -gwas_catalog_study_curation: ${datasets.gwas_catalog_dataset}/manifests/gwas_catalog_study_curation.tsv -# Harmonised summary statistics list: -gwas_catalog_summary_stats_list: ${datasets.gwas_catalog_dataset}/manifests/gwas_catalog_harmonised_summary_statistics_list.txt -# Inclusion lists: -gwas_catalog_curated_inclusion_list: ${datasets.gwas_catalog_dataset}/manifests/gwas_catalog_curation_included_studies -gwas_catalog_summary_statistics_inclusion_list: ${datasets.gwas_catalog_dataset}/manifests/gwas_catalog_summary_statistics_included_studies -# Ingestion output folders: -gwas_catalog_study_index: ${datasets.gwas_catalog_dataset}/study_index -gwas_catalog_study_locus_folder: ${datasets.gwas_catalog_dataset}/study_locus_datasets -gwas_catalog_credible_set_folder: ${datasets.gwas_catalog_dataset}/credible_set_datasets - -# GnomAD -gnomad_public_bucket: gs://gcp-public-data--gnomad/release/ -# LD generation -# Templates require placeholders {POP} to expand template to match multiple populationwise paths -ld_matrix_template: ${datasets.gnomad_public_bucket}/2.1.1/ld/gnomad.genomes.r2.1.1.{POP}.common.adj.ld.bm -ld_index_raw_template: ${datasets.gnomad_public_bucket}/2.1.1/ld/gnomad.genomes.r2.1.1.{POP}.common.ld.variant_indices.ht -liftover_ht_path: ${datasets.gnomad_public_bucket}/2.1.1/liftover_grch38/ht/genomes/gnomad.genomes.r2.1.1.sites.liftover_grch38.ht -# GnomAD variant set: -gnomad_genomes_path: ${datasets.gnomad_public_bucket}4.0/ht/genomes/gnomad.genomes.v4.0.sites.ht/ - -# Others -chain_38_37: gs://hail-common/references/grch38_to_grch37.over.chain.gz -chain_37_38: ${datasets.static_assets}/grch37_to_grch38.over.chain -vep_consequences: ${datasets.static_assets}/variant_consequence_to_score.tsv -anderson: ${datasets.static_assets}/andersson2014/enhancer_tss_associations.bed -javierre: ${datasets.static_assets}/javierre_2016_preprocessed -jung: ${datasets.static_assets}/jung2019_pchic_tableS3.csv -thurman: ${datasets.static_assets}/thurman2012/genomewideCorrs_above0.7_promoterPlusMinus500kb_withGeneNames_32celltypeCategories.bed8.gz -target_index: ${datasets.static_assets}/targets # OTP 23.12 data -gene_interactions: ${datasets.static_assets}/interaction # OTP 23.12 data - -# Dev output datasets -gnomad_variants: ${datasets.static_assets}/gnomad_variants -study_locus: ${datasets.outputs}/study_locus -summary_statistics: ${datasets.outputs}/summary_statistics -study_locus_overlap: ${datasets.outputs}/study_locus_overlap -susie_finemapping: ${datasets.outputs}/finngen_susie_finemapping - -ld_index: ${datasets.static_assets}/ld_index -catalog_study_index: ${datasets.study_index}/catalog -catalog_study_locus: ${datasets.study_locus}/catalog_study_locus - -from_sumstats_study_locus: ${datasets.study_locus}/from_sumstats -from_sumstats_pics: ${datasets.credible_set}/from_sumstats - -vep_output_path: gs://genetics_etl_python_playground/vep/full_variant_index_vcf - -# ETL output datasets: -l2g_gold_standard_curation: ${datasets.release_folder}/locus_to_gene_gold_standard.json -l2g_model: ${datasets.release_folder}/locus_to_gene_model/classifier.skops -l2g_predictions: ${datasets.release_folder}/locus_to_gene_predictions -l2g_feature_matrix: ${datasets.release_folder}/locus_to_gene_feature_matrix -colocalisation: ${datasets.release_folder}/colocalisation -study_index: ${datasets.release_folder}/study_index -variant_index: ${datasets.release_folder}/variant_index -credible_set: ${datasets.release_folder}/credible_set -gene_index: ${datasets.release_folder}/gene_index -variant_to_gene: ${datasets.release_folder}/variant_to_gene diff --git a/config/ot_config.yaml b/config/ot_config.yaml deleted file mode 100644 index 7f28a58..0000000 --- a/config/ot_config.yaml +++ /dev/null @@ -1,5 +0,0 @@ -defaults: - - config - - datasets: ot_gcp - - _self_ - - override step/session: dataproc diff --git a/config/step/ot_colocalisation_coloc.yaml b/config/step/ot_colocalisation_coloc.yaml deleted file mode 100644 index 72fdd56..0000000 --- a/config/step/ot_colocalisation_coloc.yaml +++ /dev/null @@ -1,6 +0,0 @@ -defaults: - - colocalisation -credible_set_path: ${datasets.credible_set} -study_index_path: ${datasets.study_index} -coloc_path: ${datasets.colocalisation} -colocalisation_method: Coloc diff --git a/config/step/ot_colocalisation_ecaviar.yaml b/config/step/ot_colocalisation_ecaviar.yaml deleted file mode 100644 index 054bace..0000000 --- a/config/step/ot_colocalisation_ecaviar.yaml +++ /dev/null @@ -1,6 +0,0 @@ -defaults: - - colocalisation -credible_set_path: ${datasets.credible_set} -study_index_path: ${datasets.study_index} -coloc_path: ${datasets.colocalisation} -colocalisation_method: ECaviar diff --git a/config/step/ot_gene_index.yaml b/config/step/ot_gene_index.yaml deleted file mode 100644 index cbe9d46..0000000 --- a/config/step/ot_gene_index.yaml +++ /dev/null @@ -1,4 +0,0 @@ -defaults: - - gene_index -target_path: ${datasets.target_index} -gene_index_path: ${datasets.gene_index} diff --git a/config/step/ot_locus_to_gene_predict.yaml b/config/step/ot_locus_to_gene_predict.yaml deleted file mode 100644 index c3cb88b..0000000 --- a/config/step/ot_locus_to_gene_predict.yaml +++ /dev/null @@ -1,11 +0,0 @@ -defaults: - - locus_to_gene - -run_mode: predict -model_path: null -predictions_path: ${datasets.l2g_predictions} -feature_matrix_path: ${datasets.l2g_feature_matrix} -credible_set_path: ${datasets.credible_set} -variant_gene_path: ${datasets.variant_to_gene} -colocalisation_path: ${datasets.colocalisation} -study_index_path: ${datasets.study_index} diff --git a/config/step/ot_locus_to_gene_train.yaml b/config/step/ot_locus_to_gene_train.yaml deleted file mode 100644 index 013ef8f..0000000 --- a/config/step/ot_locus_to_gene_train.yaml +++ /dev/null @@ -1,19 +0,0 @@ -defaults: - - locus_to_gene - -run_mode: train -wandb_run_name: "24.09" -hf_hub_repo_id: opentargets/locus_to_gene -model_path: ${datasets.l2g_model} -predictions_path: ${datasets.l2g_predictions} -credible_set_path: ${datasets.credible_set} -variant_gene_path: ${datasets.variant_to_gene} -colocalisation_path: ${datasets.colocalisation} -study_index_path: ${datasets.study_index} -gold_standard_curation_path: ${datasets.l2g_gold_standard_curation} -gene_interactions_path: ${datasets.gene_interactions} -hyperparameters: - n_estimators: 100 - max_depth: 5 - loss: log_loss -download_from_hub: true diff --git a/config/step/ot_variant_index.yaml b/config/step/ot_variant_index.yaml deleted file mode 100644 index 00b6b16..0000000 --- a/config/step/ot_variant_index.yaml +++ /dev/null @@ -1,6 +0,0 @@ -defaults: - - variant_index - -vep_output_json_path: ${datasets.vep_output_path} -gnomad_variant_annotations_path: ${datasets.gnomad_variants} -variant_index_path: ${datasets.variant_index} diff --git a/config/step/ot_variant_to_gene.yaml b/config/step/ot_variant_to_gene.yaml deleted file mode 100644 index c939fa6..0000000 --- a/config/step/ot_variant_to_gene.yaml +++ /dev/null @@ -1,12 +0,0 @@ -defaults: - - variant_to_gene -variant_index_path: ${datasets.variant_index} -gene_index_path: ${datasets.gene_index} -vep_consequences_path: ${datasets.vep_consequences} -liftover_chain_file_path: ${datasets.chain_37_38} -interval_sources: - andersson: ${datasets.anderson} - javierre: ${datasets.javierre} - jung: ${datasets.jung} - thurman: ${datasets.thurman} -v2g_path: ${datasets.v2g} diff --git a/config/step/session/dataproc.yaml b/config/step/session/dataproc.yaml deleted file mode 100644 index 7118620..0000000 --- a/config/step/session/dataproc.yaml +++ /dev/null @@ -1,4 +0,0 @@ -defaults: - - base_session -spark_uri: yarn -write_mode: errorifexists From 9987c5e5ed7b18c67277b6f972079dd07907d5d3 Mon Sep 17 00:00:00 2001 From: Szymon Szyszkowski Date: Mon, 23 Sep 2024 14:34:24 +0100 Subject: [PATCH 24/24] refactor: genetics_etl dag --- .../dags/config/genetics_etl.yaml | 219 ++++++++++--- src/ot_orchestration/dags/genetics_etl.py | 149 +++++++-- src/ot_orchestration/operators/vep.py | 303 ++++++++++++++++++ src/ot_orchestration/utils/__init__.py | 3 - src/ot_orchestration/utils/batch.py | 24 +- 5 files changed, 637 insertions(+), 61 deletions(-) create mode 100644 src/ot_orchestration/operators/vep.py diff --git a/src/ot_orchestration/dags/config/genetics_etl.yaml b/src/ot_orchestration/dags/config/genetics_etl.yaml index 2159f3d..ff26c93 100644 --- a/src/ot_orchestration/dags/config/genetics_etl.yaml +++ b/src/ot_orchestration/dags/config/genetics_etl.yaml @@ -1,43 +1,53 @@ -cluster_name: otg-etl gwas_catalog_manifests_path: gs://gwas_catalog_data/manifests l2g_gold_standard_path: gs://genetics_etl_python_playground/input/l2g/gold_standard/curation.json -release_dir: gs://genetics_etl_python_playground/releases/24.09 +release_dir: gs://ot_orchestration/releases/24.09.19.2 +dataproc: + python_main_module: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/cli.py + cluster_metadata: + PACKAGE: gs://genetics_etl_python_playground/initialisation/gentropy/szsz-update-package-for-dataproc-run/gentropy-0.0.0-py3-none-any.whl + cluster_init_script: gs://genetics_etl_python_playground/initialisation/0.0.0/install_dependencies_on_cluster.sh + cluster_name: otg-etl -steps: +nodes: - id: study_validation + kind: Task + prerequisites: [] params: - study_index_path: + step: study_validation + step.study_index_path: - gs://gwas_catalog_data/study_index - gs://eqtl_catalogue_data/study_index - gs://ukb_ppp_eur_data/study_index - gs://finngen_data/r11/study_index - target_index_path: gs://genetics_etl_python_playground/releases/24.06/gene_index - disease_index_path: gs://open-targets-pre-data-releases/24.06/output/etl/parquet/diseases - valid_study_index_path: &valid_study_index gs://genetics_etl_python_playground/releases/24.09/study_index - invalid_study_index_path: gs://genetics_etl_python_playground/releases/24.09/invalid_study_index - invalid_qc_reasons: + step.target_index_path: gs://genetics_etl_python_playground/releases/24.06/gene_index + step.disease_index_path: gs://open-targets-pre-data-releases/24.06/output/etl/parquet/diseases + step.valid_study_index_path: &valid_study_index gs://ot_orchestration/releases/24.09.19.2/study_index + step.invalid_study_index_path: gs://ot_orchestration/releases/24.09.19.2/invalid_study_index + step.invalid_qc_reasons: - UNRESOLVED_TARGET - UNRESOLVED_DISEASE - UNKNOWN_STUDY_TYPE - DUPLICATED_STUDY - NO_GENE_PROVIDED - session.write_mode: overwrite + step.session.write_mode: overwrite - id: credible_set_validation + kind: Task prerequisites: - study_validation params: - study_index_path: *valid_study_index - study_locus_path: + step: credible_set_validation + step.study_index_path: *valid_study_index + step.study_locus_path: - gs://gwas_catalog_data/credible_set_datasets/gwas_catalog_PICSed_curated_associations - gs://gwas_catalog_data/credible_set_datasets/gwas_catalog_PICSed_summary_statistics - gs://gwas_catalog_data/credible_set_datasets/gwas_catalog_susie_summary_statistics - gs://eqtl_catalogue_data/credible_set_datasets/eqtl_catalogue_susie/ - gs://ukb_ppp_eur_data/credible_set_datasets/ukb_ppp_eur_susie - gs://finngen_data/r11/credible_set_datasets/finngen_r11_susie - valid_study_locus_path: &valid_credible_set gs://genetics_etl_python_playground/releases/24.09/credible_set - invalid_study_locus_path: gs://genetics_etl_python_playground/releases/24.09/invalid_credible_set - invalid_qc_reasons: + step.valid_study_locus_path: &valid_credible_set gs://ot_orchestration/releases/24.09.19.2/credible_set + step.invalid_study_locus_path: gs://ot_orchestration/releases/24.09.19.2/invalid_credible_set + step.invalid_qc_reasons: - DUPLICATED_STUDYLOCUS_ID - AMBIGUOUS_STUDY - FAILED_STUDY @@ -48,32 +58,169 @@ steps: - PALINDROMIC_ALLELE_FLAG - SUBSIGNIFICANT_FLAG - LD_CLUMPED - session.write_mode: overwrite - - id: "ot_gene_index" - - id: "ot_variant_index" - - id: "ot_variant_to_gene" + step.session.write_mode: overwrite + step.session.spark_uri: yarn + - id: variant_annotation + kind: TaskGroup + nodes: + - id: variant_to_vcf + kind: Task + google_batch: + entrypoint: /bin/sh + commands: + - -c + - poetry + - run + - gentropy + image: europe-west1-docker.pkg.dev/open-targets-genetics-dev/gentropy-app/gentropy:dev + environment: + - SOURCE_NAME: uniprot + SOURCE_PATH: gs://open-targets-pre-data-releases/24.09/input/evidence-files/uniprot.json.gz + SOURCE_FORMAT: json + - SOURCE_NAME: clinvar + SOURCE_PATH: gs://open-targets-pre-data-releases/24.09/input/evidence-files/eva.json.gz + SOURCE_FORMAT: json + - SOURCE_NAME: pharmgkb + SOURCE_PATH: gs://open-targets-pre-data-releases/24.09/input/pharmacogenomics-inputs/pharmacogenomics.json.gz + SOURCE_FORMAT: json + - SOURCE_NAME: gentropy_credible_sets + SOURCE_PATH: gs://ot_orchestration/releases/24.09.19.2/credible_set + SOURCE_FORMAT: parquet + resource_specs: + cpu_milli: 2000 + memory_mib: 2000 + boot_disk_mib: 10000 + task_specs: + max_retry_count: 2 + max_run_duration: "2h" + policy_specs: + machine_type: n1-standard-4 + params: + step: variant_to_vcf + step.source_path: $SOURCE_PATH + step.source_format: $SOURCE_FORMAT + step.vcf_path: gs://ot_orchestration/releases/24.09.19.2/variants/raw_variants/$SOURCE_NAME + step.session.write_mode: overwrite + +step.session.extended_spark_conf: "{spark.jars:https://storage.googleapis.com/hadoop-lib/gcs/gcs-connector-hadoop3-latest.jar}" + + - id: list_nonannotated_vcfs + kind: Task + params: + # the extension after saving from pyspark csv is going to be the .csv + input_vcf_glob: gs://ot_orchestration/releases/24.09.19.2/variants/raw_variants/**.csv + output_path: gs://ot_orchestration/releases/24.09.19.2/variants/merged_variants + chunk_size: 2000 + prerequisites: + - variant_to_vcf + - id: vep_annotation + kind: Task + google_batch: + entrypoint: /bin/sh + image: europe-west1-docker.pkg.dev/open-targets-genetics-dev/gentropy-app/custom_ensembl_vep:dev + resource_specs: + cpu_milli: 2000 + memory_mib: 2000 + boot_disk_mib: 10000 + task_specs: + max_retry_count: 2 + max_run_duration: "2h" + policy_specs: + machine_type: n1-standard-4 + params: + vep_cache_path: gs://genetics_etl_python_playground/vep/cache + vcf_input_path: gs://ot_orchestration/releases/24.09.19.2/variants/merged_variants + vep_output_path: gs://ot_orchestration/releases/24.09.19.2/variants/annotated_variants + prerequisites: + - list_nonannotated_vcfs prerequisites: - credible_set_validation - - "ot_variant_index" - - "ot_gene_index" - - id: "ot_colocalisation_ecaviar" + - id: variant_index + command: gs://genetics_etl_python_playground/initialisation/0.0.0/cli.py + params: + step: variant_index + step.vep_output_json_path: gs://ot_orchestration/releases/24.09.19.2/variants/annotated_variants + step.gnomad_variant_annotations_path: gs://genetics_etl_python_playground/static_assets/gnomad_variants + step.variant_index_path: gs://ot_orchestration/releases/24.09.19.2/variant_index prerequisites: - - credible_set_validation - - id: "ot_colocalisation_coloc" + - variant_annotation + - id: gene_index + command: gs://genetics_etl_python_playground/initialisation/0.0.0/cli.py + params: + step: gene_index + step.target_index: gs://genetics_etl_python_playground/static_assets/targets # OTP 23.12 data + step.gene_index_path: gs://ot_orchestration/releases/24.09.19.2/gene_index + - id: variant_to_gene + command: gs://genetics_etl_python_playground/initialisation/0.0.0/cli.py + params: + step: variant_to_gene + step.variant_index_path: gs://ot_orchestration/releases/24.09.19.2/variant_index + step.gene_index_path: gs://ot_orchestration/releases/24.09.19.2/gene_index + step.vep_consequences_path: gs://genetics_etl_python_playground/static_assets/variant_consequence_to_score.tsv + step.liftover_chain_file_path: gs://genetics_etl_python_playground/static_assets/grch37_to_grch38.over.chain + step.interval_sources: + - andersson: gs://genetics_etl_python_playground/static_assets/andersson2014/enhancer_tss_associations.bed + - javierre: gs://genetics_etl_python_playground/static_assets/javierre_2016_preprocessed + - jung: gs://genetics_etl_python_playground/static_assets/jung2019_pchic_tableS3.csv + - thurman: gs://genetics_etl_python_playground/static_assets/thurman2012/genomewideCorrs_above0.7_promoterPlusMinus500kb_withGeneNames_32celltypeCategories.bed8.gz + step.v2g_path: gs://ot_orchestration/releases/24.09.19.2/variant_to_gene prerequisites: - - credible_set_validation - - id: "ot_locus_to_gene_train" + - variant_index + - gene_index + - id: colocalisation_ecaviar + command: gs://genetics_etl_python_playground/initialisation/0.0.0/cli.py + params: + step: colocalisation + step.credible_set_path: *valid_credible_set + step.study_index_path: *valid_study_index + step.coloc_path: gs://ot_orchestration/releases/24.09.19.2/colocalisation/ecaviar + step.colocalisation_method: ECaviar prerequisites: - credible_set_validation - - "ot_variant_index" - - "ot_variant_to_gene" - - "ot_colocalisation_ecaviar" - - "ot_colocalisation_coloc" - - id: "ot_locus_to_gene_predict" + - id: "colocalisation_coloc" + command: gs://genetics_etl_python_playground/initialisation/0.0.0/cli.py + params: + step: colocalisation + step.study_index_path: *valid_study_index + step.coloc_path: gs://ot_orchestration/releases/24.09.19.2/colocalisation/coloc + step.colocalisation_method: Coloc prerequisites: - credible_set_validation - - "ot_locus_to_gene_train" - - "ot_variant_index" - - "ot_variant_to_gene" - - "ot_colocalisation_ecaviar" - - "ot_colocalisation_coloc" + - id: l2g_train + command: gs://genetics_etl_python_playground/initialisation/0.0.0/cli.py + params: + step: locus_to_gene + step.run_mode: train + step.wandb_run_name: "24.09" + step.hf_hub_repo_id: opentargets/locus_to_gene + step.model_path: gs://ot_orchestration/releases/24.09.19.2/locus_to_gene_model/classifier.skops + step.predictions_path: gs://ot_orchestration/releases/24.09.19.2/locus_to_gene_predictions + step.credible_set_path: *valid_credible_set + step.colocalisation_path: gs://ot_orchestration/releases/24.09.19.2/colocalisation + step.variant_gene_path: gs://ot_orchestration/releases/24.09.19.2/variant_to_gene + step.study_index_path: *valid_study_index + step.gold_standard_curation_path: gs://ot_orchestration/releases/24.09.19.2/locus_to_gene_gold_standard.json + step.gene_interactions_path: gs://genetics_etl_python_playground/static_assets/targets # OTP 233.12 data + step.hyperparameters: + n_estimators: 100 + max_depth: 5 + loss: log_loss + step.download_from_hub: true + prerequisites: + - colocalisation_coloc + - colocalisation_ecaviar + - variant_to_gene + - id: l2g_predict + command: gs://genetics_etl_python_playground/initialisation/0.0.0/cli.py + params: + step: locus_to_gene + step.run_mode: predict + step.model_path: null + step.predictions_path: gs://ot_orchestration/releases/24.09.19.2/locus_to_gene_predictions + step.feature_matrix_path: gs://ot_orchestration/releases/24.09.19.2/locus_to_gene_feature_matrix + step.credible_set_path: *valid_credible_set + step.study_index_path: *valid_study_index + step.variant_gene_path: gs://ot_orchestration/releases/24.09.19.2/variant_to_gene + step.colocalisation_path: gs://ot_orchestration/releases/24.09.19.2/colocalisation + prerequisites: + - l2g_train + diff --git a/src/ot_orchestration/dags/genetics_etl.py b/src/ot_orchestration/dags/genetics_etl.py index 58794d5..bd0dc7c 100644 --- a/src/ot_orchestration/dags/genetics_etl.py +++ b/src/ot_orchestration/dags/genetics_etl.py @@ -2,25 +2,128 @@ from __future__ import annotations +import time from pathlib import Path +from airflow.decorators import task, task_group from airflow.models.baseoperator import chain from airflow.models.dag import DAG from airflow.operators.python import ShortCircuitOperator +from airflow.providers.google.cloud.operators.cloud_batch import ( + CloudBatchSubmitJobOperator, +) from airflow.providers.google.cloud.transfers.gcs_to_gcs import GCSToGCSOperator from airflow.utils.task_group import TaskGroup -from ot_orchestration.utils.common import shared_dag_args, shared_dag_kwargs -from ot_orchestration.utils.dataproc import generate_dataproc_task_chain -from ot_orchestration.utils.path import GCSPath -from ot_orchestration.utils.utils import check_gcp_folder_exists, read_yaml_config +from ot_orchestration.operators.vep import ( + ConvertVariantsToVcfOperator, + VepAnnotateOperator, +) +from ot_orchestration.utils import ( + GCSPath, + chain_dependencies, + check_gcp_folder_exists, + find_node_in_config, + read_yaml_config, +) +from ot_orchestration.utils.batch import ( + create_batch_job, + create_task_commands, + create_task_env, + create_task_spec, +) +from ot_orchestration.utils.common import ( + GCP_PROJECT_GENETICS, + GCP_REGION, + shared_dag_args, + shared_dag_kwargs, +) +from ot_orchestration.utils.dataproc import ( + generate_dataproc_task_chain, + submit_gentropy_step, +) SOURCE_CONFIG_FILE_PATH = Path(__file__).parent / "config" / "genetics_etl.yaml" config = read_yaml_config(SOURCE_CONFIG_FILE_PATH) -steps = config["steps"] +nodes = config["nodes"] gwas_catalog_manifests_path = GCSPath(config["gwas_catalog_manifests_path"]) l2g_gold_standard_path = GCSPath(config["l2g_gold_standard_path"]) release_dir = GCSPath(config["release_dir"]) +variant_annotation_task_group_config = find_node_in_config(nodes, "variant_annotation") + + +# FIXME: eventually this task group should have 2 batch jobs only +# - 1. transform variant sources to vcf files, collect and partition them by chunk size +# - 2. list new chunk vcf files and annotate them DONE +@task_group(group_id="variant_annotation") +def variant_annotation(): + """Variant annotation task group.""" + task_config = find_node_in_config( + variant_annotation_task_group_config["nodes"], "variant_to_vcf" + ) + + google_batch_config = task_config["google_batch"] + + commands = create_task_commands( + commands=google_batch_config["commands"], + params=task_config["params"], + ) + + task = create_task_spec( + image=google_batch_config["image"], + commands=commands, + resource_specs=google_batch_config["resource_specs"], + task_specs=google_batch_config["task_specs"], + entrypoint=google_batch_config["entrypoint"], + ) + + environment = google_batch_config["environment"] + batch_job = create_batch_job( + task=task, + task_env=create_task_env(environment), + policy_specs=google_batch_config["policy_specs"], + ) + variant_to_vcf = CloudBatchSubmitJobOperator( + task_id="variant_to_vcf", + project_id=GCP_PROJECT_GENETICS, + region=GCP_REGION, + job_name=f"variant-to-vcf-job-{time.strftime('%Y%m%d-%H%M%S')}", + job=batch_job, + deferrable=False, + ) + + task_config = find_node_in_config( + config=variant_annotation_task_group_config["nodes"], + node_id="list_nonannotated_vcfs", + )["params"] + + merged_vcfs = ConvertVariantsToVcfOperator( + task_id="list_nonannotated_vcfs", + tsv_files_glob=task_config["input_vcf_glob"], + output_path=task_config["output_path"], + chunk_size=task_config["chunk_size"], + ) + + task_config = find_node_in_config( + variant_annotation_task_group_config["nodes"], "vep_annotation" + ) + task_config_params = task_config["params"] + vep_annotation = VepAnnotateOperator( + task_id=task_config["id"], + vcf_input_path=task_config_params["vcf_input_path"], + vep_output_path=task_config_params["vep_output_path"], + vep_cache_path=task_config_params["vep_cache_path"], + google_batch=task_config["google_batch"], + ) + chain_dependencies( + nodes=variant_annotation_task_group_config["nodes"], + tasks_or_task_groups={ + "variant_to_vcf": variant_to_vcf, + "list_nonannotated_vcfs": merged_vcfs, + "vep_annotation": vep_annotation, + }, + ) + # Files to move: DATA_TO_MOVE = { @@ -69,23 +172,29 @@ ] with TaskGroup(group_id="genetics_etl") as genetics_etl: - # Parse and define all steps and their prerequisites. - tasks = {} - for step in steps: - step_id = step["id"] - step_params = convert_params_to_hydra_positional_arg(step) - this_task = submit_step( - cluster_name=config["cluster_name"], - step_id=step_id, - task_id=step_id, - other_args=step_params, + # Register all TaskGroups as nodes + node_map = {"variant_annotation": variant_annotation()} + # Register all standalone dataproc tasks + tasks = [node for node in nodes if node.get("kind", "Task") == "Task"] + # Build individual tasks and register them as nodes. + for task in tasks: + dataproc_specs = config["dataproc"] + this_task = submit_gentropy_step( + cluster_name=dataproc_specs["cluster_name"], + step_name=task["id"], + python_main_module=dataproc_specs["python_main_module"], + params=task["params"], ) - # Chain prerequisites. - tasks[step_id] = this_task - for prerequisite in step.get("prerequisites", []): - this_task.set_upstream(tasks[prerequisite]) + node_map[task["id"]] = this_task # type: ignore - generate_dag(cluster_name=config["cluster_name"], tasks=list(tasks.values())) + # chain prerequisites + chain_dependencies(nodes=config["nodes"], tasks_or_task_groups=node_map) + generate_dataproc_task_chain( + cluster_name=dataproc_specs["cluster_name"], + cluster_metadata=dataproc_specs["cluster_metadata"], + cluster_init_script=dataproc_specs["cluster_init_script"], + tasks=list(node_map.values()), # type: ignore + ) # DAG description: chain( diff --git a/src/ot_orchestration/operators/vep.py b/src/ot_orchestration/operators/vep.py new file mode 100644 index 0000000..5342d3c --- /dev/null +++ b/src/ot_orchestration/operators/vep.py @@ -0,0 +1,303 @@ +"""VEP annotation operator.""" + +from __future__ import annotations + +import time +from collections import OrderedDict +from collections.abc import Sequence +from functools import cached_property +from pathlib import Path +from typing import Any, Set, Type + +import pandas as pd +from airflow.models import BaseOperator +from airflow.providers.google.cloud.operators.cloud_batch import ( + CloudBatchSubmitJobOperator, +) +from google.cloud.storage import Blob, Client + +from ot_orchestration.types import GCSMountObject, GoogleBatchSpecs +from ot_orchestration.utils.batch import ( + create_batch_job, + create_task_env, + create_task_spec, +) +from ot_orchestration.utils.common import GCP_PROJECT_GENETICS, GCP_REGION +from ot_orchestration.utils.path import GCSPath + + +class VepAnnotationPathManager: + """It is quite complicated to keep track of all the input/output buckets, the corresponding mounting points prefixes etc...""" + + def __init__( + self, + vcf_input_path: str, + vep_output_path: str, + vep_cache_path: str, + mount_dir_root: str, + ): + self.paths = { + "input": GCSPath(vcf_input_path), + "output": GCSPath(vep_output_path), + "cache": GCSPath(vep_cache_path), + } + self.mount_dir_root = mount_dir_root + + self._validate_mount_dir() + self.path_registry = self._prepare_path_registry() + # explicitly set the properties + self.cache_dir = self.path_registry["cache"]["mount_point"] + self.input_dir = self.path_registry["input"]["mount_point"] + self.output_dir = self.path_registry["output"]["mount_point"] + + def _validate_mount_dir(self) -> VepAnnotationPathManager: + if not self.mount_dir_root.startswith("/"): + raise ValueError("Mount dir has to be an absolute path.") + return self + + def _prepare_path_registry(self) -> dict[str, GCSMountObject]: + return { + key: { + # NOTE: remote_path has to start from the bucket_name + # see https://cloud.google.com/batch/docs/create-run-job-storage#gcloud_2:~:text=BUCKET_PATH%3A%20the%20path,the%20subdirectory%20subdirectory. + "remote_path": f"{value.bucket}/{value.path}", + "mount_point": f"{self.mount_dir_root}/{key}", + } + for key, value in self.paths.items() + } + + def get_mount_config(self) -> list[GCSMountObject]: + """Return the mount configuration. + + Returns: + list[dict[str, str]]: The mount configuration. + """ + return list(self.path_registry.values()) + + +class VepAnnotateOperator(CloudBatchSubmitJobOperator): + def __init__( + self, + task_id: str, + vcf_input_path: str, + vep_output_path: str, + vep_cache_path: str, + google_batch: GoogleBatchSpecs, + mount_dir_root: str = "/mnt/disks/share", + project_id: str = GCP_PROJECT_GENETICS, + **kwargs, + ): + self.project_id = project_id + self.pm = VepAnnotationPathManager( + vcf_input_path=vcf_input_path, + vep_output_path=vep_output_path, + vep_cache_path=vep_cache_path, + mount_dir_root=mount_dir_root, + ) + self.vcf_files = self._get_vcf_partition_basenames() + environments = [ + {"INPUT_FILE": file, "OUTPUT_FILE": file} for file in self.vcf_files + ] + + batch_job = create_batch_job( + task=create_task_spec( + image=google_batch["image"], + commands=self._vep_command, + resource_specs=google_batch["resource_specs"], + task_specs=google_batch["task_specs"], + entrypoint=google_batch["entrypoint"], + ), + task_env=create_task_env(environments), + policy_specs=google_batch["policy_specs"], + mounting_points=self.pm.get_mount_config(), + ) + self.log.info(batch_job) + super().__init__( + task_id=task_id, + project_id=self.project_id, + region=GCP_REGION, + job_name=f"vep-job-{time.strftime('%Y%m%d-%H%M%S')}", + job=batch_job, + deferrable=False, + **kwargs, + ) + + def _get_vcf_partition_basenames(self) -> Set[str]: + """Based on listed vcf file partition extract their basenames. + + # NOTE: Do not reconstruct full path to the mount, as it will + # reduce the payload send to the google batch job. The mount + # name is the same at every task command, the basename is + # different. + + Returns: + Set[str]: set of basenames to pass to the task environments. + """ + input_path = self.pm.paths["input"] + c = Client(project=self.project_id) + b = c.bucket(bucket_name=input_path.bucket) + blobs = b.list_blobs(prefix=input_path.path, match_glob="**.vcf") + vcf_paths = {Path(blob.name).name for blob in blobs} + # FIXME: Apparently this operator logs are not appearing in the airflow UI. + self.log.info("Found %s vcf files", len(vcf_paths)) + return vcf_paths + + @cached_property + def _vep_command(self) -> list[str]: + return [ + "-c", + rf"vep --cache --offline --format vcf --force_overwrite \ + --no_stats \ + --dir_cache {self.pm.cache_dir} \ + --input_file {self.pm.input_dir}/$INPUT_FILE \ + --output_file {self.pm.output_dir}/$OUTPUT_FILE --json \ + --dir_plugins {self.pm.cache_dir}/VEP_plugins \ + --sift b \ + --polyphen b \ + --fasta {self.pm.cache_dir}/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz \ + --mane_select \ + --appris \ + --hgvsg \ + --pick_order mane_select,canonical \ + --per_gene \ + --uniprot \ + --check_existing \ + --exclude_null_alleles \ + --canonical \ + --plugin TSSDistance \ + --distance 500000 \ + --plugin LoF,loftee_path:{self.pm.cache_dir}/VEP_plugins,gerp_bigwig:{self.pm.cache_dir}/gerp_conservation_scores.homo_sapiens.GRCh38.bw,human_ancestor_fa:{self.pm.cache_dir}/human_ancestor.fa.gz,conservation_file:/opt/vep/loftee.sql \ + --plugin AlphaMissense,file={self.pm.cache_dir}/AlphaMissense_hg38.tsv.gz,transcript_match=1 \ + --plugin CADD,snv={self.pm.cache_dir}/CADD_GRCh38_whole_genome_SNVs.tsv.gz", + ] + + +class ConvertVariantsToVcfOperator(BaseOperator): + def __init__( + self, + tsv_files_glob: str, + output_path: str, + *args, + chunk_size: int = 2000, + project_id: str = GCP_PROJECT_GENETICS, + **kwargs, + ) -> None: + """Custom operator to merge vcf header based tab separated files found under given pattern. + + This operator merges vcf files by: + - "#CHROM": str, '#' as a first column row name after header + - "POS": int, + - "ID": str, + - "REF": str, + - "ALT": str, + - "QUAL": str, + - "FILTER": str, + - "INFO": str, + header fields, performs deduplication and sorting if requested and + partitions the output file by the partitions with `chunk_size` number + of variants in each. + + """ + super().__init__(*args, **kwargs) + self.project_id = project_id + self.tsv_files_glob = tsv_files_glob + self.output_path = output_path + self.chunk_size = chunk_size + self.sep = "\t" + self.output_files: list[str] = [] + + def _list_input_files(self) -> Set[str]: + gcs_path = GCSPath(self.tsv_files_glob) + c = Client(project=self.project_id) + b = c.bucket(bucket_name=gcs_path.bucket) + blobs = b.list_blobs( + prefix=gcs_path.segments["prefix"], + match_glob=gcs_path.segments["filename"], + ) + files = {f"gs://{gcs_path.bucket}/{blob.name}" for blob in blobs} + self.log.info("Found %s files", files) + return files + + def _cleanup_output_dir(self): + gcs_path = GCSPath(self.output_path) + client_object = Client(project=self.project_id) + bucket_object = client_object.bucket(bucket_name=gcs_path.bucket) + output_path_blob = Blob(name=gcs_path.path, bucket=bucket_object) + if output_path_blob.exists(client=client_object): + self.log.warning("Output path %s exists, will attempt to drop it", gcs_path) + blobs_to_delete = list( + bucket_object.list_blobs(prefix=gcs_path.segments["prefix"]) + ) + bucket_object.delete_blobs(blobs=blobs_to_delete) + return self + + @property + def _vcf_columns(self) -> OrderedDict[str, Type]: + return OrderedDict( + { + "#CHROM": str, + "POS": str, + "ID": str, + "REF": str, + "ALT": str, + "QUAL": str, + "FILTER": str, + "INFO": str, + } + ) + + @property + def _sort_columns(self) -> list[str]: + return ["#CHROM", "POS"] + + @property + def _deduplicate_columns(self) -> list[str]: + return ["#CHROM", "POS", "REF", "ALT"] + + def _read_input_files(self) -> ConvertVariantsToVcfOperator: + raw_dfs = [ + pd.read_csv(file, sep=self.sep, dtype=self._vcf_columns) + for file in self._list_input_files() + ] + for raw_df in raw_dfs: + self.log.info("Size of variants df from source: %s", raw_df.shape[0]) + + self.df = ( + pd.concat(raw_dfs) + .drop_duplicates(subset=self._deduplicate_columns) + .sort_values(by=self._sort_columns) + .reset_index(drop=True) + ) + self.log.info("Size of variants df after merge: %s", self.df.shape[0]) + return self + + def _write_output_files(self) -> ConvertVariantsToVcfOperator: + chunks = 0 + self.output_files = [] + self.log.info("") + for i in range(0, self.df.shape[0], self.chunk_size): + partial_df = self.df[i : i + self.chunk_size] + filename = f"{self.output_path}/chunk_{i + 1}-{i + self.chunk_size}.vcf" + self.log.info( + "Outputting chunk %s with variant range %s-%s to %s", + chunks, + i, + i + self.chunk_size - 1, # last element is not contained in the list + filename, + ) + partial_df.to_csv(filename, index=False, header=True, sep=self.sep) + chunks += 1 + self.output_files.append(filename) + expected_chunk_count = len(self.df) // self.chunk_size + 1 + if not (chunks == expected_chunk_count): + raise ValueError("Expected %s, got %s chunks", expected_chunk_count, chunks) + return self + + def execute(self, **_) -> list[str]: + """Execute the operator.""" + return ( + self._cleanup_output_dir() + ._read_input_files() + ._write_output_files() + .output_files + ) diff --git a/src/ot_orchestration/utils/__init__.py b/src/ot_orchestration/utils/__init__.py index 2adfdf4..5d7bceb 100644 --- a/src/ot_orchestration/utils/__init__.py +++ b/src/ot_orchestration/utils/__init__.py @@ -1,6 +1,5 @@ """Utilities for parsing and job orchestration.""" -from ot_orchestration.utils.batch import create_batch_job, create_task_spec from ot_orchestration.utils.manifest import extract_study_id_from_path from ot_orchestration.utils.path import ( URI_PATTERN, @@ -36,8 +35,6 @@ "to_hocon", "to_yaml", "strhash", - "create_task_spec", - "create_batch_job", "extract_study_id_from_path", "URI_PATTERN", "convert_params_to_hydra_positional_arg", diff --git a/src/ot_orchestration/utils/batch.py b/src/ot_orchestration/utils/batch.py index 55ac376..ddf03ce 100644 --- a/src/ot_orchestration/utils/batch.py +++ b/src/ot_orchestration/utils/batch.py @@ -21,7 +21,10 @@ BatchTaskSpecs, GCSMountObject, ) -from ot_orchestration.utils.utils import time_to_seconds +from ot_orchestration.utils import ( + convert_params_to_hydra_positional_arg, + time_to_seconds, +) def create_container_runnable( @@ -134,4 +137,21 @@ def create_batch_job( return job -__all__ = ["create_batch_job", "create_task_spec"] +def create_task_env(var_list: list[dict[str, Any]]): + """This function creates list of batch_v1.Environment objects from provided list of dictionaries.""" + return [Environment(variables=variables) for variables in var_list] + + +def create_task_commands( + commands: list[str] | None, params: dict[str, dict[str, Any] | None] +) -> list[str]: + """This function prepares list of commands for google batch job from the step configuration.""" + args = convert_params_to_hydra_positional_arg(params=params) + task_commands = [] + if commands: + task_commands.extend(commands) + task_commands.extend(args) + + if len(task_commands) > 1 and task_commands[0] == "-c": + task_commands = ["-c", " ".join(task_commands[1:])] + return task_commands