From 70e5a97774cf79acef67c8ed9435519750479715 Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Sat, 5 Jul 2025 12:39:21 +0800 Subject: [PATCH 1/2] build: upgrade to airflow 3.0.3rc3 and remove patched that're no longer needed --- Dockerfile | 6 +- Dockerfile.test | 6 +- patch/serialized_objects.py | 2392 ----------------- patch/utils.py | 114 - ...istency_between_ORM_and_migration_files.py | 328 --- .../versions/0047_3_0_0_add_dag_versioning.py | 178 -- pyproject.toml | 731 ++++- uv.lock | 1433 +++++++--- 8 files changed, 1734 insertions(+), 3454 deletions(-) delete mode 100644 patch/serialized_objects.py delete mode 100644 patch/utils.py delete mode 100644 patch/versions/0017_2_9_2_fix_inconsistency_between_ORM_and_migration_files.py delete mode 100644 patch/versions/0047_3_0_0_add_dag_versioning.py diff --git a/Dockerfile b/Dockerfile index 6776a42..4e74940 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG AIRFLOW_VERSION=3.0.2 +ARG AIRFLOW_VERSION=3.0.3rc3 ARG PYTHON_VERSION=3.10 ARG PLATFORM=linux @@ -38,9 +38,5 @@ ENV PYTHONPATH="${AIRFLOW_HOME}:$PYTHONPATH" COPY airflow.cfg ${AIRFLOW_HOME}/airflow.cfg COPY --chown=airflow:root dags ${AIRFLOW_HOME}/dags -# TODO: remove this and the patch files once upgrade to 3.0.3 -COPY --chown=airflow:root patch/utils.py /app/.venv/lib/python3.10/site-packages/airflow/migrations/utils.py -COPY --chown=airflow:root patch/versions /app/.venv/lib/python3.10/site-packages/airflow/migrations/versions -COPY --chown=airflow:root patch/serialized_objects.py /app/.venv/lib/python3.10/site-packages/airflow/serialization/serialized_objects.py ENTRYPOINT ["/entrypoint.sh"] diff --git a/Dockerfile.test b/Dockerfile.test index af78173..dada26c 100644 --- a/Dockerfile.test +++ b/Dockerfile.test @@ -1,4 +1,4 @@ -ARG AIRFLOW_VERSION=3.0.2 +ARG AIRFLOW_VERSION=3.0.3rc3 ARG PYTHON_VERSION=3.10 ARG PLATFORM=linux @@ -38,10 +38,6 @@ ENV PYTHONPATH="${AIRFLOW_HOME}:$PYTHONPATH" COPY airflow.cfg ${AIRFLOW_HOME}/airflow.cfg COPY --chown=airflow:root dags ${AIRFLOW_HOME}/dags -# TODO: remove this and the patch files once upgrade to 3.0.3 -COPY --chown=airflow:root patch/utils.py /app/.venv/lib/python3.10/site-packages/airflow/migrations/utils.py -COPY --chown=airflow:root patch/versions /app/.venv/lib/python3.10/site-packages/airflow/migrations/versions -COPY --chown=airflow:root patch/serialized_objects.py /app/.venv/lib/python3.10/site-packages/airflow/serialization/serialized_objects.py ENV AIRFLOW_TEST_MODE=True diff --git a/patch/serialized_objects.py b/patch/serialized_objects.py deleted file mode 100644 index 4688ae3..0000000 --- a/patch/serialized_objects.py +++ /dev/null @@ -1,2392 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -"""Serialized DAG and BaseOperator.""" - -# TODO: update test_recursive_serialize_calls_must_forward_kwargs and re-enable RET505 -# ruff: noqa: RET505 -from __future__ import annotations - -import collections.abc -import datetime -import enum -import itertools -import logging -import weakref -from collections.abc import Collection, Generator, Iterable, Mapping -from functools import cache, cached_property -from inspect import signature -from textwrap import dedent -from typing import TYPE_CHECKING, Any, ClassVar, NamedTuple, TypeVar, Union, cast - -import attrs -import lazy_object_proxy -import pydantic -from airflow import macros -from airflow.callbacks.callback_requests import DagCallbackRequest, TaskCallbackRequest -from airflow.exceptions import AirflowException, SerializationError, TaskDeferred -from airflow.models.baseoperator import BaseOperator -from airflow.models.connection import Connection -from airflow.models.dag import DAG, _get_model_data_interval -from airflow.models.expandinput import ( - create_expand_input, -) -from airflow.models.taskinstance import SimpleTaskInstance, TaskInstance -from airflow.models.taskinstancekey import TaskInstanceKey -from airflow.models.xcom import XComModel -from airflow.models.xcom_arg import SchedulerXComArg, deserialize_xcom_arg -from airflow.providers_manager import ProvidersManager -from airflow.sdk.bases.operator import BaseOperator as TaskSDKBaseOperator -from airflow.sdk.definitions._internal.expandinput import EXPAND_INPUT_EMPTY -from airflow.sdk.definitions.asset import ( - Asset, - AssetAlias, - AssetAliasEvent, - AssetAliasUniqueKey, - AssetAll, - AssetAny, - AssetRef, - AssetUniqueKey, - AssetWatcher, - BaseAsset, -) -from airflow.sdk.definitions.mappedoperator import MappedOperator -from airflow.sdk.definitions.param import Param, ParamsDict -from airflow.sdk.definitions.taskgroup import MappedTaskGroup, TaskGroup -from airflow.sdk.definitions.xcom_arg import XComArg, serialize_xcom_arg -from airflow.sdk.execution_time.context import OutletEventAccessor, OutletEventAccessors -from airflow.serialization.dag_dependency import DagDependency -from airflow.serialization.enums import DagAttributeTypes as DAT, Encoding -from airflow.serialization.helpers import serialize_template_field -from airflow.serialization.json_schema import load_dag_schema -from airflow.settings import DAGS_FOLDER, json -from airflow.task.priority_strategy import ( - PriorityWeightStrategy, - airflow_priority_weight_strategies, - airflow_priority_weight_strategies_classes, -) -from airflow.triggers.base import BaseTrigger, StartTriggerArgs -from airflow.utils.code_utils import get_python_source -from airflow.utils.context import ( - ConnectionAccessor, - Context, - VariableAccessor, -) -from airflow.utils.db import LazySelectSequence -from airflow.utils.docs import get_docs_url -from airflow.utils.log.logging_mixin import LoggingMixin -from airflow.utils.module_loading import import_string, qualname -from airflow.utils.operator_resources import Resources -from airflow.utils.timezone import from_timestamp, parse_timezone -from airflow.utils.types import NOTSET, ArgNotSet -from dateutil import relativedelta -from pendulum.tz.timezone import FixedTimezone, Timezone - -if TYPE_CHECKING: - from inspect import Parameter - - from airflow.models import DagRun - from airflow.models.expandinput import SchedulerExpandInput - from airflow.sdk import BaseOperatorLink - from airflow.sdk.definitions._internal.node import DAGNode - from airflow.sdk.types import Operator - from airflow.serialization.json_schema import Validator - from airflow.timetables.base import DagRunInfo, DataInterval, Timetable - from airflow.triggers.base import BaseEventTrigger - - HAS_KUBERNETES: bool - try: - from airflow.providers.cncf.kubernetes.pod_generator import ( - PodGenerator, # noqa: TC004 - ) - from kubernetes.client import models as k8s # noqa: TC004 - except ImportError: - pass - -log = logging.getLogger(__name__) - -_OPERATOR_EXTRA_LINKS: set[str] = { - "airflow.providers.standard.operators.trigger_dagrun.TriggerDagRunLink", - "airflow.providers.standard.sensors.external_task.ExternalDagLink", - # Deprecated names, so that existing serialized dags load straight away. - "airflow.providers.standard.sensors.external_task.ExternalTaskSensorLink", - "airflow.operators.dagrun_operator.TriggerDagRunLink", - "airflow.providers.standard.sensors.external_task_sensor.ExternalTaskSensorLink", -} - - -@cache -def get_operator_extra_links() -> set[str]: - """ - Get the operator extra links. - - This includes both the built-in ones, and those come from the providers. - """ - _OPERATOR_EXTRA_LINKS.update(ProvidersManager().extra_links_class_names) - return _OPERATOR_EXTRA_LINKS - - -@cache -def _get_default_mapped_partial() -> dict[str, Any]: - """ - Get default partial kwargs in a mapped operator. - - This is used to simplify a serialized mapped operator by excluding default - values supplied in the implementation from the serialized dict. Since those - are defaults, they are automatically supplied on de-serialization, so we - don't need to store them. - """ - # Use the private _expand() method to avoid the empty kwargs check. - default = ( - BaseOperator.partial(task_id="_") - ._expand(EXPAND_INPUT_EMPTY, strict=False) - .partial_kwargs - ) - return BaseSerialization.serialize(default)[Encoding.VAR] - - -def encode_relativedelta(var: relativedelta.relativedelta) -> dict[str, Any]: - """Encode a relativedelta object.""" - encoded = {k: v for k, v in var.__dict__.items() if not k.startswith("_") and v} - if var.weekday and var.weekday.n: - # Every n'th Friday for example - encoded["weekday"] = [var.weekday.weekday, var.weekday.n] - elif var.weekday: - encoded["weekday"] = [var.weekday.weekday] - return encoded - - -def decode_relativedelta(var: dict[str, Any]) -> relativedelta.relativedelta: - """Dencode a relativedelta object.""" - if "weekday" in var: - var["weekday"] = relativedelta.weekday(*var["weekday"]) # type: ignore - return relativedelta.relativedelta(**var) - - -def encode_timezone(var: Timezone | FixedTimezone) -> str | int: - """ - Encode a Pendulum Timezone for serialization. - - Airflow only supports timezone objects that implements Pendulum's Timezone - interface. We try to keep as much information as possible to make conversion - round-tripping possible (see ``decode_timezone``). We need to special-case - UTC; Pendulum implements it as a FixedTimezone (i.e. it gets encoded as - 0 without the special case), but passing 0 into ``pendulum.timezone`` does - not give us UTC (but ``+00:00``). - """ - if isinstance(var, FixedTimezone): - if var.offset == 0: - return "UTC" - return var.offset - if isinstance(var, Timezone): - return var.name - raise ValueError( - f"DAG timezone should be a pendulum.tz.Timezone, not {var!r}. " - f"See {get_docs_url('timezone.html#time-zone-aware-dags')}" - ) - - -def decode_timezone(var: str | int) -> Timezone | FixedTimezone: - """Decode a previously serialized Pendulum Timezone.""" - return parse_timezone(var) - - -def _get_registered_timetable(importable_string: str) -> type[Timetable] | None: - from airflow import plugins_manager - - if importable_string.startswith("airflow.timetables."): - return import_string(importable_string) - plugins_manager.initialize_timetables_plugins() - if plugins_manager.timetable_classes: - return plugins_manager.timetable_classes.get(importable_string) - else: - return None - - -def _get_registered_priority_weight_strategy( - importable_string: str, -) -> type[PriorityWeightStrategy] | None: - from airflow import plugins_manager - - if importable_string in airflow_priority_weight_strategies: - return airflow_priority_weight_strategies[importable_string] - plugins_manager.initialize_priority_weight_strategy_plugins() - if plugins_manager.priority_weight_strategy_classes: - return plugins_manager.priority_weight_strategy_classes.get(importable_string) - else: - return None - - -class _TimetableNotRegistered(ValueError): - def __init__(self, type_string: str) -> None: - self.type_string = type_string - - def __str__(self) -> str: - return ( - f"Timetable class {self.type_string!r} is not registered or " - "you have a top level database access that disrupted the session. " - "Please check the airflow best practices documentation." - ) - - -class _PriorityWeightStrategyNotRegistered(AirflowException): - def __init__(self, type_string: str) -> None: - self.type_string = type_string - - def __str__(self) -> str: - return ( - f"Priority weight strategy class {self.type_string!r} is not registered or " - "you have a top level database access that disrupted the session. " - "Please check the airflow best practices documentation." - ) - - -def _encode_trigger(trigger: BaseEventTrigger | dict): - def _ensure_serialized(d): - """ - Make sure the kwargs dict is JSON-serializable. - - This is done with BaseSerialization logic. A simple check is added to - ensure we don't double-serialize, which is possible when a trigger goes - through multiple serialization layers. - """ - if isinstance(d, dict) and Encoding.TYPE in d: - return d - return BaseSerialization.serialize(d) - - if isinstance(trigger, dict): - classpath = trigger["classpath"] - kwargs = trigger["kwargs"] - else: - classpath, kwargs = trigger.serialize() - return { - "classpath": classpath, - "kwargs": {k: _ensure_serialized(v) for k, v in kwargs.items()}, - } - - -def encode_asset_condition(var: BaseAsset) -> dict[str, Any]: - """ - Encode an asset condition. - - :meta private: - """ - if isinstance(var, Asset): - - def _encode_watcher(watcher: AssetWatcher): - return { - "name": watcher.name, - "trigger": _encode_trigger(watcher.trigger), - } - - asset = { - "__type": DAT.ASSET, - "name": var.name, - "uri": var.uri, - "group": var.group, - "extra": var.extra, - } - - if len(var.watchers) > 0: - asset["watchers"] = [_encode_watcher(watcher) for watcher in var.watchers] - - return asset - if isinstance(var, AssetAlias): - return {"__type": DAT.ASSET_ALIAS, "name": var.name, "group": var.group} - if isinstance(var, AssetAll): - return { - "__type": DAT.ASSET_ALL, - "objects": [encode_asset_condition(x) for x in var.objects], - } - if isinstance(var, AssetAny): - return { - "__type": DAT.ASSET_ANY, - "objects": [encode_asset_condition(x) for x in var.objects], - } - if isinstance(var, AssetRef): - return {"__type": DAT.ASSET_REF, **attrs.asdict(var)} - raise ValueError(f"serialization not implemented for {type(var).__name__!r}") - - -def decode_asset_condition(var: dict[str, Any]) -> BaseAsset: - """ - Decode a previously serialized asset condition. - - :meta private: - """ - dat = var["__type"] - if dat == DAT.ASSET: - return decode_asset(var) - if dat == DAT.ASSET_ALL: - return AssetAll(*(decode_asset_condition(x) for x in var["objects"])) - if dat == DAT.ASSET_ANY: - return AssetAny(*(decode_asset_condition(x) for x in var["objects"])) - if dat == DAT.ASSET_ALIAS: - return AssetAlias(name=var["name"], group=var["group"]) - if dat == DAT.ASSET_REF: - return Asset.ref(**{k: v for k, v in var.items() if k != "__type"}) - raise ValueError(f"deserialization not implemented for DAT {dat!r}") - - -def decode_asset(var: dict[str, Any]): - def _smart_decode_trigger_kwargs(d): - """ - Slightly clean up kwargs for display. - - This detects one level of BaseSerialization and tries to deserialize the - content, removing some __type __var ugliness when the value is displayed - in UI to the user. - """ - if not isinstance(d, dict) or Encoding.TYPE not in d: - return d - return BaseSerialization.deserialize(d) - - watchers = var.get("watchers", []) - return Asset( - name=var["name"], - uri=var["uri"], - group=var["group"], - extra=var["extra"], - watchers=[ - SerializedAssetWatcher( - name=watcher["name"], - trigger={ - "classpath": watcher["trigger"]["classpath"], - "kwargs": _smart_decode_trigger_kwargs( - watcher["trigger"]["kwargs"] - ), - }, - ) - for watcher in watchers - ], - ) - - -def encode_outlet_event_accessor(var: OutletEventAccessor) -> dict[str, Any]: - key = var.key - return { - "key": BaseSerialization.serialize(key), - "extra": var.extra, - "asset_alias_events": [ - attrs.asdict(cast("attrs.AttrsInstance", e)) for e in var.asset_alias_events - ], - } - - -def decode_outlet_event_accessor(var: dict[str, Any]) -> OutletEventAccessor: - asset_alias_events = var.get("asset_alias_events", []) - outlet_event_accessor = OutletEventAccessor( - key=BaseSerialization.deserialize(var["key"]), - extra=var["extra"], - asset_alias_events=[ - AssetAliasEvent( - source_alias_name=e["source_alias_name"], - dest_asset_key=AssetUniqueKey( - name=e["dest_asset_key"]["name"], uri=e["dest_asset_key"]["uri"] - ), - extra=e["extra"], - ) - for e in asset_alias_events - ], - ) - return outlet_event_accessor - - -def encode_outlet_event_accessors(var: OutletEventAccessors) -> dict[str, Any]: - return { - "__type": DAT.ASSET_EVENT_ACCESSORS, - "_dict": [ - { - "key": BaseSerialization.serialize(k), - "value": encode_outlet_event_accessor(v), - } - for k, v in var._dict.items() # type: ignore[attr-defined] - ], - } - - -def decode_outlet_event_accessors(var: dict[str, Any]) -> OutletEventAccessors: - d = OutletEventAccessors() # type: ignore[assignment] - d._dict = { # type: ignore[attr-defined] - BaseSerialization.deserialize(row["key"]): decode_outlet_event_accessor( - row["value"] - ) - for row in var["_dict"] - } - return d - - -def encode_timetable(var: Timetable) -> dict[str, Any]: - """ - Encode a timetable instance. - - This delegates most of the serialization work to the type, so the behavior - can be completely controlled by a custom subclass. - - :meta private: - """ - timetable_class = type(var) - importable_string = qualname(timetable_class) - if _get_registered_timetable(importable_string) is None: - raise _TimetableNotRegistered(importable_string) - return {Encoding.TYPE: importable_string, Encoding.VAR: var.serialize()} - - -def decode_timetable(var: dict[str, Any]) -> Timetable: - """ - Decode a previously serialized timetable. - - Most of the deserialization logic is delegated to the actual type, which - we import from string. - - :meta private: - """ - importable_string = var[Encoding.TYPE] - timetable_class = _get_registered_timetable(importable_string) - if timetable_class is None: - raise _TimetableNotRegistered(importable_string) - return timetable_class.deserialize(var[Encoding.VAR]) - - -def encode_priority_weight_strategy(var: PriorityWeightStrategy) -> str: - """ - Encode a priority weight strategy instance. - - In this version, we only store the importable string, so the class should not wait - for any parameters to be passed to it. If you need to store the parameters, you - should store them in the class itself. - """ - priority_weight_strategy_class = type(var) - if priority_weight_strategy_class in airflow_priority_weight_strategies_classes: - return airflow_priority_weight_strategies_classes[ - priority_weight_strategy_class - ] - importable_string = qualname(priority_weight_strategy_class) - if _get_registered_priority_weight_strategy(importable_string) is None: - raise _PriorityWeightStrategyNotRegistered(importable_string) - return importable_string - - -def decode_priority_weight_strategy(var: str) -> PriorityWeightStrategy: - """ - Decode a previously serialized priority weight strategy. - - In this version, we only store the importable string, so we just need to get the class - from the dictionary of registered classes and instantiate it with no parameters. - """ - priority_weight_strategy_class = _get_registered_priority_weight_strategy(var) - if priority_weight_strategy_class is None: - raise _PriorityWeightStrategyNotRegistered(var) - return priority_weight_strategy_class() - - -def encode_start_trigger_args(var: StartTriggerArgs) -> dict[str, Any]: - """ - Encode a StartTriggerArgs. - - :meta private: - """ - - def serialize_kwargs(key: str) -> Any: - if (val := getattr(var, key)) is None: - return None - return BaseSerialization.serialize(val) - - return { - "__type": "START_TRIGGER_ARGS", - "trigger_cls": var.trigger_cls, - "trigger_kwargs": serialize_kwargs("trigger_kwargs"), - "next_method": var.next_method, - "next_kwargs": serialize_kwargs("next_kwargs"), - "timeout": var.timeout.total_seconds() if var.timeout else None, - } - - -def decode_start_trigger_args(var: dict[str, Any]) -> StartTriggerArgs: - """ - Decode a StartTriggerArgs. - - :meta private: - """ - - def deserialize_kwargs(key: str) -> Any: - if (val := var[key]) is None: - return None - return BaseSerialization.deserialize(val) - - return StartTriggerArgs( - trigger_cls=var["trigger_cls"], - trigger_kwargs=deserialize_kwargs("trigger_kwargs"), - next_method=var["next_method"], - next_kwargs=deserialize_kwargs("next_kwargs"), - timeout=datetime.timedelta(seconds=var["timeout"]) if var["timeout"] else None, - ) - - -class _XComRef(NamedTuple): - """ - Store info needed to create XComArg. - - We can't turn it in to a XComArg until we've loaded _all_ the tasks, so when - deserializing an operator, we need to create something in its place, and - post-process it in ``deserialize_dag``. - """ - - data: dict - - def deref(self, dag: DAG) -> SchedulerXComArg: - return deserialize_xcom_arg(self.data, dag) - - -# These two should be kept in sync. Note that these are intentionally not using -# the type declarations in expandinput.py so we always remember to update -# serialization logic when adding new ExpandInput variants. If you add things to -# the unions, be sure to update _ExpandInputRef to match. -_ExpandInputOriginalValue = Union[ - # For .expand(**kwargs). - Mapping[str, Any], - # For expand_kwargs(arg). - XComArg, - Collection[XComArg | Mapping[str, Any]], -] -_ExpandInputSerializedValue = Union[ - # For .expand(**kwargs). - Mapping[str, Any], - # For expand_kwargs(arg). - _XComRef, - Collection[_XComRef | Mapping[str, Any]], -] - - -class _ExpandInputRef(NamedTuple): - """ - Store info needed to create a mapped operator's expand input. - - This references a ``ExpandInput`` type, but replaces ``XComArg`` objects - with ``_XComRef`` (see documentation on the latter type for reasoning). - """ - - key: str - value: _ExpandInputSerializedValue - - @classmethod - def validate_expand_input_value(cls, value: _ExpandInputOriginalValue) -> None: - """ - Validate we've covered all ``ExpandInput.value`` types. - - This function does not actually do anything, but is called during - serialization so Mypy will *statically* check we have handled all - possible ExpandInput cases. - """ - - def deref(self, dag: DAG) -> SchedulerExpandInput: - """ - De-reference into a concrete ExpandInput object. - - If you add more cases here, be sure to update _ExpandInputOriginalValue - and _ExpandInputSerializedValue to match the logic. - """ - if isinstance(self.value, _XComRef): - value: Any = self.value.deref(dag) - elif isinstance(self.value, collections.abc.Mapping): - value = { - k: v.deref(dag) if isinstance(v, _XComRef) else v - for k, v in self.value.items() - } - else: - value = [v.deref(dag) if isinstance(v, _XComRef) else v for v in self.value] - return create_expand_input(self.key, value) - - -class BaseSerialization: - """BaseSerialization provides utils for serialization.""" - - # JSON primitive types. - _primitive_types = (int, bool, float, str) - - # Time types. - # datetime.date and datetime.time are converted to strings. - _datetime_types = (datetime.datetime,) - - # Object types that are always excluded in serialization. - _excluded_types = (logging.Logger, Connection, type, property) - - _json_schema: Validator | None = None - - # Should the extra operator link be loaded via plugins when - # de-serializing the DAG? This flag is set to False in Scheduler so that Extra Operator links - # are not loaded to not run User code in Scheduler. - _load_operator_extra_links = True - - _CONSTRUCTOR_PARAMS: dict[str, Parameter] = {} - - SERIALIZER_VERSION = 2 - - @classmethod - def to_json(cls, var: DAG | BaseOperator | dict | list | set | tuple) -> str: - """Stringify DAGs and operators contained by var and returns a JSON string of var.""" - return json.dumps(cls.to_dict(var), ensure_ascii=True) - - @classmethod - def to_dict(cls, var: DAG | BaseOperator | dict | list | set | tuple) -> dict: - """Stringify DAGs and operators contained by var and returns a dict of var.""" - # Don't call on this class directly - only SerializedDAG or - # SerializedBaseOperator should be used as the "entrypoint" - raise NotImplementedError() - - @classmethod - def from_json( - cls, serialized_obj: str - ) -> BaseSerialization | dict | list | set | tuple: - """Deserialize json_str and reconstructs all DAGs and operators it contains.""" - return cls.from_dict(json.loads(serialized_obj)) - - @classmethod - def from_dict( - cls, serialized_obj: dict[Encoding, Any] - ) -> BaseSerialization | dict | list | set | tuple: - """Deserialize a dict of type decorators and reconstructs all DAGs and operators it contains.""" - return cls.deserialize(serialized_obj) - - @classmethod - def validate_schema(cls, serialized_obj: str | dict) -> None: - """Validate serialized_obj satisfies JSON schema.""" - if cls._json_schema is None: - raise AirflowException(f"JSON schema of {cls.__name__:s} is not set.") - - if isinstance(serialized_obj, dict): - cls._json_schema.validate(serialized_obj) - elif isinstance(serialized_obj, str): - cls._json_schema.validate(json.loads(serialized_obj)) - else: - raise TypeError("Invalid type: Only dict and str are supported.") - - @staticmethod - def _encode(x: Any, type_: Any) -> dict[Encoding, Any]: - """Encode data by a JSON dict.""" - return {Encoding.VAR: x, Encoding.TYPE: type_} - - @classmethod - def _is_primitive(cls, var: Any) -> bool: - """Primitive types.""" - return var is None or isinstance(var, cls._primitive_types) - - @classmethod - def _is_excluded(cls, var: Any, attrname: str, instance: Any) -> bool: - """Check if type is excluded from serialization.""" - if var is None: - if not cls._is_constructor_param(attrname, instance): - # Any instance attribute, that is not a constructor argument, we exclude None as the default - return True - - return cls._value_is_hardcoded_default(attrname, var, instance) - return isinstance(var, cls._excluded_types) or cls._value_is_hardcoded_default( - attrname, var, instance - ) - - @classmethod - def serialize_to_json( - cls, - object_to_serialize: TaskSDKBaseOperator | MappedOperator | DAG, - decorated_fields: set, - ) -> dict[str, Any]: - """Serialize an object to JSON.""" - serialized_object: dict[str, Any] = {} - keys_to_serialize = object_to_serialize.get_serialized_fields() - for key in keys_to_serialize: - # None is ignored in serialized form and is added back in deserialization. - value = getattr(object_to_serialize, key, None) - if cls._is_excluded(value, key, object_to_serialize): - continue - - if key == "_operator_name": - # when operator_name matches task_type, we can remove - # it to reduce the JSON payload - task_type = getattr(object_to_serialize, "task_type", None) - if value != task_type: - serialized_object[key] = cls.serialize(value) - elif key in decorated_fields: - serialized_object[key] = cls.serialize(value) - elif key == "timetable" and value is not None: - serialized_object[key] = encode_timetable(value) - elif key == "weight_rule" and value is not None: - serialized_object[key] = encode_priority_weight_strategy(value) - else: - value = cls.serialize(value) - if isinstance(value, dict) and Encoding.TYPE in value: - value = value[Encoding.VAR] - serialized_object[key] = value - return serialized_object - - @classmethod - def serialize( - cls, var: Any, *, strict: bool = False - ) -> Any: # Unfortunately there is no support for recursive types in mypy - """ - Serialize an object; helper function of depth first search for serialization. - - The serialization protocol is: - - (1) keeping JSON supported types: primitives, dict, list; - (2) encoding other types as ``{TYPE: 'foo', VAR: 'bar'}``, the deserialization - step decode VAR according to TYPE; - (3) Operator has a special field CLASS to record the original class - name for displaying in UI. - - :meta private: - """ - if cls._is_primitive(var): - # enum.IntEnum is an int instance, it causes json dumps error so we use its value. - if isinstance(var, enum.Enum): - return var.value - return var - elif isinstance(var, dict): - return cls._encode( - {str(k): cls.serialize(v, strict=strict) for k, v in var.items()}, - type_=DAT.DICT, - ) - elif isinstance(var, list): - return [cls.serialize(v, strict=strict) for v in var] - elif ( - var.__class__.__name__ == "V1Pod" - and _has_kubernetes() - and isinstance(var, k8s.V1Pod) - ): - json_pod = PodGenerator.serialize_pod(var) - return cls._encode(json_pod, type_=DAT.POD) - elif isinstance(var, OutletEventAccessors): - return cls._encode( - encode_outlet_event_accessors(var), - type_=DAT.ASSET_EVENT_ACCESSORS, - ) - elif isinstance(var, AssetUniqueKey): - return cls._encode( - attrs.asdict(var), - type_=DAT.ASSET_UNIQUE_KEY, - ) - elif isinstance(var, AssetAliasUniqueKey): - return cls._encode( - attrs.asdict(var), - type_=DAT.ASSET_ALIAS_UNIQUE_KEY, - ) - elif isinstance(var, DAG): - return cls._encode(SerializedDAG.serialize_dag(var), type_=DAT.DAG) - elif isinstance(var, Resources): - return var.to_dict() - elif isinstance(var, MappedOperator): - return cls._encode( - SerializedBaseOperator.serialize_mapped_operator(var), type_=DAT.OP - ) - elif isinstance(var, TaskSDKBaseOperator): - var._needs_expansion = var.get_needs_expansion() - return cls._encode( - SerializedBaseOperator.serialize_operator(var), type_=DAT.OP - ) - elif isinstance(var, cls._datetime_types): - return cls._encode(var.timestamp(), type_=DAT.DATETIME) - elif isinstance(var, datetime.timedelta): - return cls._encode(var.total_seconds(), type_=DAT.TIMEDELTA) - elif isinstance(var, (Timezone, FixedTimezone)): - return cls._encode(encode_timezone(var), type_=DAT.TIMEZONE) - elif isinstance(var, relativedelta.relativedelta): - return cls._encode(encode_relativedelta(var), type_=DAT.RELATIVEDELTA) - elif isinstance(var, TaskInstanceKey): - return cls._encode( - var._asdict(), - type_=DAT.TASK_INSTANCE_KEY, - ) - elif isinstance(var, (AirflowException, TaskDeferred)) and hasattr( - var, "serialize" - ): - exc_cls_name, args, kwargs = var.serialize() - return cls._encode( - cls.serialize( - {"exc_cls_name": exc_cls_name, "args": args, "kwargs": kwargs}, - strict=strict, - ), - type_=DAT.AIRFLOW_EXC_SER, - ) - elif isinstance(var, (KeyError, AttributeError)): - return cls._encode( - cls.serialize( - { - "exc_cls_name": var.__class__.__name__, - "args": [var.args], - "kwargs": {}, - }, - strict=strict, - ), - type_=DAT.BASE_EXC_SER, - ) - elif isinstance(var, BaseTrigger): - return cls._encode( - cls.serialize( - var.serialize(), - strict=strict, - ), - type_=DAT.BASE_TRIGGER, - ) - elif callable(var): - return str(get_python_source(var)) - elif isinstance(var, set): - # FIXME: casts set to list in customized serialization in future. - try: - return cls._encode( - sorted(cls.serialize(v, strict=strict) for v in var), - type_=DAT.SET, - ) - except TypeError: - return cls._encode( - [cls.serialize(v, strict=strict) for v in var], - type_=DAT.SET, - ) - elif isinstance(var, tuple): - # FIXME: casts tuple to list in customized serialization in future. - return cls._encode( - [cls.serialize(v, strict=strict) for v in var], - type_=DAT.TUPLE, - ) - elif isinstance(var, TaskGroup): - return TaskGroupSerialization.serialize_task_group(var) - elif isinstance(var, Param): - return cls._encode(cls._serialize_param(var), type_=DAT.PARAM) - elif isinstance(var, XComArg): - return cls._encode(serialize_xcom_arg(var), type_=DAT.XCOM_REF) - elif isinstance(var, LazySelectSequence): - return cls.serialize(list(var)) - elif isinstance(var, BaseAsset): - serialized_asset = encode_asset_condition(var) - return cls._encode(serialized_asset, type_=serialized_asset.pop("__type")) - elif isinstance(var, AssetRef): - return cls._encode(attrs.asdict(var), type_=DAT.ASSET_REF) - elif isinstance(var, SimpleTaskInstance): - return cls._encode( - cls.serialize(var.__dict__, strict=strict), - type_=DAT.SIMPLE_TASK_INSTANCE, - ) - elif isinstance(var, Connection): - return cls._encode(var.to_dict(validate=True), type_=DAT.CONNECTION) - elif isinstance(var, TaskCallbackRequest): - return cls._encode(var.to_json(), type_=DAT.TASK_CALLBACK_REQUEST) - elif isinstance(var, DagCallbackRequest): - return cls._encode(var.to_json(), type_=DAT.DAG_CALLBACK_REQUEST) - elif var.__class__ == Context: - d = {} - for k, v in var.items(): - obj = cls.serialize(v, strict=strict) - d[str(k)] = obj - return cls._encode(d, type_=DAT.TASK_CONTEXT) - elif isinstance(var, ArgNotSet): - return cls._encode(None, type_=DAT.ARG_NOT_SET) - else: - return cls.default_serialization(strict, var) - - @classmethod - def default_serialization(cls, strict, var) -> str: - log.debug("Cast type %s to str in serialization.", type(var)) - if strict: - raise SerializationError("Encountered unexpected type") - return str(var) - - @classmethod - def deserialize(cls, encoded_var: Any) -> Any: - """ - Deserialize an object; helper function of depth first search for deserialization. - - :meta private: - """ - if cls._is_primitive(encoded_var): - return encoded_var - elif isinstance(encoded_var, list): - return [cls.deserialize(v) for v in encoded_var] - - if not isinstance(encoded_var, dict): - raise ValueError( - f"The encoded_var should be dict and is {type(encoded_var)}" - ) - var = encoded_var[Encoding.VAR] - type_ = encoded_var[Encoding.TYPE] - if type_ == DAT.TASK_CONTEXT: - d = {} - for k, v in var.items(): - if k == "task": # todo: add `_encode` of Operator so we don't need this - continue - d[k] = cls.deserialize(v) - d["task"] = d[ - "task_instance" - ].task # todo: add `_encode` of Operator so we don't need this - d["macros"] = macros - d["var"] = { - "json": VariableAccessor(deserialize_json=True), - "value": VariableAccessor(deserialize_json=False), - } - d["conn"] = ConnectionAccessor() - return Context(**d) - elif type_ == DAT.DICT: - return {k: cls.deserialize(v) for k, v in var.items()} - elif type_ == DAT.ASSET_EVENT_ACCESSORS: - return decode_outlet_event_accessors(var) - elif type_ == DAT.ASSET_UNIQUE_KEY: - return AssetUniqueKey(name=var["name"], uri=var["uri"]) - elif type_ == DAT.ASSET_ALIAS_UNIQUE_KEY: - return AssetAliasUniqueKey(name=var["name"]) - elif type_ == DAT.DAG: - return SerializedDAG.deserialize_dag(var) - elif type_ == DAT.OP: - return SerializedBaseOperator.deserialize_operator(var) - elif type_ == DAT.DATETIME: - return from_timestamp(var) - elif type_ == DAT.POD: - if not _has_kubernetes(): - raise RuntimeError( - "Cannot deserialize POD objects without kubernetes libraries installed!" - ) - pod = PodGenerator.deserialize_model_dict(var) - return pod - elif type_ == DAT.TIMEDELTA: - return datetime.timedelta(seconds=var) - elif type_ == DAT.TIMEZONE: - return decode_timezone(var) - elif type_ == DAT.RELATIVEDELTA: - return decode_relativedelta(var) - elif type_ == DAT.AIRFLOW_EXC_SER or type_ == DAT.BASE_EXC_SER: - deser = cls.deserialize(var) - exc_cls_name = deser["exc_cls_name"] - args = deser["args"] - kwargs = deser["kwargs"] - del deser - if type_ == DAT.AIRFLOW_EXC_SER: - exc_cls = import_string(exc_cls_name) - else: - exc_cls = import_string(f"builtins.{exc_cls_name}") - return exc_cls(*args, **kwargs) - elif type_ == DAT.BASE_TRIGGER: - tr_cls_name, kwargs = cls.deserialize(var) - tr_cls = import_string(tr_cls_name) - return tr_cls(**kwargs) - elif type_ == DAT.SET: - return {cls.deserialize(v) for v in var} - elif type_ == DAT.TUPLE: - return tuple(cls.deserialize(v) for v in var) - elif type_ == DAT.PARAM: - return cls._deserialize_param(var) - elif type_ == DAT.XCOM_REF: - return _XComRef( - var - ) # Delay deserializing XComArg objects until we have the entire DAG. - elif type_ == DAT.ASSET: - return decode_asset(var) - elif type_ == DAT.ASSET_ALIAS: - return AssetAlias(**var) - elif type_ == DAT.ASSET_ANY: - return AssetAny(*(decode_asset_condition(x) for x in var["objects"])) - elif type_ == DAT.ASSET_ALL: - return AssetAll(*(decode_asset_condition(x) for x in var["objects"])) - elif type_ == DAT.ASSET_REF: - return Asset.ref(**var) - elif type_ == DAT.SIMPLE_TASK_INSTANCE: - return SimpleTaskInstance(**cls.deserialize(var)) - elif type_ == DAT.CONNECTION: - return Connection(**var) - elif type_ == DAT.TASK_CALLBACK_REQUEST: - return TaskCallbackRequest.from_json(var) - elif type_ == DAT.DAG_CALLBACK_REQUEST: - return DagCallbackRequest.from_json(var) - elif type_ == DAT.TASK_INSTANCE_KEY: - return TaskInstanceKey(**var) - elif type_ == DAT.ARG_NOT_SET: - return NOTSET - else: - raise TypeError(f"Invalid type {type_!s} in deserialization.") - - _deserialize_datetime = from_timestamp - _deserialize_timezone = parse_timezone - - @classmethod - def _deserialize_timedelta(cls, seconds: int) -> datetime.timedelta: - return datetime.timedelta(seconds=seconds) - - @classmethod - def _is_constructor_param(cls, attrname: str, instance: Any) -> bool: - return attrname in cls._CONSTRUCTOR_PARAMS - - @classmethod - def _value_is_hardcoded_default( - cls, attrname: str, value: Any, instance: Any - ) -> bool: - """ - Return true if ``value`` is the hard-coded default for the given attribute. - - This takes in to account cases where the ``max_active_tasks`` parameter is - stored in the ``_max_active_tasks`` attribute. - - And by using `is` here only and not `==` this copes with the case a - user explicitly specifies an attribute with the same "value" as the - default. (This is because ``"default" is "default"`` will be False as - they are different strings with the same characters.) - - Also returns True if the value is an empty list or empty dict. This is done - to account for the case where the default value of the field is None but has the - ``field = field or {}`` set. - """ - if attrname in cls._CONSTRUCTOR_PARAMS: - if cls._CONSTRUCTOR_PARAMS[attrname] is value or (value in [{}, []]): - return True - if cls._CONSTRUCTOR_PARAMS[attrname] is attrs.NOTHING and value is None: - return True - if attrs.has(type(instance)): - return any( - fld.default is value - for fld in attrs.fields(type(instance)) - if fld.name == attrname - ) - return False - - @classmethod - def _serialize_param(cls, param: Param): - return { - "__class": f"{param.__module__}.{param.__class__.__name__}", - "default": cls.serialize(param.value), - "description": cls.serialize(param.description), - "schema": cls.serialize(param.schema), - } - - @classmethod - def _deserialize_param(cls, param_dict: dict): - """ - Workaround to serialize Param on older versions. - - In 2.2.0, Param attrs were assumed to be json-serializable and were not run through - this class's ``serialize`` method. So before running through ``deserialize``, - we first verify that it's necessary to do. - """ - class_name = param_dict["__class"] - class_: type[Param] = import_string(class_name) - attrs = ("default", "description", "schema") - kwargs = {} - - def is_serialized(val): - if isinstance(val, dict): - return Encoding.TYPE in val - if isinstance(val, list): - return all( - isinstance(item, dict) and Encoding.TYPE in item for item in val - ) - return False - - for attr in attrs: - if attr in param_dict: - val = param_dict[attr] - if is_serialized(val): - val = cls.deserialize(val) - kwargs[attr] = val - return class_(**kwargs) - - @classmethod - def _serialize_params_dict( - cls, params: ParamsDict | dict - ) -> list[tuple[str, dict]]: - """Serialize Params dict for a DAG or task as a list of tuples to ensure ordering.""" - serialized_params = [] - for k, v in params.items(): - if isinstance(params, ParamsDict): - # Use native param object, not resolved value if possible - v = params.get_param(k) - try: - class_identity = f"{v.__module__}.{v.__class__.__name__}" - except AttributeError: - class_identity = "" - if class_identity == "airflow.sdk.definitions.param.Param": - serialized_params.append((k, cls._serialize_param(v))) - else: - # Auto-box other values into Params object like it is done by DAG parsing as well - serialized_params.append((k, cls._serialize_param(Param(v)))) - return serialized_params - - @classmethod - def _deserialize_params_dict( - cls, encoded_params: list[tuple[str, dict]] - ) -> ParamsDict: - """Deserialize a DAG's Params dict.""" - if isinstance(encoded_params, collections.abc.Mapping): - # in 2.9.2 or earlier params were serialized as JSON objects - encoded_param_pairs: Iterable[tuple[str, dict]] = encoded_params.items() - else: - encoded_param_pairs = encoded_params - - op_params = {} - for k, v in encoded_param_pairs: - if isinstance(v, dict) and "__class" in v: - op_params[k] = cls._deserialize_param(v) - else: - # Old style params, convert it - op_params[k] = Param(v) - - return ParamsDict(op_params) - - -class DependencyDetector: - """ - Detects dependencies between DAGs. - - :meta private: - """ - - @staticmethod - def detect_task_dependencies(task: Operator) -> list[DagDependency]: - """Detect dependencies caused by tasks.""" - from airflow.providers.standard.operators.trigger_dagrun import ( - TriggerDagRunOperator, - ) - from airflow.providers.standard.sensors.external_task import ExternalTaskSensor - - deps = [] - if isinstance(task, TriggerDagRunOperator): - deps.append( - DagDependency( - source=task.dag_id, - target=getattr(task, "trigger_dag_id"), - label=task.task_display_name, - dependency_type="trigger", - dependency_id=task.task_id, - ) - ) - elif ( - isinstance(task, MappedOperator) - and issubclass( - cast("type[BaseOperator]", task.operator_class), TriggerDagRunOperator - ) - and "trigger_dag_id" in task.partial_kwargs - ): - deps.append( - DagDependency( - source=task.dag_id, - target=task.partial_kwargs["trigger_dag_id"], - label=task.task_display_name, - dependency_type="trigger", - dependency_id=task.task_id, - ) - ) - elif isinstance(task, ExternalTaskSensor): - deps.append( - DagDependency( - source=getattr(task, "external_dag_id"), - target=task.dag_id, - label=task.task_display_name, - dependency_type="sensor", - dependency_id=task.task_id, - ) - ) - elif ( - isinstance(task, MappedOperator) - and issubclass( - cast("type[BaseOperator]", task.operator_class), ExternalTaskSensor - ) - and "external_dag_id" in task.partial_kwargs - ): - deps.append( - DagDependency( - source=task.partial_kwargs["external_dag_id"], - target=task.dag_id, - label=task.task_display_name, - dependency_type="sensor", - dependency_id=task.task_id, - ) - ) - - for obj in task.outlets or []: - if isinstance(obj, Asset): - deps.append( - DagDependency( - source=task.dag_id, - target="asset", - label=obj.name, - dependency_type="asset", - dependency_id=AssetUniqueKey.from_asset(obj).to_str(), - ) - ) - elif isinstance(obj, AssetAlias): - deps.extend(obj.iter_dag_dependencies(source=task.dag_id, target="")) - - return deps - - @staticmethod - def detect_dag_dependencies(dag: DAG | None) -> Iterable[DagDependency]: - """Detect dependencies set directly on the DAG object.""" - if not dag: - return - yield from dag.timetable.asset_condition.iter_dag_dependencies( - source="", target=dag.dag_id - ) - - -class SerializedBaseOperator(BaseOperator, BaseSerialization): - """ - A JSON serializable representation of operator. - - All operators are casted to SerializedBaseOperator after deserialization. - Class specific attributes used by UI are move to object attributes. - - Creating a SerializedBaseOperator is a three-step process: - - 1. Instantiate a :class:`SerializedBaseOperator` object. - 2. Populate attributes with :func:`SerializedBaseOperator.populated_operator`. - 3. When the task's containing DAG is available, fix references to the DAG - with :func:`SerializedBaseOperator.set_task_dag_references`. - """ - - _decorated_fields = {"executor_config"} - - _CONSTRUCTOR_PARAMS = { - k: v.default - for k, v in itertools.chain( - signature(BaseOperator.__init__).parameters.items(), - signature(TaskSDKBaseOperator.__init__).parameters.items(), - ) - if v.default is not v.empty - } - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - # task_type is used by UI to display the correct class type, because UI only - # receives BaseOperator from deserialized DAGs. - self._task_type = "BaseOperator" - # Move class attributes into object attributes. - self.ui_color = BaseOperator.ui_color - self.ui_fgcolor = BaseOperator.ui_fgcolor - self.template_ext = BaseOperator.template_ext - self.template_fields = BaseOperator.template_fields - self.operator_extra_links = BaseOperator.operator_extra_links - self._operator_name = None - - @cached_property - def operator_extra_link_dict(self) -> dict[str, BaseOperatorLink]: - """Returns dictionary of all extra links for the operator.""" - op_extra_links_from_plugin: dict[str, Any] = {} - from airflow import plugins_manager - - plugins_manager.initialize_extra_operators_links_plugins() - if plugins_manager.operator_extra_links is None: - raise AirflowException("Can't load operators") - for ope in plugins_manager.operator_extra_links: - if ope.operators and self.operator_class in ope.operators: - op_extra_links_from_plugin.update({ope.name: ope}) - - operator_extra_links_all = { - link.name: link for link in self.operator_extra_links - } - # Extra links defined in Plugins overrides operator links defined in operator - operator_extra_links_all.update(op_extra_links_from_plugin) - - return operator_extra_links_all - - @cached_property - def global_operator_extra_link_dict(self) -> dict[str, Any]: - """Returns dictionary of all global extra links.""" - from airflow import plugins_manager - - plugins_manager.initialize_extra_operators_links_plugins() - if plugins_manager.global_operator_extra_links is None: - raise AirflowException("Can't load operators") - return {link.name: link for link in plugins_manager.global_operator_extra_links} - - @cached_property - def extra_links(self) -> list[str]: - return sorted( - set(self.operator_extra_link_dict).union( - self.global_operator_extra_link_dict - ) - ) - - def get_extra_links(self, ti: TaskInstance, name: str) -> str | None: - """ - For an operator, gets the URLs that the ``extra_links`` entry points to. - - :meta private: - - :raise ValueError: The error message of a ValueError will be passed on through to - the fronted to show up as a tooltip on the disabled link. - :param ti: The TaskInstance for the URL being searched for. - :param name: The name of the link we're looking for the URL for. Should be - one of the options specified in ``extra_links``. - """ - link = self.operator_extra_link_dict.get( - name - ) or self.global_operator_extra_link_dict.get(name) - if not link: - return None - return link.get_link(self.unmap(None), ti_key=ti.key) - - @property - def task_type(self) -> str: - # Overwrites task_type of BaseOperator to use _task_type instead of - # __class__.__name__. - - return self._task_type - - @task_type.setter - def task_type(self, task_type: str): - self._task_type = task_type - - @property - def operator_name(self) -> str: - # Overwrites operator_name of BaseOperator to use _operator_name instead of - # __class__.operator_name. - return self._operator_name or self.task_type - - @operator_name.setter - def operator_name(self, operator_name: str): - self._operator_name = operator_name - - @classmethod - def serialize_mapped_operator(cls, op: MappedOperator) -> dict[str, Any]: - serialized_op = cls._serialize_node(op) - # Handle expand_input and op_kwargs_expand_input. - expansion_kwargs = op._get_specified_expand_input() - if TYPE_CHECKING: # Let Mypy check the input type for us! - _ExpandInputRef.validate_expand_input_value(expansion_kwargs.value) - serialized_op[op._expand_input_attr] = { - "type": type(expansion_kwargs).EXPAND_INPUT_TYPE, - "value": cls.serialize(expansion_kwargs.value), - } - - # Simplify partial_kwargs by comparing it to the most barebone object. - # Remove all entries that are simply default values. - serialized_partial = serialized_op["partial_kwargs"] - for k, default in _get_default_mapped_partial().items(): - try: - v = serialized_partial[k] - except KeyError: - continue - if v == default: - del serialized_partial[k] - - serialized_op["_is_mapped"] = True - return serialized_op - - @classmethod - def serialize_operator( - cls, op: TaskSDKBaseOperator | MappedOperator - ) -> dict[str, Any]: - return cls._serialize_node(op) - - @classmethod - def _serialize_node( - cls, op: TaskSDKBaseOperator | MappedOperator - ) -> dict[str, Any]: - """Serialize operator into a JSON object.""" - serialize_op = cls.serialize_to_json(op, cls._decorated_fields) - - # Detect if there's a change in python callable name - python_callable = getattr(op, "python_callable", None) - if python_callable: - callable_name = qualname(python_callable) - serialize_op["python_callable_name"] = callable_name - - serialize_op["task_type"] = getattr(op, "task_type", type(op).__name__) - serialize_op["_task_module"] = getattr(op, "_task_module", type(op).__module__) - if op.operator_name != serialize_op["task_type"]: - serialize_op["_operator_name"] = op.operator_name - - # Used to determine if an Operator is inherited from EmptyOperator - if op.inherits_from_empty_operator: - serialize_op["_is_empty"] = True - - # Used to determine if an Operator is inherited from SkipMixin or BranchMixin - if op.inherits_from_skipmixin: - serialize_op["_can_skip_downstream"] = True - - serialize_op["start_trigger_args"] = ( - encode_start_trigger_args(op.start_trigger_args) - if op.start_trigger_args - else None - ) - serialize_op["start_from_trigger"] = op.start_from_trigger - - if op.operator_extra_links: - serialize_op["_operator_extra_links"] = cls._serialize_operator_extra_links( - op.operator_extra_links.__get__(op) - if isinstance(op.operator_extra_links, property) - else op.operator_extra_links - ) - - # Store all template_fields as they are if there are JSON Serializable - # If not, store them as strings - # And raise an exception if the field is not templateable - forbidden_fields = set(SerializedBaseOperator._CONSTRUCTOR_PARAMS.keys()) - # Though allow some of the BaseOperator fields to be templated anyway - forbidden_fields.difference_update({"email"}) - if op.template_fields: - for template_field in op.template_fields: - if template_field in forbidden_fields: - raise AirflowException( - dedent( - f"""Cannot template BaseOperator field: - {template_field!r} {op.__class__.__name__=} {op.template_fields=}""" - ) - ) - value = getattr(op, template_field, None) - if not cls._is_excluded(value, template_field, op): - serialize_op[template_field] = serialize_template_field( - value, template_field - ) - - if op.params: - serialize_op["params"] = cls._serialize_params_dict(op.params) - - return serialize_op - - @classmethod - def populate_operator(cls, op: Operator, encoded_op: dict[str, Any]) -> None: - """ - Populate operator attributes with serialized values. - - This covers simple attributes that don't reference other things in the - DAG. Setting references (such as ``op.dag`` and task dependencies) is - done in ``set_task_dag_references`` instead, which is called after the - DAG is hydrated. - """ - # Extra Operator Links defined in Plugins - op_extra_links_from_plugin = {} - - # We don't want to load Extra Operator links in Scheduler - if cls._load_operator_extra_links: - from airflow import plugins_manager - - plugins_manager.initialize_extra_operators_links_plugins() - - if plugins_manager.operator_extra_links is None: - raise AirflowException("Can not load plugins") - - for ope in plugins_manager.operator_extra_links: - for operator in ope.operators: - if ( - operator.__name__ == encoded_op["task_type"] - and operator.__module__ == encoded_op["_task_module"] - ): - op_extra_links_from_plugin.update({ope.name: ope}) - - # If OperatorLinks are defined in Plugins but not in the Operator that is being Serialized - # set the Operator links attribute - # The case for "If OperatorLinks are defined in the operator that is being Serialized" - # is handled in the deserialization loop where it matches k == "_operator_extra_links" - if op_extra_links_from_plugin and "_operator_extra_links" not in encoded_op: - setattr( - op, - "operator_extra_links", - list(op_extra_links_from_plugin.values()), - ) - - for k, v in encoded_op.items(): - # python_callable_name only serves to detect function name changes - if k == "python_callable_name": - continue - if k in ("_outlets", "_inlets"): - # `_outlets` -> `outlets` - k = k[1:] - elif k == "task_type": - k = "_task_type" - if k == "_downstream_task_ids": - # Upgrade from old format/name - k = "downstream_task_ids" - - if k == "label": - # Label shouldn't be set anymore -- it's computed from task_id now - continue - if k == "downstream_task_ids": - v = set(v) - elif k in {"retry_delay", "execution_timeout", "max_retry_delay"}: - # If operator's execution_timeout is None and core.default_task_execution_timeout is not None, - # v will be None so do not deserialize into timedelta - if v is not None: - v = cls._deserialize_timedelta(v) - elif k in encoded_op["template_fields"]: - pass - elif k == "resources": - v = Resources.from_dict(v) - elif k.endswith("_date"): - v = cls._deserialize_datetime(v) - elif k == "_operator_extra_links": - if cls._load_operator_extra_links: - op_predefined_extra_links = cls._deserialize_operator_extra_links(v) - - # If OperatorLinks with the same name exists, Links via Plugin have higher precedence - op_predefined_extra_links.update(op_extra_links_from_plugin) - else: - op_predefined_extra_links = {} - - v = list(op_predefined_extra_links.values()) - k = "operator_extra_links" - - elif k == "params": - v = cls._deserialize_params_dict(v) - if op.params: # Merge existing params if needed. - v, new = op.params, v - v.update(new) - elif k == "partial_kwargs": - v = {arg: cls.deserialize(value) for arg, value in v.items()} - elif k in {"expand_input", "op_kwargs_expand_input"}: - v = _ExpandInputRef(v["type"], cls.deserialize(v["value"])) - elif k == "operator_class": - v = {k_: cls.deserialize(v_) for k_, v_ in v.items()} - elif k == "_is_sensor": - from airflow.ti_deps.deps.ready_to_reschedule import ( - ReadyToRescheduleDep, - ) - - if v is False: - raise RuntimeError( - "_is_sensor=False should never have been serialized!" - ) - object.__setattr__(op, "deps", op.deps | {ReadyToRescheduleDep()}) # type: ignore[union-attr] - continue - elif ( - k in cls._decorated_fields - or k not in op.get_serialized_fields() - or k in ("outlets", "inlets") - ): - v = cls.deserialize(v) - elif k == "on_failure_fail_dagrun": - k = "_on_failure_fail_dagrun" - elif k == "weight_rule": - v = decode_priority_weight_strategy(v) - - # else use v as it is - - setattr(op, k, v) - - for k in ( - op.get_serialized_fields() - - encoded_op.keys() - - cls._CONSTRUCTOR_PARAMS.keys() - ): - # TODO: refactor deserialization of BaseOperator and MappedOperator (split it out), then check - # could go away. - if not hasattr(op, k): - setattr(op, k, None) - - # Set all the template_field to None that were not present in Serialized JSON - for field in op.template_fields: - if not hasattr(op, field): - setattr(op, field, None) - - # Used to determine if an Operator is inherited from EmptyOperator - setattr(op, "_is_empty", bool(encoded_op.get("_is_empty", False))) - - # Used to determine if an Operator is inherited from SkipMixin - setattr( - op, - "_can_skip_downstream", - bool(encoded_op.get("_can_skip_downstream", False)), - ) - - start_trigger_args = None - encoded_start_trigger_args = encoded_op.get("start_trigger_args", None) - if encoded_start_trigger_args: - encoded_start_trigger_args = cast("dict", encoded_start_trigger_args) - start_trigger_args = decode_start_trigger_args(encoded_start_trigger_args) - setattr(op, "start_trigger_args", start_trigger_args) - setattr( - op, "start_from_trigger", bool(encoded_op.get("start_from_trigger", False)) - ) - - @staticmethod - def set_task_dag_references(task: Operator, dag: DAG) -> None: - """ - Handle DAG references on an operator. - - The operator should have been mostly populated earlier by calling - ``populate_operator``. This function further fixes object references - that were not possible before the task's containing DAG is hydrated. - """ - task.dag = dag - - for date_attr in ("start_date", "end_date"): - if getattr(task, date_attr, None) is None: - setattr(task, date_attr, getattr(dag, date_attr, None)) - - # Dereference expand_input and op_kwargs_expand_input. - for k in ("expand_input", "op_kwargs_expand_input"): - if isinstance(kwargs_ref := getattr(task, k, None), _ExpandInputRef): - setattr(task, k, kwargs_ref.deref(dag)) - - for task_id in task.downstream_task_ids: - # Bypass set_upstream etc here - it does more than we want - dag.task_dict[task_id].upstream_task_ids.add(task.task_id) - - @classmethod - def deserialize_operator(cls, encoded_op: dict[str, Any]) -> Operator: - """Deserializes an operator from a JSON object.""" - op: Operator - if encoded_op.get("_is_mapped", False): - # Most of these will be loaded later, these are just some stand-ins. - op_data = { - k: v - for k, v in encoded_op.items() - if k in TaskSDKBaseOperator.get_serialized_fields() - } - - from airflow.models.mappedoperator import ( - MappedOperator as MappedOperatorWithDB, - ) - - try: - operator_name = encoded_op["_operator_name"] - except KeyError: - operator_name = encoded_op["task_type"] - - op = MappedOperatorWithDB( - operator_class=op_data, - expand_input=EXPAND_INPUT_EMPTY, - partial_kwargs={}, - task_id=encoded_op["task_id"], - params={}, - operator_extra_links=BaseOperator.operator_extra_links, - template_ext=BaseOperator.template_ext, - template_fields=BaseOperator.template_fields, - template_fields_renderers=BaseOperator.template_fields_renderers, - ui_color=BaseOperator.ui_color, - ui_fgcolor=BaseOperator.ui_fgcolor, - is_empty=False, - is_sensor=encoded_op.get("_is_sensor", False), - can_skip_downstream=encoded_op.get("_can_skip_downstream", False), - task_module=encoded_op["_task_module"], - task_type=encoded_op["task_type"], - operator_name=operator_name, - dag=None, - task_group=None, - start_date=None, - end_date=None, - disallow_kwargs_override=encoded_op["_disallow_kwargs_override"], - expand_input_attr=encoded_op["_expand_input_attr"], - start_trigger_args=encoded_op.get("start_trigger_args", None), - start_from_trigger=encoded_op.get("start_from_trigger", False), - ) - else: - op = SerializedBaseOperator(task_id=encoded_op["task_id"]) - cls.populate_operator(op, encoded_op) - - return op - - @classmethod - def detect_dependencies(cls, op: Operator) -> set[DagDependency]: - """Detect between DAG dependencies for the operator.""" - dependency_detector = DependencyDetector() - deps = set(dependency_detector.detect_task_dependencies(op)) - return deps - - @classmethod - def _is_excluded(cls, var: Any, attrname: str, op: DAGNode): - if var is not None and op.has_dag() and attrname.endswith("_date"): - # If this date is the same as the matching field in the dag, then - # don't store it again at the task level. - dag_date = getattr(op.dag, attrname, None) - if var is dag_date or var == dag_date: - return True - return super()._is_excluded(var, attrname, op) - - @classmethod - def _deserialize_operator_extra_links( - cls, encoded_op_links: dict[str, str] - ) -> dict[str, XComOperatorLink]: - """ - Deserialize Operator Links if the Classes are registered in Airflow Plugins. - - Error is raised if the OperatorLink is not found in Plugins too. - - :param encoded_op_links: Serialized Operator Link - :return: De-Serialized Operator Link - """ - from airflow import plugins_manager - - plugins_manager.initialize_extra_operators_links_plugins() - - if plugins_manager.registered_operator_link_classes is None: - raise AirflowException("Can't load plugins") - op_predefined_extra_links = {} - - for name, xcom_key in encoded_op_links.items(): - # Get the name and xcom_key of the encoded operator and use it to create a XComOperatorLink object - # during deserialization. - # - # Example: - # enc_operator['_operator_extra_links'] = - # { - # 'airflow': 'airflow_link_key', - # 'foo-bar': 'link-key', - # 'no_response': 'key', - # 'raise_error': 'key' - # } - - op_predefined_extra_link = XComOperatorLink(name=name, xcom_key=xcom_key) - op_predefined_extra_links.update( - {op_predefined_extra_link.name: op_predefined_extra_link} - ) - - return op_predefined_extra_links - - @classmethod - def _serialize_operator_extra_links( - cls, operator_extra_links: Iterable[BaseOperatorLink] - ) -> dict[str, str]: - """ - Serialize Operator Links. - - Store the "name" of the link mapped with the xcom_key which can be later used to retrieve this - operator extra link from XComs. - For example: - ``{'link-name-1': 'xcom-key-1'}`` - - :param operator_extra_links: Operator Link - :return: Serialized Operator Link - """ - return {link.name: link.xcom_key for link in operator_extra_links} - - @classmethod - def serialize(cls, var: Any, *, strict: bool = False) -> Any: - # the wonders of multiple inheritance BaseOperator defines an instance method - return BaseSerialization.serialize(var=var, strict=strict) - - @classmethod - def deserialize(cls, encoded_var: Any) -> Any: - return BaseSerialization.deserialize(encoded_var=encoded_var) - - -class SerializedDAG(DAG, BaseSerialization): - """ - A JSON serializable representation of DAG. - - A stringified DAG can only be used in the scope of scheduler and webserver, because fields - that are not serializable, such as functions and customer defined classes, are casted to - strings. - """ - - _decorated_fields = {"default_args", "access_control"} - - @staticmethod - def __get_constructor_defaults(): - param_to_attr = { - "description": "_description", - } - return { - param_to_attr.get(k, k): v.default - for k, v in signature(DAG.__init__).parameters.items() - if v.default is not v.empty - } - - _CONSTRUCTOR_PARAMS = __get_constructor_defaults.__func__() # type: ignore - del __get_constructor_defaults - - _json_schema = lazy_object_proxy.Proxy(load_dag_schema) - - @classmethod - def serialize_dag(cls, dag: DAG) -> dict: - """Serialize a DAG into a JSON object.""" - try: - serialized_dag = cls.serialize_to_json(dag, cls._decorated_fields) - serialized_dag["_processor_dags_folder"] = DAGS_FOLDER - serialized_dag["tasks"] = [ - cls.serialize(task) for _, task in dag.task_dict.items() - ] - - dag_deps = [ - dep - for task in dag.task_dict.values() - for dep in SerializedBaseOperator.detect_dependencies(task) - ] - dag_deps.extend(DependencyDetector.detect_dag_dependencies(dag)) - serialized_dag["dag_dependencies"] = [x.__dict__ for x in sorted(dag_deps)] - serialized_dag["task_group"] = TaskGroupSerialization.serialize_task_group( - dag.task_group - ) - - # Edge info in the JSON exactly matches our internal structure - serialized_dag["edge_info"] = dag.edge_info - serialized_dag["params"] = cls._serialize_params_dict(dag.params) - - # has_on_*_callback are only stored if the value is True, as the default is False - if dag.has_on_success_callback: - serialized_dag["has_on_success_callback"] = True - if dag.has_on_failure_callback: - serialized_dag["has_on_failure_callback"] = True - return serialized_dag - except SerializationError: - raise - except Exception as e: - raise SerializationError(f"Failed to serialize DAG {dag.dag_id!r}: {e}") - - @classmethod - def deserialize_dag(cls, encoded_dag: dict[str, Any]) -> SerializedDAG: - """Deserializes a DAG from a JSON object.""" - if "dag_id" not in encoded_dag: - raise RuntimeError( - "Encoded dag object has no dag_id key. You may need to run `airflow dags reserialize`." - ) - - dag = SerializedDAG(dag_id=encoded_dag["dag_id"], schedule=None) - - for k, v in encoded_dag.items(): - if k == "_downstream_task_ids": - v = set(v) - elif k == "tasks": - SerializedBaseOperator._load_operator_extra_links = ( - cls._load_operator_extra_links - ) - tasks = {} - for obj in v: - if obj.get(Encoding.TYPE) == DAT.OP: - deser = SerializedBaseOperator.deserialize_operator( - obj[Encoding.VAR] - ) - tasks[deser.task_id] = deser - k = "task_dict" - v = tasks - elif k == "timezone": - v = cls._deserialize_timezone(v) - elif k == "dagrun_timeout": - v = cls._deserialize_timedelta(v) - elif k.endswith("_date"): - v = cls._deserialize_datetime(v) - elif k == "edge_info": - # Value structure matches exactly - pass - elif k == "timetable": - v = decode_timetable(v) - elif k == "weight_rule": - v = decode_priority_weight_strategy(v) - elif k in cls._decorated_fields: - v = cls.deserialize(v) - elif k == "params": - v = cls._deserialize_params_dict(v) - elif k == "tags": - v = set(v) - # else use v as it is - - object.__setattr__(dag, k, v) - - # Set _task_group - if "task_group" in encoded_dag: - tg = TaskGroupSerialization.deserialize_task_group( - encoded_dag["task_group"], - None, - dag.task_dict, - dag, - ) - object.__setattr__(dag, "task_group", tg) - else: - # This must be old data that had no task_group. Create a root TaskGroup and add - # all tasks to it. - object.__setattr__(dag, "task_group", TaskGroup.create_root(dag)) - for task in dag.tasks: - dag.task_group.add(task) - - # Set has_on_*_callbacks to True if they exist in Serialized blob as False is the default - if "has_on_success_callback" in encoded_dag: - dag.has_on_success_callback = True - if "has_on_failure_callback" in encoded_dag: - dag.has_on_failure_callback = True - - keys_to_set_none = ( - dag.get_serialized_fields() - - encoded_dag.keys() - - cls._CONSTRUCTOR_PARAMS.keys() - ) - for k in keys_to_set_none: - setattr(dag, k, None) - - for task in dag.task_dict.values(): - SerializedBaseOperator.set_task_dag_references(task, dag) - - return dag - - @classmethod - def _is_excluded(cls, var: Any, attrname: str, op: DAGNode): - # {} is explicitly different from None in the case of DAG-level access control - # and as a result we need to preserve empty dicts through serialization for this field - if attrname == "access_control" and var is not None: - return False - if attrname == "dag_display_name" and var == op.dag_id: - return True - return super()._is_excluded(var, attrname, op) - - @classmethod - def to_dict(cls, var: Any) -> dict: - """Stringifies DAGs and operators contained by var and returns a dict of var.""" - json_dict = {"__version": cls.SERIALIZER_VERSION, "dag": cls.serialize_dag(var)} - - # Validate Serialized DAG with Json Schema. Raises Error if it mismatches - cls.validate_schema(json_dict) - return json_dict - - @staticmethod - def conversion_v1_to_v2(ser_obj: dict): - dag_dict = ser_obj["dag"] - dag_renames = [ - ("_dag_id", "dag_id"), - ("_task_group", "task_group"), - ("_access_control", "access_control"), - ] - task_renames = [("_task_type", "task_type")] - # - tasks_remove = [ - "_log_config_logger_name", - "deps", - "sla", - # Operator extra links from Airflow 2 won't work anymore, only new ones, so remove these - "_operator_extra_links", - ] - - ser_obj["__version"] = 2 - - def replace_dataset_in_str(s): - return s.replace("Dataset", "Asset").replace("dataset", "asset") - - def _replace_dataset_with_asset_in_timetables(obj, parent_key=None): - if isinstance(obj, dict): - new_obj = {} - for k, v in obj.items(): - new_key = replace_dataset_in_str(k) if isinstance(k, str) else k - # Don't replace uri values - if new_key == "uri": - new_obj[new_key] = v - else: - new_value = ( - replace_dataset_in_str(v) - if isinstance(v, str) - else _replace_dataset_with_asset_in_timetables( - v, parent_key=new_key - ) - ) - new_obj[new_key] = new_value - # Insert "name" and "group" if this is inside the 'objects' list - if parent_key == "objects": - new_obj["name"] = None - new_obj["group"] = None - return new_obj - - elif isinstance(obj, list): - return [ - _replace_dataset_with_asset_in_timetables(i, parent_key=parent_key) - for i in obj - ] - - return obj - - def _create_compat_timetable(value): - from airflow import settings - from airflow.sdk.definitions.dag import _create_timetable - - if tzs := dag_dict.get("timezone"): - timezone = decode_timezone(tzs) - else: - timezone = settings.TIMEZONE - timetable = _create_timetable(value, timezone) - return encode_timetable(timetable) - - for old, new in dag_renames: - if old in dag_dict: - dag_dict[new] = dag_dict.pop(old) - - if default_args := dag_dict.get("default_args"): - for k in tasks_remove: - default_args["__var"].pop(k, None) - - if timetable := dag_dict.get("timetable"): - if timetable["__type"] in { - "airflow.timetables.simple.DatasetTriggeredTimetable", - "airflow.timetables.datasets.DatasetOrTimeSchedule", - }: - dag_dict["timetable"] = _replace_dataset_with_asset_in_timetables( - dag_dict["timetable"] - ) - elif (sched := dag_dict.pop("schedule_interval", None)) is None: - dag_dict["timetable"] = _create_compat_timetable(None) - elif isinstance(sched, str): - dag_dict["timetable"] = _create_compat_timetable(sched) - elif sched.get("__type") == "timedelta": - dag_dict["timetable"] = _create_compat_timetable( - datetime.timedelta(seconds=sched["__var"]) - ) - elif sched.get("__type") == "relativedelta": - dag_dict["timetable"] = _create_compat_timetable( - decode_relativedelta(sched["__var"]) - ) - else: - # We should maybe convert this to None and warn instead - raise ValueError(f"Unknown schedule_interval field {sched!r}") - - if "dag_dependencies" in dag_dict: - for dep in dag_dict["dag_dependencies"]: - dep_type = dep.get("dependency_type") - if dep_type in ("dataset", "dataset-alias"): - dep["dependency_type"] = dep_type.replace("dataset", "asset") - - if not dep.get("label"): - dep["label"] = dep["dependency_id"] - - for fld in ("target", "source"): - val = dep.get(fld) - if val == dep_type and val in ("dataset", "dataset-alias"): - dep[fld] = dep[fld].replace("dataset", "asset") - elif val.startswith("dataset:"): - dep[fld] = dep[fld].replace("dataset:", "asset:") - elif val.startswith("dataset-alias:"): - dep[fld] = dep[fld].replace("dataset-alias:", "asset-alias:") - - for task in dag_dict["tasks"]: - task_var: dict = task["__var"] - if ( - "airflow.ti_deps.deps.ready_to_reschedule.ReadyToRescheduleDep" - in task_var.get("deps", []) - ): - task_var["_is_sensor"] = True - for k in tasks_remove: - task_var.pop(k, None) - for old, new in task_renames: - task_var[new] = task_var.pop(old) - for item in itertools.chain( - *(task_var.get(key, []) for key in ("inlets", "outlets")) - ): - original_item_type = item["__type"] - if isinstance(item, dict) and "__type" in item: - item["__type"] = replace_dataset_in_str(original_item_type) - - var_ = item["__var"] - if original_item_type == "dataset": - var_["name"] = var_["uri"] - var_["group"] = "asset" - - # Set on the root TG - dag_dict["task_group"]["group_display_name"] = "" - - @classmethod - def from_dict(cls, serialized_obj: dict) -> SerializedDAG: - """Deserializes a python dict in to the DAG and operators it contains.""" - ver = serialized_obj.get("__version", "") - if ver not in (1, 2): - raise ValueError(f"Unsure how to deserialize version {ver!r}") - if ver == 1: - cls.conversion_v1_to_v2(serialized_obj) - return cls.deserialize_dag(serialized_obj["dag"]) - - -class TaskGroupSerialization(BaseSerialization): - """JSON serializable representation of a task group.""" - - @classmethod - def serialize_task_group(cls, task_group: TaskGroup) -> dict[str, Any] | None: - """Serialize TaskGroup into a JSON object.""" - if not task_group: - return None - - # task_group.xxx_ids needs to be sorted here, because task_group.xxx_ids is a set, - # when converting set to list, the order is uncertain. - # When calling json.dumps(self.data, sort_keys=True) to generate dag_hash, misjudgment will occur - encoded = { - "_group_id": task_group._group_id, - "group_display_name": task_group.group_display_name, - "prefix_group_id": task_group.prefix_group_id, - "tooltip": task_group.tooltip, - "ui_color": task_group.ui_color, - "ui_fgcolor": task_group.ui_fgcolor, - "children": { - label: child.serialize_for_task_group() - for label, child in task_group.children.items() - }, - "upstream_group_ids": cls.serialize(sorted(task_group.upstream_group_ids)), - "downstream_group_ids": cls.serialize( - sorted(task_group.downstream_group_ids) - ), - "upstream_task_ids": cls.serialize(sorted(task_group.upstream_task_ids)), - "downstream_task_ids": cls.serialize( - sorted(task_group.downstream_task_ids) - ), - } - - if isinstance(task_group, MappedTaskGroup): - expand_input = task_group._expand_input - encoded["expand_input"] = { - "type": expand_input.EXPAND_INPUT_TYPE, - "value": cls.serialize(expand_input.value), - } - encoded["is_mapped"] = True - - return encoded - - @classmethod - def deserialize_task_group( - cls, - encoded_group: dict[str, Any], - parent_group: TaskGroup | None, - task_dict: dict[str, Operator], - dag: SerializedDAG, - ) -> TaskGroup: - """Deserializes a TaskGroup from a JSON object.""" - group_id = cls.deserialize(encoded_group["_group_id"]) - kwargs = { - key: cls.deserialize(encoded_group[key]) - for key in ["prefix_group_id", "tooltip", "ui_color", "ui_fgcolor"] - } - kwargs["group_display_name"] = cls.deserialize( - encoded_group.get("group_display_name", "") - ) - - if not encoded_group.get("is_mapped"): - group = TaskGroup( - group_id=group_id, parent_group=parent_group, dag=dag, **kwargs - ) - else: - xi = encoded_group["expand_input"] - group = MappedTaskGroup( - group_id=group_id, - parent_group=parent_group, - dag=dag, - expand_input=_ExpandInputRef( - xi["type"], cls.deserialize(xi["value"]) - ).deref(dag), - **kwargs, - ) - - def set_ref(task: Operator) -> Operator: - task.task_group = weakref.proxy(group) - return task - - group.children = { - label: ( - set_ref(task_dict[val]) - if _type == DAT.OP - else cls.deserialize_task_group(val, group, task_dict, dag=dag) - ) - for label, (_type, val) in sorted(encoded_group["children"].items()) - } - group.upstream_group_ids.update( - cls.deserialize(encoded_group["upstream_group_ids"]) - ) - group.downstream_group_ids.update( - cls.deserialize(encoded_group["downstream_group_ids"]) - ) - group.upstream_task_ids.update( - cls.deserialize(encoded_group["upstream_task_ids"]) - ) - group.downstream_task_ids.update( - cls.deserialize(encoded_group["downstream_task_ids"]) - ) - return group - - -class SerializedAssetWatcher(AssetWatcher): - """JSON serializable representation of an asset watcher.""" - - trigger: dict - - -def _has_kubernetes() -> bool: - global HAS_KUBERNETES - if "HAS_KUBERNETES" in globals(): - return HAS_KUBERNETES - - # Loading kube modules is expensive, so delay it until the last moment - - try: - from airflow.providers.cncf.kubernetes.pod_generator import PodGenerator - from kubernetes.client import models as k8s - - globals()["k8s"] = k8s - globals()["PodGenerator"] = PodGenerator - - # isort: on - HAS_KUBERNETES = True - except ImportError: - HAS_KUBERNETES = False - return HAS_KUBERNETES - - -AssetT = TypeVar("AssetT", bound=BaseAsset) -MaybeSerializedDAG = Union[DAG, "LazyDeserializedDAG"] - - -class LazyDeserializedDAG(pydantic.BaseModel): - """ - Lazily build information from the serialized DAG structure. - - An object that will present "enough" of the DAG like interface to update DAG db models etc, without having - to deserialize the full DAG and Task hierarchy. - """ - - data: dict - - NULLABLE_PROPERTIES: ClassVar[set[str]] = { - "is_paused_upon_creation", - "owner", - "dag_display_name", - "description", - "max_active_tasks", - "max_active_runs", - "max_consecutive_failed_dag_runs", - "owner_links", - "access_control", - } - - @property - def hash(self) -> str: - from airflow.models.serialized_dag import SerializedDagModel - - return SerializedDagModel.hash(self.data) - - def next_dagrun_info(self, *args, **kwargs) -> DagRunInfo | None: - # This function is complex to implement, for now we delegate deserialize the dag and delegate to that. - return self._real_dag.next_dagrun_info(*args, **kwargs) - - @property - def access_control( - self, - ) -> Mapping[str, Mapping[str, Collection[str]] | Collection[str]] | None: - return BaseSerialization.deserialize(self.data["dag"].get("access_control")) - - @cached_property - def _real_dag(self): - return SerializedDAG.from_dict(self.data) - - def __getattr__(self, name: str, /) -> Any: - if name in self.NULLABLE_PROPERTIES: - return self.data["dag"].get(name) - try: - return self.data["dag"][name] - except KeyError: - raise AttributeError( - f"{type(self).__name__!r} object has no attribute {name!r}" - ) from None - - @property - def timetable(self) -> Timetable: - return decode_timetable(self.data["dag"]["timetable"]) - - @property - def has_task_concurrency_limits(self) -> bool: - return any( - task[Encoding.VAR].get("max_active_tis_per_dag") is not None - or task[Encoding.VAR].get("max_active_tis_per_dagrun") is not None - or task[Encoding.VAR] - .get("partial_kwargs", {}) - .get("max_active_tis_per_dag") - is not None - or task[Encoding.VAR] - .get("partial_kwargs", {}) - .get("max_active_tis_per_dagrun") - is not None - for task in self.data["dag"]["tasks"] - ) - - @property - def owner(self) -> str: - return ", ".join( - set( - filter( - None, - ( - task[Encoding.VAR].get("owner") - for task in self.data["dag"]["tasks"] - ), - ) - ) - ) - - @staticmethod - def _get_mapped_operator_ports(task: dict, direction: str): - return task["partial_kwargs"][direction] - - @staticmethod - def _get_base_operator_ports(task: dict, direction: str): - return task[direction] - - def get_task_assets( - self, - inlets: bool = True, - outlets: bool = True, - of_type: type[AssetT] = Asset, # type: ignore[assignment] - ) -> Generator[tuple[str, AssetT], None, None]: - for task in self.data["dag"]["tasks"]: - task = task[Encoding.VAR] - if task.get("_is_mapped"): - ports_getter = self._get_mapped_operator_ports - else: - ports_getter = self._get_base_operator_ports - directions = ("inlets",) if inlets else () - if outlets: - directions += ("outlets",) - for direction in directions: - try: - ports = ports_getter(task, direction) - except KeyError: - continue - for port in ports: - obj = BaseSerialization.deserialize(port) - if isinstance(obj, of_type): - yield task["task_id"], obj - - def get_run_data_interval(self, run: DagRun) -> DataInterval | None: - """Get the data interval of this run.""" - if run.dag_id is not None and run.dag_id != self.dag_id: - raise ValueError( - f"Arguments refer to different DAGs: {self.dag_id} != {run.dag_id}" - ) - - data_interval = _get_model_data_interval( - run, "data_interval_start", "data_interval_end" - ) - if data_interval is None and run.logical_date is not None: - data_interval = self._real_dag.timetable.infer_manual_data_interval( - run_after=run.logical_date - ) - - return data_interval - - -@attrs.define() -class XComOperatorLink(LoggingMixin): - """A generic operator link class that can retrieve link only using XCOMs. Used while deserializing operators.""" - - name: str - xcom_key: str - - def get_link(self, operator: BaseOperator, *, ti_key: TaskInstanceKey) -> str: - """ - Retrieve the link from the XComs. - - :param operator: The Airflow operator object this link is associated to. - :param ti_key: TaskInstance ID to return link for. - :return: link to external system, but by pulling it from XComs - """ - self.log.info( - "Attempting to retrieve link from XComs with key: %s for task id: %s", - self.xcom_key, - ti_key, - ) - value = XComModel.get_many( - key=self.xcom_key, - run_id=ti_key.run_id, - dag_ids=ti_key.dag_id, - task_ids=ti_key.task_id, - map_indexes=ti_key.map_index, - ).first() - if not value: - self.log.debug( - "No link with name: %s present in XCom as key: %s, returning empty link", - self.name, - self.xcom_key, - ) - return "" - return XComModel.deserialize_value(value) diff --git a/patch/utils.py b/patch/utils.py deleted file mode 100644 index df33aba..0000000 --- a/patch/utils.py +++ /dev/null @@ -1,114 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -from __future__ import annotations - -import contextlib -from collections import defaultdict -from contextlib import contextmanager - -from sqlalchemy import text - - -def get_mssql_table_constraints(conn, table_name) -> dict[str, dict[str, list[str]]]: - """ - Return the primary and unique constraint along with column name. - - Some tables like `task_instance` are missing the primary key constraint - name and the name is auto-generated by the SQL server, so this function - helps to retrieve any primary or unique constraint name. - - :param conn: sql connection object - :param table_name: table name - :return: a dictionary of ((constraint name, constraint type), column name) of table - """ - query = text( - f"""SELECT tc.CONSTRAINT_NAME , tc.CONSTRAINT_TYPE, ccu.COLUMN_NAME - FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc - JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS ccu ON ccu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME - WHERE tc.TABLE_NAME = '{table_name}' AND - (tc.CONSTRAINT_TYPE = 'PRIMARY KEY' or UPPER(tc.CONSTRAINT_TYPE) = 'UNIQUE' - or UPPER(tc.CONSTRAINT_TYPE) = 'FOREIGN KEY') - """ - ) - result = conn.execute(query).fetchall() - constraint_dict = defaultdict(lambda: defaultdict(list)) - for constraint, constraint_type, col_name in result: - constraint_dict[constraint_type][constraint].append(col_name) - return constraint_dict - - -@contextmanager -def disable_sqlite_fkeys(op): - if op.get_bind().dialect.name == "sqlite": - op.execute("PRAGMA foreign_keys=off") - yield op - op.execute("PRAGMA foreign_keys=on") - else: - yield op - - -def mysql_drop_foreignkey_if_exists(constraint_name, table_name, op): - """Older Mysql versions do not support DROP FOREIGN KEY IF EXISTS.""" - op.execute(f""" - CREATE PROCEDURE DropForeignKeyIfExists() - BEGIN - IF EXISTS ( - SELECT 1 - FROM information_schema.TABLE_CONSTRAINTS - WHERE - CONSTRAINT_SCHEMA = DATABASE() AND - TABLE_NAME = '{table_name}' AND - CONSTRAINT_NAME = '{constraint_name}' AND - CONSTRAINT_TYPE = 'FOREIGN KEY' - ) THEN - ALTER TABLE {table_name} - DROP CONSTRAINT {constraint_name}; - ELSE - SELECT 1; - END IF; - END; - CALL DropForeignKeyIfExists(); - DROP PROCEDURE DropForeignKeyIfExists; - """) - - -def mysql_drop_index_if_exists(index_name, table_name, op): - """Older Mysql versions do not support DROP INDEX IF EXISTS.""" - op.execute(f""" - IF EXISTS ( - SELECT 1 - FROM information_schema.TABLE_CONSTRAINTS - WHERE - CONSTRAINT_SCHEMA = DATABASE() AND - TABLE_NAME = '{table_name}' AND - CONSTRAINT_NAME = '{index_name}' AND - CONSTRAINT_TYPE = 'INDEX' - ) THEN - ALTER TABLE {table_name} - DROP INDEX {index_name}; - ELSE - SELECT 1; - END IF; - """) - - -def ignore_sqlite_value_error(): - from alembic import op - - if op.get_bind().dialect.name == "sqlite": - return contextlib.suppress(ValueError) - return contextlib.nullcontext() \ No newline at end of file diff --git a/patch/versions/0017_2_9_2_fix_inconsistency_between_ORM_and_migration_files.py b/patch/versions/0017_2_9_2_fix_inconsistency_between_ORM_and_migration_files.py deleted file mode 100644 index 9c02de3..0000000 --- a/patch/versions/0017_2_9_2_fix_inconsistency_between_ORM_and_migration_files.py +++ /dev/null @@ -1,328 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -""" -Fix inconsistency between ORM and migration files. - -Revision ID: 686269002441 -Revises: bff083ad727d -Create Date: 2024-04-15 14:19:49.913797 - -""" - -from __future__ import annotations - -import sqlalchemy as sa -from alembic import op -from sqlalchemy import literal - -# revision identifiers, used by Alembic. -revision = "686269002441" -down_revision = "bff083ad727d" -branch_labels = None -depends_on = None -airflow_version = "2.9.2" - - -def upgrade(): - """Apply Update missing constraints.""" - conn = op.get_bind() - if conn.dialect.name == "mysql": - # TODO: Rewrite these queries to use alembic when lowest MYSQL version supports IF EXISTS - conn.execute( - sa.text(""" - set @var=if((SELECT true FROM information_schema.TABLE_CONSTRAINTS WHERE - CONSTRAINT_SCHEMA = DATABASE() AND - TABLE_NAME = 'connection' AND - CONSTRAINT_NAME = 'unique_conn_id' AND - CONSTRAINT_TYPE = 'UNIQUE') = true,'ALTER TABLE connection - DROP INDEX unique_conn_id','select 1'); - - prepare stmt from @var; - execute stmt; - deallocate prepare stmt; - """) - ) - # Dropping the below and recreating cause there's no IF NOT EXISTS in mysql - conn.execute( - sa.text(""" - set @var=if((SELECT true FROM information_schema.TABLE_CONSTRAINTS WHERE - CONSTRAINT_SCHEMA = DATABASE() AND - TABLE_NAME = 'connection' AND - CONSTRAINT_NAME = 'connection_conn_id_uq' AND - CONSTRAINT_TYPE = 'UNIQUE') = true,'ALTER TABLE connection - DROP INDEX connection_conn_id_uq','select 1'); - - prepare stmt from @var; - execute stmt; - deallocate prepare stmt; - """) - ) - elif conn.dialect.name == "sqlite": - # SQLite does not support DROP CONSTRAINT - # We have to recreate the table without the constraint - conn.execute(sa.text("PRAGMA foreign_keys=off")) - conn.execute( - sa.text(""" - CREATE TABLE connection_new ( - id INTEGER NOT NULL, - conn_id VARCHAR(250) NOT NULL, - conn_type VARCHAR(500) NOT NULL, - host VARCHAR(500), - schema VARCHAR(500), - login TEXT, - password TEXT, - port INTEGER, - extra TEXT, - is_encrypted BOOLEAN, - is_extra_encrypted BOOLEAN, - description VARCHAR(5000), - CONSTRAINT connection_pkey PRIMARY KEY (id), - CONSTRAINT connection_conn_id_uq UNIQUE (conn_id) - ) - """) - ) - conn.execute(sa.text("INSERT INTO connection_new SELECT * FROM connection")) - conn.execute(sa.text("DROP TABLE connection")) - conn.execute(sa.text("ALTER TABLE connection_new RENAME TO connection")) - conn.execute(sa.text("PRAGMA foreign_keys=on")) - else: - op.execute("ALTER TABLE connection DROP CONSTRAINT IF EXISTS unique_conn_id") - # Dropping and recreating cause there's no IF NOT EXISTS - op.execute( - "ALTER TABLE connection DROP CONSTRAINT IF EXISTS connection_conn_id_uq" - ) - - with op.batch_alter_table("connection") as batch_op: - batch_op.create_unique_constraint( - batch_op.f("connection_conn_id_uq"), ["conn_id"] - ) - - max_cons = sa.table("dag", sa.column("max_consecutive_failed_dag_runs")) - op.execute(max_cons.update().values(max_consecutive_failed_dag_runs=literal("0"))) - with op.batch_alter_table("dag") as batch_op: - batch_op.alter_column( - "max_consecutive_failed_dag_runs", - existing_type=sa.Integer(), - nullable=False, - ) - - with op.batch_alter_table("task_instance") as batch_op: - batch_op.drop_constraint("task_instance_dag_run_fkey", type_="foreignkey") - - with op.batch_alter_table("task_reschedule") as batch_op: - batch_op.drop_constraint("task_reschedule_dr_fkey", type_="foreignkey") - - if conn.dialect.name == "mysql": - conn.execute( - sa.text(""" - set @var=if((SELECT true FROM information_schema.TABLE_CONSTRAINTS WHERE - CONSTRAINT_SCHEMA = DATABASE() AND - TABLE_NAME = 'dag_run' AND - CONSTRAINT_NAME = 'dag_run_dag_id_execution_date_uq' AND - CONSTRAINT_TYPE = 'UNIQUE') = true,'ALTER TABLE dag_run - DROP INDEX dag_run_dag_id_execution_date_uq','select 1'); - - prepare stmt from @var; - execute stmt; - deallocate prepare stmt; - """) - ) - conn.execute( - sa.text(""" - set @var=if((SELECT true FROM information_schema.TABLE_CONSTRAINTS WHERE - CONSTRAINT_SCHEMA = DATABASE() AND - TABLE_NAME = 'dag_run' AND - CONSTRAINT_NAME = 'dag_run_dag_id_run_id_uq' AND - CONSTRAINT_TYPE = 'UNIQUE') = true,'ALTER TABLE dag_run - DROP INDEX dag_run_dag_id_run_id_uq','select 1'); - - prepare stmt from @var; - execute stmt; - deallocate prepare stmt; - """) - ) - # below we drop and recreate the constraints because there's no IF NOT EXISTS - conn.execute( - sa.text(""" - set @var=if((SELECT true FROM information_schema.TABLE_CONSTRAINTS WHERE - CONSTRAINT_SCHEMA = DATABASE() AND - TABLE_NAME = 'dag_run' AND - CONSTRAINT_NAME = 'dag_run_dag_id_execution_date_key' AND - CONSTRAINT_TYPE = 'UNIQUE') = true,'ALTER TABLE dag_run - DROP INDEX dag_run_dag_id_execution_date_key','select 1'); - - prepare stmt from @var; - execute stmt; - deallocate prepare stmt; - """) - ) - conn.execute( - sa.text(""" - set @var=if((SELECT true FROM information_schema.TABLE_CONSTRAINTS WHERE - CONSTRAINT_SCHEMA = DATABASE() AND - TABLE_NAME = 'dag_run' AND - CONSTRAINT_NAME = 'dag_run_dag_id_run_id_key' AND - CONSTRAINT_TYPE = 'UNIQUE') = true,'ALTER TABLE dag_run - DROP INDEX dag_run_dag_id_run_id_key','select 1'); - - prepare stmt from @var; - execute stmt; - deallocate prepare stmt; - """) - ) - with op.batch_alter_table("callback_request", schema=None) as batch_op: - batch_op.alter_column( - "processor_subdir", - existing_type=sa.Text(length=2000), - type_=sa.String(length=2000), - existing_nullable=True, - ) - - with op.batch_alter_table("dag", schema=None) as batch_op: - batch_op.alter_column( - "processor_subdir", - existing_type=sa.Text(length=2000), - type_=sa.String(length=2000), - existing_nullable=True, - ) - - with op.batch_alter_table("import_error", schema=None) as batch_op: - batch_op.alter_column( - "processor_subdir", - existing_type=sa.Text(length=2000), - type_=sa.String(length=2000), - existing_nullable=True, - ) - - with op.batch_alter_table("serialized_dag", schema=None) as batch_op: - batch_op.alter_column( - "processor_subdir", - existing_type=sa.Text(length=2000), - type_=sa.String(length=2000), - existing_nullable=True, - ) - - elif conn.dialect.name == "sqlite": - # SQLite does not support DROP CONSTRAINT - # We have to recreate the table without the constraint - conn.execute(sa.text("PRAGMA foreign_keys=off")) - conn.execute( - sa.text(""" - CREATE TABLE dag_run_new ( - id INTEGER NOT NULL, - dag_id VARCHAR(250) NOT NULL, - queued_at TIMESTAMP, - execution_date TIMESTAMP NOT NULL, - start_date TIMESTAMP, - end_date TIMESTAMP, - state VARCHAR(50), - run_id VARCHAR(250) NOT NULL, - creating_job_id INTEGER, - external_trigger BOOLEAN, - run_type VARCHAR(50) NOT NULL, - conf BLOB, - data_interval_start TIMESTAMP, - data_interval_end TIMESTAMP, - last_scheduling_decision TIMESTAMP, - dag_hash VARCHAR(32), - log_template_id INTEGER, - updated_at TIMESTAMP, - clear_number INTEGER DEFAULT '0' NOT NULL, - CONSTRAINT dag_run_pkey PRIMARY KEY (id), - CONSTRAINT dag_run_dag_id_execution_date_key UNIQUE (dag_id, execution_date), - CONSTRAINT dag_run_dag_id_run_id_key UNIQUE (dag_id, run_id), - CONSTRAINT task_instance_log_template_id_fkey FOREIGN KEY(log_template_id) REFERENCES log_template (id) ON DELETE NO ACTION - ) - """) - ) - headers = ( - "id, dag_id, queued_at, execution_date, start_date, end_date, state, run_id, creating_job_id, " - "external_trigger, run_type, conf, data_interval_start, data_interval_end, " - "last_scheduling_decision, dag_hash, log_template_id, updated_at, clear_number" - ) - conn.execute( - sa.text( - f"INSERT INTO dag_run_new ({headers}) SELECT {headers} FROM dag_run" - ) - ) - conn.execute(sa.text("DROP TABLE dag_run")) - conn.execute(sa.text("ALTER TABLE dag_run_new RENAME TO dag_run")) - conn.execute(sa.text("PRAGMA foreign_keys=on")) - with op.batch_alter_table("dag_run") as batch_op: - batch_op.create_index( - "dag_id_state", ["dag_id", "state"], if_not_exists=True - ) - batch_op.create_index("idx_dag_run_dag_id", ["dag_id"], if_not_exists=True) - batch_op.create_index( - "idx_dag_run_running_dags", - ["state", "dag_id"], - sqlite_where=sa.text("state='running'"), - if_not_exists=True, - ) - batch_op.create_index( - "idx_dag_run_queued_dags", - ["state", "dag_id"], - sqlite_where=sa.text("state='queued'"), - if_not_exists=True, - ) - - else: - op.execute( - "ALTER TABLE dag_run DROP CONSTRAINT IF EXISTS dag_run_dag_id_execution_date_uq" - ) - op.execute( - "ALTER TABLE dag_run DROP CONSTRAINT IF EXISTS dag_run_dag_id_run_id_uq" - ) - # below we drop and recreate the constraints because there's no IF NOT EXISTS - op.execute( - "ALTER TABLE dag_run DROP CONSTRAINT IF EXISTS dag_run_dag_id_execution_date_key" - ) - op.execute( - "ALTER TABLE dag_run DROP CONSTRAINT IF EXISTS dag_run_dag_id_run_id_key" - ) - - with op.batch_alter_table("dag_run") as batch_op: - batch_op.create_unique_constraint( - "dag_run_dag_id_execution_date_key", ["dag_id", "execution_date"] - ) - batch_op.create_unique_constraint( - "dag_run_dag_id_run_id_key", ["dag_id", "run_id"] - ) - - with op.batch_alter_table("task_instance") as batch_op: - batch_op.create_foreign_key( - "task_instance_dag_run_fkey", - "dag_run", - ["dag_id", "run_id"], - ["dag_id", "run_id"], - ondelete="CASCADE", - ) - - with op.batch_alter_table("task_reschedule") as batch_op: - batch_op.create_foreign_key( - "task_reschedule_dr_fkey", - "dag_run", - ["dag_id", "run_id"], - ["dag_id", "run_id"], - ondelete="CASCADE", - ) - - -def downgrade(): - """NO downgrade because this is to make ORM consistent with the database.""" diff --git a/patch/versions/0047_3_0_0_add_dag_versioning.py b/patch/versions/0047_3_0_0_add_dag_versioning.py deleted file mode 100644 index 849154c..0000000 --- a/patch/versions/0047_3_0_0_add_dag_versioning.py +++ /dev/null @@ -1,178 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -""" -add dag versioning. - -Revision ID: 2b47dc6bc8df -Revises: d03e4a635aa3 -Create Date: 2024-10-09 05:44:04.670984 - -""" - -from __future__ import annotations - -import sqlalchemy as sa -from alembic import op -from sqlalchemy_utils import UUIDType - -from airflow.migrations.db_types import TIMESTAMP, StringID -from airflow.migrations.utils import ignore_sqlite_value_error -from airflow.models.base import naming_convention -from airflow.utils import timezone - -# revision identifiers, used by Alembic. -revision = "2b47dc6bc8df" -down_revision = "d03e4a635aa3" -branch_labels = None -depends_on = None -airflow_version = "3.0.0" - - -def upgrade(): - """Apply add dag versioning.""" - op.execute("delete from dag_code;") - op.execute("delete from serialized_dag;") - - op.create_table( - "dag_version", - sa.Column("id", UUIDType(binary=False), nullable=False), - sa.Column("version_number", sa.Integer(), nullable=False), - sa.Column("dag_id", StringID(), nullable=False), - sa.Column("created_at", TIMESTAMP(), nullable=False, default=timezone.utcnow), - sa.Column( - "last_updated", - TIMESTAMP(), - nullable=False, - default=timezone.utcnow, - onupdate=timezone.utcnow, - ), - sa.ForeignKeyConstraint( - ("dag_id",), - ["dag.dag_id"], - name=op.f("dag_version_dag_id_fkey"), - ondelete="CASCADE", - ), - sa.PrimaryKeyConstraint("id", name=op.f("dag_version_pkey")), - sa.UniqueConstraint("dag_id", "version_number", name="dag_id_v_name_v_number_unique_constraint"), - ) - - with ignore_sqlite_value_error(), op.batch_alter_table("dag_code") as batch_op: - batch_op.drop_constraint("dag_code_pkey", type_="primary") - - with op.batch_alter_table("dag_code") as batch_op: - batch_op.drop_column("fileloc_hash") - batch_op.add_column(sa.Column("id", UUIDType(binary=False), nullable=False)) - batch_op.create_primary_key("dag_code_pkey", ["id"]) - batch_op.add_column(sa.Column("dag_version_id", UUIDType(binary=False), nullable=False)) - batch_op.add_column(sa.Column("source_code_hash", sa.String(length=32), nullable=False)) - batch_op.add_column(sa.Column("dag_id", StringID(), nullable=False)) - batch_op.add_column(sa.Column("created_at", TIMESTAMP(), default=timezone.utcnow, nullable=False)) - batch_op.create_foreign_key( - batch_op.f("dag_code_dag_version_id_fkey"), - "dag_version", - ["dag_version_id"], - ["id"], - ondelete="CASCADE", - ) - batch_op.create_unique_constraint("dag_code_dag_version_id_uq", ["dag_version_id"]) - - with ignore_sqlite_value_error(), op.batch_alter_table("serialized_dag") as batch_op: - batch_op.drop_constraint("serialized_dag_pkey", type_="primary") - - with op.batch_alter_table("serialized_dag") as batch_op: - batch_op.drop_index("idx_fileloc_hash") - batch_op.drop_column("fileloc_hash") - batch_op.drop_column("fileloc") - batch_op.add_column(sa.Column("id", UUIDType(binary=False), nullable=False)) - batch_op.add_column(sa.Column("dag_version_id", UUIDType(binary=False), nullable=False)) - batch_op.add_column(sa.Column("created_at", TIMESTAMP(), default=timezone.utcnow, nullable=False)) - batch_op.create_primary_key("serialized_dag_pkey", ["id"]) - batch_op.create_foreign_key( - batch_op.f("serialized_dag_dag_version_id_fkey"), - "dag_version", - ["dag_version_id"], - ["id"], - ondelete="CASCADE", - ) - batch_op.create_unique_constraint("serialized_dag_dag_version_id_uq", ["dag_version_id"]) - - with op.batch_alter_table("task_instance", schema=None) as batch_op: - batch_op.add_column(sa.Column("dag_version_id", UUIDType(binary=False))) - batch_op.create_foreign_key( - batch_op.f("task_instance_dag_version_id_fkey"), - "dag_version", - ["dag_version_id"], - ["id"], - ondelete="CASCADE", - ) - - with op.batch_alter_table("task_instance_history", schema=None) as batch_op: - batch_op.add_column(sa.Column("dag_version_id", UUIDType(binary=False))) - - with op.batch_alter_table("dag_run", schema=None) as batch_op: - batch_op.drop_column("dag_hash") - batch_op.add_column(sa.Column("created_dag_version_id", UUIDType(binary=False), nullable=True)) - batch_op.create_foreign_key( - "created_dag_version_id_fkey", - "dag_version", - ["created_dag_version_id"], - ["id"], - ondelete="SET NULL", - ) - - -def downgrade(): - """Unapply add dag versioning.""" - with op.batch_alter_table("task_instance", schema=None) as batch_op: - batch_op.drop_constraint(batch_op.f("task_instance_dag_version_id_fkey"), type_="foreignkey") - batch_op.drop_column("dag_version_id") - - with op.batch_alter_table("task_instance_history", schema=None) as batch_op: - batch_op.drop_column("dag_version_id") - - with op.batch_alter_table("dag_run", schema=None) as batch_op: - batch_op.add_column(sa.Column("dag_hash", sa.String(length=32), autoincrement=False, nullable=True)) - batch_op.drop_constraint("created_dag_version_id_fkey", type_="foreignkey") - batch_op.drop_column("created_dag_version_id") - - op.execute("delete from dag_code;") - op.execute("delete from serialized_dag;") - - with op.batch_alter_table("dag_code", schema=None) as batch_op: - batch_op.drop_constraint("dag_code_pkey", type_="primary") - batch_op.drop_constraint(batch_op.f("dag_code_dag_version_id_fkey"), type_="foreignkey") - batch_op.add_column(sa.Column("fileloc_hash", sa.BigInteger, nullable=True)) - batch_op.create_primary_key("dag_code_pkey", ["fileloc_hash"]) - batch_op.drop_column("source_code_hash") - batch_op.drop_column("created_at") - batch_op.drop_column("id") - batch_op.drop_column("dag_version_id") - batch_op.drop_column("dag_id") - - with op.batch_alter_table("serialized_dag", schema=None, naming_convention=naming_convention) as batch_op: - batch_op.drop_column("id") - batch_op.drop_constraint(batch_op.f("serialized_dag_dag_version_id_fkey"), type_="foreignkey") - batch_op.drop_column("created_at") - batch_op.drop_column("dag_version_id") - batch_op.add_column(sa.Column("fileloc", sa.String(length=2000), nullable=False)) - batch_op.add_column(sa.Column("fileloc_hash", sa.BIGINT(), nullable=False)) - batch_op.create_index("idx_fileloc_hash", ["fileloc_hash"], unique=False) - batch_op.create_primary_key("serialized_dag_pkey", ["dag_id"]) - - op.drop_table("dag_version") \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index f23acb9..ec4625b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,8 +5,7 @@ description = "Add your description here" readme = "README.md" requires-python = ">=3.10,<3.11" dependencies = [ - # Please use pip to manage airflow dependencies. - "apache-airflow==3.0.2", + "apache-airflow==3.0.3rc3", # Editable install with no version specified. "apache-airflow-providers-fab", "apache-airflow-providers-http", @@ -88,127 +87,799 @@ exclude_lines = [ omit = ['env/*', 'venv/*', '*/virtualenv/*', '*/virtualenvs/*', '*/tests/*'] [tool.uv] -# airflow 3.0.2 constraint file for python 3.10 -# https://github.com/apache/airflow/blob/constraints-3.0.2/constraints-no-providers-3.10.txt +# airflow 3.0.3rc3 constraint file for python 3.10 +# https://github.com/apache/airflow/blob/constraints-3.0.3rc3/constraints-3.10.txt constraint-dependencies = [ - "Deprecated==1.2.18", + "APScheduler==3.11.0", + "Authlib==1.3.1", + "Deprecated==1.2.18", + "Events==0.5", + "Flask-AppBuilder==4.6.3", + "Flask-Babel==2.0.0", + "Flask-JWT-Extended==4.7.1", + "Flask-Limiter==3.12", + "Flask-Login==0.6.3", + "Flask-SQLAlchemy==2.5.1", + "Flask-Session==0.5.0", + "Flask-WTF==1.2.2", "Flask==2.2.5", + "GitPython==3.1.44", + "JayDeBeApi==1.2.3", "Jinja2==3.1.6", + "Js2Py==0.74", "Mako==1.3.10", + "Markdown==3.8.2", "MarkupSafe==3.0.2", + "PyAthena==3.14.1", + "PyGithub==2.6.1", + "PyHive==0.7.0", "PyJWT==2.10.1", + "PyMySQL==1.1.1", + "PyNaCl==1.5.0", "PyYAML==6.0.2", - "Pygments==2.19.1", + "Pygments==2.19.2", "SQLAlchemy-JSONField==1.0.2", "SQLAlchemy-Utils==0.41.2", "SQLAlchemy==1.4.54", + "SecretStorage==3.3.3", + "Sphinx==8.1.3", + "WTForms==3.2.1", "Werkzeug==2.2.3", - "a2wsgi==1.10.8", - "aiologic==0.14.0", + "a2wsgi==1.10.10", + "adal==1.2.7", + "adlfs==2024.12.0", + "aiobotocore==2.23.0", + "aiofiles==24.1.0", + "aiohappyeyeballs==2.6.1", + "aiohttp-cors==0.8.1", + "aiohttp==3.12.13", + "aioitertools==0.12.0", + "aiomysql==0.2.0", + "aioresponses==0.7.8", + "aiosignal==1.4.0", "aiosqlite==0.21.0", - "alembic==1.16.1", + "airbyte-api==0.52.2", + "alabaster==1.0.0", + "alembic==1.16.2", + "alibabacloud-adb20211201==3.1.2", + "alibabacloud-credentials-api==1.0.0", + "alibabacloud-credentials==1.0.2", + "alibabacloud-tea==0.4.3", + "alibabacloud_endpoint_util==0.0.4", + "alibabacloud_gateway_spi==0.0.3", + "alibabacloud_openapi_util==0.2.2", + "alibabacloud_tea_openapi==0.3.16", + "alibabacloud_tea_util==0.3.13", + "alibabacloud_tea_xml==0.0.3", + "aliyun-python-sdk-core==2.16.0", + "aliyun-python-sdk-kms==2.16.5", + "amqp==5.3.1", + "analytics-python==1.2.9", "annotated-types==0.7.0", + "ansicolors==1.1.8", "anyio==4.9.0", + "apache-airflow-providers-airbyte==5.2.0", + "apache-airflow-providers-alibaba==3.2.0", + "apache-airflow-providers-amazon==9.9.0", + "apache-airflow-providers-apache-beam==6.1.0", + "apache-airflow-providers-apache-cassandra==3.8.0", + "apache-airflow-providers-apache-drill==3.1.0", + "apache-airflow-providers-apache-druid==4.2.0", + "apache-airflow-providers-apache-flink==1.7.0", + "apache-airflow-providers-apache-hdfs==4.10.0", + "apache-airflow-providers-apache-hive==9.1.0", + "apache-airflow-providers-apache-iceberg==1.3.0", + "apache-airflow-providers-apache-impala==1.7.0", + "apache-airflow-providers-apache-kafka==1.9.0", + "apache-airflow-providers-apache-kylin==3.9.0", + "apache-airflow-providers-apache-livy==4.4.0", + "apache-airflow-providers-apache-pig==4.7.0", + "apache-airflow-providers-apache-pinot==4.8.0", + "apache-airflow-providers-apache-spark==5.3.0", + "apache-airflow-providers-apprise==2.1.0", + "apache-airflow-providers-arangodb==2.8.0", + "apache-airflow-providers-asana==2.10.0", + "apache-airflow-providers-atlassian-jira==3.1.0", + "apache-airflow-providers-celery==3.12.0", + "apache-airflow-providers-cloudant==4.2.0", + "apache-airflow-providers-cncf-kubernetes==10.6.0", + "apache-airflow-providers-cohere==1.5.1", + "apache-airflow-providers-common-compat==1.7.1", + "apache-airflow-providers-common-io==1.6.0", + "apache-airflow-providers-common-messaging==1.0.3", + "apache-airflow-providers-common-sql==1.27.2", + "apache-airflow-providers-databricks==7.5.0", + "apache-airflow-providers-datadog==3.9.0", + "apache-airflow-providers-dbt-cloud==4.4.0", + "apache-airflow-providers-dingding==3.8.0", + "apache-airflow-providers-discord==3.10.0", + "apache-airflow-providers-docker==4.4.0", + "apache-airflow-providers-edge3==1.1.1", + "apache-airflow-providers-elasticsearch==6.3.0", + "apache-airflow-providers-exasol==4.8.0", + "apache-airflow-providers-fab==2.2.1", + "apache-airflow-providers-facebook==3.8.0", + "apache-airflow-providers-ftp==3.13.0", + "apache-airflow-providers-git==0.0.3", + "apache-airflow-providers-github==2.9.0", + "apache-airflow-providers-google==16.0.0", + "apache-airflow-providers-grpc==3.8.0", + "apache-airflow-providers-hashicorp==4.3.0", + "apache-airflow-providers-http==5.3.1", + "apache-airflow-providers-imap==3.9.0", + "apache-airflow-providers-influxdb==2.9.1", + "apache-airflow-providers-jdbc==5.2.0", + "apache-airflow-providers-jenkins==4.1.0", + "apache-airflow-providers-microsoft-azure==12.4.1", + "apache-airflow-providers-microsoft-mssql==4.3.0", + "apache-airflow-providers-microsoft-psrp==3.1.0", + "apache-airflow-providers-microsoft-winrm==3.10.0", + "apache-airflow-providers-mongo==5.2.0", + "apache-airflow-providers-mysql==6.3.1", + "apache-airflow-providers-neo4j==3.9.1", + "apache-airflow-providers-odbc==4.10.0", + "apache-airflow-providers-openai==1.6.0", + "apache-airflow-providers-openfaas==3.8.0", + "apache-airflow-providers-openlineage==2.4.0", + "apache-airflow-providers-opensearch==1.7.0", + "apache-airflow-providers-opsgenie==5.9.0", + "apache-airflow-providers-oracle==4.1.1", + "apache-airflow-providers-pagerduty==5.0.0", + "apache-airflow-providers-papermill==3.11.0", + "apache-airflow-providers-pgvector==1.5.0", + "apache-airflow-providers-pinecone==2.3.1", + "apache-airflow-providers-postgres==6.2.0", + "apache-airflow-providers-presto==5.9.0", + "apache-airflow-providers-qdrant==1.4.0", + "apache-airflow-providers-redis==4.1.0", + "apache-airflow-providers-salesforce==5.11.0", + "apache-airflow-providers-samba==4.10.0", + "apache-airflow-providers-segment==3.8.0", + "apache-airflow-providers-sendgrid==4.1.1", + "apache-airflow-providers-sftp==5.3.1", + "apache-airflow-providers-singularity==3.8.0", + "apache-airflow-providers-slack==9.1.1", + "apache-airflow-providers-smtp==2.1.0", + "apache-airflow-providers-snowflake==6.4.0", + "apache-airflow-providers-sqlite==4.1.0", + "apache-airflow-providers-ssh==4.1.0", + "apache-airflow-providers-standard==1.3.0", + "apache-airflow-providers-tableau==5.1.0", + "apache-airflow-providers-telegram==4.8.0", + "apache-airflow-providers-teradata==3.1.0", + "apache-airflow-providers-trino==6.3.0", + "apache-airflow-providers-vertica==4.1.0", + "apache-airflow-providers-weaviate==3.2.0", + "apache-airflow-providers-yandex==4.1.0", + "apache-airflow-providers-ydb==2.2.0", + "apache-airflow-providers-zendesk==4.10.0", + "apache-beam==2.59.0", + "apispec==6.8.2", + "apprise==1.9.3", "argcomplete==3.6.2", - "asgiref==3.8.1", + "arro3-core==0.5.1", + "asana==5.2.0", + "asgiref==3.9.0", + "asn1crypto==1.5.1", + "astroid==3.3.10", + "asttokens==3.0.0", + "async-timeout==5.0.1", + "asyncpg==0.30.0", + "asyncssh==2.21.0", + "atlasclient==1.0.0", + "atlassian-python-api==4.0.4", "attrs==25.3.0", + "aws-sam-translator==1.99.0", + "aws-xray-sdk==2.14.0", + "awswrangler==3.11.0", + "azure-batch==14.2.0", + "azure-common==1.1.28", + "azure-core==1.35.0", + "azure-cosmos==4.9.0", + "azure-datalake-store==0.0.53", + "azure-identity==1.23.0", + "azure-keyvault-secrets==4.10.0", + "azure-kusto-data==5.0.4", + "azure-mgmt-containerinstance==10.1.0", + "azure-mgmt-containerregistry==14.0.0", + "azure-mgmt-core==1.6.0", + "azure-mgmt-cosmosdb==9.8.0", + "azure-mgmt-datafactory==9.2.0", + "azure-mgmt-datalake-nspkg==3.0.1", + "azure-mgmt-datalake-store==0.5.0", + "azure-mgmt-nspkg==3.0.2", + "azure-mgmt-resource==24.0.0", + "azure-mgmt-storage==23.0.1", + "azure-nspkg==3.0.2", + "azure-servicebus==7.14.2", + "azure-storage-blob==12.25.1", + "azure-storage-file-datalake==12.20.0", + "azure-storage-file-share==12.21.0", + "azure-synapse-artifacts==0.20.0", + "azure-synapse-spark==0.7.0", + "babel==2.17.0", + "backoff==2.2.1", "backports.strenum==1.3.1", - "cadwyn==5.3.3", - "certifi==2025.4.26", + "backports.tarfile==1.2.0", + "bcrypt==4.3.0", + "beautifulsoup4==4.13.4", + "billiard==4.2.1", + "bitarray==2.9.3", + "black==25.1.0", + "bleach==6.2.0", + "blinker==1.9.0", + "boto3==1.38.27", + "botocore==1.38.27", + "cachelib==0.13.0", + "cachetools==5.5.2", + "cadwyn==5.4.2", + "cassandra-driver==3.29.2", + "cattrs==25.1.1", + "celery==5.5.3", + "certifi==2025.6.15", "cffi==1.17.1", + "cfgv==3.4.0", + "cfn-lint==1.37.0", + "chardet==5.2.0", "charset-normalizer==3.4.2", - "click==8.1.8", + "checksumdir==1.2.0", + "ciso8601==2.3.2", + "click-didyoumean==0.3.1", + "click-plugins==1.1.1.2", + "click-repl==0.3.0", + "click==8.2.1", + "clickclick==20.10.2", + "cloudpickle==2.2.1", + "cohere==5.15.0", + "colorama==0.4.6", + "colorful==0.5.7", "colorlog==6.9.0", + "comm==0.2.2", + "confluent-kafka==2.11.0", + "connexion==2.14.2", + "coverage==7.9.2", + "crcmod==1.7", "cron-descriptor==1.4.5", "croniter==6.0.0", "cryptography==42.0.8", + "curlify==3.0.0", + "databricks-sql-connector==4.0.5", + "databricks-sqlalchemy==1.0.5", + "dataclasses-json==0.6.7", + "datadog==0.51.0", + "db-dtypes==1.4.3", + "debugpy==1.8.14", + "decorator==5.2.1", + "defusedxml==0.7.1", + "deltalake==1.0.2", + "diagrams==0.24.4", "dill==0.3.1.1", + "distlib==0.3.9", + "distro==1.9.0", "dnspython==2.7.0", + "docker==7.1.0", + "docopt==0.6.2", + "docstring_parser==0.16", + "docutils==0.21.2", + "duckdb==1.3.1", + "durationpy==0.10", + "ecdsa==0.19.1", + "elastic-transport==8.17.1", + "elasticsearch==8.18.1", "email_validator==2.2.0", + "entrypoints==0.4", + "eralchemy2==1.4.1", + "et_xmlfile==2.0.0", + "eventlet==0.40.1", "exceptiongroup==1.3.0", + "execnet==2.1.1", + "executing==2.2.0", + "facebook_business==23.0.0", "fastapi-cli==0.0.7", - "fastapi==0.115.12", + "fastapi==0.115.14", + "fastavro==1.11.1", + "fasteners==0.19", + "fastjsonschema==2.21.1", + "filelock==3.18.0", + "flit==3.12.0", + "flit_core==3.12.0", + "flower==2.0.1", + "frozenlist==1.7.0", "fsspec==2025.5.1", + "future==1.0.0", + "gcloud-aio-auth==5.4.2", + "gcloud-aio-bigquery==7.1.0", + "gcloud-aio-storage==9.4.0", + "gcsfs==2025.5.1", + "geomet==0.2.1.post1", + "gevent==25.5.1", + "gitdb==4.0.12", + "google-ads==27.0.0", + "google-analytics-admin==0.24.1", + "google-api-core==2.25.1", + "google-api-python-client==2.175.0", + "google-auth-httplib2==0.2.0", + "google-auth-oauthlib==1.2.2", + "google-auth==2.40.3", + "google-cloud-aiplatform==1.101.0", + "google-cloud-alloydb==0.4.8", + "google-cloud-appengine-logging==1.6.2", + "google-cloud-audit-log==0.3.2", + "google-cloud-automl==2.16.4", + "google-cloud-batch==0.17.36", + "google-cloud-bigquery-datatransfer==3.19.2", + "google-cloud-bigquery-storage==2.32.0", + "google-cloud-bigquery==3.34.0", + "google-cloud-bigtable==2.31.0", + "google-cloud-build==3.31.2", + "google-cloud-compute==1.31.0", + "google-cloud-container==2.57.0", + "google-cloud-core==2.4.3", + "google-cloud-datacatalog==3.27.1", + "google-cloud-dataflow-client==0.9.0", + "google-cloud-dataform==0.6.2", + "google-cloud-dataplex==2.10.2", + "google-cloud-dataproc-metastore==1.18.3", + "google-cloud-dataproc==5.21.0", + "google-cloud-dlp==3.31.0", + "google-cloud-kms==3.5.1", + "google-cloud-language==2.17.2", + "google-cloud-logging==3.12.1", + "google-cloud-managedkafka==0.1.11", + "google-cloud-memcache==1.12.2", + "google-cloud-monitoring==2.27.2", + "google-cloud-orchestration-airflow==1.17.5", + "google-cloud-os-login==2.17.2", + "google-cloud-pubsub==2.30.0", + "google-cloud-redis==2.18.1", + "google-cloud-resource-manager==1.14.2", + "google-cloud-run==0.10.18", + "google-cloud-secret-manager==2.24.0", + "google-cloud-spanner==3.55.0", + "google-cloud-speech==2.33.0", + "google-cloud-storage-transfer==1.17.0", + "google-cloud-storage==2.19.0", + "google-cloud-tasks==2.19.3", + "google-cloud-texttospeech==2.27.0", + "google-cloud-translate==3.21.1", + "google-cloud-videointelligence==2.16.2", + "google-cloud-vision==3.10.2", + "google-cloud-workflows==1.18.2", + "google-crc32c==1.7.1", + "google-genai==1.2.0", + "google-resumable-media==2.7.2", "googleapis-common-protos==1.70.0", - "greenlet==3.2.2", - "grpcio==1.72.1", + "graphql-core==3.2.6", + "graphviz==0.21", + "greenlet==3.2.3", + "grpc-google-iam-v1==0.14.2", + "grpc-interceptor==0.15.4", + "grpcio-gcp==0.2.2", + "grpcio-health-checking==1.62.3", + "grpcio-status==1.62.3", + "grpcio-tools==1.62.3", + "grpcio==1.73.1", + "gssapi==1.9.0", "gunicorn==23.0.0", "h11==0.16.0", + "h2==4.2.0", + "hatch==1.14.1", + "hatchling==1.27.0", + "hdfs==2.7.3", + "hf-xet==1.1.5", + "hmsclient==0.1.1", + "hpack==4.1.0", "httpcore==1.0.9", + "httplib2==0.22.0", "httptools==0.6.4", + "httpx-sse==0.4.0", "httpx==0.27.0", + "huggingface-hub==0.33.2", + "humanize==4.12.3", + "hvac==2.3.0", + "hyperframe==6.1.0", + "hyperlink==21.0.0", + "ibm-cloud-sdk-core==3.20.3", + "ibmcloudant==0.9.1", + "icdiff==2.0.7", + "id==1.5.0", + "identify==2.6.12", "idna==3.10", + "ijson==3.4.0", + "imagesize==1.4.1", + "immutabledict==4.2.1", "importlib_metadata==8.4.0", + "impyla==0.21.0", + "incremental==24.7.2", + "inflection==0.5.1", + "influxdb-client==1.49.0", + "iniconfig==2.1.0", + "inputimeout==1.0.4", + "ipdb==0.13.13", + "ipykernel==6.29.5", + "ipython==8.37.0", + "isodate==0.7.2", "itsdangerous==2.2.0", + "jaraco.classes==3.4.0", + "jaraco.context==6.0.1", + "jaraco.functools==4.2.1", + "jedi==0.19.2", + "jeepney==0.9.0", + "jiter==0.10.0", + "jmespath==0.10.0", + "joblib==1.5.1", + "joserfc==1.1.0", + "jpype1==1.5.2", + "jsonpatch==1.33", + "jsonpath-ng==1.7.0", + "jsonpath-python==1.0.6", + "jsonpickle==3.4.2", + "jsonpointer==3.0.0", + "jsonschema-path==0.3.4", "jsonschema-specifications==2025.4.1", "jsonschema==4.24.0", + "jupyter_client==8.6.3", + "jupyter_core==5.8.1", + "jupyterlab_pygments==0.3.0", + "kerberos==1.3.1", + "keyring==25.6.0", + "keyrings.alt==5.0.2", + "kgb==7.2", + "kombu==5.5.4", + "krb5==0.7.1", + "kubernetes==32.0.1", + "kubernetes_asyncio==32.3.2", + "kylinpy==2.8.4", "lazy-object-proxy==1.11.0", - "libcst==1.8.0", + "libcst==1.8.2", + "limits==5.4.0", "linkify-it-py==2.0.3", + "litellm==1.73.6.post1", "lockfile==0.12.2", + "looker-sdk==25.10.0", + "lxml==5.4.0", + "lz4==4.4.4", "markdown-it-py==3.0.0", + "marshmallow-sqlalchemy==1.4.2", + "marshmallow==3.26.1", + "matplotlib-inline==0.1.7", "mdurl==0.1.2", + "mergedeep==1.3.4", "methodtools==0.4.7", + "microsoft-kiota-abstractions==1.9.4", + "microsoft-kiota-authentication-azure==1.9.4", + "microsoft-kiota-http==1.9.4", + "microsoft-kiota-serialization-json==1.9.4", + "microsoft-kiota-serialization-text==1.9.4", + "mistune==3.1.3", + "mmh3==5.1.0", + "mongomock==4.3.0", "more-itertools==10.7.0", + "moto==5.1.6", + "mpmath==1.3.0", + "msal-extensions==1.3.1", + "msal==1.32.3", + "msgpack==1.1.1", + "msgraph-core==1.3.5", "msgspec==0.19.0", + "msrest==0.7.1", + "msrestazure==0.6.4.post1", + "multi_key_dict==2.0.3", + "multidict==6.6.3", + "mypy-boto3-appflow==1.39.0", + "mypy-boto3-rds==1.39.1", + "mypy-boto3-redshift-data==1.39.0", + "mypy-boto3-s3==1.39.2", + "mypy==1.9.0", + "mypy_extensions==1.1.0", + "mysql-connector-python==9.3.0", + "mysqlclient==2.2.7", + "nbclient==0.10.2", + "nbconvert==7.16.6", + "nbformat==5.10.4", + "neo4j==5.28.1", + "nest-asyncio==1.6.0", + "networkx==3.4.2", + "nh3==0.2.21", + "nodeenv==1.9.1", + "numpy==1.26.4", + "oauthlib==3.3.1", + "objsize==0.7.1", + "openai==1.93.0", + "openapi-schema-validator==0.6.3", + "openapi-spec-validator==0.7.2", + "opencensus-context==0.1.3", + "opencensus==0.11.4", + "openlineage-integration-common==1.34.0", + "openlineage-python==1.34.0", + "openlineage_sql==1.34.0", + "openpyxl==3.1.5", + "opensearch-py==3.0.0", "opentelemetry-api==1.27.0", "opentelemetry-exporter-otlp-proto-common==1.27.0", "opentelemetry-exporter-otlp-proto-grpc==1.27.0", "opentelemetry-exporter-otlp-proto-http==1.27.0", "opentelemetry-exporter-otlp==1.27.0", + "opentelemetry-exporter-prometheus==0.48b0", "opentelemetry-proto==1.27.0", "opentelemetry-sdk==1.27.0", "opentelemetry-semantic-conventions==0.48b0", - "packaging==24.2", + "opsgenie-sdk==2.1.5", + "oracledb==3.2.0", + "ordered-set==4.1.0", + "orjson==3.10.18", + "oss2==2.19.1", + "packaging==25.0", + "pagerduty==2.3.0", + "pandas-gbq==0.29.1", + "pandas-stubs==2.3.0.250703", + "pandas==2.1.4", + "pandocfilters==1.5.1", + "papermill==2.6.0", + "paramiko==3.5.1", + "parso==0.8.4", + "pathable==0.4.4", "pathspec==0.12.1", + "pbr==6.1.1", + "pdbr==0.9.2", + "pdpyras==5.4.1", "pendulum==3.1.0", + "pexpect==4.9.0", + "pgvector==0.4.1", + "pinecone-plugin-assistant==1.7.0", + "pinecone-plugin-interface==0.0.7", + "pinecone==7.0.1", + "pinotdb==5.6.0", + "pipdeptree==2.26.1", + "platformdirs==4.3.8", "pluggy==1.6.0", + "ply==3.11", + "plyvel==1.5.1", + "polars==1.31.0", + "portalocker==2.10.1", + "pprintpp==0.4.0", + "pre-commit-uv==4.1.4", + "pre_commit==4.2.0", + "presto-python-client==0.8.4", + "prison==0.2.1", + "prometheus_client==0.22.1", + "prompt_toolkit==3.0.51", + "propcache==0.3.2", + "proto-plus==1.26.1", "protobuf==4.25.8", "psutil==7.0.0", + "psycopg2-binary==2.9.10", + "ptyprocess==0.7.0", + "pure-sasl==0.6.2", + "pure_eval==0.2.3", + "py-partiql-parser==0.6.1", + "py-spy==0.4.0", + "py4j==0.10.9.9", + "pyOpenSSL==25.1.0", + "pyarrow-hotfix==0.7", + "pyarrow==16.1.0", + "pyasn1==0.6.1", + "pyasn1_modules==0.4.1", + "pycountry==24.6.1", "pycparser==2.22", - "pydantic==2.11.5", + "pycryptodome==3.23.0", + "pydantic==2.11.7", "pydantic_core==2.33.2", + "pydata-google-auth==1.9.1", + "pydot==1.4.2", + "pydruid==0.6.9", + "pyenchant==3.2.2", + "pyexasol==0.27.0", + "pygraphviz==1.14", + "pyiceberg==0.9.1", + "pyjsparser==2.7.1", + "pykerberos==1.2.4", + "pymongo==4.10.1", + "pymssql==2.3.6", + "pyodbc==5.2.0", + "pyodps==0.12.4", + "pyparsing==3.2.3", + "pypsrp==0.8.1", + "pyspark==4.0.0", + "pyspnego==0.11.2", + "pytest-asyncio==0.25.0", + "pytest-cov==6.2.1", + "pytest-custom-exit-code==0.3.0", + "pytest-icdiff==0.9", + "pytest-instafail==0.5.0", + "pytest-mock==3.14.1", + "pytest-rerunfailures==15.1", + "pytest-timeouts==1.2.1", + "pytest-unordered==0.7.0", + "pytest-xdist==3.8.0", + "pytest==8.4.1", + "python-arango==8.2.0", "python-daemon==3.1.2", "python-dateutil==2.9.0.post0", - "python-dotenv==1.1.0", + "python-dotenv==1.1.1", + "python-http-client==3.3.7", + "python-jenkins==1.8.2", + "python-ldap==3.4.4", "python-multipart==0.0.20", + "python-on-whales==0.77.0", "python-slugify==8.0.4", + "python-telegram-bot==22.2", + "python3-saml==1.16.0", "pytz==2025.2", + "pywinrm==0.5.0", + "pyzmq==27.0.0", + "qdrant-client==1.14.3", + "ray==2.42.0", + "reactivex==4.0.4", + "readme_renderer==44.0", + "redis==5.2.1", + "redshift-connector==2.1.8", "referencing==0.36.2", - "requests==2.32.3", + "regex==2024.11.6", + "requests-file==2.1.0", + "requests-kerberos==0.15.0", + "requests-mock==1.12.1", + "requests-oauthlib==2.0.0", + "requests-toolbelt==1.0.0", + "requests==2.32.4", + "requests_ntlm==1.3.0", + "responses==0.25.7", + "restructuredtext_lint==1.4.0", "retryhttp==1.3.3", + "rfc3339-validator==0.1.4", + "rfc3986==2.0.0", "rich-argparse==1.7.1", - "rich-toolkit==0.14.7", + "rich-click==1.8.9", + "rich-toolkit==0.14.8", "rich==13.9.4", - "rpds-py==0.25.1", + "rpds-py==0.26.0", + "rsa==4.9.1", + "ruamel.yaml.clib==0.2.12", + "ruamel.yaml==0.18.14", + "ruff==0.11.2", + "s3fs==2025.5.1", + "s3transfer==0.13.0", + "sagemaker_studio==1.0.16", + "scikit-learn==1.5.2", + "scipy==1.15.3", + "scramp==1.4.5", + "scrapbook==0.5.0", + "semver==3.0.4", + "sendgrid==6.12.4", + "sentinels==1.0.0", + "sentry-sdk==2.32.0", "setproctitle==1.3.6", + "shapely==2.1.1", "shellingham==1.5.4", + "simple-salesforce==1.12.6", "six==1.17.0", + "slack_sdk==3.35.0", + "smart_open==7.3.0.post1", + "smbprotocol==1.15.0", + "smmap==5.0.2", "sniffio==1.3.1", + "snowballstemmer==3.0.1", + "snowflake-connector-python==3.16.0", + "snowflake-snowpark-python==1.33.0", + "snowflake-sqlalchemy==1.7.5", + "sortedcontainers==2.4.0", + "soupsieve==2.7", + "sphinx-argparse==0.5.2", + "sphinx-autoapi==3.6.0", + "sphinx-autobuild==2024.10.3", + "sphinx-copybutton==0.5.2", + "sphinx-jinja==2.0.2", + "sphinx-rtd-theme==3.0.2", + "sphinx_design==0.6.1", + "sphinxcontrib-applehelp==2.0.0", + "sphinxcontrib-devhelp==2.0.0", + "sphinxcontrib-htmlhelp==2.1.0", + "sphinxcontrib-httpdomain==1.8.1", + "sphinxcontrib-jquery==4.1", + "sphinxcontrib-jsmath==1.0.1", + "sphinxcontrib-qthelp==2.0.0", + "sphinxcontrib-redoc==1.6.0", + "sphinxcontrib-serializinghtml==2.0.0", + "sphinxcontrib-spelling==8.0.1", + "spython==0.3.14", + "sqlalchemy-bigquery==1.15.0", + "sqlalchemy-spanner==1.14.0", + "sqlalchemy_drill==1.1.9", "sqlparse==0.5.3", + "sshtunnel==0.4.0", + "stack-data==0.6.3", + "starkbank-ecdsa==2.2.0", "starlette==0.46.2", + "statsd==4.0.1", + "std-uritemplate==2.0.5", + "strictyaml==1.7.3", "structlog==25.4.0", "svcs==25.1.0", + "sympy==1.14.0", + "tableauserverclient==0.38", "tabulate==0.9.0", "tenacity==9.1.2", + "teradatasql==20.0.0.32", + "teradatasqlalchemy==20.0.0.6", "termcolor==3.1.0", "text-unidecode==1.3", + "threadpoolctl==3.6.0", + "thrift-sasl==0.4.3", + "thrift==0.16.0", + "tiktoken==0.9.0", + "time-machine==2.16.0", + "tinycss2==1.4.0", + "tokenizers==0.21.2", "tomli==2.2.1", + "tomli_w==1.2.0", + "tomlkit==0.13.3", + "tornado==6.5.1", + "towncrier==24.8.0", + "tqdm==4.67.1", + "traitlets==5.14.3", + "trino==0.335.0", + "trove-classifiers==2025.5.9.12", + "twine==6.1.0", "typer==0.16.0", - "types-requests==2.32.0.20250602", + "types-Deprecated==1.2.15.20250304", + "types-Markdown==3.8.0.20250415", + "types-PyMySQL==1.1.0.20250516", + "types-PyYAML==6.0.12.20250516", + "types-aiofiles==24.1.0.20250606", + "types-certifi==2021.10.8.3", + "types-cffi==1.17.0.20250523", + "types-croniter==6.0.0.20250626", + "types-docutils==0.21.0.20250604", + "types-paramiko==3.5.0.20250516", + "types-protobuf==6.30.2.20250703", + "types-pyOpenSSL==24.1.0.20240722", + "types-python-dateutil==2.9.0.20250516", + "types-python-slugify==8.0.2.20240310", + "types-pytz==2025.2.0.20250516", + "types-redis==4.6.0.20241004", + "types-requests==2.32.4.20250611", + "types-setuptools==80.9.0.20250529", + "types-tabulate==0.9.0.20241207", + "types-toml==0.10.8.20240310", + "typing-inspect==0.9.0", "typing-inspection==0.4.1", "typing_extensions==4.13.2", "tzdata==2025.2", + "tzlocal==5.3.1", "uc-micro-py==1.0.3", "universal_pathlib==0.2.6", - "urllib3==2.4.0", - "uuid6==2024.7.10", - "uv==0.7.8", - "uvicorn==0.34.3", + "uritemplate==4.2.0", + "urllib3==2.5.0", + "userpath==1.9.2", + "uuid6==2025.0.0", + "uv==0.7.19", + "uvicorn==0.35.0", "uvloop==0.21.0", - "watchfiles==1.0.5", + "validators==0.34.0", + "vertica-python==1.4.0", + "vine==5.1.0", + "virtualenv==20.31.2", + "watchfiles==1.1.0", + "watchtower==3.4.0", + "wcwidth==0.2.13", + "weaviate-client==4.9.6", + "webencodings==0.5.1", + "websocket-client==1.8.0", "websockets==14.2", "wirerope==1.0.0", "wrapt==1.17.2", - "zipp==3.22.0", + "xmlsec==1.3.14", + "xmltodict==0.14.2", + "yamllint==1.37.1", + "yandex-query-client==0.1.4", + "yandexcloud==0.328.0", + "yarl==1.20.1", + "ydb-dbapi==0.1.12", + "ydb==3.21.6", + "zeep==4.3.1", + "zenpy==2.0.56", + "zipp==3.23.0", + "zope.event==5.1", + "zope.interface==7.2", + "zstandard==0.23.0", ] diff --git a/uv.lock b/uv.lock index da9fbf4..5c90e69 100644 --- a/uv.lock +++ b/uv.lock @@ -2,140 +2,815 @@ version = 1 revision = 2 requires-python = "==3.10.*" +[options] +prerelease-mode = "allow" + [manifest] constraints = [ - { name = "a2wsgi", specifier = "==1.10.8" }, - { name = "aiologic", specifier = "==0.14.0" }, + { name = "a2wsgi", specifier = "==1.10.10" }, + { name = "adal", specifier = "==1.2.7" }, + { name = "adlfs", specifier = "==2024.12.0" }, + { name = "aiobotocore", specifier = "==2.23.0" }, + { name = "aiofiles", specifier = "==24.1.0" }, + { name = "aiohappyeyeballs", specifier = "==2.6.1" }, + { name = "aiohttp", specifier = "==3.12.13" }, + { name = "aiohttp-cors", specifier = "==0.8.1" }, + { name = "aioitertools", specifier = "==0.12.0" }, + { name = "aiomysql", specifier = "==0.2.0" }, + { name = "aioresponses", specifier = "==0.7.8" }, + { name = "aiosignal", specifier = "==1.4.0" }, { name = "aiosqlite", specifier = "==0.21.0" }, - { name = "alembic", specifier = "==1.16.1" }, + { name = "airbyte-api", specifier = "==0.52.2" }, + { name = "alabaster", specifier = "==1.0.0" }, + { name = "alembic", specifier = "==1.16.2" }, + { name = "alibabacloud-adb20211201", specifier = "==3.1.2" }, + { name = "alibabacloud-credentials", specifier = "==1.0.2" }, + { name = "alibabacloud-credentials-api", specifier = "==1.0.0" }, + { name = "alibabacloud-endpoint-util", specifier = "==0.0.4" }, + { name = "alibabacloud-gateway-spi", specifier = "==0.0.3" }, + { name = "alibabacloud-openapi-util", specifier = "==0.2.2" }, + { name = "alibabacloud-tea", specifier = "==0.4.3" }, + { name = "alibabacloud-tea-openapi", specifier = "==0.3.16" }, + { name = "alibabacloud-tea-util", specifier = "==0.3.13" }, + { name = "alibabacloud-tea-xml", specifier = "==0.0.3" }, + { name = "aliyun-python-sdk-core", specifier = "==2.16.0" }, + { name = "aliyun-python-sdk-kms", specifier = "==2.16.5" }, + { name = "amqp", specifier = "==5.3.1" }, + { name = "analytics-python", specifier = "==1.2.9" }, { name = "annotated-types", specifier = "==0.7.0" }, + { name = "ansicolors", specifier = "==1.1.8" }, { name = "anyio", specifier = "==4.9.0" }, + { name = "apache-airflow-providers-airbyte", specifier = "==5.2.0" }, + { name = "apache-airflow-providers-alibaba", specifier = "==3.2.0" }, + { name = "apache-airflow-providers-amazon", specifier = "==9.9.0" }, + { name = "apache-airflow-providers-apache-beam", specifier = "==6.1.0" }, + { name = "apache-airflow-providers-apache-cassandra", specifier = "==3.8.0" }, + { name = "apache-airflow-providers-apache-drill", specifier = "==3.1.0" }, + { name = "apache-airflow-providers-apache-druid", specifier = "==4.2.0" }, + { name = "apache-airflow-providers-apache-flink", specifier = "==1.7.0" }, + { name = "apache-airflow-providers-apache-hdfs", specifier = "==4.10.0" }, + { name = "apache-airflow-providers-apache-hive", specifier = "==9.1.0" }, + { name = "apache-airflow-providers-apache-iceberg", specifier = "==1.3.0" }, + { name = "apache-airflow-providers-apache-impala", specifier = "==1.7.0" }, + { name = "apache-airflow-providers-apache-kafka", specifier = "==1.9.0" }, + { name = "apache-airflow-providers-apache-kylin", specifier = "==3.9.0" }, + { name = "apache-airflow-providers-apache-livy", specifier = "==4.4.0" }, + { name = "apache-airflow-providers-apache-pig", specifier = "==4.7.0" }, + { name = "apache-airflow-providers-apache-pinot", specifier = "==4.8.0" }, + { name = "apache-airflow-providers-apache-spark", specifier = "==5.3.0" }, + { name = "apache-airflow-providers-apprise", specifier = "==2.1.0" }, + { name = "apache-airflow-providers-arangodb", specifier = "==2.8.0" }, + { name = "apache-airflow-providers-asana", specifier = "==2.10.0" }, + { name = "apache-airflow-providers-atlassian-jira", specifier = "==3.1.0" }, + { name = "apache-airflow-providers-celery", specifier = "==3.12.0" }, + { name = "apache-airflow-providers-cloudant", specifier = "==4.2.0" }, + { name = "apache-airflow-providers-cncf-kubernetes", specifier = "==10.6.0" }, + { name = "apache-airflow-providers-cohere", specifier = "==1.5.1" }, + { name = "apache-airflow-providers-common-compat", specifier = "==1.7.1" }, + { name = "apache-airflow-providers-common-io", specifier = "==1.6.0" }, + { name = "apache-airflow-providers-common-messaging", specifier = "==1.0.3" }, + { name = "apache-airflow-providers-common-sql", specifier = "==1.27.2" }, + { name = "apache-airflow-providers-databricks", specifier = "==7.5.0" }, + { name = "apache-airflow-providers-datadog", specifier = "==3.9.0" }, + { name = "apache-airflow-providers-dbt-cloud", specifier = "==4.4.0" }, + { name = "apache-airflow-providers-dingding", specifier = "==3.8.0" }, + { name = "apache-airflow-providers-discord", specifier = "==3.10.0" }, + { name = "apache-airflow-providers-docker", specifier = "==4.4.0" }, + { name = "apache-airflow-providers-edge3", specifier = "==1.1.1" }, + { name = "apache-airflow-providers-elasticsearch", specifier = "==6.3.0" }, + { name = "apache-airflow-providers-exasol", specifier = "==4.8.0" }, + { name = "apache-airflow-providers-fab", specifier = "==2.2.1" }, + { name = "apache-airflow-providers-facebook", specifier = "==3.8.0" }, + { name = "apache-airflow-providers-ftp", specifier = "==3.13.0" }, + { name = "apache-airflow-providers-git", specifier = "==0.0.3" }, + { name = "apache-airflow-providers-github", specifier = "==2.9.0" }, + { name = "apache-airflow-providers-google", specifier = "==16.0.0" }, + { name = "apache-airflow-providers-grpc", specifier = "==3.8.0" }, + { name = "apache-airflow-providers-hashicorp", specifier = "==4.3.0" }, + { name = "apache-airflow-providers-http", specifier = "==5.3.1" }, + { name = "apache-airflow-providers-imap", specifier = "==3.9.0" }, + { name = "apache-airflow-providers-influxdb", specifier = "==2.9.1" }, + { name = "apache-airflow-providers-jdbc", specifier = "==5.2.0" }, + { name = "apache-airflow-providers-jenkins", specifier = "==4.1.0" }, + { name = "apache-airflow-providers-microsoft-azure", specifier = "==12.4.1" }, + { name = "apache-airflow-providers-microsoft-mssql", specifier = "==4.3.0" }, + { name = "apache-airflow-providers-microsoft-psrp", specifier = "==3.1.0" }, + { name = "apache-airflow-providers-microsoft-winrm", specifier = "==3.10.0" }, + { name = "apache-airflow-providers-mongo", specifier = "==5.2.0" }, + { name = "apache-airflow-providers-mysql", specifier = "==6.3.1" }, + { name = "apache-airflow-providers-neo4j", specifier = "==3.9.1" }, + { name = "apache-airflow-providers-odbc", specifier = "==4.10.0" }, + { name = "apache-airflow-providers-openai", specifier = "==1.6.0" }, + { name = "apache-airflow-providers-openfaas", specifier = "==3.8.0" }, + { name = "apache-airflow-providers-openlineage", specifier = "==2.4.0" }, + { name = "apache-airflow-providers-opensearch", specifier = "==1.7.0" }, + { name = "apache-airflow-providers-opsgenie", specifier = "==5.9.0" }, + { name = "apache-airflow-providers-oracle", specifier = "==4.1.1" }, + { name = "apache-airflow-providers-pagerduty", specifier = "==5.0.0" }, + { name = "apache-airflow-providers-papermill", specifier = "==3.11.0" }, + { name = "apache-airflow-providers-pgvector", specifier = "==1.5.0" }, + { name = "apache-airflow-providers-pinecone", specifier = "==2.3.1" }, + { name = "apache-airflow-providers-postgres", specifier = "==6.2.0" }, + { name = "apache-airflow-providers-presto", specifier = "==5.9.0" }, + { name = "apache-airflow-providers-qdrant", specifier = "==1.4.0" }, + { name = "apache-airflow-providers-redis", specifier = "==4.1.0" }, + { name = "apache-airflow-providers-salesforce", specifier = "==5.11.0" }, + { name = "apache-airflow-providers-samba", specifier = "==4.10.0" }, + { name = "apache-airflow-providers-segment", specifier = "==3.8.0" }, + { name = "apache-airflow-providers-sendgrid", specifier = "==4.1.1" }, + { name = "apache-airflow-providers-sftp", specifier = "==5.3.1" }, + { name = "apache-airflow-providers-singularity", specifier = "==3.8.0" }, + { name = "apache-airflow-providers-slack", specifier = "==9.1.1" }, + { name = "apache-airflow-providers-smtp", specifier = "==2.1.0" }, + { name = "apache-airflow-providers-snowflake", specifier = "==6.4.0" }, + { name = "apache-airflow-providers-sqlite", specifier = "==4.1.0" }, + { name = "apache-airflow-providers-ssh", specifier = "==4.1.0" }, + { name = "apache-airflow-providers-standard", specifier = "==1.3.0" }, + { name = "apache-airflow-providers-tableau", specifier = "==5.1.0" }, + { name = "apache-airflow-providers-telegram", specifier = "==4.8.0" }, + { name = "apache-airflow-providers-teradata", specifier = "==3.1.0" }, + { name = "apache-airflow-providers-trino", specifier = "==6.3.0" }, + { name = "apache-airflow-providers-vertica", specifier = "==4.1.0" }, + { name = "apache-airflow-providers-weaviate", specifier = "==3.2.0" }, + { name = "apache-airflow-providers-yandex", specifier = "==4.1.0" }, + { name = "apache-airflow-providers-ydb", specifier = "==2.2.0" }, + { name = "apache-airflow-providers-zendesk", specifier = "==4.10.0" }, + { name = "apache-beam", specifier = "==2.59.0" }, + { name = "apispec", specifier = "==6.8.2" }, + { name = "apprise", specifier = "==1.9.3" }, + { name = "apscheduler", specifier = "==3.11.0" }, { name = "argcomplete", specifier = "==3.6.2" }, - { name = "asgiref", specifier = "==3.8.1" }, + { name = "arro3-core", specifier = "==0.5.1" }, + { name = "asana", specifier = "==5.2.0" }, + { name = "asgiref", specifier = "==3.9.0" }, + { name = "asn1crypto", specifier = "==1.5.1" }, + { name = "astroid", specifier = "==3.3.10" }, + { name = "asttokens", specifier = "==3.0.0" }, + { name = "async-timeout", specifier = "==5.0.1" }, + { name = "asyncpg", specifier = "==0.30.0" }, + { name = "asyncssh", specifier = "==2.21.0" }, + { name = "atlasclient", specifier = "==1.0.0" }, + { name = "atlassian-python-api", specifier = "==4.0.4" }, { name = "attrs", specifier = "==25.3.0" }, + { name = "authlib", specifier = "==1.3.1" }, + { name = "aws-sam-translator", specifier = "==1.99.0" }, + { name = "aws-xray-sdk", specifier = "==2.14.0" }, + { name = "awswrangler", specifier = "==3.11.0" }, + { name = "azure-batch", specifier = "==14.2.0" }, + { name = "azure-common", specifier = "==1.1.28" }, + { name = "azure-core", specifier = "==1.35.0" }, + { name = "azure-cosmos", specifier = "==4.9.0" }, + { name = "azure-datalake-store", specifier = "==0.0.53" }, + { name = "azure-identity", specifier = "==1.23.0" }, + { name = "azure-keyvault-secrets", specifier = "==4.10.0" }, + { name = "azure-kusto-data", specifier = "==5.0.4" }, + { name = "azure-mgmt-containerinstance", specifier = "==10.1.0" }, + { name = "azure-mgmt-containerregistry", specifier = "==14.0.0" }, + { name = "azure-mgmt-core", specifier = "==1.6.0" }, + { name = "azure-mgmt-cosmosdb", specifier = "==9.8.0" }, + { name = "azure-mgmt-datafactory", specifier = "==9.2.0" }, + { name = "azure-mgmt-datalake-nspkg", specifier = "==3.0.1" }, + { name = "azure-mgmt-datalake-store", specifier = "==0.5.0" }, + { name = "azure-mgmt-nspkg", specifier = "==3.0.2" }, + { name = "azure-mgmt-resource", specifier = "==24.0.0" }, + { name = "azure-mgmt-storage", specifier = "==23.0.1" }, + { name = "azure-nspkg", specifier = "==3.0.2" }, + { name = "azure-servicebus", specifier = "==7.14.2" }, + { name = "azure-storage-blob", specifier = "==12.25.1" }, + { name = "azure-storage-file-datalake", specifier = "==12.20.0" }, + { name = "azure-storage-file-share", specifier = "==12.21.0" }, + { name = "azure-synapse-artifacts", specifier = "==0.20.0" }, + { name = "azure-synapse-spark", specifier = "==0.7.0" }, + { name = "babel", specifier = "==2.17.0" }, + { name = "backoff", specifier = "==2.2.1" }, { name = "backports-strenum", specifier = "==1.3.1" }, - { name = "cadwyn", specifier = "==5.3.3" }, - { name = "certifi", specifier = "==2025.4.26" }, + { name = "backports-tarfile", specifier = "==1.2.0" }, + { name = "bcrypt", specifier = "==4.3.0" }, + { name = "beautifulsoup4", specifier = "==4.13.4" }, + { name = "billiard", specifier = "==4.2.1" }, + { name = "bitarray", specifier = "==2.9.3" }, + { name = "black", specifier = "==25.1.0" }, + { name = "bleach", specifier = "==6.2.0" }, + { name = "blinker", specifier = "==1.9.0" }, + { name = "boto3", specifier = "==1.38.27" }, + { name = "botocore", specifier = "==1.38.27" }, + { name = "cachelib", specifier = "==0.13.0" }, + { name = "cachetools", specifier = "==5.5.2" }, + { name = "cadwyn", specifier = "==5.4.2" }, + { name = "cassandra-driver", specifier = "==3.29.2" }, + { name = "cattrs", specifier = "==25.1.1" }, + { name = "celery", specifier = "==5.5.3" }, + { name = "certifi", specifier = "==2025.6.15" }, { name = "cffi", specifier = "==1.17.1" }, + { name = "cfgv", specifier = "==3.4.0" }, + { name = "cfn-lint", specifier = "==1.37.0" }, + { name = "chardet", specifier = "==5.2.0" }, { name = "charset-normalizer", specifier = "==3.4.2" }, - { name = "click", specifier = "==8.1.8" }, + { name = "checksumdir", specifier = "==1.2.0" }, + { name = "ciso8601", specifier = "==2.3.2" }, + { name = "click", specifier = "==8.2.1" }, + { name = "click-didyoumean", specifier = "==0.3.1" }, + { name = "click-plugins", specifier = "==1.1.1.2" }, + { name = "click-repl", specifier = "==0.3.0" }, + { name = "clickclick", specifier = "==20.10.2" }, + { name = "cloudpickle", specifier = "==2.2.1" }, + { name = "cohere", specifier = "==5.15.0" }, + { name = "colorama", specifier = "==0.4.6" }, + { name = "colorful", specifier = "==0.5.7" }, { name = "colorlog", specifier = "==6.9.0" }, + { name = "comm", specifier = "==0.2.2" }, + { name = "confluent-kafka", specifier = "==2.11.0" }, + { name = "connexion", specifier = "==2.14.2" }, + { name = "coverage", specifier = "==7.9.2" }, + { name = "crcmod", specifier = "==1.7" }, { name = "cron-descriptor", specifier = "==1.4.5" }, { name = "croniter", specifier = "==6.0.0" }, { name = "cryptography", specifier = "==42.0.8" }, + { name = "curlify", specifier = "==3.0.0" }, + { name = "databricks-sql-connector", specifier = "==4.0.5" }, + { name = "databricks-sqlalchemy", specifier = "==1.0.5" }, + { name = "dataclasses-json", specifier = "==0.6.7" }, + { name = "datadog", specifier = "==0.51.0" }, + { name = "db-dtypes", specifier = "==1.4.3" }, + { name = "debugpy", specifier = "==1.8.14" }, + { name = "decorator", specifier = "==5.2.1" }, + { name = "defusedxml", specifier = "==0.7.1" }, + { name = "deltalake", specifier = "==1.0.2" }, { name = "deprecated", specifier = "==1.2.18" }, + { name = "diagrams", specifier = "==0.24.4" }, { name = "dill", specifier = "==0.3.1.1" }, + { name = "distlib", specifier = "==0.3.9" }, + { name = "distro", specifier = "==1.9.0" }, { name = "dnspython", specifier = "==2.7.0" }, + { name = "docker", specifier = "==7.1.0" }, + { name = "docopt", specifier = "==0.6.2" }, + { name = "docstring-parser", specifier = "==0.16" }, + { name = "docutils", specifier = "==0.21.2" }, + { name = "duckdb", specifier = "==1.3.1" }, + { name = "durationpy", specifier = "==0.10" }, + { name = "ecdsa", specifier = "==0.19.1" }, + { name = "elastic-transport", specifier = "==8.17.1" }, + { name = "elasticsearch", specifier = "==8.18.1" }, { name = "email-validator", specifier = "==2.2.0" }, + { name = "entrypoints", specifier = "==0.4" }, + { name = "eralchemy2", specifier = "==1.4.1" }, + { name = "et-xmlfile", specifier = "==2.0.0" }, + { name = "eventlet", specifier = "==0.40.1" }, + { name = "events", specifier = "==0.5" }, { name = "exceptiongroup", specifier = "==1.3.0" }, - { name = "fastapi", specifier = "==0.115.12" }, + { name = "execnet", specifier = "==2.1.1" }, + { name = "executing", specifier = "==2.2.0" }, + { name = "facebook-business", specifier = "==23.0.0" }, + { name = "fastapi", specifier = "==0.115.14" }, { name = "fastapi-cli", specifier = "==0.0.7" }, + { name = "fastavro", specifier = "==1.11.1" }, + { name = "fasteners", specifier = "==0.19" }, + { name = "fastjsonschema", specifier = "==2.21.1" }, + { name = "filelock", specifier = "==3.18.0" }, { name = "flask", specifier = "==2.2.5" }, + { name = "flask-appbuilder", specifier = "==4.6.3" }, + { name = "flask-babel", specifier = "==2.0.0" }, + { name = "flask-jwt-extended", specifier = "==4.7.1" }, + { name = "flask-limiter", specifier = "==3.12" }, + { name = "flask-login", specifier = "==0.6.3" }, + { name = "flask-session", specifier = "==0.5.0" }, + { name = "flask-sqlalchemy", specifier = "==2.5.1" }, + { name = "flask-wtf", specifier = "==1.2.2" }, + { name = "flit", specifier = "==3.12.0" }, + { name = "flit-core", specifier = "==3.12.0" }, + { name = "flower", specifier = "==2.0.1" }, + { name = "frozenlist", specifier = "==1.7.0" }, { name = "fsspec", specifier = "==2025.5.1" }, + { name = "future", specifier = "==1.0.0" }, + { name = "gcloud-aio-auth", specifier = "==5.4.2" }, + { name = "gcloud-aio-bigquery", specifier = "==7.1.0" }, + { name = "gcloud-aio-storage", specifier = "==9.4.0" }, + { name = "gcsfs", specifier = "==2025.5.1" }, + { name = "geomet", specifier = "==0.2.1.post1" }, + { name = "gevent", specifier = "==25.5.1" }, + { name = "gitdb", specifier = "==4.0.12" }, + { name = "gitpython", specifier = "==3.1.44" }, + { name = "google-ads", specifier = "==27.0.0" }, + { name = "google-analytics-admin", specifier = "==0.24.1" }, + { name = "google-api-core", specifier = "==2.25.1" }, + { name = "google-api-python-client", specifier = "==2.175.0" }, + { name = "google-auth", specifier = "==2.40.3" }, + { name = "google-auth-httplib2", specifier = "==0.2.0" }, + { name = "google-auth-oauthlib", specifier = "==1.2.2" }, + { name = "google-cloud-aiplatform", specifier = "==1.101.0" }, + { name = "google-cloud-alloydb", specifier = "==0.4.8" }, + { name = "google-cloud-appengine-logging", specifier = "==1.6.2" }, + { name = "google-cloud-audit-log", specifier = "==0.3.2" }, + { name = "google-cloud-automl", specifier = "==2.16.4" }, + { name = "google-cloud-batch", specifier = "==0.17.36" }, + { name = "google-cloud-bigquery", specifier = "==3.34.0" }, + { name = "google-cloud-bigquery-datatransfer", specifier = "==3.19.2" }, + { name = "google-cloud-bigquery-storage", specifier = "==2.32.0" }, + { name = "google-cloud-bigtable", specifier = "==2.31.0" }, + { name = "google-cloud-build", specifier = "==3.31.2" }, + { name = "google-cloud-compute", specifier = "==1.31.0" }, + { name = "google-cloud-container", specifier = "==2.57.0" }, + { name = "google-cloud-core", specifier = "==2.4.3" }, + { name = "google-cloud-datacatalog", specifier = "==3.27.1" }, + { name = "google-cloud-dataflow-client", specifier = "==0.9.0" }, + { name = "google-cloud-dataform", specifier = "==0.6.2" }, + { name = "google-cloud-dataplex", specifier = "==2.10.2" }, + { name = "google-cloud-dataproc", specifier = "==5.21.0" }, + { name = "google-cloud-dataproc-metastore", specifier = "==1.18.3" }, + { name = "google-cloud-dlp", specifier = "==3.31.0" }, + { name = "google-cloud-kms", specifier = "==3.5.1" }, + { name = "google-cloud-language", specifier = "==2.17.2" }, + { name = "google-cloud-logging", specifier = "==3.12.1" }, + { name = "google-cloud-managedkafka", specifier = "==0.1.11" }, + { name = "google-cloud-memcache", specifier = "==1.12.2" }, + { name = "google-cloud-monitoring", specifier = "==2.27.2" }, + { name = "google-cloud-orchestration-airflow", specifier = "==1.17.5" }, + { name = "google-cloud-os-login", specifier = "==2.17.2" }, + { name = "google-cloud-pubsub", specifier = "==2.30.0" }, + { name = "google-cloud-redis", specifier = "==2.18.1" }, + { name = "google-cloud-resource-manager", specifier = "==1.14.2" }, + { name = "google-cloud-run", specifier = "==0.10.18" }, + { name = "google-cloud-secret-manager", specifier = "==2.24.0" }, + { name = "google-cloud-spanner", specifier = "==3.55.0" }, + { name = "google-cloud-speech", specifier = "==2.33.0" }, + { name = "google-cloud-storage", specifier = "==2.19.0" }, + { name = "google-cloud-storage-transfer", specifier = "==1.17.0" }, + { name = "google-cloud-tasks", specifier = "==2.19.3" }, + { name = "google-cloud-texttospeech", specifier = "==2.27.0" }, + { name = "google-cloud-translate", specifier = "==3.21.1" }, + { name = "google-cloud-videointelligence", specifier = "==2.16.2" }, + { name = "google-cloud-vision", specifier = "==3.10.2" }, + { name = "google-cloud-workflows", specifier = "==1.18.2" }, + { name = "google-crc32c", specifier = "==1.7.1" }, + { name = "google-genai", specifier = "==1.2.0" }, + { name = "google-resumable-media", specifier = "==2.7.2" }, { name = "googleapis-common-protos", specifier = "==1.70.0" }, - { name = "greenlet", specifier = "==3.2.2" }, - { name = "grpcio", specifier = "==1.72.1" }, + { name = "graphql-core", specifier = "==3.2.6" }, + { name = "graphviz", specifier = "==0.21" }, + { name = "greenlet", specifier = "==3.2.3" }, + { name = "grpc-google-iam-v1", specifier = "==0.14.2" }, + { name = "grpc-interceptor", specifier = "==0.15.4" }, + { name = "grpcio", specifier = "==1.73.1" }, + { name = "grpcio-gcp", specifier = "==0.2.2" }, + { name = "grpcio-health-checking", specifier = "==1.62.3" }, + { name = "grpcio-status", specifier = "==1.62.3" }, + { name = "grpcio-tools", specifier = "==1.62.3" }, + { name = "gssapi", specifier = "==1.9.0" }, { name = "gunicorn", specifier = "==23.0.0" }, { name = "h11", specifier = "==0.16.0" }, + { name = "h2", specifier = "==4.2.0" }, + { name = "hatch", specifier = "==1.14.1" }, + { name = "hatchling", specifier = "==1.27.0" }, + { name = "hdfs", specifier = "==2.7.3" }, + { name = "hf-xet", specifier = "==1.1.5" }, + { name = "hmsclient", specifier = "==0.1.1" }, + { name = "hpack", specifier = "==4.1.0" }, { name = "httpcore", specifier = "==1.0.9" }, + { name = "httplib2", specifier = "==0.22.0" }, { name = "httptools", specifier = "==0.6.4" }, { name = "httpx", specifier = "==0.27.0" }, + { name = "httpx-sse", specifier = "==0.4.0" }, + { name = "huggingface-hub", specifier = "==0.33.2" }, + { name = "humanize", specifier = "==4.12.3" }, + { name = "hvac", specifier = "==2.3.0" }, + { name = "hyperframe", specifier = "==6.1.0" }, + { name = "hyperlink", specifier = "==21.0.0" }, + { name = "ibm-cloud-sdk-core", specifier = "==3.20.3" }, + { name = "ibmcloudant", specifier = "==0.9.1" }, + { name = "icdiff", specifier = "==2.0.7" }, + { name = "id", specifier = "==1.5.0" }, + { name = "identify", specifier = "==2.6.12" }, { name = "idna", specifier = "==3.10" }, + { name = "ijson", specifier = "==3.4.0" }, + { name = "imagesize", specifier = "==1.4.1" }, + { name = "immutabledict", specifier = "==4.2.1" }, { name = "importlib-metadata", specifier = "==8.4.0" }, + { name = "impyla", specifier = "==0.21.0" }, + { name = "incremental", specifier = "==24.7.2" }, + { name = "inflection", specifier = "==0.5.1" }, + { name = "influxdb-client", specifier = "==1.49.0" }, + { name = "iniconfig", specifier = "==2.1.0" }, + { name = "inputimeout", specifier = "==1.0.4" }, + { name = "ipdb", specifier = "==0.13.13" }, + { name = "ipykernel", specifier = "==6.29.5" }, + { name = "ipython", specifier = "==8.37.0" }, + { name = "isodate", specifier = "==0.7.2" }, { name = "itsdangerous", specifier = "==2.2.0" }, + { name = "jaraco-classes", specifier = "==3.4.0" }, + { name = "jaraco-context", specifier = "==6.0.1" }, + { name = "jaraco-functools", specifier = "==4.2.1" }, + { name = "jaydebeapi", specifier = "==1.2.3" }, + { name = "jedi", specifier = "==0.19.2" }, + { name = "jeepney", specifier = "==0.9.0" }, { name = "jinja2", specifier = "==3.1.6" }, + { name = "jiter", specifier = "==0.10.0" }, + { name = "jmespath", specifier = "==0.10.0" }, + { name = "joblib", specifier = "==1.5.1" }, + { name = "joserfc", specifier = "==1.1.0" }, + { name = "jpype1", specifier = "==1.5.2" }, + { name = "js2py", specifier = "==0.74" }, + { name = "jsonpatch", specifier = "==1.33" }, + { name = "jsonpath-ng", specifier = "==1.7.0" }, + { name = "jsonpath-python", specifier = "==1.0.6" }, + { name = "jsonpickle", specifier = "==3.4.2" }, + { name = "jsonpointer", specifier = "==3.0.0" }, { name = "jsonschema", specifier = "==4.24.0" }, + { name = "jsonschema-path", specifier = "==0.3.4" }, { name = "jsonschema-specifications", specifier = "==2025.4.1" }, + { name = "jupyter-client", specifier = "==8.6.3" }, + { name = "jupyter-core", specifier = "==5.8.1" }, + { name = "jupyterlab-pygments", specifier = "==0.3.0" }, + { name = "kerberos", specifier = "==1.3.1" }, + { name = "keyring", specifier = "==25.6.0" }, + { name = "keyrings-alt", specifier = "==5.0.2" }, + { name = "kgb", specifier = "==7.2" }, + { name = "kombu", specifier = "==5.5.4" }, + { name = "krb5", specifier = "==0.7.1" }, + { name = "kubernetes", specifier = "==32.0.1" }, + { name = "kubernetes-asyncio", specifier = "==32.3.2" }, + { name = "kylinpy", specifier = "==2.8.4" }, { name = "lazy-object-proxy", specifier = "==1.11.0" }, - { name = "libcst", specifier = "==1.8.0" }, + { name = "libcst", specifier = "==1.8.2" }, + { name = "limits", specifier = "==5.4.0" }, { name = "linkify-it-py", specifier = "==2.0.3" }, + { name = "litellm", specifier = "==1.73.6.post1" }, { name = "lockfile", specifier = "==0.12.2" }, + { name = "looker-sdk", specifier = "==25.10.0" }, + { name = "lxml", specifier = "==5.4.0" }, + { name = "lz4", specifier = "==4.4.4" }, { name = "mako", specifier = "==1.3.10" }, + { name = "markdown", specifier = "==3.8.2" }, { name = "markdown-it-py", specifier = "==3.0.0" }, { name = "markupsafe", specifier = "==3.0.2" }, + { name = "marshmallow", specifier = "==3.26.1" }, + { name = "marshmallow-sqlalchemy", specifier = "==1.4.2" }, + { name = "matplotlib-inline", specifier = "==0.1.7" }, { name = "mdurl", specifier = "==0.1.2" }, + { name = "mergedeep", specifier = "==1.3.4" }, { name = "methodtools", specifier = "==0.4.7" }, + { name = "microsoft-kiota-abstractions", specifier = "==1.9.4" }, + { name = "microsoft-kiota-authentication-azure", specifier = "==1.9.4" }, + { name = "microsoft-kiota-http", specifier = "==1.9.4" }, + { name = "microsoft-kiota-serialization-json", specifier = "==1.9.4" }, + { name = "microsoft-kiota-serialization-text", specifier = "==1.9.4" }, + { name = "mistune", specifier = "==3.1.3" }, + { name = "mmh3", specifier = "==5.1.0" }, + { name = "mongomock", specifier = "==4.3.0" }, { name = "more-itertools", specifier = "==10.7.0" }, + { name = "moto", specifier = "==5.1.6" }, + { name = "mpmath", specifier = "==1.3.0" }, + { name = "msal", specifier = "==1.32.3" }, + { name = "msal-extensions", specifier = "==1.3.1" }, + { name = "msgpack", specifier = "==1.1.1" }, + { name = "msgraph-core", specifier = "==1.3.5" }, { name = "msgspec", specifier = "==0.19.0" }, + { name = "msrest", specifier = "==0.7.1" }, + { name = "msrestazure", specifier = "==0.6.4.post1" }, + { name = "multi-key-dict", specifier = "==2.0.3" }, + { name = "multidict", specifier = "==6.6.3" }, + { name = "mypy", specifier = "==1.9.0" }, + { name = "mypy-boto3-appflow", specifier = "==1.39.0" }, + { name = "mypy-boto3-rds", specifier = "==1.39.1" }, + { name = "mypy-boto3-redshift-data", specifier = "==1.39.0" }, + { name = "mypy-boto3-s3", specifier = "==1.39.2" }, + { name = "mypy-extensions", specifier = "==1.1.0" }, + { name = "mysql-connector-python", specifier = "==9.3.0" }, + { name = "mysqlclient", specifier = "==2.2.7" }, + { name = "nbclient", specifier = "==0.10.2" }, + { name = "nbconvert", specifier = "==7.16.6" }, + { name = "nbformat", specifier = "==5.10.4" }, + { name = "neo4j", specifier = "==5.28.1" }, + { name = "nest-asyncio", specifier = "==1.6.0" }, + { name = "networkx", specifier = "==3.4.2" }, + { name = "nh3", specifier = "==0.2.21" }, + { name = "nodeenv", specifier = "==1.9.1" }, + { name = "numpy", specifier = "==1.26.4" }, + { name = "oauthlib", specifier = "==3.3.1" }, + { name = "objsize", specifier = "==0.7.1" }, + { name = "openai", specifier = "==1.93.0" }, + { name = "openapi-schema-validator", specifier = "==0.6.3" }, + { name = "openapi-spec-validator", specifier = "==0.7.2" }, + { name = "opencensus", specifier = "==0.11.4" }, + { name = "opencensus-context", specifier = "==0.1.3" }, + { name = "openlineage-integration-common", specifier = "==1.34.0" }, + { name = "openlineage-python", specifier = "==1.34.0" }, + { name = "openlineage-sql", specifier = "==1.34.0" }, + { name = "openpyxl", specifier = "==3.1.5" }, + { name = "opensearch-py", specifier = "==3.0.0" }, { name = "opentelemetry-api", specifier = "==1.27.0" }, { name = "opentelemetry-exporter-otlp", specifier = "==1.27.0" }, { name = "opentelemetry-exporter-otlp-proto-common", specifier = "==1.27.0" }, { name = "opentelemetry-exporter-otlp-proto-grpc", specifier = "==1.27.0" }, { name = "opentelemetry-exporter-otlp-proto-http", specifier = "==1.27.0" }, + { name = "opentelemetry-exporter-prometheus", specifier = "==0.48b0" }, { name = "opentelemetry-proto", specifier = "==1.27.0" }, { name = "opentelemetry-sdk", specifier = "==1.27.0" }, { name = "opentelemetry-semantic-conventions", specifier = "==0.48b0" }, - { name = "packaging", specifier = "==24.2" }, + { name = "opsgenie-sdk", specifier = "==2.1.5" }, + { name = "oracledb", specifier = "==3.2.0" }, + { name = "ordered-set", specifier = "==4.1.0" }, + { name = "orjson", specifier = "==3.10.18" }, + { name = "oss2", specifier = "==2.19.1" }, + { name = "packaging", specifier = "==25.0" }, + { name = "pagerduty", specifier = "==2.3.0" }, + { name = "pandas", specifier = "==2.1.4" }, + { name = "pandas-gbq", specifier = "==0.29.1" }, + { name = "pandas-stubs", specifier = "==2.3.0.250703" }, + { name = "pandocfilters", specifier = "==1.5.1" }, + { name = "papermill", specifier = "==2.6.0" }, + { name = "paramiko", specifier = "==3.5.1" }, + { name = "parso", specifier = "==0.8.4" }, + { name = "pathable", specifier = "==0.4.4" }, { name = "pathspec", specifier = "==0.12.1" }, + { name = "pbr", specifier = "==6.1.1" }, + { name = "pdbr", specifier = "==0.9.2" }, + { name = "pdpyras", specifier = "==5.4.1" }, { name = "pendulum", specifier = "==3.1.0" }, + { name = "pexpect", specifier = "==4.9.0" }, + { name = "pgvector", specifier = "==0.4.1" }, + { name = "pinecone", specifier = "==7.0.1" }, + { name = "pinecone-plugin-assistant", specifier = "==1.7.0" }, + { name = "pinecone-plugin-interface", specifier = "==0.0.7" }, + { name = "pinotdb", specifier = "==5.6.0" }, + { name = "pipdeptree", specifier = "==2.26.1" }, + { name = "platformdirs", specifier = "==4.3.8" }, { name = "pluggy", specifier = "==1.6.0" }, + { name = "ply", specifier = "==3.11" }, + { name = "plyvel", specifier = "==1.5.1" }, + { name = "polars", specifier = "==1.31.0" }, + { name = "portalocker", specifier = "==2.10.1" }, + { name = "pprintpp", specifier = "==0.4.0" }, + { name = "pre-commit", specifier = "==4.2.0" }, + { name = "pre-commit-uv", specifier = "==4.1.4" }, + { name = "presto-python-client", specifier = "==0.8.4" }, + { name = "prison", specifier = "==0.2.1" }, + { name = "prometheus-client", specifier = "==0.22.1" }, + { name = "prompt-toolkit", specifier = "==3.0.51" }, + { name = "propcache", specifier = "==0.3.2" }, + { name = "proto-plus", specifier = "==1.26.1" }, { name = "protobuf", specifier = "==4.25.8" }, { name = "psutil", specifier = "==7.0.0" }, + { name = "psycopg2-binary", specifier = "==2.9.10" }, + { name = "ptyprocess", specifier = "==0.7.0" }, + { name = "pure-eval", specifier = "==0.2.3" }, + { name = "pure-sasl", specifier = "==0.6.2" }, + { name = "py-partiql-parser", specifier = "==0.6.1" }, + { name = "py-spy", specifier = "==0.4.0" }, + { name = "py4j", specifier = "==0.10.9.9" }, + { name = "pyarrow", specifier = "==16.1.0" }, + { name = "pyarrow-hotfix", specifier = "==0.7" }, + { name = "pyasn1", specifier = "==0.6.1" }, + { name = "pyasn1-modules", specifier = "==0.4.1" }, + { name = "pyathena", specifier = "==3.14.1" }, + { name = "pycountry", specifier = "==24.6.1" }, { name = "pycparser", specifier = "==2.22" }, - { name = "pydantic", specifier = "==2.11.5" }, + { name = "pycryptodome", specifier = "==3.23.0" }, + { name = "pydantic", specifier = "==2.11.7" }, { name = "pydantic-core", specifier = "==2.33.2" }, - { name = "pygments", specifier = "==2.19.1" }, + { name = "pydata-google-auth", specifier = "==1.9.1" }, + { name = "pydot", specifier = "==1.4.2" }, + { name = "pydruid", specifier = "==0.6.9" }, + { name = "pyenchant", specifier = "==3.2.2" }, + { name = "pyexasol", specifier = "==0.27.0" }, + { name = "pygithub", specifier = "==2.6.1" }, + { name = "pygments", specifier = "==2.19.2" }, + { name = "pygraphviz", specifier = "==1.14" }, + { name = "pyhive", specifier = "==0.7.0" }, + { name = "pyiceberg", specifier = "==0.9.1" }, + { name = "pyjsparser", specifier = "==2.7.1" }, { name = "pyjwt", specifier = "==2.10.1" }, + { name = "pykerberos", specifier = "==1.2.4" }, + { name = "pymongo", specifier = "==4.10.1" }, + { name = "pymssql", specifier = "==2.3.6" }, + { name = "pymysql", specifier = "==1.1.1" }, + { name = "pynacl", specifier = "==1.5.0" }, + { name = "pyodbc", specifier = "==5.2.0" }, + { name = "pyodps", specifier = "==0.12.4" }, + { name = "pyopenssl", specifier = "==25.1.0" }, + { name = "pyparsing", specifier = "==3.2.3" }, + { name = "pypsrp", specifier = "==0.8.1" }, + { name = "pyspark", specifier = "==4.0.0" }, + { name = "pyspnego", specifier = "==0.11.2" }, + { name = "pytest", specifier = "==8.4.1" }, + { name = "pytest-asyncio", specifier = "==0.25.0" }, + { name = "pytest-cov", specifier = "==6.2.1" }, + { name = "pytest-custom-exit-code", specifier = "==0.3.0" }, + { name = "pytest-icdiff", specifier = "==0.9" }, + { name = "pytest-instafail", specifier = "==0.5.0" }, + { name = "pytest-mock", specifier = "==3.14.1" }, + { name = "pytest-rerunfailures", specifier = "==15.1" }, + { name = "pytest-timeouts", specifier = "==1.2.1" }, + { name = "pytest-unordered", specifier = "==0.7.0" }, + { name = "pytest-xdist", specifier = "==3.8.0" }, + { name = "python-arango", specifier = "==8.2.0" }, { name = "python-daemon", specifier = "==3.1.2" }, { name = "python-dateutil", specifier = "==2.9.0.post0" }, - { name = "python-dotenv", specifier = "==1.1.0" }, + { name = "python-dotenv", specifier = "==1.1.1" }, + { name = "python-http-client", specifier = "==3.3.7" }, + { name = "python-jenkins", specifier = "==1.8.2" }, + { name = "python-ldap", specifier = "==3.4.4" }, { name = "python-multipart", specifier = "==0.0.20" }, + { name = "python-on-whales", specifier = "==0.77.0" }, { name = "python-slugify", specifier = "==8.0.4" }, + { name = "python-telegram-bot", specifier = "==22.2" }, + { name = "python3-saml", specifier = "==1.16.0" }, { name = "pytz", specifier = "==2025.2" }, + { name = "pywinrm", specifier = "==0.5.0" }, { name = "pyyaml", specifier = "==6.0.2" }, + { name = "pyzmq", specifier = "==27.0.0" }, + { name = "qdrant-client", specifier = "==1.14.3" }, + { name = "ray", specifier = "==2.42.0" }, + { name = "reactivex", specifier = "==4.0.4" }, + { name = "readme-renderer", specifier = "==44.0" }, + { name = "redis", specifier = "==5.2.1" }, + { name = "redshift-connector", specifier = "==2.1.8" }, { name = "referencing", specifier = "==0.36.2" }, - { name = "requests", specifier = "==2.32.3" }, + { name = "regex", specifier = "==2024.11.6" }, + { name = "requests", specifier = "==2.32.4" }, + { name = "requests-file", specifier = "==2.1.0" }, + { name = "requests-kerberos", specifier = "==0.15.0" }, + { name = "requests-mock", specifier = "==1.12.1" }, + { name = "requests-ntlm", specifier = "==1.3.0" }, + { name = "requests-oauthlib", specifier = "==2.0.0" }, + { name = "requests-toolbelt", specifier = "==1.0.0" }, + { name = "responses", specifier = "==0.25.7" }, + { name = "restructuredtext-lint", specifier = "==1.4.0" }, { name = "retryhttp", specifier = "==1.3.3" }, + { name = "rfc3339-validator", specifier = "==0.1.4" }, + { name = "rfc3986", specifier = "==2.0.0" }, { name = "rich", specifier = "==13.9.4" }, { name = "rich-argparse", specifier = "==1.7.1" }, - { name = "rich-toolkit", specifier = "==0.14.7" }, - { name = "rpds-py", specifier = "==0.25.1" }, + { name = "rich-click", specifier = "==1.8.9" }, + { name = "rich-toolkit", specifier = "==0.14.8" }, + { name = "rpds-py", specifier = "==0.26.0" }, + { name = "rsa", specifier = "==4.9.1" }, + { name = "ruamel-yaml", specifier = "==0.18.14" }, + { name = "ruamel-yaml-clib", specifier = "==0.2.12" }, + { name = "ruff", specifier = "==0.11.2" }, + { name = "s3fs", specifier = "==2025.5.1" }, + { name = "s3transfer", specifier = "==0.13.0" }, + { name = "sagemaker-studio", specifier = "==1.0.16" }, + { name = "scikit-learn", specifier = "==1.5.2" }, + { name = "scipy", specifier = "==1.15.3" }, + { name = "scramp", specifier = "==1.4.5" }, + { name = "scrapbook", specifier = "==0.5.0" }, + { name = "secretstorage", specifier = "==3.3.3" }, + { name = "semver", specifier = "==3.0.4" }, + { name = "sendgrid", specifier = "==6.12.4" }, + { name = "sentinels", specifier = "==1.0.0" }, + { name = "sentry-sdk", specifier = "==2.32.0" }, { name = "setproctitle", specifier = "==1.3.6" }, + { name = "shapely", specifier = "==2.1.1" }, { name = "shellingham", specifier = "==1.5.4" }, + { name = "simple-salesforce", specifier = "==1.12.6" }, { name = "six", specifier = "==1.17.0" }, + { name = "slack-sdk", specifier = "==3.35.0" }, + { name = "smart-open", specifier = "==7.3.0.post1" }, + { name = "smbprotocol", specifier = "==1.15.0" }, + { name = "smmap", specifier = "==5.0.2" }, { name = "sniffio", specifier = "==1.3.1" }, + { name = "snowballstemmer", specifier = "==3.0.1" }, + { name = "snowflake-connector-python", specifier = "==3.16.0" }, + { name = "snowflake-snowpark-python", specifier = "==1.33.0" }, + { name = "snowflake-sqlalchemy", specifier = "==1.7.5" }, + { name = "sortedcontainers", specifier = "==2.4.0" }, + { name = "soupsieve", specifier = "==2.7" }, + { name = "sphinx", specifier = "==8.1.3" }, + { name = "sphinx-argparse", specifier = "==0.5.2" }, + { name = "sphinx-autoapi", specifier = "==3.6.0" }, + { name = "sphinx-autobuild", specifier = "==2024.10.3" }, + { name = "sphinx-copybutton", specifier = "==0.5.2" }, + { name = "sphinx-design", specifier = "==0.6.1" }, + { name = "sphinx-jinja", specifier = "==2.0.2" }, + { name = "sphinx-rtd-theme", specifier = "==3.0.2" }, + { name = "sphinxcontrib-applehelp", specifier = "==2.0.0" }, + { name = "sphinxcontrib-devhelp", specifier = "==2.0.0" }, + { name = "sphinxcontrib-htmlhelp", specifier = "==2.1.0" }, + { name = "sphinxcontrib-httpdomain", specifier = "==1.8.1" }, + { name = "sphinxcontrib-jquery", specifier = "==4.1" }, + { name = "sphinxcontrib-jsmath", specifier = "==1.0.1" }, + { name = "sphinxcontrib-qthelp", specifier = "==2.0.0" }, + { name = "sphinxcontrib-redoc", specifier = "==1.6.0" }, + { name = "sphinxcontrib-serializinghtml", specifier = "==2.0.0" }, + { name = "sphinxcontrib-spelling", specifier = "==8.0.1" }, + { name = "spython", specifier = "==0.3.14" }, { name = "sqlalchemy", specifier = "==1.4.54" }, + { name = "sqlalchemy-bigquery", specifier = "==1.15.0" }, + { name = "sqlalchemy-drill", specifier = "==1.1.9" }, { name = "sqlalchemy-jsonfield", specifier = "==1.0.2" }, + { name = "sqlalchemy-spanner", specifier = "==1.14.0" }, { name = "sqlalchemy-utils", specifier = "==0.41.2" }, { name = "sqlparse", specifier = "==0.5.3" }, + { name = "sshtunnel", specifier = "==0.4.0" }, + { name = "stack-data", specifier = "==0.6.3" }, + { name = "starkbank-ecdsa", specifier = "==2.2.0" }, { name = "starlette", specifier = "==0.46.2" }, + { name = "statsd", specifier = "==4.0.1" }, + { name = "std-uritemplate", specifier = "==2.0.5" }, + { name = "strictyaml", specifier = "==1.7.3" }, { name = "structlog", specifier = "==25.4.0" }, { name = "svcs", specifier = "==25.1.0" }, + { name = "sympy", specifier = "==1.14.0" }, + { name = "tableauserverclient", specifier = "==0.38" }, { name = "tabulate", specifier = "==0.9.0" }, { name = "tenacity", specifier = "==9.1.2" }, + { name = "teradatasql", specifier = "==20.0.0.32" }, + { name = "teradatasqlalchemy", specifier = "==20.0.0.6" }, { name = "termcolor", specifier = "==3.1.0" }, { name = "text-unidecode", specifier = "==1.3" }, + { name = "threadpoolctl", specifier = "==3.6.0" }, + { name = "thrift", specifier = "==0.16.0" }, + { name = "thrift-sasl", specifier = "==0.4.3" }, + { name = "tiktoken", specifier = "==0.9.0" }, + { name = "time-machine", specifier = "==2.16.0" }, + { name = "tinycss2", specifier = "==1.4.0" }, + { name = "tokenizers", specifier = "==0.21.2" }, { name = "tomli", specifier = "==2.2.1" }, + { name = "tomli-w", specifier = "==1.2.0" }, + { name = "tomlkit", specifier = "==0.13.3" }, + { name = "tornado", specifier = "==6.5.1" }, + { name = "towncrier", specifier = "==24.8.0" }, + { name = "tqdm", specifier = "==4.67.1" }, + { name = "traitlets", specifier = "==5.14.3" }, + { name = "trino", specifier = "==0.335.0" }, + { name = "trove-classifiers", specifier = "==2025.5.9.12" }, + { name = "twine", specifier = "==6.1.0" }, { name = "typer", specifier = "==0.16.0" }, - { name = "types-requests", specifier = "==2.32.0.20250602" }, + { name = "types-aiofiles", specifier = "==24.1.0.20250606" }, + { name = "types-certifi", specifier = "==2021.10.8.3" }, + { name = "types-cffi", specifier = "==1.17.0.20250523" }, + { name = "types-croniter", specifier = "==6.0.0.20250626" }, + { name = "types-deprecated", specifier = "==1.2.15.20250304" }, + { name = "types-docutils", specifier = "==0.21.0.20250604" }, + { name = "types-markdown", specifier = "==3.8.0.20250415" }, + { name = "types-paramiko", specifier = "==3.5.0.20250516" }, + { name = "types-protobuf", specifier = "==6.30.2.20250703" }, + { name = "types-pymysql", specifier = "==1.1.0.20250516" }, + { name = "types-pyopenssl", specifier = "==24.1.0.20240722" }, + { name = "types-python-dateutil", specifier = "==2.9.0.20250516" }, + { name = "types-python-slugify", specifier = "==8.0.2.20240310" }, + { name = "types-pytz", specifier = "==2025.2.0.20250516" }, + { name = "types-pyyaml", specifier = "==6.0.12.20250516" }, + { name = "types-redis", specifier = "==4.6.0.20241004" }, + { name = "types-requests", specifier = "==2.32.4.20250611" }, + { name = "types-setuptools", specifier = "==80.9.0.20250529" }, + { name = "types-tabulate", specifier = "==0.9.0.20241207" }, + { name = "types-toml", specifier = "==0.10.8.20240310" }, { name = "typing-extensions", specifier = "==4.13.2" }, + { name = "typing-inspect", specifier = "==0.9.0" }, { name = "typing-inspection", specifier = "==0.4.1" }, { name = "tzdata", specifier = "==2025.2" }, + { name = "tzlocal", specifier = "==5.3.1" }, { name = "uc-micro-py", specifier = "==1.0.3" }, { name = "universal-pathlib", specifier = "==0.2.6" }, - { name = "urllib3", specifier = "==2.4.0" }, - { name = "uuid6", specifier = "==2024.7.10" }, - { name = "uv", specifier = "==0.7.8" }, - { name = "uvicorn", specifier = "==0.34.3" }, + { name = "uritemplate", specifier = "==4.2.0" }, + { name = "urllib3", specifier = "==2.5.0" }, + { name = "userpath", specifier = "==1.9.2" }, + { name = "uuid6", specifier = "==2025.0.0" }, + { name = "uv", specifier = "==0.7.19" }, + { name = "uvicorn", specifier = "==0.35.0" }, { name = "uvloop", specifier = "==0.21.0" }, - { name = "watchfiles", specifier = "==1.0.5" }, + { name = "validators", specifier = "==0.34.0" }, + { name = "vertica-python", specifier = "==1.4.0" }, + { name = "vine", specifier = "==5.1.0" }, + { name = "virtualenv", specifier = "==20.31.2" }, + { name = "watchfiles", specifier = "==1.1.0" }, + { name = "watchtower", specifier = "==3.4.0" }, + { name = "wcwidth", specifier = "==0.2.13" }, + { name = "weaviate-client", specifier = "==4.9.6" }, + { name = "webencodings", specifier = "==0.5.1" }, + { name = "websocket-client", specifier = "==1.8.0" }, { name = "websockets", specifier = "==14.2" }, { name = "werkzeug", specifier = "==2.2.3" }, { name = "wirerope", specifier = "==1.0.0" }, { name = "wrapt", specifier = "==1.17.2" }, - { name = "zipp", specifier = "==3.22.0" }, + { name = "wtforms", specifier = "==3.2.1" }, + { name = "xmlsec", specifier = "==1.3.14" }, + { name = "xmltodict", specifier = "==0.14.2" }, + { name = "yamllint", specifier = "==1.37.1" }, + { name = "yandex-query-client", specifier = "==0.1.4" }, + { name = "yandexcloud", specifier = "==0.328.0" }, + { name = "yarl", specifier = "==1.20.1" }, + { name = "ydb", specifier = "==3.21.6" }, + { name = "ydb-dbapi", specifier = "==0.1.12" }, + { name = "zeep", specifier = "==4.3.1" }, + { name = "zenpy", specifier = "==2.0.56" }, + { name = "zipp", specifier = "==3.23.0" }, + { name = "zope-event", specifier = "==5.1" }, + { name = "zope-interface", specifier = "==7.2" }, + { name = "zstandard", specifier = "==0.23.0" }, ] [[package]] name = "a2wsgi" -version = "1.10.8" +version = "1.10.10" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ab/76/0823bd7f0ac429489d19e8c03e9a5a7856e6c2c561e641cc62f54ec4ea04/a2wsgi-1.10.8.tar.gz", hash = "sha256:fc00bab1fc792f89a8ce1b491b2ad1717b145d8caefb75d0a8586946edc97cb2", size = 18729, upload-time = "2025-01-06T02:10:15.023Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/cb/822c56fbea97e9eee201a2e434a80437f6750ebcb1ed307ee3a0a7505b14/a2wsgi-1.10.10.tar.gz", hash = "sha256:a5bcffb52081ba39df0d5e9a884fc6f819d92e3a42389343ba77cbf809fe1f45", size = 18799, upload-time = "2025-06-18T09:00:10.843Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/55/54/1e14731678ec375875c65df3d020714361230d3b8aa8188d2290d07dabe4/a2wsgi-1.10.8-py3-none-any.whl", hash = "sha256:7fbdb3ef81ea46e6bbd0dcadc1ff9a7919197626c50c303ecafe400ce8099ad0", size = 17328, upload-time = "2025-01-06T02:10:12.801Z" }, + { url = "https://files.pythonhosted.org/packages/02/d5/349aba3dc421e73cbd4958c0ce0a4f1aa3a738bc0d7de75d2f40ed43a535/a2wsgi-1.10.10-py3-none-any.whl", hash = "sha256:d2b21379479718539dc15fce53b876251a0efe7615352dfe49f6ad1bc507848d", size = 17389, upload-time = "2025-06-18T09:00:09.676Z" }, ] [[package]] @@ -149,7 +824,7 @@ wheels = [ [[package]] name = "aiohttp" -version = "3.12.12" +version = "3.12.13" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohappyeyeballs" }, @@ -161,49 +836,38 @@ dependencies = [ { name = "propcache" }, { name = "yarl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f2/84/ea27e6ad14747d8c51afe201fb88a5c8282b6278256d30a6f71f730add88/aiohttp-3.12.12.tar.gz", hash = "sha256:05875595d2483d96cb61fa9f64e75262d7ac6251a7e3c811d8e26f7d721760bd", size = 7818643, upload-time = "2025-06-10T05:22:00.247Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/d9/cfde93b9cb75253c716b8b1c773565209e3d4dd0772dd3ce3a2adcaa4639/aiohttp-3.12.12-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6f25e9d274d6abbb15254f76f100c3984d6b9ad6e66263cc60a465dd5c7e48f5", size = 702071, upload-time = "2025-06-10T05:18:23.986Z" }, - { url = "https://files.pythonhosted.org/packages/ee/b0/46e38b8bc0bc645317deec32612af922ad9bafd85a1df255a67c2f2305f6/aiohttp-3.12.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b8ec3c1a1c13d24941b5b913607e57b9364e4c0ea69d5363181467492c4b2ba6", size = 478436, upload-time = "2025-06-10T05:18:28.411Z" }, - { url = "https://files.pythonhosted.org/packages/8f/47/9c83db7f02ca71eb99a707ee13657fc24ba703b9babc59000c1f58ac1198/aiohttp-3.12.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81ef2f9253c327c211cb7b06ea2edd90e637cf21c347b894d540466b8d304e08", size = 466213, upload-time = "2025-06-10T05:18:30.706Z" }, - { url = "https://files.pythonhosted.org/packages/31/fe/4690c112e269e06c9182c32eeb43f3a95c4f203fdb095502717327993b80/aiohttp-3.12.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28ded835c3663fd41c9ad44685811b11e34e6ac9a7516a30bfce13f6abba4496", size = 1648258, upload-time = "2025-06-10T05:18:32.498Z" }, - { url = "https://files.pythonhosted.org/packages/c8/1f/dacca6c7bbe69c77d8535d7a672478803e7078cc20fd9993fe09aa5be880/aiohttp-3.12.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a4b78ccf254fc10605b263996949a94ca3f50e4f9100e05137d6583e266b711e", size = 1622316, upload-time = "2025-06-10T05:18:34.357Z" }, - { url = "https://files.pythonhosted.org/packages/ff/65/5ef47708f70524fcdecda735e0aea06e0feb7b8679e976e9bd1e7900f4c0/aiohttp-3.12.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f4a5af90d5232c41bb857568fe7d11ed84408653ec9da1ff999cc30258b9bd1", size = 1694723, upload-time = "2025-06-10T05:18:36.858Z" }, - { url = "https://files.pythonhosted.org/packages/18/62/ab32bfa59f61292e4096c383316863e10001eec30e5b4b314856ed7156e2/aiohttp-3.12.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffa5205c2f53f1120e93fdf2eca41b0f6344db131bc421246ee82c1e1038a14a", size = 1737037, upload-time = "2025-06-10T05:18:39.663Z" }, - { url = "https://files.pythonhosted.org/packages/c1/b9/8b8f793081311e4f63aea63003a519064048e406c627c0454d6ed09dbc99/aiohttp-3.12.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f68301660f0d7a3eddfb84f959f78a8f9db98c76a49b5235508fa16edaad0f7c", size = 1641701, upload-time = "2025-06-10T05:18:41.666Z" }, - { url = "https://files.pythonhosted.org/packages/1a/5c/72f510d42d626463b526345dcb8d14b390de89a9ba27a4717b518460bcd4/aiohttp-3.12.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db874d3b0c92fdbb553751af9d2733b378c25cc83cd9dfba87f12fafd2dc9cd5", size = 1581824, upload-time = "2025-06-10T05:18:44.136Z" }, - { url = "https://files.pythonhosted.org/packages/61/6f/9378c9e1543d1c800ca040e21cd333b8f923ed051ae82b5a49ad96a6ac71/aiohttp-3.12.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5e53cf9c201b45838a2d07b1f2d5f7fec9666db7979240002ce64f9b8a1e0cf2", size = 1625674, upload-time = "2025-06-10T05:18:46.716Z" }, - { url = "https://files.pythonhosted.org/packages/bb/85/4eef9bd52b497a405c88469cc099f4d15d33b149b5746ca4ef8ec6ab6388/aiohttp-3.12.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:8687cc5f32b4e328c233acd387d09a1b477007896b2f03c1c823a0fd05f63883", size = 1636460, upload-time = "2025-06-10T05:18:49.305Z" }, - { url = "https://files.pythonhosted.org/packages/56/59/d8e954830b375fd658843cf7d88d27ca5e38dd5fcbfe62db3d1ba415d0fe/aiohttp-3.12.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5ee537ad29de716a3d8dc46c609908de0c25ffeebf93cd94a03d64cdc07d66d0", size = 1611912, upload-time = "2025-06-10T05:18:51.694Z" }, - { url = "https://files.pythonhosted.org/packages/c3/5d/d0096a02f0515a38dff67db42d966273a12d17fc895e91466bfb4ab3875e/aiohttp-3.12.12-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:411f821be5af6af11dc5bed6c6c1dc6b6b25b91737d968ec2756f9baa75e5f9b", size = 1691498, upload-time = "2025-06-10T05:18:54.36Z" }, - { url = "https://files.pythonhosted.org/packages/87/8d/d3a02397a6345c06623ae4648e2aef18fced858510b4a89d7262cfa4c683/aiohttp-3.12.12-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f90319d94cf5f9786773237f24bd235a7b5959089f1af8ec1154580a3434b503", size = 1714737, upload-time = "2025-06-10T05:18:56.806Z" }, - { url = "https://files.pythonhosted.org/packages/a9/40/b81000bf07c96db878703ea3dc561393d82441597729910459a8e06acc9a/aiohttp-3.12.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73b148e606f34e9d513c451fd65efe1091772659ca5703338a396a99f60108ff", size = 1643078, upload-time = "2025-06-10T05:18:59.33Z" }, - { url = "https://files.pythonhosted.org/packages/41/e5/31830642ce2c6d3dba74ed8a94933213df5e1651c1e8b4efc81cc88105ab/aiohttp-3.12.12-cp310-cp310-win32.whl", hash = "sha256:d40e7bfd577fdc8a92b72f35dfbdd3ec90f1bc8a72a42037fefe34d4eca2d4a1", size = 427517, upload-time = "2025-06-10T05:19:01.535Z" }, - { url = "https://files.pythonhosted.org/packages/55/9d/a4e5379d44679e5f8d7d7ebecb0dae8cafab95176c4e753da6bc4b4aebb5/aiohttp-3.12.12-cp310-cp310-win_amd64.whl", hash = "sha256:65c7804a2343893d6dea9fce69811aea0a9ac47f68312cf2e3ee1668cd9a387f", size = 450725, upload-time = "2025-06-10T05:19:03.874Z" }, -] - -[[package]] -name = "aiologic" -version = "0.14.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "wrapt" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7e/2d/e893dcfa041dab1d045abfc8898239747cde19881796640861609138d360/aiologic-0.14.0.tar.gz", hash = "sha256:c87925fa2bfe9ae292859e1094eb8fb6d456c8202a16405b0a44134803c8a791", size = 54275, upload-time = "2025-02-12T14:45:31.414Z" } +sdist = { url = "https://files.pythonhosted.org/packages/42/6e/ab88e7cb2a4058bed2f7870276454f85a7c56cd6da79349eb314fc7bbcaa/aiohttp-3.12.13.tar.gz", hash = "sha256:47e2da578528264a12e4e3dd8dd72a7289e5f812758fe086473fab037a10fcce", size = 7819160, upload-time = "2025-06-14T15:15:41.354Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/1f/f797b684fb4e11a5066ab464b460b5cfdbaedea9c4a3d0f0afc8e894ada0/aiologic-0.14.0-py3-none-any.whl", hash = "sha256:cc59d39dc1d5e2575b4a6b5faf678b551fb0f910c7cb42e4c5f5689ffedcce78", size = 44516, upload-time = "2025-02-12T14:45:27.835Z" }, + { url = "https://files.pythonhosted.org/packages/8b/2d/27e4347660723738b01daa3f5769d56170f232bf4695dd4613340da135bb/aiohttp-3.12.13-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5421af8f22a98f640261ee48aae3a37f0c41371e99412d55eaf2f8a46d5dad29", size = 702090, upload-time = "2025-06-14T15:12:58.938Z" }, + { url = "https://files.pythonhosted.org/packages/10/0b/4a8e0468ee8f2b9aff3c05f2c3a6be1dfc40b03f68a91b31041d798a9510/aiohttp-3.12.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fcda86f6cb318ba36ed8f1396a6a4a3fd8f856f84d426584392083d10da4de0", size = 478440, upload-time = "2025-06-14T15:13:02.981Z" }, + { url = "https://files.pythonhosted.org/packages/b9/c8/2086df2f9a842b13feb92d071edf756be89250f404f10966b7bc28317f17/aiohttp-3.12.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cd71c9fb92aceb5a23c4c39d8ecc80389c178eba9feab77f19274843eb9412d", size = 466215, upload-time = "2025-06-14T15:13:04.817Z" }, + { url = "https://files.pythonhosted.org/packages/a7/3d/d23e5bd978bc8012a65853959b13bd3b55c6e5afc172d89c26ad6624c52b/aiohttp-3.12.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34ebf1aca12845066c963016655dac897651e1544f22a34c9b461ac3b4b1d3aa", size = 1648271, upload-time = "2025-06-14T15:13:06.532Z" }, + { url = "https://files.pythonhosted.org/packages/31/31/e00122447bb137591c202786062f26dd383574c9f5157144127077d5733e/aiohttp-3.12.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:893a4639694c5b7edd4bdd8141be296042b6806e27cc1d794e585c43010cc294", size = 1622329, upload-time = "2025-06-14T15:13:08.394Z" }, + { url = "https://files.pythonhosted.org/packages/04/01/caef70be3ac38986969045f21f5fb802ce517b3f371f0615206bf8aa6423/aiohttp-3.12.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:663d8ee3ffb3494502ebcccb49078faddbb84c1d870f9c1dd5a29e85d1f747ce", size = 1694734, upload-time = "2025-06-14T15:13:09.979Z" }, + { url = "https://files.pythonhosted.org/packages/3f/15/328b71fedecf69a9fd2306549b11c8966e420648a3938d75d3ed5bcb47f6/aiohttp-3.12.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0f8f6a85a0006ae2709aa4ce05749ba2cdcb4b43d6c21a16c8517c16593aabe", size = 1737049, upload-time = "2025-06-14T15:13:11.672Z" }, + { url = "https://files.pythonhosted.org/packages/e6/7a/d85866a642158e1147c7da5f93ad66b07e5452a84ec4258e5f06b9071e92/aiohttp-3.12.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1582745eb63df267c92d8b61ca655a0ce62105ef62542c00a74590f306be8cb5", size = 1641715, upload-time = "2025-06-14T15:13:13.548Z" }, + { url = "https://files.pythonhosted.org/packages/14/57/3588800d5d2f5f3e1cb6e7a72747d1abc1e67ba5048e8b845183259c2e9b/aiohttp-3.12.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d59227776ee2aa64226f7e086638baa645f4b044f2947dbf85c76ab11dcba073", size = 1581836, upload-time = "2025-06-14T15:13:15.086Z" }, + { url = "https://files.pythonhosted.org/packages/2f/55/c913332899a916d85781aa74572f60fd98127449b156ad9c19e23135b0e4/aiohttp-3.12.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06b07c418bde1c8e737d8fa67741072bd3f5b0fb66cf8c0655172188c17e5fa6", size = 1625685, upload-time = "2025-06-14T15:13:17.163Z" }, + { url = "https://files.pythonhosted.org/packages/4c/34/26cded195f3bff128d6a6d58d7a0be2ae7d001ea029e0fe9008dcdc6a009/aiohttp-3.12.13-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:9445c1842680efac0f81d272fd8db7163acfcc2b1436e3f420f4c9a9c5a50795", size = 1636471, upload-time = "2025-06-14T15:13:19.086Z" }, + { url = "https://files.pythonhosted.org/packages/19/21/70629ca006820fccbcec07f3cd5966cbd966e2d853d6da55339af85555b9/aiohttp-3.12.13-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:09c4767af0b0b98c724f5d47f2bf33395c8986995b0a9dab0575ca81a554a8c0", size = 1611923, upload-time = "2025-06-14T15:13:20.997Z" }, + { url = "https://files.pythonhosted.org/packages/31/80/7fa3f3bebf533aa6ae6508b51ac0de9965e88f9654fa679cc1a29d335a79/aiohttp-3.12.13-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f3854fbde7a465318ad8d3fc5bef8f059e6d0a87e71a0d3360bb56c0bf87b18a", size = 1691511, upload-time = "2025-06-14T15:13:22.54Z" }, + { url = "https://files.pythonhosted.org/packages/0f/7a/359974653a3cdd3e9cee8ca10072a662c3c0eb46a359c6a1f667b0296e2f/aiohttp-3.12.13-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2332b4c361c05ecd381edb99e2a33733f3db906739a83a483974b3df70a51b40", size = 1714751, upload-time = "2025-06-14T15:13:24.366Z" }, + { url = "https://files.pythonhosted.org/packages/2d/24/0aa03d522171ce19064347afeefadb008be31ace0bbb7d44ceb055700a14/aiohttp-3.12.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1561db63fa1b658cd94325d303933553ea7d89ae09ff21cc3bcd41b8521fbbb6", size = 1643090, upload-time = "2025-06-14T15:13:26.231Z" }, + { url = "https://files.pythonhosted.org/packages/86/2e/7d4b0026a41e4b467e143221c51b279083b7044a4b104054f5c6464082ff/aiohttp-3.12.13-cp310-cp310-win32.whl", hash = "sha256:a0be857f0b35177ba09d7c472825d1b711d11c6d0e8a2052804e3b93166de1ad", size = 427526, upload-time = "2025-06-14T15:13:27.988Z" }, + { url = "https://files.pythonhosted.org/packages/17/de/34d998da1e7f0de86382160d039131e9b0af1962eebfe53dda2b61d250e7/aiohttp-3.12.13-cp310-cp310-win_amd64.whl", hash = "sha256:fcc30ad4fb5cb41a33953292d45f54ef4066746d625992aeac33b8c681173178", size = 450734, upload-time = "2025-06-14T15:13:29.394Z" }, ] [[package]] name = "aiosignal" -version = "1.3.2" +version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "frozenlist" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ba/b5/6d55e80f6d8a08ce22b982eafa278d823b541c925f11ee774b0b9c43473d/aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54", size = 19424, upload-time = "2024-12-13T17:10:40.86Z" } +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/6a/bc7e17a3e87a2985d3e8f4da4cd0f481060eb78fb08596c42be62c90a4d9/aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5", size = 7597, upload-time = "2024-12-13T17:10:38.469Z" }, + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, ] [[package]] @@ -220,7 +884,7 @@ wheels = [ [[package]] name = "alembic" -version = "1.16.1" +version = "1.16.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mako" }, @@ -228,9 +892,9 @@ dependencies = [ { name = "tomli" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/20/89/bfb4fe86e3fc3972d35431af7bedbc60fa606e8b17196704a1747f7aa4c3/alembic-1.16.1.tar.gz", hash = "sha256:43d37ba24b3d17bc1eb1024fe0f51cd1dc95aeb5464594a02c6bb9ca9864bfa4", size = 1955006, upload-time = "2025-05-21T23:11:05.991Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/35/116797ff14635e496bbda0c168987f5326a6555b09312e9b817e360d1f56/alembic-1.16.2.tar.gz", hash = "sha256:e53c38ff88dadb92eb22f8b150708367db731d58ad7e9d417c9168ab516cbed8", size = 1963563, upload-time = "2025-06-16T18:05:08.566Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/59/565286efff3692c5716c212202af61466480f6357c4ae3089d4453bff1f3/alembic-1.16.1-py3-none-any.whl", hash = "sha256:0cdd48acada30d93aa1035767d67dff25702f8de74d7c3919f2e8492c8db2e67", size = 242488, upload-time = "2025-05-21T23:11:07.783Z" }, + { url = "https://files.pythonhosted.org/packages/dd/e2/88e425adac5ad887a087c38d04fe2030010572a3e0e627f8a6e8c33eeda8/alembic-1.16.2-py3-none-any.whl", hash = "sha256:5f42e9bd0afdbd1d5e3ad856c01754530367debdebf21ed6894e34af52b3bb03", size = 242717, upload-time = "2025-06-16T18:05:10.27Z" }, ] [[package]] @@ -259,20 +923,20 @@ wheels = [ [[package]] name = "apache-airflow" -version = "3.0.2" +version = "3.0.3rc3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "apache-airflow-core" }, { name = "apache-airflow-task-sdk" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4e/0a/fb1b5389ee6bcce68940616d7398e3d22e30c4efcecee32e16c82ea3d6ec/apache_airflow-3.0.2.tar.gz", hash = "sha256:1e8c54cfac51f16216b19c78843558ac93fd2019871e22a484697b496b4268fc", size = 27279, upload-time = "2025-06-10T14:33:09.556Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/ef/aba1d2f0b22b50820814125cb29db45c1aec86e47bf618e4b9c152d0b43a/apache_airflow-3.0.3rc3.tar.gz", hash = "sha256:1839e962c305511f65fcafa9139416ec7388ef5ee48bf0b759e7fe320c71064c", size = 27313, upload-time = "2025-07-04T13:20:57.176Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/c8/e5135ee8e263d9f1eae5c9258b4f35924eb5d8f8b883b03a4923453ae9af/apache_airflow-3.0.2-py3-none-any.whl", hash = "sha256:e598464d5fc14c589999922151bdc6b4f7541aa716e623b2c56d3cbc74e1753d", size = 12164, upload-time = "2025-06-10T14:33:03.265Z" }, + { url = "https://files.pythonhosted.org/packages/a0/11/07d23c19baceb625796c7d16324eea1928020c6381592fa649645a3a7361/apache_airflow-3.0.3rc3-py3-none-any.whl", hash = "sha256:64a1e5ba766a197fc2301760e687909bfca9c729a900361b398f33b6c8a55503", size = 12211, upload-time = "2025-07-04T13:20:51.838Z" }, ] [[package]] name = "apache-airflow-core" -version = "3.0.2" +version = "3.0.3rc3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "a2wsgi" }, @@ -335,21 +999,21 @@ dependencies = [ { name = "universal-pathlib" }, { name = "uuid6" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d4/6a/45033df589d6fb6e18305f9811ed6dccc6ad52c5a14631ef61e46d4ea3b5/apache_airflow_core-3.0.2.tar.gz", hash = "sha256:6439a694c4c40daa44f3bec6ddd9d489a8948dc7a3427af354a165961c282aa5", size = 2860519, upload-time = "2025-06-10T14:33:05.705Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/d4/ca0eef8ad76e1b5ddd8defb9f5682997d953176e8c66f3516790bf8eacfb/apache_airflow_core-3.0.3rc3.tar.gz", hash = "sha256:912846aad073042d99697777b1cadb1239ad7399b0b76fa97cd503b26f47ce90", size = 2871427, upload-time = "2025-07-04T13:20:54.426Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/fe/6efbbb6f07fd4031d19a2894d51ca6210cc5ae9365e21e4e5d92817bef63/apache_airflow_core-3.0.2-py3-none-any.whl", hash = "sha256:13b93d116889521e7e176cfe28fd7b36326dea9a4bae05e56738b86e1dfce4ad", size = 3775460, upload-time = "2025-06-10T14:32:58.26Z" }, + { url = "https://files.pythonhosted.org/packages/ec/cb/075990a8a1be7746ae19d5a861ad093920e6b160f2399099d8f02405b281/apache_airflow_core-3.0.3rc3-py3-none-any.whl", hash = "sha256:c5978c2663dd549c0e0d8cbf7bfbd6d0780f2d844f357e1b2a9e6c0403ad132b", size = 3793394, upload-time = "2025-07-04T13:20:46.949Z" }, ] [[package]] name = "apache-airflow-providers-common-compat" -version = "1.7.0" +version = "1.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "apache-airflow" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d3/18/6083b268c690236b3285b02fd1a4559facc04efc6df22d063eeacc31a962/apache_airflow_providers_common_compat-1.7.0.tar.gz", hash = "sha256:b7eddd9acb39e42641916ab570252c9a30ae23fe4b78c128639afdcae8df6eca", size = 20879, upload-time = "2025-05-18T10:42:03.413Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/9a/ecee796c8c7c70a6e449c92eb1c368892dbfb33901b6e0472a201beb6822/apache_airflow_providers_common_compat-1.7.1.tar.gz", hash = "sha256:eeabf0ea016ca5adc450a3e1cf94ff7ff7ec34854e3e2c60bd4fa3acbd63d1a7", size = 20732, upload-time = "2025-06-18T15:06:26.17Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/6c/307a98f4b22ba9f9c1a076e55f372eabcbec568c959362f487b0f9357c74/apache_airflow_providers_common_compat-1.7.0-py3-none-any.whl", hash = "sha256:671428df8979962857246a158f56b5b6262001230fe798015fd709199d21ed05", size = 30155, upload-time = "2025-05-18T10:39:25.416Z" }, + { url = "https://files.pythonhosted.org/packages/84/73/a677c83fdc42e56d358f14fed88cf1433940df629f13b78d70320c2aa819/apache_airflow_providers_common_compat-1.7.1-py3-none-any.whl", hash = "sha256:a248a3a2c6dccce47ee0ed9a45e501e661f635ec20e9851ddb7e46ed26e05dd4", size = 29954, upload-time = "2025-06-18T15:05:46.517Z" }, ] [[package]] @@ -366,7 +1030,7 @@ wheels = [ [[package]] name = "apache-airflow-providers-common-sql" -version = "1.27.1" +version = "1.27.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "apache-airflow" }, @@ -374,14 +1038,14 @@ dependencies = [ { name = "more-itertools" }, { name = "sqlparse" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/35/a0/974f67323ba80aa55db842b4904457d3dbf97d7541b236eab445305a5f96/apache_airflow_providers_common_sql-1.27.1.tar.gz", hash = "sha256:72b25267c8b2969ba676b12bf74c49372150bc1b4ffef5e4093dd7ecc10311b7", size = 100001, upload-time = "2025-05-18T10:42:06.121Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/e9/afe2da325d136796a7ff4cfcd05d4a64362ee4b9acc719f3deb6aa2b1082/apache_airflow_providers_common_sql-1.27.2.tar.gz", hash = "sha256:7cdc5cdf40a3e91e7b6079ef6eaea929ed0da78980b6afdba02c1011129fb756", size = 100414, upload-time = "2025-06-18T15:06:27.095Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/17/90/dd0b0db21bd507f75eebc85e61278b801a682ff144d7eb52836ae0d34f79/apache_airflow_providers_common_sql-1.27.1-py3-none-any.whl", hash = "sha256:1c42dfc9e37e52880963ec5bf65a3c62469889bcc59df2acadab358bb1584a43", size = 63977, upload-time = "2025-05-18T10:39:29.245Z" }, + { url = "https://files.pythonhosted.org/packages/00/03/a840d9d34e1b203341c7f8cddbb8f8e9281b454bc63da20250d00b364d41/apache_airflow_providers_common_sql-1.27.2-py3-none-any.whl", hash = "sha256:69a9f2d9a709394ec2ee3cd7c43dc731519cad19931f2ed48059b19393cd108b", size = 63978, upload-time = "2025-06-18T15:05:47.484Z" }, ] [[package]] name = "apache-airflow-providers-fab" -version = "2.2.0" +version = "2.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "apache-airflow" }, @@ -397,14 +1061,14 @@ dependencies = [ { name = "werkzeug" }, { name = "wtforms" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8f/54/5031f6c8a79fdf889ef56dc247e878b40ea96426ef73d1d0df9530b7b9a3/apache_airflow_providers_fab-2.2.0.tar.gz", hash = "sha256:e7d78d1c23f058673c4e2c4871488f55a92f4388166b952ff97a5ebee5cada97", size = 709761, upload-time = "2025-06-07T18:42:40.736Z" } +sdist = { url = "https://files.pythonhosted.org/packages/18/97/428da3b326374d0a6c1847647521ec2f3e8b0adf647e8cb63b62efba7ef9/apache_airflow_providers_fab-2.2.1.tar.gz", hash = "sha256:81085da9ebd25b07479691a0fb7ddb70f02699c78d82f2d24c2b68994e4abfb3", size = 710419, upload-time = "2025-06-24T05:29:58.864Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/b9/4d08c179ce75886d3e31926a4b2767ff5fde0a87c57c3fe1904daa21c9ed/apache_airflow_providers_fab-2.2.0-py3-none-any.whl", hash = "sha256:14cc363d7ee82c4373beec6d243e26ebe896046c2d4462551b4a5bc6322094c2", size = 602110, upload-time = "2025-06-07T18:42:38.7Z" }, + { url = "https://files.pythonhosted.org/packages/2a/56/a347b2eeda78725cc4773f4ae873debee1ec2163cdc9e00c697004108a69/apache_airflow_providers_fab-2.2.1-py3-none-any.whl", hash = "sha256:d6cb6548afbd25c2100ef51f58ffb77f299b069139da6708b57572d58585ab1b", size = 602327, upload-time = "2025-06-24T05:29:54.14Z" }, ] [[package]] name = "apache-airflow-providers-http" -version = "5.3.0" +version = "5.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -413,9 +1077,9 @@ dependencies = [ { name = "requests" }, { name = "requests-toolbelt" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b6/fe/a673bab5936d96719660b80cdd84c2f2d69f9d1e40157a183a3f19734391/apache_airflow_providers_http-5.3.0.tar.gz", hash = "sha256:729a2ddcbf6ab9927b5a524be8e7979a9a96359dd6aece6af76fa9808e5256ca", size = 61486, upload-time = "2025-05-18T10:42:29.879Z" } +sdist = { url = "https://files.pythonhosted.org/packages/da/09/5883f40df67cbc0569b56d5e22920a4fc03e7e92f7b3b756a88e140cfdd6/apache_airflow_providers_http-5.3.1.tar.gz", hash = "sha256:0d29da81fa3cee78af7fd6cd40c25aeeafeb3386bf72891c8ab871c15fee49b6", size = 61543, upload-time = "2025-06-18T15:06:35.677Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/7e/1ef8546faa216a342d1206be45179921d902801b91b47af8c27c7258256a/apache_airflow_providers_http-5.3.0-py3-none-any.whl", hash = "sha256:7a4910eff8fe26929d27f9c768f34375857329c48ad7998d21dd0d506abcf9c3", size = 27764, upload-time = "2025-05-18T10:39:56.545Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ca/a73a477f2f9d5fa36457281553a43cf838a8b25724c75eba8e1a10e82dcb/apache_airflow_providers_http-5.3.1-py3-none-any.whl", hash = "sha256:d9f3b77c22a7da8bd6a76823b2e0e2a501cc8d65a60412200f1eaa31f0d4913d", size = 27763, upload-time = "2025-06-18T15:05:55.322Z" }, ] [[package]] @@ -433,22 +1097,21 @@ wheels = [ [[package]] name = "apache-airflow-providers-standard" -version = "1.2.0" +version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "apache-airflow" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/be/7e/cd1bf84108bb87d68f044988f81d9a317608cc2cee0a516d5e80f68f8008/apache_airflow_providers_standard-1.2.0.tar.gz", hash = "sha256:e8e8ea81dc7e346e0a686a1f3be9bf51f82fa5a901c2ba0082465120bb6b9495", size = 156381, upload-time = "2025-05-18T10:43:12.241Z" } +sdist = { url = "https://files.pythonhosted.org/packages/01/12/71c09e07c3744d71dd4d5dd509a9ab3db896dcc69d726cf97609fb64d055/apache_airflow_providers_standard-1.3.0.tar.gz", hash = "sha256:53eff0c34279ce5ece2ff5fb1401055dde7ae5c3a4e8acd1d90042ac3198d54e", size = 159024, upload-time = "2025-06-18T15:06:48.057Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/e5/492fcaa8418ab56afc6d2343fdb9efdbc1af60b3c0ca412c42e48b9efd0d/apache_airflow_providers_standard-1.2.0-py3-none-any.whl", hash = "sha256:9a19f0317356af4f931d1db5c226685c786112affe20a95fe8910451455f677f", size = 103738, upload-time = "2025-05-18T10:41:17.705Z" }, + { url = "https://files.pythonhosted.org/packages/c9/36/7a211e24d6fbd6cea7373d0ed64a2bd7ad5a7d4c0eacd703c7f08a650977/apache_airflow_providers_standard-1.3.0-py3-none-any.whl", hash = "sha256:94259ca9ec18abb491c702e24621ef1162c7d4b8131101ed161a0f24cc38b8b8", size = 131147, upload-time = "2025-06-18T15:06:11.951Z" }, ] [[package]] name = "apache-airflow-task-sdk" -version = "1.0.2" +version = "1.0.3rc3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiologic" }, { name = "apache-airflow-core" }, { name = "attrs" }, { name = "fsspec" }, @@ -462,9 +1125,9 @@ dependencies = [ { name = "retryhttp" }, { name = "structlog" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ae/ae/0294300b767de1315a75fadd9a7e8895403d1c9f930956b0e4525311f4ff/apache_airflow_task_sdk-1.0.2.tar.gz", hash = "sha256:80ce010760f5f8cf90eb7a51d696681167c46a332cded32be97ca525061bc549", size = 290241, upload-time = "2025-06-10T14:33:08.416Z" } +sdist = { url = "https://files.pythonhosted.org/packages/74/0a/054fa4820bdd4ceeb883fbab199e1b4cbf1b21c7b9547df3a41f1f5edf0b/apache_airflow_task_sdk-1.0.3rc3.tar.gz", hash = "sha256:4858c41b78f0279512c6c708a08db311d6b2f4d4fba3012f100f2be533882114", size = 1199669, upload-time = "2025-07-04T13:20:55.996Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/90/b170b78a686ec5af2525f96df99a946c023483102ecd11a8d1cbbd1a7b66/apache_airflow_task_sdk-1.0.2-py3-none-any.whl", hash = "sha256:6f477a45131bb0778ac1ff4461498e297384576f03e828ec27bb89803d583d2f", size = 241521, upload-time = "2025-06-10T14:33:00.209Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ea/d7230a2cbb5c455bea30b57d8ef0a61486b9db87f426c07380db9f88fba9/apache_airflow_task_sdk-1.0.3rc3-py3-none-any.whl", hash = "sha256:2d5841ea85b5a8fe3b1fc9ba929058248850595c1aa354d5b07813a529786f4b", size = 246201, upload-time = "2025-07-04T13:20:48.787Z" }, ] [[package]] @@ -495,14 +1158,14 @@ wheels = [ [[package]] name = "asgiref" -version = "3.8.1" +version = "3.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/29/38/b3395cc9ad1b56d2ddac9970bc8f4141312dbaec28bc7c218b0dfafd0f42/asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590", size = 35186, upload-time = "2024-03-22T14:39:36.863Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/68/fb4fb78c9eac59d5e819108a57664737f855c5a8e9b76aec1738bb137f9e/asgiref-3.9.0.tar.gz", hash = "sha256:3dd2556d0f08c4fab8a010d9ab05ef8c34565f6bf32381d17505f7ca5b273767", size = 36772, upload-time = "2025-07-03T13:25:01.491Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/e3/893e8757be2612e6c266d9bb58ad2e3651524b5b40cf56761e985a28b13e/asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47", size = 23828, upload-time = "2024-03-22T14:39:34.521Z" }, + { url = "https://files.pythonhosted.org/packages/3d/f9/76c9f4d4985b5a642926162e2d41fe6019b1fa929cfa58abb7d2dc9041e5/asgiref-3.9.0-py3-none-any.whl", hash = "sha256:06a41250a0114d2b6f6a2cb3ab962147d355b53d1de15eebc34a9d04a7b79981", size = 23788, upload-time = "2025-07-03T13:24:59.115Z" }, ] [[package]] @@ -525,14 +1188,14 @@ wheels = [ [[package]] name = "authlib" -version = "1.6.0" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a2/9d/b1e08d36899c12c8b894a44a5583ee157789f26fc4b176f8e4b6217b56e1/authlib-1.6.0.tar.gz", hash = "sha256:4367d32031b7af175ad3a323d571dc7257b7099d55978087ceae4a0d88cd3210", size = 158371, upload-time = "2025-05-23T00:21:45.011Z" } +sdist = { url = "https://files.pythonhosted.org/packages/09/47/df70ecd34fbf86d69833fe4e25bb9ecbaab995c8e49df726dd416f6bb822/authlib-1.3.1.tar.gz", hash = "sha256:7ae843f03c06c5c0debd63c9db91f9fda64fa62a42a77419fa15fbb7e7a58917", size = 146074, upload-time = "2024-06-04T14:15:32.06Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/29/587c189bbab1ccc8c86a03a5d0e13873df916380ef1be461ebe6acebf48d/authlib-1.6.0-py2.py3-none-any.whl", hash = "sha256:91685589498f79e8655e8a8947431ad6288831d643f11c55c2143ffcc738048d", size = 239981, upload-time = "2025-05-23T00:21:43.075Z" }, + { url = "https://files.pythonhosted.org/packages/87/1f/bc95e43ffb57c05b8efcc376dd55a0240bf58f47ddf5a0f92452b6457b75/Authlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:d35800b973099bbadc49b42b256ecb80041ad56b7fe1216a362c7943c088f377", size = 223827, upload-time = "2024-06-04T14:15:29.218Z" }, ] [[package]] @@ -544,24 +1207,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, ] -[[package]] -name = "backports-datetime-fromisoformat" -version = "2.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/71/81/eff3184acb1d9dc3ce95a98b6f3c81a49b4be296e664db8e1c2eeabef3d9/backports_datetime_fromisoformat-2.0.3.tar.gz", hash = "sha256:b58edc8f517b66b397abc250ecc737969486703a66eb97e01e6d51291b1a139d", size = 23588, upload-time = "2024-12-28T20:18:15.017Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/4b/d6b051ca4b3d76f23c2c436a9669f3be616b8cf6461a7e8061c7c4269642/backports_datetime_fromisoformat-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f681f638f10588fa3c101ee9ae2b63d3734713202ddfcfb6ec6cea0778a29d4", size = 27561, upload-time = "2024-12-28T20:16:47.974Z" }, - { url = "https://files.pythonhosted.org/packages/6d/40/e39b0d471e55eb1b5c7c81edab605c02f71c786d59fb875f0a6f23318747/backports_datetime_fromisoformat-2.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:cd681460e9142f1249408e5aee6d178c6d89b49e06d44913c8fdfb6defda8d1c", size = 34448, upload-time = "2024-12-28T20:16:50.712Z" }, - { url = "https://files.pythonhosted.org/packages/f2/28/7a5c87c5561d14f1c9af979231fdf85d8f9fad7a95ff94e56d2205e2520a/backports_datetime_fromisoformat-2.0.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:ee68bc8735ae5058695b76d3bb2aee1d137c052a11c8303f1e966aa23b72b65b", size = 27093, upload-time = "2024-12-28T20:16:52.994Z" }, - { url = "https://files.pythonhosted.org/packages/80/ba/f00296c5c4536967c7d1136107fdb91c48404fe769a4a6fd5ab045629af8/backports_datetime_fromisoformat-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8273fe7932db65d952a43e238318966eab9e49e8dd546550a41df12175cc2be4", size = 52836, upload-time = "2024-12-28T20:16:55.283Z" }, - { url = "https://files.pythonhosted.org/packages/e3/92/bb1da57a069ddd601aee352a87262c7ae93467e66721d5762f59df5021a6/backports_datetime_fromisoformat-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39d57ea50aa5a524bb239688adc1d1d824c31b6094ebd39aa164d6cadb85de22", size = 52798, upload-time = "2024-12-28T20:16:56.64Z" }, - { url = "https://files.pythonhosted.org/packages/df/ef/b6cfd355982e817ccdb8d8d109f720cab6e06f900784b034b30efa8fa832/backports_datetime_fromisoformat-2.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ac6272f87693e78209dc72e84cf9ab58052027733cd0721c55356d3c881791cf", size = 52891, upload-time = "2024-12-28T20:16:58.887Z" }, - { url = "https://files.pythonhosted.org/packages/37/39/b13e3ae8a7c5d88b68a6e9248ffe7066534b0cfe504bf521963e61b6282d/backports_datetime_fromisoformat-2.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:44c497a71f80cd2bcfc26faae8857cf8e79388e3d5fbf79d2354b8c360547d58", size = 52955, upload-time = "2024-12-28T20:17:00.028Z" }, - { url = "https://files.pythonhosted.org/packages/1e/e4/70cffa3ce1eb4f2ff0c0d6f5d56285aacead6bd3879b27a2ba57ab261172/backports_datetime_fromisoformat-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:6335a4c9e8af329cb1ded5ab41a666e1448116161905a94e054f205aa6d263bc", size = 29323, upload-time = "2024-12-28T20:17:01.125Z" }, - { url = "https://files.pythonhosted.org/packages/be/03/7eaa9f9bf290395d57fd30d7f1f2f9dff60c06a31c237dc2beb477e8f899/backports_datetime_fromisoformat-2.0.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90e202e72a3d5aae673fcc8c9a4267d56b2f532beeb9173361293625fe4d2039", size = 28980, upload-time = "2024-12-28T20:18:06.554Z" }, - { url = "https://files.pythonhosted.org/packages/47/80/a0ecf33446c7349e79f54cc532933780341d20cff0ee12b5bfdcaa47067e/backports_datetime_fromisoformat-2.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2df98ef1b76f5a58bb493dda552259ba60c3a37557d848e039524203951c9f06", size = 28449, upload-time = "2024-12-28T20:18:07.77Z" }, -] - [[package]] name = "backports-strenum" version = "1.3.1" @@ -573,17 +1218,17 @@ wheels = [ [[package]] name = "backrefs" -version = "5.8" +version = "5.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/46/caba1eb32fa5784428ab401a5487f73db4104590ecd939ed9daaf18b47e0/backrefs-5.8.tar.gz", hash = "sha256:2cab642a205ce966af3dd4b38ee36009b31fa9502a35fd61d59ccc116e40a6bd", size = 6773994, upload-time = "2025-02-25T18:15:32.003Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857, upload-time = "2025-06-22T19:34:13.97Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bf/cb/d019ab87fe70e0fe3946196d50d6a4428623dc0c38a6669c8cae0320fbf3/backrefs-5.8-py310-none-any.whl", hash = "sha256:c67f6638a34a5b8730812f5101376f9d41dc38c43f1fdc35cb54700f6ed4465d", size = 380337, upload-time = "2025-02-25T16:53:14.607Z" }, - { url = "https://files.pythonhosted.org/packages/0c/37/fb6973edeb700f6e3d6ff222400602ab1830446c25c7b4676d8de93e65b8/backrefs-5.8-py39-none-any.whl", hash = "sha256:a66851e4533fb5b371aa0628e1fee1af05135616b86140c9d787a2ffdf4b8fdc", size = 380336, upload-time = "2025-02-25T16:53:29.858Z" }, + { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267, upload-time = "2025-06-22T19:34:05.252Z" }, + { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload-time = "2025-06-22T19:34:12.405Z" }, ] [[package]] name = "bandit" -version = "1.8.3" +version = "1.8.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -591,9 +1236,9 @@ dependencies = [ { name = "rich" }, { name = "stevedore" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1a/a5/144a45f8e67df9d66c3bc3f7e69a39537db8bff1189ab7cff4e9459215da/bandit-1.8.3.tar.gz", hash = "sha256:f5847beb654d309422985c36644649924e0ea4425c76dec2e89110b87506193a", size = 4232005, upload-time = "2025-02-17T05:24:57.031Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/01/b2ce2f54db060ed7b25960892b275ad8238ca15f5a8821b09f8e7f75870d/bandit-1.8.5.tar.gz", hash = "sha256:db812e9c39b8868c0fed5278b77fffbbaba828b4891bc80e34b9c50373201cfd", size = 4237566, upload-time = "2025-06-17T01:43:36.697Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/85/db74b9233e0aa27ec96891045c5e920a64dd5cbccd50f8e64e9460f48d35/bandit-1.8.3-py3-none-any.whl", hash = "sha256:28f04dc0d258e1dd0f99dee8eefa13d1cb5e3fde1a5ab0c523971f97b289bcd8", size = 129078, upload-time = "2025-02-17T05:24:54.068Z" }, + { url = "https://files.pythonhosted.org/packages/02/b0/5c8976e61944f91904d4fd33bdbe55248138bfbd1a6092753b1b0fb7abbc/bandit-1.8.5-py3-none-any.whl", hash = "sha256:cb2e57524e99e33ced48833c6cc9c12ac78ae970bb6a450a83c4b506ecc1e2f9", size = 131759, upload-time = "2025-06-17T01:43:35.045Z" }, ] [[package]] @@ -625,7 +1270,7 @@ wheels = [ [[package]] name = "cadwyn" -version = "5.3.3" +version = "5.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "backports-strenum" }, @@ -634,19 +1279,20 @@ dependencies = [ { name = "pydantic" }, { name = "starlette" }, { name = "typing-extensions" }, + { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2b/20/6ae43930a035237a975124d41005aef70efdff62c521f15f389d9d84f924/cadwyn-5.3.3.tar.gz", hash = "sha256:67a03bde7652590e38b9a2d95a9dce65bf9e89f278861c8c094f30e819aba94c", size = 1184296, upload-time = "2025-04-11T15:45:42.721Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/47/9e919c45f208c60563955ffd58964b19f31db5e081382082dfbde2a22063/cadwyn-5.4.2.tar.gz", hash = "sha256:ff1ae3b23ea7bb0849f345ee78e20a102f7d9bb96e9d9dff0f66e47b4f61910d", size = 617139, upload-time = "2025-06-11T20:51:51.384Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/1a/bb7222555d91258ed556a1d9fb6df0277cc2fe515b9937a5c631c3fe98cb/cadwyn-5.3.3-py3-none-any.whl", hash = "sha256:4e89cc96f5363cde827670e4d9f71ed91d5e9e178a82d1fa04549df0f2160162", size = 59399, upload-time = "2025-04-11T15:45:40.97Z" }, + { url = "https://files.pythonhosted.org/packages/f0/78/f384cc4fc14fd1f0bd3ffcfe055e0c3ba1a88e9323dc9a762bf6d331b4b4/cadwyn-5.4.2-py3-none-any.whl", hash = "sha256:fe596cabd557543ab8de9d9b5c0bcf900051d2002f04f87b32cc44300a23c303", size = 59529, upload-time = "2025-06-11T20:51:49.714Z" }, ] [[package]] name = "certifi" -version = "2025.4.26" +version = "2025.6.15" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/9e/c05b3920a3b7d20d3d3310465f50348e5b3694f4f88c6daf736eef3024c4/certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6", size = 160705, upload-time = "2025-04-26T02:12:29.51Z" } +sdist = { url = "https://files.pythonhosted.org/packages/73/f7/f14b46d4bcd21092d7d3ccef689615220d8a08fb25e564b65d20738e672e/certifi-2025.6.15.tar.gz", hash = "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b", size = 158753, upload-time = "2025-06-15T02:45:51.329Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/7e/3db2bd1b1f9e95f7cddca6d6e75e2f2bd9f51b1246e546d88addca0106bd/certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3", size = 159618, upload-time = "2025-04-26T02:12:27.662Z" }, + { url = "https://files.pythonhosted.org/packages/84/ae/320161bd181fc06471eed047ecce67b693fd7515b16d495d8932db763426/certifi-2025.6.15-py3-none-any.whl", hash = "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057", size = 157650, upload-time = "2025-06-15T02:45:49.977Z" }, ] [[package]] @@ -696,14 +1342,14 @@ wheels = [ [[package]] name = "click" -version = "8.1.8" +version = "8.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } +sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload-time = "2025-05-20T23:19:49.832Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, + { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload-time = "2025-05-20T23:19:47.796Z" }, ] [[package]] @@ -768,22 +1414,22 @@ flask = [ [[package]] name = "coverage" -version = "7.8.2" +version = "7.9.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/07/998afa4a0ecdf9b1981ae05415dad2d4e7716e1b1f00abbd91691ac09ac9/coverage-7.8.2.tar.gz", hash = "sha256:a886d531373a1f6ff9fad2a2ba4a045b68467b779ae729ee0b3b10ac20033b27", size = 812759, upload-time = "2025-05-23T11:39:57.856Z" } +sdist = { url = "https://files.pythonhosted.org/packages/04/b7/c0465ca253df10a9e8dae0692a4ae6e9726d245390aaef92360e1d6d3832/coverage-7.9.2.tar.gz", hash = "sha256:997024fa51e3290264ffd7492ec97d0690293ccd2b45a6cd7d82d945a4a80c8b", size = 813556, upload-time = "2025-07-03T10:54:15.101Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/6b/7dd06399a5c0b81007e3a6af0395cd60e6a30f959f8d407d3ee04642e896/coverage-7.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd8ec21e1443fd7a447881332f7ce9d35b8fbd2849e761bb290b584535636b0a", size = 211573, upload-time = "2025-05-23T11:37:47.207Z" }, - { url = "https://files.pythonhosted.org/packages/f0/df/2b24090820a0bac1412955fb1a4dade6bc3b8dcef7b899c277ffaf16916d/coverage-7.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4c26c2396674816deaeae7ded0e2b42c26537280f8fe313335858ffff35019be", size = 212006, upload-time = "2025-05-23T11:37:50.289Z" }, - { url = "https://files.pythonhosted.org/packages/c5/c4/e4e3b998e116625562a872a342419652fa6ca73f464d9faf9f52f1aff427/coverage-7.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1aec326ed237e5880bfe69ad41616d333712c7937bcefc1343145e972938f9b3", size = 241128, upload-time = "2025-05-23T11:37:52.229Z" }, - { url = "https://files.pythonhosted.org/packages/b1/67/b28904afea3e87a895da850ba587439a61699bf4b73d04d0dfd99bbd33b4/coverage-7.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e818796f71702d7a13e50c70de2a1924f729228580bcba1607cccf32eea46e6", size = 239026, upload-time = "2025-05-23T11:37:53.846Z" }, - { url = "https://files.pythonhosted.org/packages/8c/0f/47bf7c5630d81bc2cd52b9e13043685dbb7c79372a7f5857279cc442b37c/coverage-7.8.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:546e537d9e24efc765c9c891328f30f826e3e4808e31f5d0f87c4ba12bbd1622", size = 240172, upload-time = "2025-05-23T11:37:55.711Z" }, - { url = "https://files.pythonhosted.org/packages/ba/38/af3eb9d36d85abc881f5aaecf8209383dbe0fa4cac2d804c55d05c51cb04/coverage-7.8.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab9b09a2349f58e73f8ebc06fac546dd623e23b063e5398343c5270072e3201c", size = 240086, upload-time = "2025-05-23T11:37:57.724Z" }, - { url = "https://files.pythonhosted.org/packages/9e/64/c40c27c2573adeba0fe16faf39a8aa57368a1f2148865d6bb24c67eadb41/coverage-7.8.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fd51355ab8a372d89fb0e6a31719e825cf8df8b6724bee942fb5b92c3f016ba3", size = 238792, upload-time = "2025-05-23T11:37:59.737Z" }, - { url = "https://files.pythonhosted.org/packages/8e/ab/b7c85146f15457671c1412afca7c25a5696d7625e7158002aa017e2d7e3c/coverage-7.8.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0774df1e093acb6c9e4d58bce7f86656aeed6c132a16e2337692c12786b32404", size = 239096, upload-time = "2025-05-23T11:38:01.693Z" }, - { url = "https://files.pythonhosted.org/packages/d3/50/9446dad1310905fb1dc284d60d4320a5b25d4e3e33f9ea08b8d36e244e23/coverage-7.8.2-cp310-cp310-win32.whl", hash = "sha256:00f2e2f2e37f47e5f54423aeefd6c32a7dbcedc033fcd3928a4f4948e8b96af7", size = 214144, upload-time = "2025-05-23T11:38:03.68Z" }, - { url = "https://files.pythonhosted.org/packages/23/ed/792e66ad7b8b0df757db8d47af0c23659cdb5a65ef7ace8b111cacdbee89/coverage-7.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:145b07bea229821d51811bf15eeab346c236d523838eda395ea969d120d13347", size = 215043, upload-time = "2025-05-23T11:38:05.217Z" }, - { url = "https://files.pythonhosted.org/packages/69/2f/572b29496d8234e4a7773200dd835a0d32d9e171f2d974f3fe04a9dbc271/coverage-7.8.2-pp39.pp310.pp311-none-any.whl", hash = "sha256:ec455eedf3ba0bbdf8f5a570012617eb305c63cb9f03428d39bf544cb2b94837", size = 203636, upload-time = "2025-05-23T11:39:52.002Z" }, - { url = "https://files.pythonhosted.org/packages/a0/1a/0b9c32220ad694d66062f571cc5cedfa9997b64a591e8a500bb63de1bd40/coverage-7.8.2-py3-none-any.whl", hash = "sha256:726f32ee3713f7359696331a18daf0c3b3a70bb0ae71141b9d3c52be7c595e32", size = 203623, upload-time = "2025-05-23T11:39:53.846Z" }, + { url = "https://files.pythonhosted.org/packages/a1/0d/5c2114fd776c207bd55068ae8dc1bef63ecd1b767b3389984a8e58f2b926/coverage-7.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:66283a192a14a3854b2e7f3418d7db05cdf411012ab7ff5db98ff3b181e1f912", size = 212039, upload-time = "2025-07-03T10:52:38.955Z" }, + { url = "https://files.pythonhosted.org/packages/cf/ad/dc51f40492dc2d5fcd31bb44577bc0cc8920757d6bc5d3e4293146524ef9/coverage-7.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4e01d138540ef34fcf35c1aa24d06c3de2a4cffa349e29a10056544f35cca15f", size = 212428, upload-time = "2025-07-03T10:52:41.36Z" }, + { url = "https://files.pythonhosted.org/packages/a2/a3/55cb3ff1b36f00df04439c3993d8529193cdf165a2467bf1402539070f16/coverage-7.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f22627c1fe2745ee98d3ab87679ca73a97e75ca75eb5faee48660d060875465f", size = 241534, upload-time = "2025-07-03T10:52:42.956Z" }, + { url = "https://files.pythonhosted.org/packages/eb/c9/a8410b91b6be4f6e9c2e9f0dce93749b6b40b751d7065b4410bf89cb654b/coverage-7.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b1c2d8363247b46bd51f393f86c94096e64a1cf6906803fa8d5a9d03784bdbf", size = 239408, upload-time = "2025-07-03T10:52:44.199Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c4/6f3e56d467c612b9070ae71d5d3b114c0b899b5788e1ca3c93068ccb7018/coverage-7.9.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c10c882b114faf82dbd33e876d0cbd5e1d1ebc0d2a74ceef642c6152f3f4d547", size = 240552, upload-time = "2025-07-03T10:52:45.477Z" }, + { url = "https://files.pythonhosted.org/packages/fd/20/04eda789d15af1ce79bce5cc5fd64057c3a0ac08fd0576377a3096c24663/coverage-7.9.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:de3c0378bdf7066c3988d66cd5232d161e933b87103b014ab1b0b4676098fa45", size = 240464, upload-time = "2025-07-03T10:52:46.809Z" }, + { url = "https://files.pythonhosted.org/packages/a9/5a/217b32c94cc1a0b90f253514815332d08ec0812194a1ce9cca97dda1cd20/coverage-7.9.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1e2f097eae0e5991e7623958a24ced3282676c93c013dde41399ff63e230fcf2", size = 239134, upload-time = "2025-07-03T10:52:48.149Z" }, + { url = "https://files.pythonhosted.org/packages/34/73/1d019c48f413465eb5d3b6898b6279e87141c80049f7dbf73fd020138549/coverage-7.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28dc1f67e83a14e7079b6cea4d314bc8b24d1aed42d3582ff89c0295f09b181e", size = 239405, upload-time = "2025-07-03T10:52:49.687Z" }, + { url = "https://files.pythonhosted.org/packages/49/6c/a2beca7aa2595dad0c0d3f350382c381c92400efe5261e2631f734a0e3fe/coverage-7.9.2-cp310-cp310-win32.whl", hash = "sha256:bf7d773da6af9e10dbddacbf4e5cab13d06d0ed93561d44dae0188a42c65be7e", size = 214519, upload-time = "2025-07-03T10:52:51.036Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c8/91e5e4a21f9a51e2c7cdd86e587ae01a4fcff06fc3fa8cde4d6f7cf68df4/coverage-7.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:0c0378ba787681ab1897f7c89b415bd56b0b2d9a47e5a3d8dc0ea55aac118d6c", size = 215400, upload-time = "2025-07-03T10:52:52.313Z" }, + { url = "https://files.pythonhosted.org/packages/d7/85/f8bbefac27d286386961c25515431482a425967e23d3698b75a250872924/coverage-7.9.2-pp39.pp310.pp311-none-any.whl", hash = "sha256:8a1166db2fb62473285bcb092f586e081e92656c7dfa8e9f62b4d39d7e6b5050", size = 204013, upload-time = "2025-07-03T10:54:12.084Z" }, + { url = "https://files.pythonhosted.org/packages/3c/38/bbe2e63902847cf79036ecc75550d0698af31c91c7575352eb25190d0fb3/coverage-7.9.2-py3-none-any.whl", hash = "sha256:e425cd5b00f6fc0ed7cdbd766c70be8baab4b7839e4d4fe5fac48581dd968ea4", size = 204005, upload-time = "2025-07-03T10:54:13.491Z" }, ] [package.optional-dependencies] @@ -918,16 +1564,16 @@ wheels = [ [[package]] name = "fastapi" -version = "0.115.12" +version = "0.115.14" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, { name = "starlette" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f4/55/ae499352d82338331ca1e28c7f4a63bfd09479b16395dce38cf50a39e2c2/fastapi-0.115.12.tar.gz", hash = "sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681", size = 295236, upload-time = "2025-03-23T22:55:43.822Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/53/8c38a874844a8b0fa10dd8adf3836ac154082cf88d3f22b544e9ceea0a15/fastapi-0.115.14.tar.gz", hash = "sha256:b1de15cdc1c499a4da47914db35d0e4ef8f1ce62b624e94e0e5824421df99739", size = 296263, upload-time = "2025-06-26T15:29:08.21Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/50/b3/b51f09c2ba432a576fe63758bddc81f78f0c6309d9e5c10d194313bf021e/fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d", size = 95164, upload-time = "2025-03-23T22:55:42.101Z" }, + { url = "https://files.pythonhosted.org/packages/53/50/b1222562c6d270fea83e9c9075b8e8600b8479150a18e4516a6138b980d1/fastapi-0.115.14-py3-none-any.whl", hash = "sha256:6c0c8bf9420bd58f565e585036d971872472b4f7d3f6c73b698e10cffdefb3ca", size = 95514, upload-time = "2025-06-26T15:29:06.49Z" }, ] [package.optional-dependencies] @@ -959,15 +1605,6 @@ standard = [ { name = "uvicorn", extra = ["standard"] }, ] -[[package]] -name = "filelock" -version = "3.12.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d5/71/bb1326535231229dd69a9dd2e338f6f54b2d57bd88fc4a52285c0ab8a5f6/filelock-3.12.4.tar.gz", hash = "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd", size = 13758, upload-time = "2023-09-13T16:01:03.605Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5e/5d/97afbafd9d584ff1b45fcb354a479a3609bd97f912f8f1f6c563cb1fae21/filelock-3.12.4-py3-none-any.whl", hash = "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4", size = 11221, upload-time = "2023-09-13T16:01:02.163Z" }, -] - [[package]] name = "flask" version = "2.2.5" @@ -1161,7 +1798,7 @@ wheels = [ [[package]] name = "google-api-core" -version = "2.25.0" +version = "2.25.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "google-auth" }, @@ -1170,9 +1807,9 @@ dependencies = [ { name = "protobuf" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/a2/8176b416ca08106b2ae30cd4a006c8176945f682c3a5b42f141c9173f505/google_api_core-2.25.0.tar.gz", hash = "sha256:9b548e688702f82a34ed8409fb8a6961166f0b7795032f0be8f48308dff4333a", size = 164914, upload-time = "2025-06-02T14:45:34.789Z" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/21/e9d043e88222317afdbdb567165fdbc3b0aad90064c7e0c9eb0ad9955ad8/google_api_core-2.25.1.tar.gz", hash = "sha256:d2aaa0b13c78c61cb3f4282c464c046e45fbd75755683c9c525e6e8f7ed0a5e8", size = 165443, upload-time = "2025-06-12T20:52:20.439Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ac/ca/149e41a277bb0855e8ded85fd7579d7747c1223e253d82c5c0f1be236875/google_api_core-2.25.0-py3-none-any.whl", hash = "sha256:1db79d1281dcf9f3d10023283299ba38f3dc9f639ec41085968fd23e5bcf512e", size = 160668, upload-time = "2025-06-02T14:45:33.272Z" }, + { url = "https://files.pythonhosted.org/packages/14/4b/ead00905132820b623732b175d66354e9d3e69fcf2a5dcdab780664e7896/google_api_core-2.25.1-py3-none-any.whl", hash = "sha256:8a2a56c1fef82987a524371f99f3bd0143702fecc670c72e600c1cda6bf8dbb7", size = 160807, upload-time = "2025-06-12T20:52:19.334Z" }, ] [package.optional-dependencies] @@ -1183,7 +1820,7 @@ grpc = [ [[package]] name = "google-api-python-client" -version = "2.171.0" +version = "2.175.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "google-api-core" }, @@ -1192,9 +1829,9 @@ dependencies = [ { name = "httplib2" }, { name = "uritemplate" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/35/99/237cd2510aecca9fabb54007e58553274cc43cb3c18512ee1ea574d11b87/google_api_python_client-2.171.0.tar.gz", hash = "sha256:057a5c08d28463c6b9eb89746355de5f14b7ed27a65c11fdbf1d06c66bb66b23", size = 13028937, upload-time = "2025-06-03T18:57:38.732Z" } +sdist = { url = "https://files.pythonhosted.org/packages/41/14/ecabbf7376afe500282ba83fc0015d4bc33a00fd73d189ca66437d17acae/google_api_python_client-2.175.0.tar.gz", hash = "sha256:f6d5b5c0141194a72cebef33feb1377fa668b3f14dc90a2fae258dbbbdcdb30c", size = 13143355, upload-time = "2025-07-04T01:02:28.364Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/db/c397e3eb3ea18f423855479d0a5852bdc9c3f644e3d4194931fa664a70b4/google_api_python_client-2.171.0-py3-none-any.whl", hash = "sha256:c9c9b76f561e9d9ac14e54a9e2c0842876201d5b96e69e48f967373f0784cbe9", size = 13547393, upload-time = "2025-06-10T02:14:38.225Z" }, + { url = "https://files.pythonhosted.org/packages/f8/b8/2800f1aee399ea325fa675244de5178ab938485506ded2d17acf73e23cdb/google_api_python_client-2.175.0-py3-none-any.whl", hash = "sha256:5f4313a914d11d2b0840d1daa336caef3f53e28e8234077c139f7b236fba9622", size = 13667772, upload-time = "2025-07-04T01:02:25.764Z" }, ] [[package]] @@ -1310,37 +1947,37 @@ wheels = [ [[package]] name = "greenlet" -version = "3.2.2" +version = "3.2.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/34/c1/a82edae11d46c0d83481aacaa1e578fea21d94a1ef400afd734d47ad95ad/greenlet-3.2.2.tar.gz", hash = "sha256:ad053d34421a2debba45aa3cc39acf454acbcd025b3fc1a9f8a0dee237abd485", size = 185797, upload-time = "2025-05-09T19:47:35.066Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/92/bb85bd6e80148a4d2e0c59f7c0c2891029f8fd510183afc7d8d2feeed9b6/greenlet-3.2.3.tar.gz", hash = "sha256:8b0dd8ae4c0d6f5e54ee55ba935eeb3d735a9b58a8a1e5b5cbab64e01a39f365", size = 185752, upload-time = "2025-06-05T16:16:09.955Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/05/66/910217271189cc3f32f670040235f4bf026ded8ca07270667d69c06e7324/greenlet-3.2.2-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:c49e9f7c6f625507ed83a7485366b46cbe325717c60837f7244fc99ba16ba9d6", size = 267395, upload-time = "2025-05-09T14:50:45.357Z" }, - { url = "https://files.pythonhosted.org/packages/a8/36/8d812402ca21017c82880f399309afadb78a0aa300a9b45d741e4df5d954/greenlet-3.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3cc1a3ed00ecfea8932477f729a9f616ad7347a5e55d50929efa50a86cb7be7", size = 625742, upload-time = "2025-05-09T15:23:58.293Z" }, - { url = "https://files.pythonhosted.org/packages/7b/77/66d7b59dfb7cc1102b2f880bc61cb165ee8998c9ec13c96606ba37e54c77/greenlet-3.2.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7c9896249fbef2c615853b890ee854f22c671560226c9221cfd27c995db97e5c", size = 637014, upload-time = "2025-05-09T15:24:47.025Z" }, - { url = "https://files.pythonhosted.org/packages/36/a7/ff0d408f8086a0d9a5aac47fa1b33a040a9fca89bd5a3f7b54d1cd6e2793/greenlet-3.2.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7409796591d879425997a518138889d8d17e63ada7c99edc0d7a1c22007d4907", size = 632874, upload-time = "2025-05-09T15:29:20.014Z" }, - { url = "https://files.pythonhosted.org/packages/a1/75/1dc2603bf8184da9ebe69200849c53c3c1dca5b3a3d44d9f5ca06a930550/greenlet-3.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7791dcb496ec53d60c7f1c78eaa156c21f402dda38542a00afc3e20cae0f480f", size = 631652, upload-time = "2025-05-09T14:53:30.961Z" }, - { url = "https://files.pythonhosted.org/packages/7b/74/ddc8c3bd4c2c20548e5bf2b1d2e312a717d44e2eca3eadcfc207b5f5ad80/greenlet-3.2.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d8009ae46259e31bc73dc183e402f548e980c96f33a6ef58cc2e7865db012e13", size = 580619, upload-time = "2025-05-09T14:53:42.049Z" }, - { url = "https://files.pythonhosted.org/packages/7e/f2/40f26d7b3077b1c7ae7318a4de1f8ffc1d8ccbad8f1d8979bf5080250fd6/greenlet-3.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fd9fb7c941280e2c837b603850efc93c999ae58aae2b40765ed682a6907ebbc5", size = 1109809, upload-time = "2025-05-09T15:26:59.063Z" }, - { url = "https://files.pythonhosted.org/packages/c5/21/9329e8c276746b0d2318b696606753f5e7b72d478adcf4ad9a975521ea5f/greenlet-3.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:00cd814b8959b95a546e47e8d589610534cfb71f19802ea8a2ad99d95d702057", size = 1133455, upload-time = "2025-05-09T14:53:55.823Z" }, - { url = "https://files.pythonhosted.org/packages/bb/1e/0dca9619dbd736d6981f12f946a497ec21a0ea27262f563bca5729662d4d/greenlet-3.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:d0cb7d47199001de7658c213419358aa8937df767936506db0db7ce1a71f4a2f", size = 294991, upload-time = "2025-05-09T15:05:56.847Z" }, + { url = "https://files.pythonhosted.org/packages/92/db/b4c12cff13ebac2786f4f217f06588bccd8b53d260453404ef22b121fc3a/greenlet-3.2.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:1afd685acd5597349ee6d7a88a8bec83ce13c106ac78c196ee9dde7c04fe87be", size = 268977, upload-time = "2025-06-05T16:10:24.001Z" }, + { url = "https://files.pythonhosted.org/packages/52/61/75b4abd8147f13f70986df2801bf93735c1bd87ea780d70e3b3ecda8c165/greenlet-3.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:761917cac215c61e9dc7324b2606107b3b292a8349bdebb31503ab4de3f559ac", size = 627351, upload-time = "2025-06-05T16:38:50.685Z" }, + { url = "https://files.pythonhosted.org/packages/35/aa/6894ae299d059d26254779a5088632874b80ee8cf89a88bca00b0709d22f/greenlet-3.2.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:a433dbc54e4a37e4fff90ef34f25a8c00aed99b06856f0119dcf09fbafa16392", size = 638599, upload-time = "2025-06-05T16:41:34.057Z" }, + { url = "https://files.pythonhosted.org/packages/30/64/e01a8261d13c47f3c082519a5e9dbf9e143cc0498ed20c911d04e54d526c/greenlet-3.2.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:72e77ed69312bab0434d7292316d5afd6896192ac4327d44f3d613ecb85b037c", size = 634482, upload-time = "2025-06-05T16:48:16.26Z" }, + { url = "https://files.pythonhosted.org/packages/47/48/ff9ca8ba9772d083a4f5221f7b4f0ebe8978131a9ae0909cf202f94cd879/greenlet-3.2.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:68671180e3849b963649254a882cd544a3c75bfcd2c527346ad8bb53494444db", size = 633284, upload-time = "2025-06-05T16:13:01.599Z" }, + { url = "https://files.pythonhosted.org/packages/e9/45/626e974948713bc15775b696adb3eb0bd708bec267d6d2d5c47bb47a6119/greenlet-3.2.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49c8cfb18fb419b3d08e011228ef8a25882397f3a859b9fe1436946140b6756b", size = 582206, upload-time = "2025-06-05T16:12:48.51Z" }, + { url = "https://files.pythonhosted.org/packages/b1/8e/8b6f42c67d5df7db35b8c55c9a850ea045219741bb14416255616808c690/greenlet-3.2.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:efc6dc8a792243c31f2f5674b670b3a95d46fa1c6a912b8e310d6f542e7b0712", size = 1111412, upload-time = "2025-06-05T16:36:45.479Z" }, + { url = "https://files.pythonhosted.org/packages/05/46/ab58828217349500a7ebb81159d52ca357da747ff1797c29c6023d79d798/greenlet-3.2.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:731e154aba8e757aedd0781d4b240f1225b075b4409f1bb83b05ff410582cf00", size = 1135054, upload-time = "2025-06-05T16:12:36.478Z" }, + { url = "https://files.pythonhosted.org/packages/68/7f/d1b537be5080721c0f0089a8447d4ef72839039cdb743bdd8ffd23046e9a/greenlet-3.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:96c20252c2f792defe9a115d3287e14811036d51e78b3aaddbee23b69b216302", size = 296573, upload-time = "2025-06-05T16:34:26.521Z" }, ] [[package]] name = "grpcio" -version = "1.72.1" +version = "1.73.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/45/ff8c80a5a2e7e520d9c4d3c41484a11d33508253f6f4dd06d2c4b4158999/grpcio-1.72.1.tar.gz", hash = "sha256:87f62c94a40947cec1a0f91f95f5ba0aa8f799f23a1d42ae5be667b6b27b959c", size = 12584286, upload-time = "2025-06-02T10:14:11.595Z" } +sdist = { url = "https://files.pythonhosted.org/packages/79/e8/b43b851537da2e2f03fa8be1aef207e5cbfb1a2e014fbb6b40d24c177cd3/grpcio-1.73.1.tar.gz", hash = "sha256:7fce2cd1c0c1116cf3850564ebfc3264fba75d3c74a7414373f1238ea365ef87", size = 12730355, upload-time = "2025-06-26T01:53:24.622Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/a8/a468586ef3db8cd90f507c0e5655c50cdf136e936f674effddacd5e6f83b/grpcio-1.72.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:ce2706ff37be7a6de68fbc4c3f8dde247cab48cc70fee5fedfbc9cd923b4ee5a", size = 5210592, upload-time = "2025-06-02T10:08:34.416Z" }, - { url = "https://files.pythonhosted.org/packages/76/38/d834505e096ca40569f09ba9eacbb0482fb844f70240c5e599f86c57ef2b/grpcio-1.72.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:7db9e15ee7618fbea748176a67d347f3100fa92d36acccd0e7eeb741bc82f72a", size = 10315842, upload-time = "2025-06-02T10:08:37.521Z" }, - { url = "https://files.pythonhosted.org/packages/99/49/0a47ae61a077773457f4e4ac8277999cffe0a84d82d03b9ee9959a511530/grpcio-1.72.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:8d6e7764181ba4a8b74aa78c98a89c9f3441068ebcee5d6f14c44578214e0be3", size = 5626334, upload-time = "2025-06-02T10:08:40.548Z" }, - { url = "https://files.pythonhosted.org/packages/c1/28/f71476363b2edea85ea1c50e397cf150e49faf4ccc9b1a70103d705692f3/grpcio-1.72.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:237bb619ba33594006025e6f114f62e60d9563afd6f8e89633ee384868e26687", size = 6260526, upload-time = "2025-06-02T10:08:43.469Z" }, - { url = "https://files.pythonhosted.org/packages/6b/33/8c954ec8b38fbb084726f57d3bff091f523049c88e8d7a5603da548da323/grpcio-1.72.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7f1d8a442fd242aa432c8e1b8411c79ebc409dad2c637614d726e226ce9ed0c", size = 5861864, upload-time = "2025-06-02T10:08:46.129Z" }, - { url = "https://files.pythonhosted.org/packages/5f/23/93cdd6db779d8757344d184bee124fed12c919c7a2349fbf8cbe4bf75f04/grpcio-1.72.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f2359bd4bba85bf94fd9ab8802671b9637a6803bb673d221157a11523a52e6a8", size = 5970830, upload-time = "2025-06-02T10:08:48.312Z" }, - { url = "https://files.pythonhosted.org/packages/5f/ed/53577cfe39327257c5b963d588d390c3fc6f72e2f688fe56e3d6617e6f13/grpcio-1.72.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3269cfca37570a420a57a785f2a5d4234c5b12aced55f8843dafced2d3f8c9a6", size = 6595737, upload-time = "2025-06-02T10:08:50.564Z" }, - { url = "https://files.pythonhosted.org/packages/93/31/52585e0cd4e64e232dc8cf71f2a9bbac60f98eca81e0e95fc1454a9fb305/grpcio-1.72.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:06c023d86398714d6257194c21f2bc0b58a53ce45cee87dd3c54c7932c590e17", size = 6138627, upload-time = "2025-06-02T10:08:52.612Z" }, - { url = "https://files.pythonhosted.org/packages/c9/19/bbc98e574981e7fe1f4ebb8ec1f7ab12cac2937b4ecee88b9805077df5ff/grpcio-1.72.1-cp310-cp310-win32.whl", hash = "sha256:06dbe54eeea5f9dfb3e7ca2ff66c715ff5fc96b07a1feb322122fe14cb42f6aa", size = 3560938, upload-time = "2025-06-02T10:08:54.933Z" }, - { url = "https://files.pythonhosted.org/packages/42/a2/8e51419abedee080ab50c677296e40f4f951f039ba5259919c803074423a/grpcio-1.72.1-cp310-cp310-win_amd64.whl", hash = "sha256:ba593aa2cd52f4468ba29668c83f893d88c128198d6b1273ca788ef53e3ae5fe", size = 4227608, upload-time = "2025-06-02T10:08:57.086Z" }, + { url = "https://files.pythonhosted.org/packages/8f/51/a5748ab2773d893d099b92653039672f7e26dd35741020972b84d604066f/grpcio-1.73.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:2d70f4ddd0a823436c2624640570ed6097e40935c9194482475fe8e3d9754d55", size = 5365087, upload-time = "2025-06-26T01:51:44.541Z" }, + { url = "https://files.pythonhosted.org/packages/ae/12/c5ee1a5dfe93dbc2eaa42a219e2bf887250b52e2e2ee5c036c4695f2769c/grpcio-1.73.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:3841a8a5a66830261ab6a3c2a3dc539ed84e4ab019165f77b3eeb9f0ba621f26", size = 10608921, upload-time = "2025-06-26T01:51:48.111Z" }, + { url = "https://files.pythonhosted.org/packages/c4/6d/b0c6a8120f02b7d15c5accda6bfc43bc92be70ada3af3ba6d8e077c00374/grpcio-1.73.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:628c30f8e77e0258ab788750ec92059fc3d6628590fb4b7cea8c102503623ed7", size = 5803221, upload-time = "2025-06-26T01:51:50.486Z" }, + { url = "https://files.pythonhosted.org/packages/a6/7a/3c886d9f1c1e416ae81f7f9c7d1995ae72cd64712d29dab74a6bafacb2d2/grpcio-1.73.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67a0468256c9db6d5ecb1fde4bf409d016f42cef649323f0a08a72f352d1358b", size = 6444603, upload-time = "2025-06-26T01:51:52.203Z" }, + { url = "https://files.pythonhosted.org/packages/42/07/f143a2ff534982c9caa1febcad1c1073cdec732f6ac7545d85555a900a7e/grpcio-1.73.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b84d65bbdebd5926eb5c53b0b9ec3b3f83408a30e4c20c373c5337b4219ec5", size = 6040969, upload-time = "2025-06-26T01:51:55.028Z" }, + { url = "https://files.pythonhosted.org/packages/fb/0f/523131b7c9196d0718e7b2dac0310eb307b4117bdbfef62382e760f7e8bb/grpcio-1.73.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c54796ca22b8349cc594d18b01099e39f2b7ffb586ad83217655781a350ce4da", size = 6132201, upload-time = "2025-06-26T01:51:56.867Z" }, + { url = "https://files.pythonhosted.org/packages/ad/18/010a055410eef1d3a7a1e477ec9d93b091ac664ad93e9c5f56d6cc04bdee/grpcio-1.73.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:75fc8e543962ece2f7ecd32ada2d44c0c8570ae73ec92869f9af8b944863116d", size = 6774718, upload-time = "2025-06-26T01:51:58.338Z" }, + { url = "https://files.pythonhosted.org/packages/16/11/452bfc1ab39d8ee748837ab8ee56beeae0290861052948785c2c445fb44b/grpcio-1.73.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6a6037891cd2b1dd1406b388660522e1565ed340b1fea2955b0234bdd941a862", size = 6304362, upload-time = "2025-06-26T01:51:59.802Z" }, + { url = "https://files.pythonhosted.org/packages/1e/1c/c75ceee626465721e5cb040cf4b271eff817aa97388948660884cb7adffa/grpcio-1.73.1-cp310-cp310-win32.whl", hash = "sha256:cce7265b9617168c2d08ae570fcc2af4eaf72e84f8c710ca657cc546115263af", size = 3679036, upload-time = "2025-06-26T01:52:01.817Z" }, + { url = "https://files.pythonhosted.org/packages/62/2e/42cb31b6cbd671a7b3dbd97ef33f59088cf60e3cf2141368282e26fafe79/grpcio-1.73.1-cp310-cp310-win_amd64.whl", hash = "sha256:6a2b372e65fad38842050943f42ce8fee00c6f2e8ea4f7754ba7478d26a356ee", size = 4340208, upload-time = "2025-06-26T01:52:03.674Z" }, ] [[package]] @@ -1496,11 +2133,11 @@ wheels = [ [[package]] name = "jmespath" -version = "1.0.1" +version = "0.10.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/00/2a/e867e8531cf3e36b41201936b7fa7ba7b5702dbef42922193f05c8976cd6/jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe", size = 25843, upload-time = "2022-06-17T18:00:12.224Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3c/56/3f325b1eef9791759784aa5046a8f6a1aff8f7c898a2e34506771d3b99d8/jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9", size = 21607, upload-time = "2020-05-12T22:03:47.267Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", size = 20256, upload-time = "2022-06-17T18:00:10.251Z" }, + { url = "https://files.pythonhosted.org/packages/07/cb/5f001272b6faeb23c1c9e0acc04d48eaaf5c862c17709d20e3469c6e0139/jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f", size = 24489, upload-time = "2020-05-12T22:03:45.643Z" }, ] [[package]] @@ -1543,37 +2180,37 @@ wheels = [ [[package]] name = "libcst" -version = "1.8.0" +version = "1.8.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1a/7f/33559a16f5e98e8643a463ed5b4d09ecb0589da8ac61b1fcb761809ab037/libcst-1.8.0.tar.gz", hash = "sha256:21cd41dd9bc7ee16f81a6ecf9dc6c044cdaf6af670b85b4754204a5a0c9890d8", size = 778687, upload-time = "2025-05-27T14:23:52.354Z" } +sdist = { url = "https://files.pythonhosted.org/packages/89/aa/b52d195b167958fe1bd106a260f64cc80ec384f6ac2a9cda874d8803df06/libcst-1.8.2.tar.gz", hash = "sha256:66e82cedba95a6176194a817be4232c720312f8be6d2c8f3847f3317d95a0c7f", size = 881534, upload-time = "2025-06-13T20:56:37.915Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/57/5b2b32e44e35e63d454e264d87819c5ea168d7fa60751086f766f199a247/libcst-1.8.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:42d2584ae59973b42129ea9073b4ae3fdfca91047130cc8e9d190852ec2172fa", size = 2192518, upload-time = "2025-05-27T14:21:50.535Z" }, - { url = "https://files.pythonhosted.org/packages/21/27/f0cd626e372e807ae11a39ae52dd963428ccd18eff945acd60527ea4da6e/libcst-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6dfa275151f5b80ff20446a2c3b6610400c5caf227313262eaa81c1627bb64f3", size = 2077541, upload-time = "2025-05-27T14:21:52.475Z" }, - { url = "https://files.pythonhosted.org/packages/da/f9/5295418916961e79c73ea821afd89af15a80c1e2f66faf5ca8b07aa194e9/libcst-1.8.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:176d29cef093b94dc161d67221acef6f3e337a15aa1b23f357301e531b9440ec", size = 2217640, upload-time = "2025-05-27T14:21:54.541Z" }, - { url = "https://files.pythonhosted.org/packages/c8/79/1f8a71c09517144e351efbfe741b34ad700787e067bd79bfe0743adafd39/libcst-1.8.0-cp310-cp310-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:969f84d458046199c936b667b8e7a0f03ad01a884801f67ddba7876a4412e21b", size = 2188750, upload-time = "2025-05-27T14:21:56.185Z" }, - { url = "https://files.pythonhosted.org/packages/16/d1/ee611abe8cdb82f9d661c22b424a6601636f5839861192c5e98543ad73fc/libcst-1.8.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:5cb5fb06800d8011e2fe135f4eb2d7d7a64275f9271187ca7bbdd17a83f7311d", size = 2310123, upload-time = "2025-05-27T14:21:58.784Z" }, - { url = "https://files.pythonhosted.org/packages/35/74/6445bea5acde2e2d008a9762bc8169fc075f733ef5338b59cc4c1e846a43/libcst-1.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:988e48e1b3b0a2c4959c0a015fe2fd13b98b603b6e7983c5bf5001b6b2bc3654", size = 2400245, upload-time = "2025-05-27T14:22:00.439Z" }, - { url = "https://files.pythonhosted.org/packages/53/16/6a666957e534bbcab1356bbecff1cfe928457bc18a8c49dec04f4795f77a/libcst-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8e06211a9e66c81434f75010869a3603d80a69c0e68f61eacd42da0b5b9871b3", size = 2278633, upload-time = "2025-05-27T14:22:02.474Z" }, - { url = "https://files.pythonhosted.org/packages/a1/a9/d6c576c0baa139f54fcd22b952ebeb89a38f6ecdb10d78bfd98d758345fa/libcst-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:59d538b914918c2e680a28c9ea6e0c46f08fb6317b6dcd2933a8aaa11090b745", size = 2387206, upload-time = "2025-05-27T14:22:04.495Z" }, - { url = "https://files.pythonhosted.org/packages/8b/81/cf19a5360ef796539453880306157be6ba7cf2a7fa0f6ef3664e8e98dba2/libcst-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:30128c805617472fe8896a271eb37062c38a6c81e6669c917f6c4b50a2e94bee", size = 2093440, upload-time = "2025-05-27T14:22:06.607Z" }, - { url = "https://files.pythonhosted.org/packages/fa/1e/a3a75be8462a88ec63ad4dea8bb36ede6879643e1a640025995793feee0a/libcst-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:f68d4830765387450b38055a64cb25379fb083397f21e4a90537edf4950a32cf", size = 1983474, upload-time = "2025-05-27T14:22:08.635Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/1d7f67d2ef6f875e9e8798c024f7cb3af3fe861e417bff485c69b655ac96/libcst-1.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:67d9720d91f507c87b3e5f070627ad640a00bc6cfdf5635f8c6ee9f2964cf71c", size = 2195106, upload-time = "2025-06-13T20:54:49.166Z" }, + { url = "https://files.pythonhosted.org/packages/82/d0/3d94fee2685f263fd8d85a83e2537fcc78b644eae450738bf2c72604f0df/libcst-1.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:94b7c032b72566077614a02baab1929739fd0af0cc1d46deaba4408b870faef2", size = 2080577, upload-time = "2025-06-13T20:54:51.518Z" }, + { url = "https://files.pythonhosted.org/packages/14/87/c9b49bebb9a930fdcb59bf841f1c45719d2a4a39c3eb7efacfd30a2bfb0a/libcst-1.8.2-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:11ea148902e3e1688afa392087c728ac3a843e54a87d334d1464d2097d3debb7", size = 2404076, upload-time = "2025-06-13T20:54:53.303Z" }, + { url = "https://files.pythonhosted.org/packages/49/fa/9ca145aa9033f9a8362a5663ceb28dfb67082574de8118424b6b8e445e7a/libcst-1.8.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:22c9473a2cc53faabcc95a0ac6ca4e52d127017bf34ba9bc0f8e472e44f7b38e", size = 2219813, upload-time = "2025-06-13T20:54:55.351Z" }, + { url = "https://files.pythonhosted.org/packages/0c/25/496a025c09e96116437a57fd34abefe84c041d930f832c6e42d84d9e028c/libcst-1.8.2-cp310-cp310-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b5269b96367e65793a7714608f6d906418eb056d59eaac9bba980486aabddbed", size = 2189782, upload-time = "2025-06-13T20:54:57.013Z" }, + { url = "https://files.pythonhosted.org/packages/b3/75/826b5772192826d70480efe93bab3e4f0b4a24d31031f45547257ad5f9a8/libcst-1.8.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:d20e932ddd9a389da57b060c26e84a24118c96ff6fc5dcc7b784da24e823b694", size = 2312403, upload-time = "2025-06-13T20:54:58.996Z" }, + { url = "https://files.pythonhosted.org/packages/93/f4/316fa14ea6c61ea8755672d60e012558f0216300b3819e72bebc7864a507/libcst-1.8.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a553d452004e44b841788f6faa7231a02157527ddecc89dbbe5b689b74822226", size = 2280566, upload-time = "2025-06-13T20:55:00.707Z" }, + { url = "https://files.pythonhosted.org/packages/fc/52/74b69350db379b1646739288b88ffab2981b2ad48407faf03df3768d7d2f/libcst-1.8.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fe762c4c390039b79b818cbc725d8663586b25351dc18a2704b0e357d69b924", size = 2388508, upload-time = "2025-06-13T20:55:02.769Z" }, + { url = "https://files.pythonhosted.org/packages/bc/c6/fa92699b537ed65e93c2869144e23bdf156ec81ae7b84b4f34cbc20d6048/libcst-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:5c513e64eff0f7bf2a908e2d987a98653eb33e1062ce2afd3a84af58159a24f9", size = 2093260, upload-time = "2025-06-13T20:55:04.771Z" }, + { url = "https://files.pythonhosted.org/packages/b0/ac/4ec4ae9da311f72cd97e930c325bb605e9ad0baaafcafadb0588e1dc5c4e/libcst-1.8.2-cp310-cp310-win_arm64.whl", hash = "sha256:41613fe08e647213546c7c59a5a1fc5484666e7d4cab6e80260c612acbb20e8c", size = 1985236, upload-time = "2025-06-13T20:55:06.317Z" }, ] [[package]] name = "limits" -version = "5.3.0" +version = "5.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "deprecated" }, { name = "packaging" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/05/73/db130858ee71699ba00315baf1bd743f575f74650857e05668f94caa485f/limits-5.3.0.tar.gz", hash = "sha256:c82749a7ba3821227a968b9dffe7e65f2f7b462c989929a21d6e1a241a170443", size = 95151, upload-time = "2025-06-13T23:51:24.118Z" } +sdist = { url = "https://files.pythonhosted.org/packages/79/32/95d4908a730213a5db40462b0e20c1b93a688b33eade8c4981bbf0ca08de/limits-5.4.0.tar.gz", hash = "sha256:27ebf55118e3c9045f0dbc476f4559b26d42f4b043db670afb8963f36cf07fd9", size = 95423, upload-time = "2025-06-16T16:18:53.03Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/03/2b/599852c0a2785d96b9871c92bf26829c5c6ca96bcb9f28d232f57b74d2db/limits-5.3.0-py3-none-any.whl", hash = "sha256:80b3df1506300d5425f6bf2845c3c1b5862d67ce229eaf6a6883a3a2e3cd65cd", size = 60819, upload-time = "2025-06-13T23:51:22.385Z" }, + { url = "https://files.pythonhosted.org/packages/9f/aa/b84c06700735332017bc095182756ee9fb71db650d89b50b6d63549c6fcd/limits-5.4.0-py3-none-any.whl", hash = "sha256:1afb03c0624cf004085532aa9524953f2565cf8b0a914e48dda89d172c13ceb7", size = 60950, upload-time = "2025-06-16T16:18:51.593Z" }, ] [[package]] @@ -1611,11 +2248,11 @@ wheels = [ [[package]] name = "markdown" -version = "3.8" +version = "3.8.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2f/15/222b423b0b88689c266d9eac4e61396fe2cc53464459d6a37618ac863b24/markdown-3.8.tar.gz", hash = "sha256:7df81e63f0df5c4b24b7d156eb81e4690595239b7d70937d0409f1b0de319c6f", size = 360906, upload-time = "2025-04-11T14:42:50.928Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/c2/4ab49206c17f75cb08d6311171f2d65798988db4360c4d1485bd0eedd67c/markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45", size = 362071, upload-time = "2025-06-19T17:12:44.483Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/51/3f/afe76f8e2246ffbc867440cbcf90525264df0e658f8a5ca1f872b3f6192a/markdown-3.8-py3-none-any.whl", hash = "sha256:794a929b79c5af141ef5ab0f2f642d0f7b1872981250230e72682346f7cc90dc", size = 106210, upload-time = "2025-04-11T14:42:49.178Z" }, + { url = "https://files.pythonhosted.org/packages/96/2b/34cc11786bc00d0f04d0f5fdc3a2b1ae0b6239eef72d3d345805f9ad92a1/markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24", size = 106827, upload-time = "2025-06-19T17:12:42.994Z" }, ] [[package]] @@ -1650,15 +2287,14 @@ wheels = [ [[package]] name = "marshmallow" -version = "4.0.0" +version = "3.26.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "backports-datetime-fromisoformat" }, - { name = "typing-extensions" }, + { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1e/ff/26df5a9f5ac57ccf693a5854916ab47243039d2aa9e0fe5f5a0331e7b74b/marshmallow-4.0.0.tar.gz", hash = "sha256:3b6e80aac299a7935cfb97ed01d1854fb90b5079430969af92118ea1b12a8d55", size = 220507, upload-time = "2025-04-17T02:25:54.925Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/5e/5e53d26b42ab75491cda89b871dab9e97c840bf12c63ec58a1919710cd06/marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6", size = 221825, upload-time = "2025-02-03T15:32:25.093Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d6/26/6cc45d156f44dbe1d5696d9e54042e4dcaf7b946c0b86df6a97d29706f32/marshmallow-4.0.0-py3-none-any.whl", hash = "sha256:e7b0528337e9990fd64950f8a6b3a1baabed09ad17a0dfb844d701151f92d203", size = 48420, upload-time = "2025-04-17T02:25:53.375Z" }, + { url = "https://files.pythonhosted.org/packages/34/75/51952c7b2d3873b44a0028b1bd26a25078c18f92f256608e8d1dc61b39fd/marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c", size = 50878, upload-time = "2025-02-03T15:32:22.295Z" }, ] [[package]] @@ -1744,7 +2380,7 @@ wheels = [ [[package]] name = "mkdocs-material" -version = "9.6.14" +version = "9.6.15" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "babel" }, @@ -1759,9 +2395,9 @@ dependencies = [ { name = "pymdown-extensions" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b3/fa/0101de32af88f87cf5cc23ad5f2e2030d00995f74e616306513431b8ab4b/mkdocs_material-9.6.14.tar.gz", hash = "sha256:39d795e90dce6b531387c255bd07e866e027828b7346d3eba5ac3de265053754", size = 3951707, upload-time = "2025-05-13T13:27:57.173Z" } +sdist = { url = "https://files.pythonhosted.org/packages/95/c1/f804ba2db2ddc2183e900befe7dad64339a34fa935034e1ab405289d0a97/mkdocs_material-9.6.15.tar.gz", hash = "sha256:64adf8fa8dba1a17905b6aee1894a5aafd966d4aeb44a11088519b0f5ca4f1b5", size = 3951836, upload-time = "2025-07-01T10:14:15.671Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/a1/7fdb959ad592e013c01558822fd3c22931a95a0f08cf0a7c36da13a5b2b5/mkdocs_material-9.6.14-py3-none-any.whl", hash = "sha256:3b9cee6d3688551bf7a8e8f41afda97a3c39a12f0325436d76c86706114b721b", size = 8703767, upload-time = "2025-05-13T13:27:54.089Z" }, + { url = "https://files.pythonhosted.org/packages/1d/30/dda19f0495a9096b64b6b3c07c4bfcff1c76ee0fc521086d53593f18b4c0/mkdocs_material-9.6.15-py3-none-any.whl", hash = "sha256:ac969c94d4fe5eb7c924b6d2f43d7db41159ea91553d18a9afc4780c34f2717a", size = 8716840, upload-time = "2025-07-01T10:14:13.18Z" }, ] [[package]] @@ -1799,52 +2435,51 @@ wheels = [ [[package]] name = "multidict" -version = "6.4.4" +version = "6.6.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/91/2f/a3470242707058fe856fe59241eee5635d79087100b7042a867368863a27/multidict-6.4.4.tar.gz", hash = "sha256:69ee9e6ba214b5245031b76233dd95408a0fd57fdb019ddcc1ead4790932a8e8", size = 90183, upload-time = "2025-05-19T14:16:37.381Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/92/0926a5baafa164b5d0ade3cd7932be39310375d7e25c9d7ceca05cb26a45/multidict-6.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8adee3ac041145ffe4488ea73fa0a622b464cc25340d98be76924d0cda8545ff", size = 66052, upload-time = "2025-05-19T14:13:49.944Z" }, - { url = "https://files.pythonhosted.org/packages/b2/54/8a857ae4f8f643ec444d91f419fdd49cc7a90a2ca0e42d86482b604b63bd/multidict-6.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b61e98c3e2a861035aaccd207da585bdcacef65fe01d7a0d07478efac005e028", size = 38867, upload-time = "2025-05-19T14:13:51.92Z" }, - { url = "https://files.pythonhosted.org/packages/9e/5f/63add9069f945c19bc8b217ea6b0f8a1ad9382eab374bb44fae4354b3baf/multidict-6.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:75493f28dbadecdbb59130e74fe935288813301a8554dc32f0c631b6bdcdf8b0", size = 38138, upload-time = "2025-05-19T14:13:53.778Z" }, - { url = "https://files.pythonhosted.org/packages/97/8b/fbd9c0fc13966efdb4a47f5bcffff67a4f2a3189fbeead5766eaa4250b20/multidict-6.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffc3c6a37e048b5395ee235e4a2a0d639c2349dffa32d9367a42fc20d399772", size = 220433, upload-time = "2025-05-19T14:13:55.346Z" }, - { url = "https://files.pythonhosted.org/packages/a9/c4/5132b2d75b3ea2daedb14d10f91028f09f74f5b4d373b242c1b8eec47571/multidict-6.4.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:87cb72263946b301570b0f63855569a24ee8758aaae2cd182aae7d95fbc92ca7", size = 218059, upload-time = "2025-05-19T14:13:56.993Z" }, - { url = "https://files.pythonhosted.org/packages/1a/70/f1e818c7a29b908e2d7b4fafb1d7939a41c64868e79de2982eea0a13193f/multidict-6.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bbf7bd39822fd07e3609b6b4467af4c404dd2b88ee314837ad1830a7f4a8299", size = 231120, upload-time = "2025-05-19T14:13:58.333Z" }, - { url = "https://files.pythonhosted.org/packages/b4/7e/95a194d85f27d5ef9cbe48dff9ded722fc6d12fedf641ec6e1e680890be7/multidict-6.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1f7cbd4f1f44ddf5fd86a8675b7679176eae770f2fc88115d6dddb6cefb59bc", size = 227457, upload-time = "2025-05-19T14:13:59.663Z" }, - { url = "https://files.pythonhosted.org/packages/25/2b/590ad220968d1babb42f265debe7be5c5c616df6c5688c995a06d8a9b025/multidict-6.4.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb5ac9e5bfce0e6282e7f59ff7b7b9a74aa8e5c60d38186a4637f5aa764046ad", size = 219111, upload-time = "2025-05-19T14:14:01.019Z" }, - { url = "https://files.pythonhosted.org/packages/e0/f0/b07682b995d3fb5313f339b59d7de02db19ba0c02d1f77c27bdf8212d17c/multidict-6.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4efc31dfef8c4eeb95b6b17d799eedad88c4902daba39ce637e23a17ea078915", size = 213012, upload-time = "2025-05-19T14:14:02.396Z" }, - { url = "https://files.pythonhosted.org/packages/24/56/c77b5f36feef2ec92f1119756e468ac9c3eebc35aa8a4c9e51df664cbbc9/multidict-6.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9fcad2945b1b91c29ef2b4050f590bfcb68d8ac8e0995a74e659aa57e8d78e01", size = 225408, upload-time = "2025-05-19T14:14:04.826Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b3/e8189b82af9b198b47bc637766208fc917189eea91d674bad417e657bbdf/multidict-6.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:d877447e7368c7320832acb7159557e49b21ea10ffeb135c1077dbbc0816b598", size = 214396, upload-time = "2025-05-19T14:14:06.187Z" }, - { url = "https://files.pythonhosted.org/packages/20/e0/200d14c84e35ae13ee99fd65dc106e1a1acb87a301f15e906fc7d5b30c17/multidict-6.4.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:33a12ebac9f380714c298cbfd3e5b9c0c4e89c75fe612ae496512ee51028915f", size = 222237, upload-time = "2025-05-19T14:14:07.778Z" }, - { url = "https://files.pythonhosted.org/packages/13/f3/bb3df40045ca8262694a3245298732ff431dc781414a89a6a364ebac6840/multidict-6.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0f14ea68d29b43a9bf37953881b1e3eb75b2739e896ba4a6aa4ad4c5b9ffa145", size = 231425, upload-time = "2025-05-19T14:14:09.516Z" }, - { url = "https://files.pythonhosted.org/packages/85/3b/538563dc18514384dac169bcba938753ad9ab4d4c8d49b55d6ae49fb2579/multidict-6.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0327ad2c747a6600e4797d115d3c38a220fdb28e54983abe8964fd17e95ae83c", size = 226251, upload-time = "2025-05-19T14:14:10.82Z" }, - { url = "https://files.pythonhosted.org/packages/56/79/77e1a65513f09142358f1beb1d4cbc06898590b34a7de2e47023e3c5a3a2/multidict-6.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d1a20707492db9719a05fc62ee215fd2c29b22b47c1b1ba347f9abc831e26683", size = 220363, upload-time = "2025-05-19T14:14:12.638Z" }, - { url = "https://files.pythonhosted.org/packages/16/57/67b0516c3e348f8daaa79c369b3de4359a19918320ab82e2e586a1c624ef/multidict-6.4.4-cp310-cp310-win32.whl", hash = "sha256:d83f18315b9fca5db2452d1881ef20f79593c4aa824095b62cb280019ef7aa3d", size = 35175, upload-time = "2025-05-19T14:14:14.805Z" }, - { url = "https://files.pythonhosted.org/packages/86/5a/4ed8fec642d113fa653777cda30ef67aa5c8a38303c091e24c521278a6c6/multidict-6.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:9c17341ee04545fd962ae07330cb5a39977294c883485c8d74634669b1f7fe04", size = 38678, upload-time = "2025-05-19T14:14:16.949Z" }, - { url = "https://files.pythonhosted.org/packages/84/5d/e17845bb0fa76334477d5de38654d27946d5b5d3695443987a094a71b440/multidict-6.4.4-py3-none-any.whl", hash = "sha256:bd4557071b561a8b3b6075c3ce93cf9bfb6182cb241805c3d66ced3b75eff4ac", size = 10481, upload-time = "2025-05-19T14:16:36.024Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/3d/2c/5dad12e82fbdf7470f29bff2171484bf07cb3b16ada60a6589af8f376440/multidict-6.6.3.tar.gz", hash = "sha256:798a9eb12dab0a6c2e29c1de6f3468af5cb2da6053a20dfa3344907eed0937cc", size = 101006, upload-time = "2025-06-30T15:53:46.929Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/67/414933982bce2efce7cbcb3169eaaf901e0f25baec69432b4874dfb1f297/multidict-6.6.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a2be5b7b35271f7fff1397204ba6708365e3d773579fe2a30625e16c4b4ce817", size = 77017, upload-time = "2025-06-30T15:50:58.931Z" }, + { url = "https://files.pythonhosted.org/packages/8a/fe/d8a3ee1fad37dc2ef4f75488b0d9d4f25bf204aad8306cbab63d97bff64a/multidict-6.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12f4581d2930840295c461764b9a65732ec01250b46c6b2c510d7ee68872b140", size = 44897, upload-time = "2025-06-30T15:51:00.999Z" }, + { url = "https://files.pythonhosted.org/packages/1f/e0/265d89af8c98240265d82b8cbcf35897f83b76cd59ee3ab3879050fd8c45/multidict-6.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dd7793bab517e706c9ed9d7310b06c8672fd0aeee5781bfad612f56b8e0f7d14", size = 44574, upload-time = "2025-06-30T15:51:02.449Z" }, + { url = "https://files.pythonhosted.org/packages/e6/05/6b759379f7e8e04ccc97cfb2a5dcc5cdbd44a97f072b2272dc51281e6a40/multidict-6.6.3-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:72d8815f2cd3cf3df0f83cac3f3ef801d908b2d90409ae28102e0553af85545a", size = 225729, upload-time = "2025-06-30T15:51:03.794Z" }, + { url = "https://files.pythonhosted.org/packages/4e/f5/8d5a15488edd9a91fa4aad97228d785df208ed6298580883aa3d9def1959/multidict-6.6.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:531e331a2ee53543ab32b16334e2deb26f4e6b9b28e41f8e0c87e99a6c8e2d69", size = 242515, upload-time = "2025-06-30T15:51:05.002Z" }, + { url = "https://files.pythonhosted.org/packages/6e/b5/a8f317d47d0ac5bb746d6d8325885c8967c2a8ce0bb57be5399e3642cccb/multidict-6.6.3-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:42ca5aa9329a63be8dc49040f63817d1ac980e02eeddba763a9ae5b4027b9c9c", size = 222224, upload-time = "2025-06-30T15:51:06.148Z" }, + { url = "https://files.pythonhosted.org/packages/76/88/18b2a0d5e80515fa22716556061189c2853ecf2aa2133081ebbe85ebea38/multidict-6.6.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:208b9b9757060b9faa6f11ab4bc52846e4f3c2fb8b14d5680c8aac80af3dc751", size = 253124, upload-time = "2025-06-30T15:51:07.375Z" }, + { url = "https://files.pythonhosted.org/packages/62/bf/ebfcfd6b55a1b05ef16d0775ae34c0fe15e8dab570d69ca9941073b969e7/multidict-6.6.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:acf6b97bd0884891af6a8b43d0f586ab2fcf8e717cbd47ab4bdddc09e20652d8", size = 251529, upload-time = "2025-06-30T15:51:08.691Z" }, + { url = "https://files.pythonhosted.org/packages/44/11/780615a98fd3775fc309d0234d563941af69ade2df0bb82c91dda6ddaea1/multidict-6.6.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:68e9e12ed00e2089725669bdc88602b0b6f8d23c0c95e52b95f0bc69f7fe9b55", size = 241627, upload-time = "2025-06-30T15:51:10.605Z" }, + { url = "https://files.pythonhosted.org/packages/28/3d/35f33045e21034b388686213752cabc3a1b9d03e20969e6fa8f1b1d82db1/multidict-6.6.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:05db2f66c9addb10cfa226e1acb363450fab2ff8a6df73c622fefe2f5af6d4e7", size = 239351, upload-time = "2025-06-30T15:51:12.18Z" }, + { url = "https://files.pythonhosted.org/packages/6e/cc/ff84c03b95b430015d2166d9aae775a3985d757b94f6635010d0038d9241/multidict-6.6.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:0db58da8eafb514db832a1b44f8fa7906fdd102f7d982025f816a93ba45e3dcb", size = 233429, upload-time = "2025-06-30T15:51:13.533Z" }, + { url = "https://files.pythonhosted.org/packages/2e/f0/8cd49a0b37bdea673a4b793c2093f2f4ba8e7c9d6d7c9bd672fd6d38cd11/multidict-6.6.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:14117a41c8fdb3ee19c743b1c027da0736fdb79584d61a766da53d399b71176c", size = 243094, upload-time = "2025-06-30T15:51:14.815Z" }, + { url = "https://files.pythonhosted.org/packages/96/19/5d9a0cfdafe65d82b616a45ae950975820289069f885328e8185e64283c2/multidict-6.6.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:877443eaaabcd0b74ff32ebeed6f6176c71850feb7d6a1d2db65945256ea535c", size = 248957, upload-time = "2025-06-30T15:51:16.076Z" }, + { url = "https://files.pythonhosted.org/packages/e6/dc/c90066151da87d1e489f147b9b4327927241e65f1876702fafec6729c014/multidict-6.6.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:70b72e749a4f6e7ed8fb334fa8d8496384840319512746a5f42fa0aec79f4d61", size = 243590, upload-time = "2025-06-30T15:51:17.413Z" }, + { url = "https://files.pythonhosted.org/packages/ec/39/458afb0cccbb0ee9164365273be3e039efddcfcb94ef35924b7dbdb05db0/multidict-6.6.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:43571f785b86afd02b3855c5ac8e86ec921b760298d6f82ff2a61daf5a35330b", size = 237487, upload-time = "2025-06-30T15:51:19.039Z" }, + { url = "https://files.pythonhosted.org/packages/35/38/0016adac3990426610a081787011177e661875546b434f50a26319dc8372/multidict-6.6.3-cp310-cp310-win32.whl", hash = "sha256:20c5a0c3c13a15fd5ea86c42311859f970070e4e24de5a550e99d7c271d76318", size = 41390, upload-time = "2025-06-30T15:51:20.362Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d2/17897a8f3f2c5363d969b4c635aa40375fe1f09168dc09a7826780bfb2a4/multidict-6.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:ab0a34a007704c625e25a9116c6770b4d3617a071c8a7c30cd338dfbadfe6485", size = 45954, upload-time = "2025-06-30T15:51:21.383Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5f/d4a717c1e457fe44072e33fa400d2b93eb0f2819c4d669381f925b7cba1f/multidict-6.6.3-cp310-cp310-win_arm64.whl", hash = "sha256:769841d70ca8bdd140a715746199fc6473414bd02efd678d75681d2d6a8986c5", size = 42981, upload-time = "2025-06-30T15:51:22.809Z" }, + { url = "https://files.pythonhosted.org/packages/d8/30/9aec301e9772b098c1f5c0ca0279237c9766d94b97802e9888010c64b0ed/multidict-6.6.3-py3-none-any.whl", hash = "sha256:8db10f29c7541fc5da4defd8cd697e1ca429db743fa716325f236079b96f775a", size = 12313, upload-time = "2025-06-30T15:53:45.437Z" }, ] [[package]] name = "mypy" -version = "1.16.0" +version = "1.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mypy-extensions" }, - { name = "pathspec" }, { name = "tomli" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d4/38/13c2f1abae94d5ea0354e146b95a1be9b2137a0d506728e0da037c4276f6/mypy-1.16.0.tar.gz", hash = "sha256:84b94283f817e2aa6350a14b4a8fb2a35a53c286f97c9d30f53b63620e7af8ab", size = 3323139, upload-time = "2025-05-29T13:46:12.532Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/1e/a587a862c766a755a58b62d8c00aed11b74a15dc415c1bf5da7b607b0efd/mypy-1.9.0.tar.gz", hash = "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974", size = 2995901, upload-time = "2024-03-08T16:10:12.412Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/64/5e/a0485f0608a3d67029d3d73cec209278b025e3493a3acfda3ef3a88540fd/mypy-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7909541fef256527e5ee9c0a7e2aeed78b6cda72ba44298d1334fe7881b05c5c", size = 10967416, upload-time = "2025-05-29T13:34:17.783Z" }, - { url = "https://files.pythonhosted.org/packages/4b/53/5837c221f74c0d53a4bfc3003296f8179c3a2a7f336d7de7bbafbe96b688/mypy-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e71d6f0090c2256c713ed3d52711d01859c82608b5d68d4fa01a3fe30df95571", size = 10087654, upload-time = "2025-05-29T13:32:37.878Z" }, - { url = "https://files.pythonhosted.org/packages/29/59/5fd2400352c3093bed4c09017fe671d26bc5bb7e6ef2d4bf85f2a2488104/mypy-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:936ccfdd749af4766be824268bfe22d1db9eb2f34a3ea1d00ffbe5b5265f5491", size = 11875192, upload-time = "2025-05-29T13:34:54.281Z" }, - { url = "https://files.pythonhosted.org/packages/ad/3e/4bfec74663a64c2012f3e278dbc29ffe82b121bc551758590d1b6449ec0c/mypy-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4086883a73166631307fdd330c4a9080ce24913d4f4c5ec596c601b3a4bdd777", size = 12612939, upload-time = "2025-05-29T13:33:14.766Z" }, - { url = "https://files.pythonhosted.org/packages/88/1f/fecbe3dcba4bf2ca34c26ca016383a9676711907f8db4da8354925cbb08f/mypy-1.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:feec38097f71797da0231997e0de3a58108c51845399669ebc532c815f93866b", size = 12874719, upload-time = "2025-05-29T13:21:52.09Z" }, - { url = "https://files.pythonhosted.org/packages/f3/51/c2d280601cd816c43dfa512a759270d5a5ef638d7ac9bea9134c8305a12f/mypy-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:09a8da6a0ee9a9770b8ff61b39c0bb07971cda90e7297f4213741b48a0cc8d93", size = 9487053, upload-time = "2025-05-29T13:33:29.797Z" }, - { url = "https://files.pythonhosted.org/packages/99/a3/6ed10530dec8e0fdc890d81361260c9ef1f5e5c217ad8c9b21ecb2b8366b/mypy-1.16.0-py3-none-any.whl", hash = "sha256:29e1499864a3888bca5c1542f2d7232c6e586295183320caa95758fc84034031", size = 2265773, upload-time = "2025-05-29T13:35:18.762Z" }, + { url = "https://files.pythonhosted.org/packages/1a/a7/0b180ef81daebabd6ef011f12ecd1ba4c0747aa8c460a8caf79f38789b90/mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f", size = 10679966, upload-time = "2024-03-08T16:09:45.595Z" }, + { url = "https://files.pythonhosted.org/packages/d0/41/87f727fdbb43a1f975df5fe5d038dad552440b1e5c21f999bce0d83fd847/mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed", size = 9841188, upload-time = "2024-03-08T16:09:33.06Z" }, + { url = "https://files.pythonhosted.org/packages/e1/87/b508b34309359daa00e0e76d9a0dbe43031866af49b279861f69c76e5d70/mypy-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150", size = 12546263, upload-time = "2024-03-08T16:09:12.667Z" }, + { url = "https://files.pythonhosted.org/packages/3d/23/b4282a2b59b74a3bf4a16713491348f72d843e218a73a12399bc98754c48/mypy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374", size = 12611869, upload-time = "2024-03-08T16:08:36.513Z" }, + { url = "https://files.pythonhosted.org/packages/16/2a/28f290537d1ad1d91d39a926d6bb862c4e333ee5bb410a75bc3be8da20d8/mypy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03", size = 9227793, upload-time = "2024-03-08T16:09:37.099Z" }, + { url = "https://files.pythonhosted.org/packages/60/db/0ba2eaedca52bf5276275e8489951c26206030b3d31bf06f00875ae75d5d/mypy-1.9.0-py3-none-any.whl", hash = "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e", size = 2555887, upload-time = "2024-03-08T16:09:48.584Z" }, ] [[package]] @@ -1858,33 +2493,27 @@ wheels = [ [[package]] name = "numpy" -version = "2.2.6" +version = "1.26.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +sdist = { url = "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", size = 15786129, upload-time = "2024-02-06T00:26:44.495Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, - { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, - { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, - { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, - { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, - { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, - { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, - { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, - { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, - { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, - { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, - { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, - { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, - { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, + { url = "https://files.pythonhosted.org/packages/a7/94/ace0fdea5241a27d13543ee117cbc65868e82213fb31a8eb7fe9ff23f313/numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0", size = 20631468, upload-time = "2024-02-05T23:48:01.194Z" }, + { url = "https://files.pythonhosted.org/packages/20/f7/b24208eba89f9d1b58c1668bc6c8c4fd472b20c45573cb767f59d49fb0f6/numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a", size = 13966411, upload-time = "2024-02-05T23:48:29.038Z" }, + { url = "https://files.pythonhosted.org/packages/fc/a5/4beee6488160798683eed5bdb7eead455892c3b4e1f78d79d8d3f3b084ac/numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4", size = 14219016, upload-time = "2024-02-05T23:48:54.098Z" }, + { url = "https://files.pythonhosted.org/packages/4b/d7/ecf66c1cd12dc28b4040b15ab4d17b773b87fa9d29ca16125de01adb36cd/numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f", size = 18240889, upload-time = "2024-02-05T23:49:25.361Z" }, + { url = "https://files.pythonhosted.org/packages/24/03/6f229fe3187546435c4f6f89f6d26c129d4f5bed40552899fcf1f0bf9e50/numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a", size = 13876746, upload-time = "2024-02-05T23:49:51.983Z" }, + { url = "https://files.pythonhosted.org/packages/39/fe/39ada9b094f01f5a35486577c848fe274e374bbf8d8f472e1423a0bbd26d/numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2", size = 18078620, upload-time = "2024-02-05T23:50:22.515Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ef/6ad11d51197aad206a9ad2286dc1aac6a378059e06e8cf22cd08ed4f20dc/numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07", size = 5972659, upload-time = "2024-02-05T23:50:35.834Z" }, + { url = "https://files.pythonhosted.org/packages/19/77/538f202862b9183f54108557bfda67e17603fc560c384559e769321c9d92/numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5", size = 15808905, upload-time = "2024-02-05T23:51:03.701Z" }, ] [[package]] name = "oauthlib" -version = "3.2.2" +version = "3.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6d/fa/fbf4001037904031639e6bfbfc02badfc7e12f137a8afa254df6c4c8a670/oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918", size = 177352, upload-time = "2022-10-17T20:04:27.471Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/5f/19930f824ffeb0ad4372da4812c50edbd1434f678c90c2733e1188edfc63/oauthlib-3.3.1.tar.gz", hash = "sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9", size = 185918, upload-time = "2025-06-19T22:48:08.269Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca", size = 151688, upload-time = "2022-10-17T20:04:24.037Z" }, + { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, ] [[package]] @@ -2011,11 +2640,11 @@ wheels = [ [[package]] name = "packaging" -version = "24.2" +version = "25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950, upload-time = "2024-11-08T09:47:47.202Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451, upload-time = "2024-11-08T09:47:44.722Z" }, + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, ] [[package]] @@ -2029,7 +2658,7 @@ wheels = [ [[package]] name = "pandas" -version = "2.3.0" +version = "2.1.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, @@ -2037,15 +2666,14 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/51/48f713c4c728d7c55ef7444ba5ea027c26998d96d1a40953b346438602fc/pandas-2.3.0.tar.gz", hash = "sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133", size = 4484490, upload-time = "2025-06-05T03:27:54.133Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/41/eb562668eaf93790762f600536b28c97b45803cba9253cd8e436cda96aef/pandas-2.1.4.tar.gz", hash = "sha256:fcb68203c833cc735321512e13861358079a96c174a61f5116a1de89c58c0ef7", size = 4274800, upload-time = "2023-12-08T15:38:29.713Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/2d/df6b98c736ba51b8eaa71229e8fcd91233a831ec00ab520e1e23090cc072/pandas-2.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:625466edd01d43b75b1883a64d859168e4556261a5035b32f9d743b67ef44634", size = 11527531, upload-time = "2025-06-05T03:25:48.648Z" }, - { url = "https://files.pythonhosted.org/packages/77/1c/3f8c331d223f86ba1d0ed7d3ed7fcf1501c6f250882489cc820d2567ddbf/pandas-2.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6872d695c896f00df46b71648eea332279ef4077a409e2fe94220208b6bb675", size = 10774764, upload-time = "2025-06-05T03:25:53.228Z" }, - { url = "https://files.pythonhosted.org/packages/1b/45/d2599400fad7fe06b849bd40b52c65684bc88fbe5f0a474d0513d057a377/pandas-2.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4dd97c19bd06bc557ad787a15b6489d2614ddaab5d104a0310eb314c724b2d2", size = 11711963, upload-time = "2025-06-05T03:25:56.855Z" }, - { url = "https://files.pythonhosted.org/packages/66/f8/5508bc45e994e698dbc93607ee6b9b6eb67df978dc10ee2b09df80103d9e/pandas-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:034abd6f3db8b9880aaee98f4f5d4dbec7c4829938463ec046517220b2f8574e", size = 12349446, upload-time = "2025-06-05T03:26:01.292Z" }, - { url = "https://files.pythonhosted.org/packages/f7/fc/17851e1b1ea0c8456ba90a2f514c35134dd56d981cf30ccdc501a0adeac4/pandas-2.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23c2b2dc5213810208ca0b80b8666670eb4660bbfd9d45f58592cc4ddcfd62e1", size = 12920002, upload-time = "2025-06-06T00:00:07.925Z" }, - { url = "https://files.pythonhosted.org/packages/a1/9b/8743be105989c81fa33f8e2a4e9822ac0ad4aaf812c00fee6bb09fc814f9/pandas-2.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:39ff73ec07be5e90330cc6ff5705c651ace83374189dcdcb46e6ff54b4a72cd6", size = 13651218, upload-time = "2025-06-05T03:26:09.731Z" }, - { url = "https://files.pythonhosted.org/packages/26/fa/8eeb2353f6d40974a6a9fd4081ad1700e2386cf4264a8f28542fd10b3e38/pandas-2.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:40cecc4ea5abd2921682b57532baea5588cc5f80f0231c624056b146887274d2", size = 11082485, upload-time = "2025-06-05T03:26:17.572Z" }, + { url = "https://files.pythonhosted.org/packages/e3/cc/ad068419c245c504315ace4e19cc17b1205e162ad51957485b048ffadb80/pandas-2.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bdec823dc6ec53f7a6339a0e34c68b144a7a1fd28d80c260534c39c62c5bf8c9", size = 11724786, upload-time = "2023-12-08T15:37:00.781Z" }, + { url = "https://files.pythonhosted.org/packages/fd/16/40c7c588f8199520e173014c614178f6083868f5af1033c52079270cd266/pandas-2.1.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:294d96cfaf28d688f30c918a765ea2ae2e0e71d3536754f4b6de0ea4a496d034", size = 10912401, upload-time = "2023-12-08T15:37:06.13Z" }, + { url = "https://files.pythonhosted.org/packages/15/83/4a164e69d08c271be303acb471a38172ae55d77db58d29f99cf186b80434/pandas-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b728fb8deba8905b319f96447a27033969f3ea1fea09d07d296c9030ab2ed1d", size = 14812171, upload-time = "2023-12-08T15:37:10.786Z" }, + { url = "https://files.pythonhosted.org/packages/b1/67/aca1f6e215d957d24d0a290321f368503305480268f9617bf625243e9dea/pandas-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00028e6737c594feac3c2df15636d73ace46b8314d236100b57ed7e4b9ebe8d9", size = 12265858, upload-time = "2023-12-08T15:37:14.928Z" }, + { url = "https://files.pythonhosted.org/packages/fa/8c/de2896a7167c4f9001790703ce8134f65db21c163033ae62be3615fc8a1f/pandas-2.1.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:426dc0f1b187523c4db06f96fb5c8d1a845e259c99bda74f7de97bd8a3bb3139", size = 13068680, upload-time = "2023-12-08T15:37:18.142Z" }, + { url = "https://files.pythonhosted.org/packages/b3/70/56da2b82f848baf34bfd8c35e606ce45049b371ffaaaa7f0427093d29950/pandas-2.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:f237e6ca6421265643608813ce9793610ad09b40154a3344a088159590469e46", size = 10668573, upload-time = "2023-12-08T15:37:22.204Z" }, ] [[package]] @@ -2209,19 +2837,20 @@ wheels = [ [[package]] name = "pyarrow" -version = "20.0.0" +version = "16.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/ee/a7810cb9f3d6e9238e61d312076a9859bf3668fd21c69744de9532383912/pyarrow-20.0.0.tar.gz", hash = "sha256:febc4a913592573c8d5805091a6c2b5064c8bd6e002131f01061797d91c783c1", size = 1125187, upload-time = "2025-04-27T12:34:23.264Z" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1a/f2/67533f116deb6dae7a0ac04681695fe06135912253a115c5ecdc714a32d4/pyarrow-16.1.0.tar.gz", hash = "sha256:15fbb22ea96d11f0b5768504a3f961edab25eaf4197c341720c4a387f6c60315", size = 1080280, upload-time = "2024-05-14T13:54:39.227Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/23/77094eb8ee0dbe88441689cb6afc40ac312a1e15d3a7acc0586999518222/pyarrow-20.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c7dd06fd7d7b410ca5dc839cc9d485d2bc4ae5240851bcd45d85105cc90a47d7", size = 30832591, upload-time = "2025-04-27T12:27:27.89Z" }, - { url = "https://files.pythonhosted.org/packages/c3/d5/48cc573aff00d62913701d9fac478518f693b30c25f2c157550b0b2565cb/pyarrow-20.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:d5382de8dc34c943249b01c19110783d0d64b207167c728461add1ecc2db88e4", size = 32273686, upload-time = "2025-04-27T12:27:36.816Z" }, - { url = "https://files.pythonhosted.org/packages/37/df/4099b69a432b5cb412dd18adc2629975544d656df3d7fda6d73c5dba935d/pyarrow-20.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6415a0d0174487456ddc9beaead703d0ded5966129fa4fd3114d76b5d1c5ceae", size = 41337051, upload-time = "2025-04-27T12:27:44.4Z" }, - { url = "https://files.pythonhosted.org/packages/4c/27/99922a9ac1c9226f346e3a1e15e63dee6f623ed757ff2893f9d6994a69d3/pyarrow-20.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15aa1b3b2587e74328a730457068dc6c89e6dcbf438d4369f572af9d320a25ee", size = 42404659, upload-time = "2025-04-27T12:27:51.715Z" }, - { url = "https://files.pythonhosted.org/packages/21/d1/71d91b2791b829c9e98f1e0d85be66ed93aff399f80abb99678511847eaa/pyarrow-20.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:5605919fbe67a7948c1f03b9f3727d82846c053cd2ce9303ace791855923fd20", size = 40695446, upload-time = "2025-04-27T12:27:59.643Z" }, - { url = "https://files.pythonhosted.org/packages/f1/ca/ae10fba419a6e94329707487835ec721f5a95f3ac9168500bcf7aa3813c7/pyarrow-20.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a5704f29a74b81673d266e5ec1fe376f060627c2e42c5c7651288ed4b0db29e9", size = 42278528, upload-time = "2025-04-27T12:28:07.297Z" }, - { url = "https://files.pythonhosted.org/packages/7a/a6/aba40a2bf01b5d00cf9cd16d427a5da1fad0fb69b514ce8c8292ab80e968/pyarrow-20.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:00138f79ee1b5aca81e2bdedb91e3739b987245e11fa3c826f9e57c5d102fb75", size = 42918162, upload-time = "2025-04-27T12:28:15.716Z" }, - { url = "https://files.pythonhosted.org/packages/93/6b/98b39650cd64f32bf2ec6d627a9bd24fcb3e4e6ea1873c5e1ea8a83b1a18/pyarrow-20.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f2d67ac28f57a362f1a2c1e6fa98bfe2f03230f7e15927aecd067433b1e70ce8", size = 44550319, upload-time = "2025-04-27T12:28:27.026Z" }, - { url = "https://files.pythonhosted.org/packages/ab/32/340238be1eb5037e7b5de7e640ee22334417239bc347eadefaf8c373936d/pyarrow-20.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:4a8b029a07956b8d7bd742ffca25374dd3f634b35e46cc7a7c3fa4c75b297191", size = 25770759, upload-time = "2025-04-27T12:28:33.702Z" }, + { url = "https://files.pythonhosted.org/packages/e0/84/8a80b9ed7f595073ee920c2eafaecaeda4b8adffee8dcb88275fce4609d8/pyarrow-16.1.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:17e23b9a65a70cc733d8b738baa6ad3722298fa0c81d88f63ff94bf25eaa77b9", size = 28348792, upload-time = "2024-05-14T13:37:15.029Z" }, + { url = "https://files.pythonhosted.org/packages/dc/5c/4d5c43361ee36b8bca29a3a7afaa9d651aa8d5dc05d87ab507e6b2e4e2f8/pyarrow-16.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4740cc41e2ba5d641071d0ab5e9ef9b5e6e8c7611351a5cb7c1d175eaf43674a", size = 26012856, upload-time = "2024-05-14T13:37:38.742Z" }, + { url = "https://files.pythonhosted.org/packages/8d/4b/82f67b58a4e0ac4ebaa0e04d7a17b59ed4fbd63094f62893160f606350a0/pyarrow-16.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98100e0268d04e0eec47b73f20b39c45b4006f3c4233719c3848aa27a03c1aef", size = 38663112, upload-time = "2024-05-14T13:38:12.683Z" }, + { url = "https://files.pythonhosted.org/packages/91/83/57572c088ec185582f04b607d545a4a6ef7599c0a3c1e60d397743b0d609/pyarrow-16.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f68f409e7b283c085f2da014f9ef81e885d90dcd733bd648cfba3ef265961848", size = 40949054, upload-time = "2024-05-14T13:38:48.435Z" }, + { url = "https://files.pythonhosted.org/packages/a4/53/3446907cced548d8beaf1be9dfa9d52b7ec38fa44f25d292d7999e6bf509/pyarrow-16.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:a8914cd176f448e09746037b0c6b3a9d7688cef451ec5735094055116857580c", size = 38060550, upload-time = "2024-05-14T13:39:22.516Z" }, + { url = "https://files.pythonhosted.org/packages/b0/54/eb7fcfc0e1ec6a8404cadd11ac957b3ee4fd0774225cafe3ffe6287861cb/pyarrow-16.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:48be160782c0556156d91adbdd5a4a7e719f8d407cb46ae3bb4eaee09b3111bd", size = 40806957, upload-time = "2024-05-14T13:39:59.008Z" }, + { url = "https://files.pythonhosted.org/packages/48/16/23218e1e965123e70defb1c9603305ef4616e9f1bfbcd735280f36ec28d3/pyarrow-16.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9cf389d444b0f41d9fe1444b70650fea31e9d52cfcb5f818b7888b91b586efff", size = 25883914, upload-time = "2024-05-14T13:40:23.523Z" }, ] [[package]] @@ -2235,14 +2864,14 @@ wheels = [ [[package]] name = "pyasn1-modules" -version = "0.4.2" +version = "0.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyasn1" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e9/e6/78ebbb10a8c8e4b61a59249394a4a594c1a7af95593dc933a349c8d00964/pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6", size = 307892, upload-time = "2025-03-28T02:41:22.17Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/67/6afbf0d507f73c32d21084a79946bfcfca5fbc62a72057e9c23797a737c9/pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c", size = 310028, upload-time = "2024-09-10T22:42:08.349Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a", size = 181259, upload-time = "2025-03-28T02:41:19.028Z" }, + { url = "https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd", size = 181537, upload-time = "2024-09-11T16:02:10.336Z" }, ] [[package]] @@ -2280,7 +2909,7 @@ docs = [ [package.metadata] requires-dist = [ - { name = "apache-airflow", specifier = "==3.0.2" }, + { name = "apache-airflow", specifier = "==3.0.3rc3" }, { name = "apache-airflow-providers-fab" }, { name = "apache-airflow-providers-http" }, { name = "google-cloud-bigquery" }, @@ -2319,7 +2948,7 @@ wheels = [ [[package]] name = "pydantic" -version = "2.11.5" +version = "2.11.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, @@ -2327,9 +2956,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f0/86/8ce9040065e8f924d642c58e4a344e33163a07f6b57f836d0d734e0ad3fb/pydantic-2.11.5.tar.gz", hash = "sha256:7f853db3d0ce78ce8bbb148c401c2cdd6431b3473c0cdff2755c7690952a7b7a", size = 787102, upload-time = "2025-05-22T21:18:08.761Z" } +sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/69/831ed22b38ff9b4b64b66569f0e5b7b97cf3638346eb95a2147fdb49ad5f/pydantic-2.11.5-py3-none-any.whl", hash = "sha256:f9c26ba06f9747749ca1e5c94d6a85cb84254577553c8785576fd38fa64dc0f7", size = 444229, upload-time = "2025-05-22T21:18:06.329Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" }, ] [[package]] @@ -2367,11 +2996,11 @@ wheels = [ [[package]] name = "pygments" -version = "2.19.1" +version = "2.19.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581, upload-time = "2025-01-06T17:26:30.443Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293, upload-time = "2025-01-06T17:26:25.553Z" }, + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, ] [[package]] @@ -2398,15 +3027,15 @@ wheels = [ [[package]] name = "pymdown-extensions" -version = "10.15" +version = "10.16" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/92/a7296491dbf5585b3a987f3f3fc87af0e632121ff3e490c14b5f2d2b4eb5/pymdown_extensions-10.15.tar.gz", hash = "sha256:0e5994e32155f4b03504f939e501b981d306daf7ec2aa1cd2eb6bd300784f8f7", size = 852320, upload-time = "2025-04-27T23:48:29.183Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/0a/c06b542ac108bfc73200677309cd9188a3a01b127a63f20cadc18d873d88/pymdown_extensions-10.16.tar.gz", hash = "sha256:71dac4fca63fabeffd3eb9038b756161a33ec6e8d230853d3cecf562155ab3de", size = 853197, upload-time = "2025-06-21T17:56:36.974Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/d1/c54e608505776ce4e7966d03358ae635cfd51dff1da6ee421c090dbc797b/pymdown_extensions-10.15-py3-none-any.whl", hash = "sha256:46e99bb272612b0de3b7e7caf6da8dd5f4ca5212c0b273feb9304e236c484e5f", size = 265845, upload-time = "2025-04-27T23:48:27.359Z" }, + { url = "https://files.pythonhosted.org/packages/98/d4/10bb14004d3c792811e05e21b5e5dcae805aacb739bd12a0540967b99592/pymdown_extensions-10.16-py3-none-any.whl", hash = "sha256:f5dd064a4db588cb2d95229fc4ee63a1b16cc8b4d0e6145c0899ed8723da1df2", size = 266143, upload-time = "2025-06-21T17:56:35.356Z" }, ] [[package]] @@ -2420,7 +3049,7 @@ wheels = [ [[package]] name = "pytest" -version = "8.4.0" +version = "8.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -2431,22 +3060,23 @@ dependencies = [ { name = "pygments" }, { name = "tomli" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fb/aa/405082ce2749be5398045152251ac69c0f3578c7077efc53431303af97ce/pytest-8.4.0.tar.gz", hash = "sha256:14d920b48472ea0dbf68e45b96cd1ffda4705f33307dcc86c676c1b5104838a6", size = 1515232, upload-time = "2025-06-02T17:36:30.03Z" } +sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload-time = "2025-06-18T05:48:06.109Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/de/afa024cbe022b1b318a3d224125aa24939e99b4ff6f22e0ba639a2eaee47/pytest-8.4.0-py3-none-any.whl", hash = "sha256:f40f825768ad76c0977cbacdf1fd37c6f7a468e460ea6a0636078f8972d4517e", size = 363797, upload-time = "2025-06-02T17:36:27.859Z" }, + { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" }, ] [[package]] name = "pytest-cov" -version = "6.1.1" +version = "6.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "coverage", extra = ["toml"] }, + { name = "pluggy" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/25/69/5f1e57f6c5a39f81411b550027bf72842c4567ff5fd572bed1edc9e4b5d9/pytest_cov-6.1.1.tar.gz", hash = "sha256:46935f7aaefba760e716c2ebfbe1c216240b9592966e7da99ea8292d4d3e2a0a", size = 66857, upload-time = "2025-04-05T14:07:51.592Z" } +sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432, upload-time = "2025-06-12T10:47:47.684Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/28/d0/def53b4a790cfb21483016430ed828f64830dd981ebe1089971cd10cab25/pytest_cov-6.1.1-py3-none-any.whl", hash = "sha256:bddf29ed2d0ab6f4df17b4c55b0a657287db8684af9c42ea546b21b1041b3dde", size = 23841, upload-time = "2025-04-05T14:07:49.641Z" }, + { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644, upload-time = "2025-06-12T10:47:45.932Z" }, ] [[package]] @@ -2475,11 +3105,11 @@ wheels = [ [[package]] name = "python-dotenv" -version = "1.1.0" +version = "1.1.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/88/2c/7bb1416c5620485aa793f2de31d3df393d3686aa8a8506d11e10e13c5baf/python_dotenv-1.1.0.tar.gz", hash = "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5", size = 39920, upload-time = "2025-03-25T10:14:56.835Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/b0/4bc07ccd3572a2f9df7e6782f52b0c6c90dcbb803ac4a167702d7d0dfe1e/python_dotenv-1.1.1.tar.gz", hash = "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab", size = 41978, upload-time = "2025-06-24T04:21:07.341Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/18/98a99ad95133c6a6e2005fe89faedf294a748bd5dc803008059409ac9b1e/python_dotenv-1.1.0-py3-none-any.whl", hash = "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d", size = 20256, upload-time = "2025-03-25T10:14:55.034Z" }, + { url = "https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc", size = 20556, upload-time = "2025-06-24T04:21:06.073Z" }, ] [[package]] @@ -2557,7 +3187,7 @@ wheels = [ [[package]] name = "requests" -version = "2.32.3" +version = "2.32.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, @@ -2565,9 +3195,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218, upload-time = "2024-05-29T15:37:49.536Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload-time = "2025-06-09T16:43:07.34Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928, upload-time = "2024-05-29T15:37:47.027Z" }, + { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" }, ] [[package]] @@ -2639,49 +3269,49 @@ wheels = [ [[package]] name = "rich-toolkit" -version = "0.14.7" +version = "0.14.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "rich" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5b/7a/cb48b7024b247631ce39b1f14a0f1abedf311fb27b892b0e0387d809d4b5/rich_toolkit-0.14.7.tar.gz", hash = "sha256:6cca5a68850cc5778915f528eb785662c27ba3b4b2624612cce8340fa9701c5e", size = 104977, upload-time = "2025-05-27T15:48:09.377Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/de/d3d329d670bb271ee82e7bbc2946f985b2782f4cae2857138ed94be1335b/rich_toolkit-0.14.8.tar.gz", hash = "sha256:1f77b32e6c25d9e3644c1efbce00d8d90daf2457b3abdb4699e263c03b9ca6cf", size = 110926, upload-time = "2025-06-30T22:05:53.663Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/2e/95fde5b818dac9a37683ea064096323f593442d0f6358923c5f635974393/rich_toolkit-0.14.7-py3-none-any.whl", hash = "sha256:def05cc6e0f1176d6263b6a26648f16a62c4563b277ca2f8538683acdba1e0da", size = 24870, upload-time = "2025-05-27T15:48:07.942Z" }, + { url = "https://files.pythonhosted.org/packages/78/39/c0fd75955aa963a15c642dfe6fb2acdd1fd2114028ec5ff2e2fd26218ad7/rich_toolkit-0.14.8-py3-none-any.whl", hash = "sha256:c54bda82b93145a79bbae04c3e15352e6711787c470728ff41fdfa0c2f0c11ae", size = 24975, upload-time = "2025-06-30T22:05:52.153Z" }, ] [[package]] name = "rpds-py" -version = "0.25.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8c/a6/60184b7fc00dd3ca80ac635dd5b8577d444c57e8e8742cecabfacb829921/rpds_py-0.25.1.tar.gz", hash = "sha256:8960b6dac09b62dac26e75d7e2c4a22efb835d827a7278c34f72b2b84fa160e3", size = 27304, upload-time = "2025-05-21T12:46:12.502Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/09/e1158988e50905b7f8306487a576b52d32aa9a87f79f7ab24ee8db8b6c05/rpds_py-0.25.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f4ad628b5174d5315761b67f212774a32f5bad5e61396d38108bd801c0a8f5d9", size = 373140, upload-time = "2025-05-21T12:42:38.834Z" }, - { url = "https://files.pythonhosted.org/packages/e0/4b/a284321fb3c45c02fc74187171504702b2934bfe16abab89713eedfe672e/rpds_py-0.25.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8c742af695f7525e559c16f1562cf2323db0e3f0fbdcabdf6865b095256b2d40", size = 358860, upload-time = "2025-05-21T12:42:41.394Z" }, - { url = "https://files.pythonhosted.org/packages/4e/46/8ac9811150c75edeae9fc6fa0e70376c19bc80f8e1f7716981433905912b/rpds_py-0.25.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:605ffe7769e24b1800b4d024d24034405d9404f0bc2f55b6db3362cd34145a6f", size = 386179, upload-time = "2025-05-21T12:42:43.213Z" }, - { url = "https://files.pythonhosted.org/packages/f3/ec/87eb42d83e859bce91dcf763eb9f2ab117142a49c9c3d17285440edb5b69/rpds_py-0.25.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ccc6f3ddef93243538be76f8e47045b4aad7a66a212cd3a0f23e34469473d36b", size = 400282, upload-time = "2025-05-21T12:42:44.92Z" }, - { url = "https://files.pythonhosted.org/packages/68/c8/2a38e0707d7919c8c78e1d582ab15cf1255b380bcb086ca265b73ed6db23/rpds_py-0.25.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f70316f760174ca04492b5ab01be631a8ae30cadab1d1081035136ba12738cfa", size = 521824, upload-time = "2025-05-21T12:42:46.856Z" }, - { url = "https://files.pythonhosted.org/packages/5e/2c/6a92790243569784dde84d144bfd12bd45102f4a1c897d76375076d730ab/rpds_py-0.25.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1dafef8df605fdb46edcc0bf1573dea0d6d7b01ba87f85cd04dc855b2b4479e", size = 411644, upload-time = "2025-05-21T12:42:48.838Z" }, - { url = "https://files.pythonhosted.org/packages/eb/76/66b523ffc84cf47db56efe13ae7cf368dee2bacdec9d89b9baca5e2e6301/rpds_py-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0701942049095741a8aeb298a31b203e735d1c61f4423511d2b1a41dcd8a16da", size = 386955, upload-time = "2025-05-21T12:42:50.835Z" }, - { url = "https://files.pythonhosted.org/packages/b6/b9/a362d7522feaa24dc2b79847c6175daa1c642817f4a19dcd5c91d3e2c316/rpds_py-0.25.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e87798852ae0b37c88babb7f7bbbb3e3fecc562a1c340195b44c7e24d403e380", size = 421039, upload-time = "2025-05-21T12:42:52.348Z" }, - { url = "https://files.pythonhosted.org/packages/0f/c4/b5b6f70b4d719b6584716889fd3413102acf9729540ee76708d56a76fa97/rpds_py-0.25.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3bcce0edc1488906c2d4c75c94c70a0417e83920dd4c88fec1078c94843a6ce9", size = 563290, upload-time = "2025-05-21T12:42:54.404Z" }, - { url = "https://files.pythonhosted.org/packages/87/a3/2e6e816615c12a8f8662c9d8583a12eb54c52557521ef218cbe3095a8afa/rpds_py-0.25.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e2f6a2347d3440ae789505693a02836383426249d5293541cd712e07e7aecf54", size = 592089, upload-time = "2025-05-21T12:42:55.976Z" }, - { url = "https://files.pythonhosted.org/packages/c0/08/9b8e1050e36ce266135994e2c7ec06e1841f1c64da739daeb8afe9cb77a4/rpds_py-0.25.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4fd52d3455a0aa997734f3835cbc4c9f32571345143960e7d7ebfe7b5fbfa3b2", size = 558400, upload-time = "2025-05-21T12:42:58.032Z" }, - { url = "https://files.pythonhosted.org/packages/f2/df/b40b8215560b8584baccd839ff5c1056f3c57120d79ac41bd26df196da7e/rpds_py-0.25.1-cp310-cp310-win32.whl", hash = "sha256:3f0b1798cae2bbbc9b9db44ee068c556d4737911ad53a4e5093d09d04b3bbc24", size = 219741, upload-time = "2025-05-21T12:42:59.479Z" }, - { url = "https://files.pythonhosted.org/packages/10/99/e4c58be18cf5d8b40b8acb4122bc895486230b08f978831b16a3916bd24d/rpds_py-0.25.1-cp310-cp310-win_amd64.whl", hash = "sha256:3ebd879ab996537fc510a2be58c59915b5dd63bccb06d1ef514fee787e05984a", size = 231553, upload-time = "2025-05-21T12:43:01.425Z" }, - { url = "https://files.pythonhosted.org/packages/78/ff/566ce53529b12b4f10c0a348d316bd766970b7060b4fd50f888be3b3b281/rpds_py-0.25.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b24bf3cd93d5b6ecfbedec73b15f143596c88ee249fa98cefa9a9dc9d92c6f28", size = 373931, upload-time = "2025-05-21T12:45:05.01Z" }, - { url = "https://files.pythonhosted.org/packages/83/5d/deba18503f7c7878e26aa696e97f051175788e19d5336b3b0e76d3ef9256/rpds_py-0.25.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:0eb90e94f43e5085623932b68840b6f379f26db7b5c2e6bcef3179bd83c9330f", size = 359074, upload-time = "2025-05-21T12:45:06.714Z" }, - { url = "https://files.pythonhosted.org/packages/0d/74/313415c5627644eb114df49c56a27edba4d40cfd7c92bd90212b3604ca84/rpds_py-0.25.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d50e4864498a9ab639d6d8854b25e80642bd362ff104312d9770b05d66e5fb13", size = 387255, upload-time = "2025-05-21T12:45:08.669Z" }, - { url = "https://files.pythonhosted.org/packages/8c/c8/c723298ed6338963d94e05c0f12793acc9b91d04ed7c4ba7508e534b7385/rpds_py-0.25.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c9409b47ba0650544b0bb3c188243b83654dfe55dcc173a86832314e1a6a35d", size = 400714, upload-time = "2025-05-21T12:45:10.39Z" }, - { url = "https://files.pythonhosted.org/packages/33/8a/51f1f6aa653c2e110ed482ef2ae94140d56c910378752a1b483af11019ee/rpds_py-0.25.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:796ad874c89127c91970652a4ee8b00d56368b7e00d3477f4415fe78164c8000", size = 523105, upload-time = "2025-05-21T12:45:12.273Z" }, - { url = "https://files.pythonhosted.org/packages/c7/a4/7873d15c088ad3bff36910b29ceb0f178e4b3232c2adbe9198de68a41e63/rpds_py-0.25.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:85608eb70a659bf4c1142b2781083d4b7c0c4e2c90eff11856a9754e965b2540", size = 411499, upload-time = "2025-05-21T12:45:13.95Z" }, - { url = "https://files.pythonhosted.org/packages/90/f3/0ce1437befe1410766d11d08239333ac1b2d940f8a64234ce48a7714669c/rpds_py-0.25.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4feb9211d15d9160bc85fa72fed46432cdc143eb9cf6d5ca377335a921ac37b", size = 387918, upload-time = "2025-05-21T12:45:15.649Z" }, - { url = "https://files.pythonhosted.org/packages/94/d4/5551247988b2a3566afb8a9dba3f1d4a3eea47793fd83000276c1a6c726e/rpds_py-0.25.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ccfa689b9246c48947d31dd9d8b16d89a0ecc8e0e26ea5253068efb6c542b76e", size = 421705, upload-time = "2025-05-21T12:45:17.788Z" }, - { url = "https://files.pythonhosted.org/packages/b0/25/5960f28f847bf736cc7ee3c545a7e1d2f3b5edaf82c96fb616c2f5ed52d0/rpds_py-0.25.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:3c5b317ecbd8226887994852e85de562f7177add602514d4ac40f87de3ae45a8", size = 564489, upload-time = "2025-05-21T12:45:19.466Z" }, - { url = "https://files.pythonhosted.org/packages/02/66/1c99884a0d44e8c2904d3c4ec302f995292d5dde892c3bf7685ac1930146/rpds_py-0.25.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:454601988aab2c6e8fd49e7634c65476b2b919647626208e376afcd22019eeb8", size = 592557, upload-time = "2025-05-21T12:45:21.362Z" }, - { url = "https://files.pythonhosted.org/packages/55/ae/4aeac84ebeffeac14abb05b3bb1d2f728d00adb55d3fb7b51c9fa772e760/rpds_py-0.25.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:1c0c434a53714358532d13539272db75a5ed9df75a4a090a753ac7173ec14e11", size = 558691, upload-time = "2025-05-21T12:45:23.084Z" }, - { url = "https://files.pythonhosted.org/packages/41/b3/728a08ff6f5e06fe3bb9af2e770e9d5fd20141af45cff8dfc62da4b2d0b3/rpds_py-0.25.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f73ce1512e04fbe2bc97836e89830d6b4314c171587a99688082d090f934d20a", size = 231651, upload-time = "2025-05-21T12:45:24.72Z" }, +version = "0.26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/aa/4456d84bbb54adc6a916fb10c9b374f78ac840337644e4a5eda229c81275/rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0", size = 27385, upload-time = "2025-07-01T15:57:13.958Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/31/1459645f036c3dfeacef89e8e5825e430c77dde8489f3b99eaafcd4a60f5/rpds_py-0.26.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4c70c70f9169692b36307a95f3d8c0a9fcd79f7b4a383aad5eaa0e9718b79b37", size = 372466, upload-time = "2025-07-01T15:53:40.55Z" }, + { url = "https://files.pythonhosted.org/packages/dd/ff/3d0727f35836cc8773d3eeb9a46c40cc405854e36a8d2e951f3a8391c976/rpds_py-0.26.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:777c62479d12395bfb932944e61e915741e364c843afc3196b694db3d669fcd0", size = 357825, upload-time = "2025-07-01T15:53:42.247Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ce/badc5e06120a54099ae287fa96d82cbb650a5f85cf247ffe19c7b157fd1f/rpds_py-0.26.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec671691e72dff75817386aa02d81e708b5a7ec0dec6669ec05213ff6b77e1bd", size = 381530, upload-time = "2025-07-01T15:53:43.585Z" }, + { url = "https://files.pythonhosted.org/packages/1e/a5/fa5d96a66c95d06c62d7a30707b6a4cfec696ab8ae280ee7be14e961e118/rpds_py-0.26.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6a1cb5d6ce81379401bbb7f6dbe3d56de537fb8235979843f0d53bc2e9815a79", size = 396933, upload-time = "2025-07-01T15:53:45.78Z" }, + { url = "https://files.pythonhosted.org/packages/00/a7/7049d66750f18605c591a9db47d4a059e112a0c9ff8de8daf8fa0f446bba/rpds_py-0.26.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f789e32fa1fb6a7bf890e0124e7b42d1e60d28ebff57fe806719abb75f0e9a3", size = 513973, upload-time = "2025-07-01T15:53:47.085Z" }, + { url = "https://files.pythonhosted.org/packages/0e/f1/528d02c7d6b29d29fac8fd784b354d3571cc2153f33f842599ef0cf20dd2/rpds_py-0.26.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c55b0a669976cf258afd718de3d9ad1b7d1fe0a91cd1ab36f38b03d4d4aeaaf", size = 402293, upload-time = "2025-07-01T15:53:48.117Z" }, + { url = "https://files.pythonhosted.org/packages/15/93/fde36cd6e4685df2cd08508f6c45a841e82f5bb98c8d5ecf05649522acb5/rpds_py-0.26.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c70d9ec912802ecfd6cd390dadb34a9578b04f9bcb8e863d0a7598ba5e9e7ccc", size = 383787, upload-time = "2025-07-01T15:53:50.874Z" }, + { url = "https://files.pythonhosted.org/packages/69/f2/5007553aaba1dcae5d663143683c3dfd03d9395289f495f0aebc93e90f24/rpds_py-0.26.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3021933c2cb7def39d927b9862292e0f4c75a13d7de70eb0ab06efed4c508c19", size = 416312, upload-time = "2025-07-01T15:53:52.046Z" }, + { url = "https://files.pythonhosted.org/packages/8f/a7/ce52c75c1e624a79e48a69e611f1c08844564e44c85db2b6f711d76d10ce/rpds_py-0.26.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8a7898b6ca3b7d6659e55cdac825a2e58c638cbf335cde41f4619e290dd0ad11", size = 558403, upload-time = "2025-07-01T15:53:53.192Z" }, + { url = "https://files.pythonhosted.org/packages/79/d5/e119db99341cc75b538bf4cb80504129fa22ce216672fb2c28e4a101f4d9/rpds_py-0.26.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:12bff2ad9447188377f1b2794772f91fe68bb4bbfa5a39d7941fbebdbf8c500f", size = 588323, upload-time = "2025-07-01T15:53:54.336Z" }, + { url = "https://files.pythonhosted.org/packages/93/94/d28272a0b02f5fe24c78c20e13bbcb95f03dc1451b68e7830ca040c60bd6/rpds_py-0.26.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:191aa858f7d4902e975d4cf2f2d9243816c91e9605070aeb09c0a800d187e323", size = 554541, upload-time = "2025-07-01T15:53:55.469Z" }, + { url = "https://files.pythonhosted.org/packages/93/e0/8c41166602f1b791da892d976057eba30685486d2e2c061ce234679c922b/rpds_py-0.26.0-cp310-cp310-win32.whl", hash = "sha256:b37a04d9f52cb76b6b78f35109b513f6519efb481d8ca4c321f6a3b9580b3f45", size = 220442, upload-time = "2025-07-01T15:53:56.524Z" }, + { url = "https://files.pythonhosted.org/packages/87/f0/509736bb752a7ab50fb0270c2a4134d671a7b3038030837e5536c3de0e0b/rpds_py-0.26.0-cp310-cp310-win_amd64.whl", hash = "sha256:38721d4c9edd3eb6670437d8d5e2070063f305bfa2d5aa4278c51cedcd508a84", size = 231314, upload-time = "2025-07-01T15:53:57.842Z" }, + { url = "https://files.pythonhosted.org/packages/ef/9a/1f033b0b31253d03d785b0cd905bc127e555ab496ea6b4c7c2e1f951f2fd/rpds_py-0.26.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3c0909c5234543ada2515c05dc08595b08d621ba919629e94427e8e03539c958", size = 373226, upload-time = "2025-07-01T15:56:16.578Z" }, + { url = "https://files.pythonhosted.org/packages/58/29/5f88023fd6aaaa8ca3c4a6357ebb23f6f07da6079093ccf27c99efce87db/rpds_py-0.26.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:c1fb0cda2abcc0ac62f64e2ea4b4e64c57dfd6b885e693095460c61bde7bb18e", size = 359230, upload-time = "2025-07-01T15:56:17.978Z" }, + { url = "https://files.pythonhosted.org/packages/6c/6c/13eaebd28b439da6964dde22712b52e53fe2824af0223b8e403249d10405/rpds_py-0.26.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84d142d2d6cf9b31c12aa4878d82ed3b2324226270b89b676ac62ccd7df52d08", size = 382363, upload-time = "2025-07-01T15:56:19.977Z" }, + { url = "https://files.pythonhosted.org/packages/55/fc/3bb9c486b06da19448646f96147796de23c5811ef77cbfc26f17307b6a9d/rpds_py-0.26.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a547e21c5610b7e9093d870be50682a6a6cf180d6da0f42c47c306073bfdbbf6", size = 397146, upload-time = "2025-07-01T15:56:21.39Z" }, + { url = "https://files.pythonhosted.org/packages/15/18/9d1b79eb4d18e64ba8bba9e7dec6f9d6920b639f22f07ee9368ca35d4673/rpds_py-0.26.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:35e9a70a0f335371275cdcd08bc5b8051ac494dd58bff3bbfb421038220dc871", size = 514804, upload-time = "2025-07-01T15:56:22.78Z" }, + { url = "https://files.pythonhosted.org/packages/4f/5a/175ad7191bdbcd28785204621b225ad70e85cdfd1e09cc414cb554633b21/rpds_py-0.26.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0dfa6115c6def37905344d56fb54c03afc49104e2ca473d5dedec0f6606913b4", size = 402820, upload-time = "2025-07-01T15:56:24.584Z" }, + { url = "https://files.pythonhosted.org/packages/11/45/6a67ecf6d61c4d4aff4bc056e864eec4b2447787e11d1c2c9a0242c6e92a/rpds_py-0.26.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:313cfcd6af1a55a286a3c9a25f64af6d0e46cf60bc5798f1db152d97a216ff6f", size = 384567, upload-time = "2025-07-01T15:56:26.064Z" }, + { url = "https://files.pythonhosted.org/packages/a1/ba/16589da828732b46454c61858950a78fe4c931ea4bf95f17432ffe64b241/rpds_py-0.26.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f7bf2496fa563c046d05e4d232d7b7fd61346e2402052064b773e5c378bf6f73", size = 416520, upload-time = "2025-07-01T15:56:27.608Z" }, + { url = "https://files.pythonhosted.org/packages/81/4b/00092999fc7c0c266045e984d56b7314734cc400a6c6dc4d61a35f135a9d/rpds_py-0.26.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:aa81873e2c8c5aa616ab8e017a481a96742fdf9313c40f14338ca7dbf50cb55f", size = 559362, upload-time = "2025-07-01T15:56:29.078Z" }, + { url = "https://files.pythonhosted.org/packages/96/0c/43737053cde1f93ac4945157f7be1428724ab943e2132a0d235a7e161d4e/rpds_py-0.26.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:68ffcf982715f5b5b7686bdd349ff75d422e8f22551000c24b30eaa1b7f7ae84", size = 588113, upload-time = "2025-07-01T15:56:30.485Z" }, + { url = "https://files.pythonhosted.org/packages/46/46/8e38f6161466e60a997ed7e9951ae5de131dedc3cf778ad35994b4af823d/rpds_py-0.26.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6188de70e190847bb6db3dc3981cbadff87d27d6fe9b4f0e18726d55795cee9b", size = 555429, upload-time = "2025-07-01T15:56:31.956Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ac/65da605e9f1dd643ebe615d5bbd11b6efa1d69644fc4bf623ea5ae385a82/rpds_py-0.26.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1c962145c7473723df9722ba4c058de12eb5ebedcb4e27e7d902920aa3831ee8", size = 231950, upload-time = "2025-07-01T15:56:33.337Z" }, ] [[package]] @@ -2727,38 +3357,37 @@ wheels = [ [[package]] name = "ruff" -version = "0.11.13" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ed/da/9c6f995903b4d9474b39da91d2d626659af3ff1eeb43e9ae7c119349dba6/ruff-0.11.13.tar.gz", hash = "sha256:26fa247dc68d1d4e72c179e08889a25ac0c7ba4d78aecfc835d49cbfd60bf514", size = 4282054, upload-time = "2025-06-05T21:00:15.721Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/ce/a11d381192966e0b4290842cc8d4fac7dc9214ddf627c11c1afff87da29b/ruff-0.11.13-py3-none-linux_armv6l.whl", hash = "sha256:4bdfbf1240533f40042ec00c9e09a3aade6f8c10b6414cf11b519488d2635d46", size = 10292516, upload-time = "2025-06-05T20:59:32.944Z" }, - { url = "https://files.pythonhosted.org/packages/78/db/87c3b59b0d4e753e40b6a3b4a2642dfd1dcaefbff121ddc64d6c8b47ba00/ruff-0.11.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:aef9c9ed1b5ca28bb15c7eac83b8670cf3b20b478195bd49c8d756ba0a36cf48", size = 11106083, upload-time = "2025-06-05T20:59:37.03Z" }, - { url = "https://files.pythonhosted.org/packages/77/79/d8cec175856ff810a19825d09ce700265f905c643c69f45d2b737e4a470a/ruff-0.11.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53b15a9dfdce029c842e9a5aebc3855e9ab7771395979ff85b7c1dedb53ddc2b", size = 10436024, upload-time = "2025-06-05T20:59:39.741Z" }, - { url = "https://files.pythonhosted.org/packages/8b/5b/f6d94f2980fa1ee854b41568368a2e1252681b9238ab2895e133d303538f/ruff-0.11.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab153241400789138d13f362c43f7edecc0edfffce2afa6a68434000ecd8f69a", size = 10646324, upload-time = "2025-06-05T20:59:42.185Z" }, - { url = "https://files.pythonhosted.org/packages/6c/9c/b4c2acf24ea4426016d511dfdc787f4ce1ceb835f3c5fbdbcb32b1c63bda/ruff-0.11.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c51f93029d54a910d3d24f7dd0bb909e31b6cd989a5e4ac513f4eb41629f0dc", size = 10174416, upload-time = "2025-06-05T20:59:44.319Z" }, - { url = "https://files.pythonhosted.org/packages/f3/10/e2e62f77c65ede8cd032c2ca39c41f48feabedb6e282bfd6073d81bb671d/ruff-0.11.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1808b3ed53e1a777c2ef733aca9051dc9bf7c99b26ece15cb59a0320fbdbd629", size = 11724197, upload-time = "2025-06-05T20:59:46.935Z" }, - { url = "https://files.pythonhosted.org/packages/bb/f0/466fe8469b85c561e081d798c45f8a1d21e0b4a5ef795a1d7f1a9a9ec182/ruff-0.11.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d28ce58b5ecf0f43c1b71edffabe6ed7f245d5336b17805803312ec9bc665933", size = 12511615, upload-time = "2025-06-05T20:59:49.534Z" }, - { url = "https://files.pythonhosted.org/packages/17/0e/cefe778b46dbd0cbcb03a839946c8f80a06f7968eb298aa4d1a4293f3448/ruff-0.11.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55e4bc3a77842da33c16d55b32c6cac1ec5fb0fbec9c8c513bdce76c4f922165", size = 12117080, upload-time = "2025-06-05T20:59:51.654Z" }, - { url = "https://files.pythonhosted.org/packages/5d/2c/caaeda564cbe103bed145ea557cb86795b18651b0f6b3ff6a10e84e5a33f/ruff-0.11.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:633bf2c6f35678c56ec73189ba6fa19ff1c5e4807a78bf60ef487b9dd272cc71", size = 11326315, upload-time = "2025-06-05T20:59:54.469Z" }, - { url = "https://files.pythonhosted.org/packages/75/f0/782e7d681d660eda8c536962920c41309e6dd4ebcea9a2714ed5127d44bd/ruff-0.11.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ffbc82d70424b275b089166310448051afdc6e914fdab90e08df66c43bb5ca9", size = 11555640, upload-time = "2025-06-05T20:59:56.986Z" }, - { url = "https://files.pythonhosted.org/packages/5d/d4/3d580c616316c7f07fb3c99dbecfe01fbaea7b6fd9a82b801e72e5de742a/ruff-0.11.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a9ddd3ec62a9a89578c85842b836e4ac832d4a2e0bfaad3b02243f930ceafcc", size = 10507364, upload-time = "2025-06-05T20:59:59.154Z" }, - { url = "https://files.pythonhosted.org/packages/5a/dc/195e6f17d7b3ea6b12dc4f3e9de575db7983db187c378d44606e5d503319/ruff-0.11.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d237a496e0778d719efb05058c64d28b757c77824e04ffe8796c7436e26712b7", size = 10141462, upload-time = "2025-06-05T21:00:01.481Z" }, - { url = "https://files.pythonhosted.org/packages/f4/8e/39a094af6967faa57ecdeacb91bedfb232474ff8c3d20f16a5514e6b3534/ruff-0.11.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:26816a218ca6ef02142343fd24c70f7cd8c5aa6c203bca284407adf675984432", size = 11121028, upload-time = "2025-06-05T21:00:04.06Z" }, - { url = "https://files.pythonhosted.org/packages/5a/c0/b0b508193b0e8a1654ec683ebab18d309861f8bd64e3a2f9648b80d392cb/ruff-0.11.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:51c3f95abd9331dc5b87c47ac7f376db5616041173826dfd556cfe3d4977f492", size = 11602992, upload-time = "2025-06-05T21:00:06.249Z" }, - { url = "https://files.pythonhosted.org/packages/7c/91/263e33ab93ab09ca06ce4f8f8547a858cc198072f873ebc9be7466790bae/ruff-0.11.13-py3-none-win32.whl", hash = "sha256:96c27935418e4e8e77a26bb05962817f28b8ef3843a6c6cc49d8783b5507f250", size = 10474944, upload-time = "2025-06-05T21:00:08.459Z" }, - { url = "https://files.pythonhosted.org/packages/46/f4/7c27734ac2073aae8efb0119cae6931b6fb48017adf048fdf85c19337afc/ruff-0.11.13-py3-none-win_amd64.whl", hash = "sha256:29c3189895a8a6a657b7af4e97d330c8a3afd2c9c8f46c81e2fc5a31866517e3", size = 11548669, upload-time = "2025-06-05T21:00:11.147Z" }, - { url = "https://files.pythonhosted.org/packages/ec/bf/b273dd11673fed8a6bd46032c0ea2a04b2ac9bfa9c628756a5856ba113b0/ruff-0.11.13-py3-none-win_arm64.whl", hash = "sha256:b4385285e9179d608ff1d2fb9922062663c658605819a6876d8beef0c30b7f3b", size = 10683928, upload-time = "2025-06-05T21:00:13.758Z" }, +version = "0.11.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/61/fb87430f040e4e577e784e325351186976516faef17d6fcd921fe28edfd7/ruff-0.11.2.tar.gz", hash = "sha256:ec47591497d5a1050175bdf4e1a4e6272cddff7da88a2ad595e1e326041d8d94", size = 3857511, upload-time = "2025-03-21T13:31:17.419Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/99/102578506f0f5fa29fd7e0df0a273864f79af044757aef73d1cae0afe6ad/ruff-0.11.2-py3-none-linux_armv6l.whl", hash = "sha256:c69e20ea49e973f3afec2c06376eb56045709f0212615c1adb0eda35e8a4e477", size = 10113146, upload-time = "2025-03-21T13:30:26.68Z" }, + { url = "https://files.pythonhosted.org/packages/74/ad/5cd4ba58ab602a579997a8494b96f10f316e874d7c435bcc1a92e6da1b12/ruff-0.11.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:2c5424cc1c4eb1d8ecabe6d4f1b70470b4f24a0c0171356290b1953ad8f0e272", size = 10867092, upload-time = "2025-03-21T13:30:37.949Z" }, + { url = "https://files.pythonhosted.org/packages/fc/3e/d3f13619e1d152c7b600a38c1a035e833e794c6625c9a6cea6f63dbf3af4/ruff-0.11.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:ecf20854cc73f42171eedb66f006a43d0a21bfb98a2523a809931cda569552d9", size = 10224082, upload-time = "2025-03-21T13:30:39.962Z" }, + { url = "https://files.pythonhosted.org/packages/90/06/f77b3d790d24a93f38e3806216f263974909888fd1e826717c3ec956bbcd/ruff-0.11.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c543bf65d5d27240321604cee0633a70c6c25c9a2f2492efa9f6d4b8e4199bb", size = 10394818, upload-time = "2025-03-21T13:30:42.551Z" }, + { url = "https://files.pythonhosted.org/packages/99/7f/78aa431d3ddebfc2418cd95b786642557ba8b3cb578c075239da9ce97ff9/ruff-0.11.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20967168cc21195db5830b9224be0e964cc9c8ecf3b5a9e3ce19876e8d3a96e3", size = 9952251, upload-time = "2025-03-21T13:30:45.196Z" }, + { url = "https://files.pythonhosted.org/packages/30/3e/f11186d1ddfaca438c3bbff73c6a2fdb5b60e6450cc466129c694b0ab7a2/ruff-0.11.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:955a9ce63483999d9f0b8f0b4a3ad669e53484232853054cc8b9d51ab4c5de74", size = 11563566, upload-time = "2025-03-21T13:30:47.516Z" }, + { url = "https://files.pythonhosted.org/packages/22/6c/6ca91befbc0a6539ee133d9a9ce60b1a354db12c3c5d11cfdbf77140f851/ruff-0.11.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:86b3a27c38b8fce73bcd262b0de32e9a6801b76d52cdb3ae4c914515f0cef608", size = 12208721, upload-time = "2025-03-21T13:30:49.56Z" }, + { url = "https://files.pythonhosted.org/packages/19/b0/24516a3b850d55b17c03fc399b681c6a549d06ce665915721dc5d6458a5c/ruff-0.11.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3b66a03b248c9fcd9d64d445bafdf1589326bee6fc5c8e92d7562e58883e30f", size = 11662274, upload-time = "2025-03-21T13:30:52.055Z" }, + { url = "https://files.pythonhosted.org/packages/d7/65/76be06d28ecb7c6070280cef2bcb20c98fbf99ff60b1c57d2fb9b8771348/ruff-0.11.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0397c2672db015be5aa3d4dac54c69aa012429097ff219392c018e21f5085147", size = 13792284, upload-time = "2025-03-21T13:30:54.24Z" }, + { url = "https://files.pythonhosted.org/packages/ce/d2/4ceed7147e05852876f3b5f3fdc23f878ce2b7e0b90dd6e698bda3d20787/ruff-0.11.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:869bcf3f9abf6457fbe39b5a37333aa4eecc52a3b99c98827ccc371a8e5b6f1b", size = 11327861, upload-time = "2025-03-21T13:30:56.757Z" }, + { url = "https://files.pythonhosted.org/packages/c4/78/4935ecba13706fd60ebe0e3dc50371f2bdc3d9bc80e68adc32ff93914534/ruff-0.11.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2a2b50ca35457ba785cd8c93ebbe529467594087b527a08d487cf0ee7b3087e9", size = 10276560, upload-time = "2025-03-21T13:30:58.881Z" }, + { url = "https://files.pythonhosted.org/packages/81/7f/1b2435c3f5245d410bb5dc80f13ec796454c21fbda12b77d7588d5cf4e29/ruff-0.11.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7c69c74bf53ddcfbc22e6eb2f31211df7f65054bfc1f72288fc71e5f82db3eab", size = 9945091, upload-time = "2025-03-21T13:31:01.45Z" }, + { url = "https://files.pythonhosted.org/packages/39/c4/692284c07e6bf2b31d82bb8c32f8840f9d0627d92983edaac991a2b66c0a/ruff-0.11.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:6e8fb75e14560f7cf53b15bbc55baf5ecbe373dd5f3aab96ff7aa7777edd7630", size = 10977133, upload-time = "2025-03-21T13:31:04.013Z" }, + { url = "https://files.pythonhosted.org/packages/94/cf/8ab81cb7dd7a3b0a3960c2769825038f3adcd75faf46dd6376086df8b128/ruff-0.11.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:842a472d7b4d6f5924e9297aa38149e5dcb1e628773b70e6387ae2c97a63c58f", size = 11378514, upload-time = "2025-03-21T13:31:06.166Z" }, + { url = "https://files.pythonhosted.org/packages/d9/3a/a647fa4f316482dacf2fd68e8a386327a33d6eabd8eb2f9a0c3d291ec549/ruff-0.11.2-py3-none-win32.whl", hash = "sha256:aca01ccd0eb5eb7156b324cfaa088586f06a86d9e5314b0eb330cb48415097cc", size = 10319835, upload-time = "2025-03-21T13:31:10.7Z" }, + { url = "https://files.pythonhosted.org/packages/86/54/3c12d3af58012a5e2cd7ebdbe9983f4834af3f8cbea0e8a8c74fa1e23b2b/ruff-0.11.2-py3-none-win_amd64.whl", hash = "sha256:3170150172a8f994136c0c66f494edf199a0bbea7a409f649e4bc8f4d7084080", size = 11373713, upload-time = "2025-03-21T13:31:13.148Z" }, + { url = "https://files.pythonhosted.org/packages/d6/d4/dd813703af8a1e2ac33bf3feb27e8a5ad514c9f219df80c64d69807e7f71/ruff-0.11.2-py3-none-win_arm64.whl", hash = "sha256:52933095158ff328f4c77af3d74f0379e34fd52f175144cefc1b192e7ccd32b4", size = 10441990, upload-time = "2025-03-21T13:31:15.206Z" }, ] [[package]] name = "safety" -version = "3.2.4" +version = "3.2.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "authlib" }, { name = "click" }, { name = "dparse" }, - { name = "filelock" }, { name = "jinja2" }, { name = "marshmallow" }, { name = "packaging" }, @@ -2772,9 +3401,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/af/bb/723f294df65939d61cd35cba6c9c6c95bd2ce7f3822a45ba9e836cf034e3/safety-3.2.4.tar.gz", hash = "sha256:bac0202016d736a2118057964a0e3983fa20ff2563fd103cac3f3ac1ed3fea11", size = 179364, upload-time = "2024-07-04T15:08:29.437Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/23/7bb834b5f8ea12c120086c8a53395f7ffe47fca2c2a6b40640b90400ae03/safety-3.2.3.tar.gz", hash = "sha256:414154934f1727daf8a6473493944fecb380540c3f00875dc1ae377382f7d83f", size = 178922, upload-time = "2024-06-10T12:30:56.516Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/59/6c/bf6fcfbf1daf5add740cd7f276e6c5f6a383e10f12f08c47bc321a076e4d/safety-3.2.4-py3-none-any.whl", hash = "sha256:242ff7ae448d7fb2ea455c90f44e3f2ca45be9c8559b2fe9dfc89617164a0f17", size = 147009, upload-time = "2024-07-04T15:08:27.412Z" }, + { url = "https://files.pythonhosted.org/packages/36/ca/763d608fc139207ca42367d13b778c7c0e267918a7d61a39ca780267810b/safety-3.2.3-py3-none-any.whl", hash = "sha256:cda1e91749f610337a18b7f21f78267c127e44ebbbbcbbd419c83284279a5024", size = 146739, upload-time = "2024-06-10T12:30:54.357Z" }, ] [[package]] @@ -3037,14 +3666,14 @@ wheels = [ [[package]] name = "types-requests" -version = "2.32.0.20250602" +version = "2.32.4.20250611" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/48/b0/5321e6eeba5d59e4347fcf9bf06a5052f085c3aa0f4876230566d6a4dc97/types_requests-2.32.0.20250602.tar.gz", hash = "sha256:ee603aeefec42051195ae62ca7667cd909a2f8128fdf8aad9e8a5219ecfab3bf", size = 23042, upload-time = "2025-06-02T03:15:02.958Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/7f/73b3a04a53b0fd2a911d4ec517940ecd6600630b559e4505cc7b68beb5a0/types_requests-2.32.4.20250611.tar.gz", hash = "sha256:741c8777ed6425830bf51e54d6abe245f79b4dcb9019f1622b773463946bf826", size = 23118, upload-time = "2025-06-11T03:11:41.272Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/da/18/9b782980e575c6581d5c0c1c99f4c6f89a1d7173dad072ee96b2756c02e6/types_requests-2.32.0.20250602-py3-none-any.whl", hash = "sha256:f4f335f87779b47ce10b8b8597b409130299f6971ead27fead4fe7ba6ea3e726", size = 20638, upload-time = "2025-06-02T03:15:01.959Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ea/0be9258c5a4fa1ba2300111aa5a0767ee6d18eb3fd20e91616c12082284d/types_requests-2.32.4.20250611-py3-none-any.whl", hash = "sha256:ad2fe5d3b0cb3c2c902c8815a70e7fb2302c4b8c1f77bdcd738192cdb3878072", size = 20643, upload-time = "2025-06-11T03:11:40.186Z" }, ] [[package]] @@ -3109,34 +3738,34 @@ wheels = [ [[package]] name = "urllib3" -version = "2.4.0" +version = "2.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672, upload-time = "2025-04-10T15:23:39.232Z" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680, upload-time = "2025-04-10T15:23:37.377Z" }, + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, ] [[package]] name = "uuid6" -version = "2024.7.10" +version = "2025.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2c/56/2560a9f1ccab9e12b1b3478a3c870796cf4d8ee5652bb19b61751cced14a/uuid6-2024.7.10.tar.gz", hash = "sha256:2d29d7f63f593caaeea0e0d0dd0ad8129c9c663b29e19bdf882e864bedf18fb0", size = 8705, upload-time = "2024-07-10T16:39:37.592Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/49/06a089c184580f510e20226d9a081e4323d13db2fbc92d566697b5395c1e/uuid6-2025.0.0.tar.gz", hash = "sha256:bb78aa300e29db89b00410371d0c1f1824e59e29995a9daa3dedc8033d1d84ec", size = 13941, upload-time = "2025-06-11T20:02:05.324Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/3e/4ae6af487ce5781ed71d5fe10aca72e7cbc4d4f45afc31b120287082a8dd/uuid6-2024.7.10-py3-none-any.whl", hash = "sha256:93432c00ba403751f722829ad21759ff9db051dea140bf81493271e8e4dd18b7", size = 6376, upload-time = "2024-07-10T16:39:36.148Z" }, + { url = "https://files.pythonhosted.org/packages/0a/50/4da47101af45b6cfa291559577993b52ee4399b3cd54ba307574a11e4f3a/uuid6-2025.0.0-py3-none-any.whl", hash = "sha256:2c73405ff5333c7181443958c6865e0d1b9b816bb160549e8d80ba186263cb3a", size = 7001, upload-time = "2025-06-11T20:02:04.521Z" }, ] [[package]] name = "uvicorn" -version = "0.34.3" +version = "0.35.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "h11" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/de/ad/713be230bcda622eaa35c28f0d328c3675c371238470abdea52417f17a8e/uvicorn-0.34.3.tar.gz", hash = "sha256:35919a9a979d7a59334b6b10e05d77c1d0d574c50e0fc98b8b1a0f165708b55a", size = 76631, upload-time = "2025-06-01T07:48:17.531Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/42/e0e305207bb88c6b8d3061399c6a961ffe5fbb7e2aa63c9234df7259e9cd/uvicorn-0.35.0.tar.gz", hash = "sha256:bc662f087f7cf2ce11a1d7fd70b90c9f98ef2e2831556dd078d131b96cc94a01", size = 78473, upload-time = "2025-06-28T16:15:46.058Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/0d/8adfeaa62945f90d19ddc461c55f4a50c258af7662d34b6a3d5d1f8646f6/uvicorn-0.34.3-py3-none-any.whl", hash = "sha256:16246631db62bdfbf069b0645177d6e8a77ba950cfedbfd093acef9444e4d885", size = 62431, upload-time = "2025-06-01T07:48:15.664Z" }, + { url = "https://files.pythonhosted.org/packages/d2/e2/dc81b1bd1dcfe91735810265e9d26bc8ec5da45b4c0f6237e286819194c3/uvicorn-0.35.0-py3-none-any.whl", hash = "sha256:197535216b25ff9b785e29a0b79199f55222193d47f820816e7da751e9bc8d4a", size = 66406, upload-time = "2025-06-28T16:15:44.816Z" }, ] [package.optional-dependencies] @@ -3189,29 +3818,29 @@ wheels = [ [[package]] name = "watchfiles" -version = "1.0.5" +version = "1.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/03/e2/8ed598c42057de7aa5d97c472254af4906ff0a59a66699d426fc9ef795d7/watchfiles-1.0.5.tar.gz", hash = "sha256:b7529b5dcc114679d43827d8c35a07c493ad6f083633d573d81c660abc5979e9", size = 94537, upload-time = "2025-04-08T10:36:26.722Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/9a/d451fcc97d029f5812e898fd30a53fd8c15c7bbd058fd75cfc6beb9bd761/watchfiles-1.1.0.tar.gz", hash = "sha256:693ed7ec72cbfcee399e92c895362b6e66d63dac6b91e2c11ae03d10d503e575", size = 94406, upload-time = "2025-06-15T19:06:59.42Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/af/4d/d02e6ea147bb7fff5fd109c694a95109612f419abed46548a930e7f7afa3/watchfiles-1.0.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5c40fe7dd9e5f81e0847b1ea64e1f5dd79dd61afbedb57759df06767ac719b40", size = 405632, upload-time = "2025-04-08T10:34:41.832Z" }, - { url = "https://files.pythonhosted.org/packages/60/31/9ee50e29129d53a9a92ccf1d3992751dc56fc3c8f6ee721be1c7b9c81763/watchfiles-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8c0db396e6003d99bb2d7232c957b5f0b5634bbd1b24e381a5afcc880f7373fb", size = 395734, upload-time = "2025-04-08T10:34:44.236Z" }, - { url = "https://files.pythonhosted.org/packages/ad/8c/759176c97195306f028024f878e7f1c776bda66ccc5c68fa51e699cf8f1d/watchfiles-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b551d4fb482fc57d852b4541f911ba28957d051c8776e79c3b4a51eb5e2a1b11", size = 455008, upload-time = "2025-04-08T10:34:45.617Z" }, - { url = "https://files.pythonhosted.org/packages/55/1a/5e977250c795ee79a0229e3b7f5e3a1b664e4e450756a22da84d2f4979fe/watchfiles-1.0.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:830aa432ba5c491d52a15b51526c29e4a4b92bf4f92253787f9726fe01519487", size = 459029, upload-time = "2025-04-08T10:34:46.814Z" }, - { url = "https://files.pythonhosted.org/packages/e6/17/884cf039333605c1d6e296cf5be35fad0836953c3dfd2adb71b72f9dbcd0/watchfiles-1.0.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a16512051a822a416b0d477d5f8c0e67b67c1a20d9acecb0aafa3aa4d6e7d256", size = 488916, upload-time = "2025-04-08T10:34:48.571Z" }, - { url = "https://files.pythonhosted.org/packages/ef/e0/bcb6e64b45837056c0a40f3a2db3ef51c2ced19fda38484fa7508e00632c/watchfiles-1.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe0cbc787770e52a96c6fda6726ace75be7f840cb327e1b08d7d54eadc3bc85", size = 523763, upload-time = "2025-04-08T10:34:50.268Z" }, - { url = "https://files.pythonhosted.org/packages/24/e9/f67e9199f3bb35c1837447ecf07e9830ec00ff5d35a61e08c2cd67217949/watchfiles-1.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d363152c5e16b29d66cbde8fa614f9e313e6f94a8204eaab268db52231fe5358", size = 502891, upload-time = "2025-04-08T10:34:51.419Z" }, - { url = "https://files.pythonhosted.org/packages/23/ed/a6cf815f215632f5c8065e9c41fe872025ffea35aa1f80499f86eae922db/watchfiles-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ee32c9a9bee4d0b7bd7cbeb53cb185cf0b622ac761efaa2eba84006c3b3a614", size = 454921, upload-time = "2025-04-08T10:34:52.67Z" }, - { url = "https://files.pythonhosted.org/packages/92/4c/e14978599b80cde8486ab5a77a821e8a982ae8e2fcb22af7b0886a033ec8/watchfiles-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:29c7fd632ccaf5517c16a5188e36f6612d6472ccf55382db6c7fe3fcccb7f59f", size = 631422, upload-time = "2025-04-08T10:34:53.985Z" }, - { url = "https://files.pythonhosted.org/packages/b2/1a/9263e34c3458f7614b657f974f4ee61fd72f58adce8b436e16450e054efd/watchfiles-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e637810586e6fe380c8bc1b3910accd7f1d3a9a7262c8a78d4c8fb3ba6a2b3d", size = 625675, upload-time = "2025-04-08T10:34:55.173Z" }, - { url = "https://files.pythonhosted.org/packages/96/1f/1803a18bd6ab04a0766386a19bcfe64641381a04939efdaa95f0e3b0eb58/watchfiles-1.0.5-cp310-cp310-win32.whl", hash = "sha256:cd47d063fbeabd4c6cae1d4bcaa38f0902f8dc5ed168072874ea11d0c7afc1ff", size = 277921, upload-time = "2025-04-08T10:34:56.318Z" }, - { url = "https://files.pythonhosted.org/packages/c2/3b/29a89de074a7d6e8b4dc67c26e03d73313e4ecf0d6e97e942a65fa7c195e/watchfiles-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:86c0df05b47a79d80351cd179893f2f9c1b1cae49d96e8b3290c7f4bd0ca0a92", size = 291526, upload-time = "2025-04-08T10:34:57.95Z" }, - { url = "https://files.pythonhosted.org/packages/1a/03/81f9fcc3963b3fc415cd4b0b2b39ee8cc136c42fb10a36acf38745e9d283/watchfiles-1.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f59b870db1f1ae5a9ac28245707d955c8721dd6565e7f411024fa374b5362d1d", size = 405947, upload-time = "2025-04-08T10:36:13.721Z" }, - { url = "https://files.pythonhosted.org/packages/54/97/8c4213a852feb64807ec1d380f42d4fc8bfaef896bdbd94318f8fd7f3e4e/watchfiles-1.0.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9475b0093767e1475095f2aeb1d219fb9664081d403d1dff81342df8cd707034", size = 397276, upload-time = "2025-04-08T10:36:15.131Z" }, - { url = "https://files.pythonhosted.org/packages/78/12/d4464d19860cb9672efa45eec1b08f8472c478ed67dcd30647c51ada7aef/watchfiles-1.0.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc533aa50664ebd6c628b2f30591956519462f5d27f951ed03d6c82b2dfd9965", size = 455550, upload-time = "2025-04-08T10:36:16.635Z" }, - { url = "https://files.pythonhosted.org/packages/90/fb/b07bcdf1034d8edeaef4c22f3e9e3157d37c5071b5f9492ffdfa4ad4bed7/watchfiles-1.0.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fed1cd825158dcaae36acce7b2db33dcbfd12b30c34317a88b8ed80f0541cc57", size = 455542, upload-time = "2025-04-08T10:36:18.655Z" }, + { url = "https://files.pythonhosted.org/packages/b9/dd/579d1dc57f0f895426a1211c4ef3b0cb37eb9e642bb04bdcd962b5df206a/watchfiles-1.1.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:27f30e14aa1c1e91cb653f03a63445739919aef84c8d2517997a83155e7a2fcc", size = 405757, upload-time = "2025-06-15T19:04:51.058Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a0/7a0318cd874393344d48c34d53b3dd419466adf59a29ba5b51c88dd18b86/watchfiles-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3366f56c272232860ab45c77c3ca7b74ee819c8e1f6f35a7125556b198bbc6df", size = 397511, upload-time = "2025-06-15T19:04:52.79Z" }, + { url = "https://files.pythonhosted.org/packages/06/be/503514656d0555ec2195f60d810eca29b938772e9bfb112d5cd5ad6f6a9e/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8412eacef34cae2836d891836a7fff7b754d6bcac61f6c12ba5ca9bc7e427b68", size = 450739, upload-time = "2025-06-15T19:04:54.203Z" }, + { url = "https://files.pythonhosted.org/packages/4e/0d/a05dd9e5f136cdc29751816d0890d084ab99f8c17b86f25697288ca09bc7/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df670918eb7dd719642e05979fc84704af913d563fd17ed636f7c4783003fdcc", size = 458106, upload-time = "2025-06-15T19:04:55.607Z" }, + { url = "https://files.pythonhosted.org/packages/f1/fa/9cd16e4dfdb831072b7ac39e7bea986e52128526251038eb481effe9f48e/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7642b9bc4827b5518ebdb3b82698ada8c14c7661ddec5fe719f3e56ccd13c97", size = 484264, upload-time = "2025-06-15T19:04:57.009Z" }, + { url = "https://files.pythonhosted.org/packages/32/04/1da8a637c7e2b70e750a0308e9c8e662ada0cca46211fa9ef24a23937e0b/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:199207b2d3eeaeb80ef4411875a6243d9ad8bc35b07fc42daa6b801cc39cc41c", size = 597612, upload-time = "2025-06-15T19:04:58.409Z" }, + { url = "https://files.pythonhosted.org/packages/30/01/109f2762e968d3e58c95731a206e5d7d2a7abaed4299dd8a94597250153c/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a479466da6db5c1e8754caee6c262cd373e6e6c363172d74394f4bff3d84d7b5", size = 477242, upload-time = "2025-06-15T19:04:59.786Z" }, + { url = "https://files.pythonhosted.org/packages/b5/b8/46f58cf4969d3b7bc3ca35a98e739fa4085b0657a1540ccc29a1a0bc016f/watchfiles-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:935f9edd022ec13e447e5723a7d14456c8af254544cefbc533f6dd276c9aa0d9", size = 453148, upload-time = "2025-06-15T19:05:01.103Z" }, + { url = "https://files.pythonhosted.org/packages/a5/cd/8267594263b1770f1eb76914940d7b2d03ee55eca212302329608208e061/watchfiles-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8076a5769d6bdf5f673a19d51da05fc79e2bbf25e9fe755c47595785c06a8c72", size = 626574, upload-time = "2025-06-15T19:05:02.582Z" }, + { url = "https://files.pythonhosted.org/packages/a1/2f/7f2722e85899bed337cba715723e19185e288ef361360718973f891805be/watchfiles-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86b1e28d4c37e89220e924305cd9f82866bb0ace666943a6e4196c5df4d58dcc", size = 624378, upload-time = "2025-06-15T19:05:03.719Z" }, + { url = "https://files.pythonhosted.org/packages/bf/20/64c88ec43d90a568234d021ab4b2a6f42a5230d772b987c3f9c00cc27b8b/watchfiles-1.1.0-cp310-cp310-win32.whl", hash = "sha256:d1caf40c1c657b27858f9774d5c0e232089bca9cb8ee17ce7478c6e9264d2587", size = 279829, upload-time = "2025-06-15T19:05:04.822Z" }, + { url = "https://files.pythonhosted.org/packages/39/5c/a9c1ed33de7af80935e4eac09570de679c6e21c07070aa99f74b4431f4d6/watchfiles-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:a89c75a5b9bc329131115a409d0acc16e8da8dfd5867ba59f1dd66ae7ea8fa82", size = 292192, upload-time = "2025-06-15T19:05:06.348Z" }, + { url = "https://files.pythonhosted.org/packages/be/7c/a3d7c55cfa377c2f62c4ae3c6502b997186bc5e38156bafcb9b653de9a6d/watchfiles-1.1.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3a6fd40bbb50d24976eb275ccb55cd1951dfb63dbc27cae3066a6ca5f4beabd5", size = 406748, upload-time = "2025-06-15T19:06:44.2Z" }, + { url = "https://files.pythonhosted.org/packages/38/d0/c46f1b2c0ca47f3667b144de6f0515f6d1c670d72f2ca29861cac78abaa1/watchfiles-1.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9f811079d2f9795b5d48b55a37aa7773680a5659afe34b54cc1d86590a51507d", size = 398801, upload-time = "2025-06-15T19:06:45.774Z" }, + { url = "https://files.pythonhosted.org/packages/70/9c/9a6a42e97f92eeed77c3485a43ea96723900aefa3ac739a8c73f4bff2cd7/watchfiles-1.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2726d7bfd9f76158c84c10a409b77a320426540df8c35be172444394b17f7ea", size = 451528, upload-time = "2025-06-15T19:06:46.791Z" }, + { url = "https://files.pythonhosted.org/packages/51/7b/98c7f4f7ce7ff03023cf971cd84a3ee3b790021ae7584ffffa0eb2554b96/watchfiles-1.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df32d59cb9780f66d165a9a7a26f19df2c7d24e3bd58713108b41d0ff4f929c6", size = 454095, upload-time = "2025-06-15T19:06:48.211Z" }, ] [[package]] @@ -3329,9 +3958,9 @@ wheels = [ [[package]] name = "zipp" -version = "3.22.0" +version = "3.23.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/12/b6/7b3d16792fdf94f146bed92be90b4eb4563569eca91513c8609aebf0c167/zipp-3.22.0.tar.gz", hash = "sha256:dd2f28c3ce4bc67507bfd3781d21b7bb2be31103b51a4553ad7d90b84e57ace5", size = 25257, upload-time = "2025-05-26T14:46:32.217Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/da/f64669af4cae46f17b90798a827519ce3737d31dbafad65d391e49643dc4/zipp-3.22.0-py3-none-any.whl", hash = "sha256:fe208f65f2aca48b81f9e6fd8cf7b8b32c26375266b009b413d45306b6148343", size = 9796, upload-time = "2025-05-26T14:46:30.775Z" }, + { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, ] From 29505c96204f9c4016fe6cda29fd201c8d848977 Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Wed, 16 Jul 2025 11:52:27 +0200 Subject: [PATCH 2/2] build: upgrade to airflow 3.0.3 --- Dockerfile | 2 +- Dockerfile.test | 2 +- pyproject.toml | 295 ++++++++++++++++++++++++------------------------ 3 files changed, 152 insertions(+), 147 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4e74940..f78665a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG AIRFLOW_VERSION=3.0.3rc3 +ARG AIRFLOW_VERSION=3.0.3 ARG PYTHON_VERSION=3.10 ARG PLATFORM=linux diff --git a/Dockerfile.test b/Dockerfile.test index dada26c..a21bb40 100644 --- a/Dockerfile.test +++ b/Dockerfile.test @@ -1,4 +1,4 @@ -ARG AIRFLOW_VERSION=3.0.3rc3 +ARG AIRFLOW_VERSION=3.0.3 ARG PYTHON_VERSION=3.10 ARG PLATFORM=linux diff --git a/pyproject.toml b/pyproject.toml index ec4625b..8a8c03e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ description = "Add your description here" readme = "README.md" requires-python = ">=3.10,<3.11" dependencies = [ - "apache-airflow==3.0.3rc3", + "apache-airflow==3.0.3", # Editable install with no version specified. "apache-airflow-providers-fab", "apache-airflow-providers-http", @@ -87,8 +87,8 @@ exclude_lines = [ omit = ['env/*', 'venv/*', '*/virtualenv/*', '*/virtualenvs/*', '*/tests/*'] [tool.uv] -# airflow 3.0.3rc3 constraint file for python 3.10 -# https://github.com/apache/airflow/blob/constraints-3.0.3rc3/constraints-3.10.txt +# airflow 3.0.3 constraint file for python 3.10 +# https://github.com/apache/airflow/blob/constraints-3.0.3/constraints-3.10.txt constraint-dependencies = [ "APScheduler==3.11.0", "Authlib==1.3.1", @@ -132,7 +132,7 @@ constraint-dependencies = [ "aiofiles==24.1.0", "aiohappyeyeballs==2.6.1", "aiohttp-cors==0.8.1", - "aiohttp==3.12.13", + "aiohttp==3.12.14", "aioitertools==0.12.0", "aiomysql==0.2.0", "aioresponses==0.7.8", @@ -140,8 +140,8 @@ constraint-dependencies = [ "aiosqlite==0.21.0", "airbyte-api==0.52.2", "alabaster==1.0.0", - "alembic==1.16.2", - "alibabacloud-adb20211201==3.1.2", + "alembic==1.16.4", + "alibabacloud-adb20211201==3.1.3", "alibabacloud-credentials-api==1.0.0", "alibabacloud-credentials==1.0.2", "alibabacloud-tea==0.4.3", @@ -158,108 +158,108 @@ constraint-dependencies = [ "annotated-types==0.7.0", "ansicolors==1.1.8", "anyio==4.9.0", - "apache-airflow-providers-airbyte==5.2.0", - "apache-airflow-providers-alibaba==3.2.0", + "apache-airflow-providers-airbyte==5.2.1", + "apache-airflow-providers-alibaba==3.2.1", "apache-airflow-providers-amazon==9.9.0", "apache-airflow-providers-apache-beam==6.1.0", - "apache-airflow-providers-apache-cassandra==3.8.0", - "apache-airflow-providers-apache-drill==3.1.0", - "apache-airflow-providers-apache-druid==4.2.0", - "apache-airflow-providers-apache-flink==1.7.0", - "apache-airflow-providers-apache-hdfs==4.10.0", - "apache-airflow-providers-apache-hive==9.1.0", - "apache-airflow-providers-apache-iceberg==1.3.0", - "apache-airflow-providers-apache-impala==1.7.0", - "apache-airflow-providers-apache-kafka==1.9.0", - "apache-airflow-providers-apache-kylin==3.9.0", - "apache-airflow-providers-apache-livy==4.4.0", - "apache-airflow-providers-apache-pig==4.7.0", - "apache-airflow-providers-apache-pinot==4.8.0", - "apache-airflow-providers-apache-spark==5.3.0", - "apache-airflow-providers-apprise==2.1.0", - "apache-airflow-providers-arangodb==2.8.0", - "apache-airflow-providers-asana==2.10.0", - "apache-airflow-providers-atlassian-jira==3.1.0", - "apache-airflow-providers-celery==3.12.0", - "apache-airflow-providers-cloudant==4.2.0", - "apache-airflow-providers-cncf-kubernetes==10.6.0", - "apache-airflow-providers-cohere==1.5.1", - "apache-airflow-providers-common-compat==1.7.1", - "apache-airflow-providers-common-io==1.6.0", - "apache-airflow-providers-common-messaging==1.0.3", - "apache-airflow-providers-common-sql==1.27.2", - "apache-airflow-providers-databricks==7.5.0", - "apache-airflow-providers-datadog==3.9.0", - "apache-airflow-providers-dbt-cloud==4.4.0", - "apache-airflow-providers-dingding==3.8.0", - "apache-airflow-providers-discord==3.10.0", - "apache-airflow-providers-docker==4.4.0", + "apache-airflow-providers-apache-cassandra==3.8.1", + "apache-airflow-providers-apache-drill==3.1.1", + "apache-airflow-providers-apache-druid==4.2.1", + "apache-airflow-providers-apache-flink==1.7.1", + "apache-airflow-providers-apache-hdfs==4.10.1", + "apache-airflow-providers-apache-hive==9.1.1", + "apache-airflow-providers-apache-iceberg==1.3.1", + "apache-airflow-providers-apache-impala==1.7.1", + "apache-airflow-providers-apache-kafka==1.10.0", + "apache-airflow-providers-apache-kylin==3.9.1", + "apache-airflow-providers-apache-livy==4.4.1", + "apache-airflow-providers-apache-pig==4.7.1", + "apache-airflow-providers-apache-pinot==4.8.1", + "apache-airflow-providers-apache-spark==5.3.1", + "apache-airflow-providers-apprise==2.1.1", + "apache-airflow-providers-arangodb==2.8.1", + "apache-airflow-providers-asana==2.10.1", + "apache-airflow-providers-atlassian-jira==3.1.1", + "apache-airflow-providers-celery==3.12.1", + "apache-airflow-providers-cloudant==4.2.1", + "apache-airflow-providers-cncf-kubernetes==10.6.1", + "apache-airflow-providers-cohere==1.5.2", + "apache-airflow-providers-common-compat==1.7.2", + "apache-airflow-providers-common-io==1.6.1", + "apache-airflow-providers-common-messaging==1.0.4", + "apache-airflow-providers-common-sql==1.27.3", + "apache-airflow-providers-databricks==7.6.0", + "apache-airflow-providers-datadog==3.9.1", + "apache-airflow-providers-dbt-cloud==4.4.1", + "apache-airflow-providers-dingding==3.8.1", + "apache-airflow-providers-discord==3.10.1", + "apache-airflow-providers-docker==4.4.1", "apache-airflow-providers-edge3==1.1.1", - "apache-airflow-providers-elasticsearch==6.3.0", - "apache-airflow-providers-exasol==4.8.0", - "apache-airflow-providers-fab==2.2.1", - "apache-airflow-providers-facebook==3.8.0", - "apache-airflow-providers-ftp==3.13.0", - "apache-airflow-providers-git==0.0.3", - "apache-airflow-providers-github==2.9.0", - "apache-airflow-providers-google==16.0.0", - "apache-airflow-providers-grpc==3.8.0", - "apache-airflow-providers-hashicorp==4.3.0", - "apache-airflow-providers-http==5.3.1", - "apache-airflow-providers-imap==3.9.0", - "apache-airflow-providers-influxdb==2.9.1", - "apache-airflow-providers-jdbc==5.2.0", - "apache-airflow-providers-jenkins==4.1.0", - "apache-airflow-providers-microsoft-azure==12.4.1", - "apache-airflow-providers-microsoft-mssql==4.3.0", - "apache-airflow-providers-microsoft-psrp==3.1.0", - "apache-airflow-providers-microsoft-winrm==3.10.0", - "apache-airflow-providers-mongo==5.2.0", - "apache-airflow-providers-mysql==6.3.1", - "apache-airflow-providers-neo4j==3.9.1", - "apache-airflow-providers-odbc==4.10.0", - "apache-airflow-providers-openai==1.6.0", - "apache-airflow-providers-openfaas==3.8.0", - "apache-airflow-providers-openlineage==2.4.0", - "apache-airflow-providers-opensearch==1.7.0", - "apache-airflow-providers-opsgenie==5.9.0", - "apache-airflow-providers-oracle==4.1.1", - "apache-airflow-providers-pagerduty==5.0.0", - "apache-airflow-providers-papermill==3.11.0", - "apache-airflow-providers-pgvector==1.5.0", - "apache-airflow-providers-pinecone==2.3.1", - "apache-airflow-providers-postgres==6.2.0", - "apache-airflow-providers-presto==5.9.0", - "apache-airflow-providers-qdrant==1.4.0", - "apache-airflow-providers-redis==4.1.0", - "apache-airflow-providers-salesforce==5.11.0", - "apache-airflow-providers-samba==4.10.0", - "apache-airflow-providers-segment==3.8.0", - "apache-airflow-providers-sendgrid==4.1.1", - "apache-airflow-providers-sftp==5.3.1", - "apache-airflow-providers-singularity==3.8.0", - "apache-airflow-providers-slack==9.1.1", - "apache-airflow-providers-smtp==2.1.0", - "apache-airflow-providers-snowflake==6.4.0", - "apache-airflow-providers-sqlite==4.1.0", - "apache-airflow-providers-ssh==4.1.0", - "apache-airflow-providers-standard==1.3.0", - "apache-airflow-providers-tableau==5.1.0", - "apache-airflow-providers-telegram==4.8.0", - "apache-airflow-providers-teradata==3.1.0", - "apache-airflow-providers-trino==6.3.0", - "apache-airflow-providers-vertica==4.1.0", - "apache-airflow-providers-weaviate==3.2.0", - "apache-airflow-providers-yandex==4.1.0", - "apache-airflow-providers-ydb==2.2.0", - "apache-airflow-providers-zendesk==4.10.0", + "apache-airflow-providers-elasticsearch==6.3.1", + "apache-airflow-providers-exasol==4.8.1", + "apache-airflow-providers-fab==2.3.0", + "apache-airflow-providers-facebook==3.8.1", + "apache-airflow-providers-ftp==3.13.1", + "apache-airflow-providers-git==0.0.4", + "apache-airflow-providers-github==2.9.1", + "apache-airflow-providers-google==16.1.0", + "apache-airflow-providers-grpc==3.8.1", + "apache-airflow-providers-hashicorp==4.3.1", + "apache-airflow-providers-http==5.3.2", + "apache-airflow-providers-imap==3.9.1", + "apache-airflow-providers-influxdb==2.9.2", + "apache-airflow-providers-jdbc==5.2.1", + "apache-airflow-providers-jenkins==4.1.1", + "apache-airflow-providers-microsoft-azure==12.5.0", + "apache-airflow-providers-microsoft-mssql==4.3.1", + "apache-airflow-providers-microsoft-psrp==3.1.1", + "apache-airflow-providers-microsoft-winrm==3.10.1", + "apache-airflow-providers-mongo==5.2.1", + "apache-airflow-providers-mysql==6.3.2", + "apache-airflow-providers-neo4j==3.9.2", + "apache-airflow-providers-odbc==4.10.1", + "apache-airflow-providers-openai==1.6.1", + "apache-airflow-providers-openfaas==3.8.1", + "apache-airflow-providers-openlineage==2.5.0", + "apache-airflow-providers-opensearch==1.7.1", + "apache-airflow-providers-opsgenie==5.9.1", + "apache-airflow-providers-oracle==4.1.2", + "apache-airflow-providers-pagerduty==5.0.1", + "apache-airflow-providers-papermill==3.11.1", + "apache-airflow-providers-pgvector==1.5.1", + "apache-airflow-providers-pinecone==2.3.2", + "apache-airflow-providers-postgres==6.2.1", + "apache-airflow-providers-presto==5.9.1", + "apache-airflow-providers-qdrant==1.4.1", + "apache-airflow-providers-redis==4.1.1", + "apache-airflow-providers-salesforce==5.11.1", + "apache-airflow-providers-samba==4.10.1", + "apache-airflow-providers-segment==3.8.1", + "apache-airflow-providers-sendgrid==4.1.2", + "apache-airflow-providers-sftp==5.3.2", + "apache-airflow-providers-singularity==3.8.1", + "apache-airflow-providers-slack==9.1.2", + "apache-airflow-providers-smtp==2.1.1", + "apache-airflow-providers-snowflake==6.5.0", + "apache-airflow-providers-sqlite==4.1.1", + "apache-airflow-providers-ssh==4.1.1", + "apache-airflow-providers-standard==1.4.0", + "apache-airflow-providers-tableau==5.1.1", + "apache-airflow-providers-telegram==4.8.1", + "apache-airflow-providers-teradata==3.2.0", + "apache-airflow-providers-trino==6.3.1", + "apache-airflow-providers-vertica==4.1.1", + "apache-airflow-providers-weaviate==3.2.1", + "apache-airflow-providers-yandex==4.1.1", + "apache-airflow-providers-ydb==2.2.1", + "apache-airflow-providers-zendesk==4.10.1", "apache-beam==2.59.0", "apispec==6.8.2", "apprise==1.9.3", "argcomplete==3.6.2", "arro3-core==0.5.1", "asana==5.2.0", - "asgiref==3.9.0", + "asgiref==3.9.1", "asn1crypto==1.5.1", "astroid==3.3.10", "asttokens==3.0.0", @@ -310,16 +310,17 @@ constraint-dependencies = [ "blinker==1.9.0", "boto3==1.38.27", "botocore==1.38.27", + "build==1.2.2.post1", "cachelib==0.13.0", "cachetools==5.5.2", - "cadwyn==5.4.2", + "cadwyn==5.4.3", "cassandra-driver==3.29.2", "cattrs==25.1.1", "celery==5.5.3", - "certifi==2025.6.15", + "certifi==2025.7.9", "cffi==1.17.1", "cfgv==3.4.0", - "cfn-lint==1.37.0", + "cfn-lint==1.37.2", "chardet==5.2.0", "charset-normalizer==3.4.2", "checksumdir==1.2.0", @@ -330,7 +331,7 @@ constraint-dependencies = [ "click==8.2.1", "clickclick==20.10.2", "cloudpickle==2.2.1", - "cohere==5.15.0", + "cohere==5.16.1", "colorama==0.4.6", "colorful==0.5.7", "colorlog==6.9.0", @@ -346,7 +347,7 @@ constraint-dependencies = [ "databricks-sql-connector==4.0.5", "databricks-sqlalchemy==1.0.5", "dataclasses-json==0.6.7", - "datadog==0.51.0", + "datadog==0.52.0", "db-dtypes==1.4.3", "debugpy==1.8.14", "decorator==5.2.1", @@ -361,7 +362,7 @@ constraint-dependencies = [ "docopt==0.6.2", "docstring_parser==0.16", "docutils==0.21.2", - "duckdb==1.3.1", + "duckdb==1.3.2", "durationpy==0.10", "ecdsa==0.19.1", "elastic-transport==8.17.1", @@ -375,8 +376,9 @@ constraint-dependencies = [ "execnet==2.1.1", "executing==2.2.0", "facebook_business==23.0.0", - "fastapi-cli==0.0.7", - "fastapi==0.115.14", + "fastapi-cli==0.0.8", + "fastapi-cloud-cli==0.1.4", + "fastapi==0.116.0", "fastavro==1.11.1", "fasteners==0.19", "fastjsonschema==2.21.1", @@ -389,7 +391,7 @@ constraint-dependencies = [ "future==1.0.0", "gcloud-aio-auth==5.4.2", "gcloud-aio-bigquery==7.1.0", - "gcloud-aio-storage==9.4.0", + "gcloud-aio-storage==9.5.0", "gcsfs==2025.5.1", "geomet==0.2.1.post1", "gevent==25.5.1", @@ -397,11 +399,11 @@ constraint-dependencies = [ "google-ads==27.0.0", "google-analytics-admin==0.24.1", "google-api-core==2.25.1", - "google-api-python-client==2.175.0", + "google-api-python-client==2.176.0", "google-auth-httplib2==0.2.0", "google-auth-oauthlib==1.2.2", "google-auth==2.40.3", - "google-cloud-aiplatform==1.101.0", + "google-cloud-aiplatform==1.103.0", "google-cloud-alloydb==0.4.8", "google-cloud-appengine-logging==1.6.2", "google-cloud-audit-log==0.3.2", @@ -412,25 +414,25 @@ constraint-dependencies = [ "google-cloud-bigquery==3.34.0", "google-cloud-bigtable==2.31.0", "google-cloud-build==3.31.2", - "google-cloud-compute==1.31.0", + "google-cloud-compute==1.32.0", "google-cloud-container==2.57.0", "google-cloud-core==2.4.3", "google-cloud-datacatalog==3.27.1", "google-cloud-dataflow-client==0.9.0", "google-cloud-dataform==0.6.2", - "google-cloud-dataplex==2.10.2", + "google-cloud-dataplex==2.11.0", "google-cloud-dataproc-metastore==1.18.3", "google-cloud-dataproc==5.21.0", "google-cloud-dlp==3.31.0", "google-cloud-kms==3.5.1", "google-cloud-language==2.17.2", "google-cloud-logging==3.12.1", - "google-cloud-managedkafka==0.1.11", + "google-cloud-managedkafka==0.1.12", "google-cloud-memcache==1.12.2", "google-cloud-monitoring==2.27.2", "google-cloud-orchestration-airflow==1.17.5", "google-cloud-os-login==2.17.2", - "google-cloud-pubsub==2.30.0", + "google-cloud-pubsub==2.31.0", "google-cloud-redis==2.18.1", "google-cloud-resource-manager==1.14.2", "google-cloud-run==0.10.18", @@ -474,13 +476,13 @@ constraint-dependencies = [ "httptools==0.6.4", "httpx-sse==0.4.0", "httpx==0.27.0", - "huggingface-hub==0.33.2", + "huggingface-hub==0.33.4", "humanize==4.12.3", "hvac==2.3.0", "hyperframe==6.1.0", "hyperlink==21.0.0", - "ibm-cloud-sdk-core==3.20.3", - "ibmcloudant==0.9.1", + "ibm-cloud-sdk-core==3.24.1", + "ibmcloudant==0.10.4", "icdiff==2.0.7", "id==1.5.0", "identify==2.6.12", @@ -508,8 +510,8 @@ constraint-dependencies = [ "jiter==0.10.0", "jmespath==0.10.0", "joblib==1.5.1", - "joserfc==1.1.0", - "jpype1==1.5.2", + "joserfc==1.2.1", + "jpype1==1.6.0", "jsonpatch==1.33", "jsonpath-ng==1.7.0", "jsonpath-python==1.0.6", @@ -534,7 +536,7 @@ constraint-dependencies = [ "libcst==1.8.2", "limits==5.4.0", "linkify-it-py==2.0.3", - "litellm==1.73.6.post1", + "litellm==1.74.2", "lockfile==0.12.2", "looker-sdk==25.10.0", "lxml==5.4.0", @@ -555,7 +557,7 @@ constraint-dependencies = [ "mmh3==5.1.0", "mongomock==4.3.0", "more-itertools==10.7.0", - "moto==5.1.6", + "moto==5.1.8", "mpmath==1.3.0", "msal-extensions==1.3.1", "msal==1.32.3", @@ -585,14 +587,14 @@ constraint-dependencies = [ "numpy==1.26.4", "oauthlib==3.3.1", "objsize==0.7.1", - "openai==1.93.0", + "openai==1.95.0", "openapi-schema-validator==0.6.3", "openapi-spec-validator==0.7.2", "opencensus-context==0.1.3", "opencensus==0.11.4", - "openlineage-integration-common==1.34.0", - "openlineage-python==1.34.0", - "openlineage_sql==1.34.0", + "openlineage-integration-common==1.35.0", + "openlineage-python==1.35.0", + "openlineage_sql==1.35.0", "openpyxl==3.1.5", "opensearch-py==3.0.0", "opentelemetry-api==1.27.0", @@ -610,10 +612,10 @@ constraint-dependencies = [ "orjson==3.10.18", "oss2==2.19.1", "packaging==25.0", - "pagerduty==2.3.0", - "pandas-gbq==0.29.1", + "pagerduty==3.0.0", + "pandas-gbq==0.29.2", "pandas-stubs==2.3.0.250703", - "pandas==2.1.4", + "pandas==2.2.3", "pandocfilters==1.5.1", "papermill==2.6.0", "paramiko==3.5.1", @@ -630,7 +632,7 @@ constraint-dependencies = [ "pinecone-plugin-interface==0.0.7", "pinecone==7.0.1", "pinotdb==5.6.0", - "pipdeptree==2.26.1", + "pipdeptree==2.27.0", "platformdirs==4.3.8", "pluggy==1.6.0", "ply==3.11", @@ -675,10 +677,11 @@ constraint-dependencies = [ "pyjsparser==2.7.1", "pykerberos==1.2.4", "pymongo==4.10.1", - "pymssql==2.3.6", + "pymssql==2.3.7", "pyodbc==5.2.0", "pyodps==0.12.4", "pyparsing==3.2.3", + "pyproject_hooks==1.2.0", "pypsrp==0.8.1", "pyspark==4.0.0", "pyspnego==0.11.2", @@ -693,7 +696,7 @@ constraint-dependencies = [ "pytest-unordered==0.7.0", "pytest-xdist==3.8.0", "pytest==8.4.1", - "python-arango==8.2.0", + "python-arango==8.2.1", "python-daemon==3.1.2", "python-dateutil==2.9.0.post0", "python-dotenv==1.1.1", @@ -732,6 +735,7 @@ constraint-dependencies = [ "rich-click==1.8.9", "rich-toolkit==0.14.8", "rich==13.9.4", + "rignore==0.5.1", "rpds-py==0.26.0", "rsa==4.9.1", "ruamel.yaml.clib==0.2.12", @@ -742,8 +746,9 @@ constraint-dependencies = [ "sagemaker_studio==1.0.16", "scikit-learn==1.5.2", "scipy==1.15.3", - "scramp==1.4.5", + "scramp==1.4.6", "scrapbook==0.5.0", + "segment-analytics-python==2.3.4", "semver==3.0.4", "sendgrid==6.12.4", "sentinels==1.0.0", @@ -753,7 +758,7 @@ constraint-dependencies = [ "shellingham==1.5.4", "simple-salesforce==1.12.6", "six==1.17.0", - "slack_sdk==3.35.0", + "slack_sdk==3.36.0", "smart_open==7.3.0.post1", "smbprotocol==1.15.0", "smmap==5.0.2", @@ -761,7 +766,7 @@ constraint-dependencies = [ "snowballstemmer==3.0.1", "snowflake-connector-python==3.16.0", "snowflake-snowpark-python==1.33.0", - "snowflake-sqlalchemy==1.7.5", + "snowflake-sqlalchemy==1.7.6", "sortedcontainers==2.4.0", "soupsieve==2.7", "sphinx-argparse==0.5.2", @@ -799,7 +804,7 @@ constraint-dependencies = [ "tableauserverclient==0.38", "tabulate==0.9.0", "tenacity==9.1.2", - "teradatasql==20.0.0.32", + "teradatasql==20.0.0.33", "teradatasqlalchemy==20.0.0.6", "termcolor==3.1.0", "text-unidecode==1.3", @@ -822,18 +827,18 @@ constraint-dependencies = [ "twine==6.1.0", "typer==0.16.0", "types-Deprecated==1.2.15.20250304", - "types-Markdown==3.8.0.20250415", - "types-PyMySQL==1.1.0.20250516", + "types-Markdown==3.8.0.20250708", + "types-PyMySQL==1.1.0.20250711", "types-PyYAML==6.0.12.20250516", - "types-aiofiles==24.1.0.20250606", + "types-aiofiles==24.1.0.20250708", "types-certifi==2021.10.8.3", "types-cffi==1.17.0.20250523", "types-croniter==6.0.0.20250626", - "types-docutils==0.21.0.20250604", - "types-paramiko==3.5.0.20250516", + "types-docutils==0.21.0.20250710", + "types-paramiko==3.5.0.20250708", "types-protobuf==6.30.2.20250703", "types-pyOpenSSL==24.1.0.20240722", - "types-python-dateutil==2.9.0.20250516", + "types-python-dateutil==2.9.0.20250708", "types-python-slugify==8.0.2.20240310", "types-pytz==2025.2.0.20250516", "types-redis==4.6.0.20241004", @@ -843,7 +848,7 @@ constraint-dependencies = [ "types-toml==0.10.8.20240310", "typing-inspect==0.9.0", "typing-inspection==0.4.1", - "typing_extensions==4.13.2", + "typing_extensions==4.14.1", "tzdata==2025.2", "tzlocal==5.3.1", "uc-micro-py==1.0.3", @@ -851,8 +856,8 @@ constraint-dependencies = [ "uritemplate==4.2.0", "urllib3==2.5.0", "userpath==1.9.2", - "uuid6==2025.0.0", - "uv==0.7.19", + "uuid6==2025.0.1", + "uv==0.7.20", "uvicorn==0.35.0", "uvloop==0.21.0", "validators==0.34.0", @@ -868,7 +873,7 @@ constraint-dependencies = [ "websockets==14.2", "wirerope==1.0.0", "wrapt==1.17.2", - "xmlsec==1.3.14", + "xmlsec==1.3.16", "xmltodict==0.14.2", "yamllint==1.37.1", "yandex-query-client==0.1.4",