diff --git a/benchmarks/bench.py b/benchmarks/bench.py index 6ce5e9ed1e1..5e8c704c0c9 100644 --- a/benchmarks/bench.py +++ b/benchmarks/bench.py @@ -44,7 +44,7 @@ async def measure( ) -> AsyncGenerator[MeasureResult, None]: async with case.start() as start_time: while (elapsed_time := (time.time() - start_time)) < measure_time: - yield MeasureResult(case.EVENTS_PROCESSED, elapsed_time) + yield MeasureResult(case.EVENTS_PROCESSED, elapsed_time) # ruff: ignore[yield-in-context-manager-in-async-generator] await asyncio.sleep(1.0) yield MeasureResult(case.EVENTS_PROCESSED, time.time() - start_time) diff --git a/benchmarks/confluent_cases/test_confluent.py b/benchmarks/confluent_cases/test_confluent.py index 2877f05c2fb..112e56c0df7 100644 --- a/benchmarks/confluent_cases/test_confluent.py +++ b/benchmarks/confluent_cases/test_confluent.py @@ -40,7 +40,7 @@ def setup_method(self) -> None: async def start(self) -> AsyncGenerator[float, None]: stop_event = asyncio.Event() - def acked(err, msg) -> None: # noqa: ANN001 + def acked(err, msg) -> None: # ruff: ignore[missing-type-function-argument] if err is not None: print(f"Failed to deliver message: {msg!s}: {err!s}") diff --git a/benchmarks/nats_cases/test_nats.py b/benchmarks/nats_cases/test_nats.py index 294875b56d0..ab5f2a06d68 100644 --- a/benchmarks/nats_cases/test_nats.py +++ b/benchmarks/nats_cases/test_nats.py @@ -46,9 +46,10 @@ async def message_handler(msg: Any) -> None: "children": [{"name": "Mike", "age": 8, "fullname": "LongString" * 8}], }).encode("utf-8"), ) - yield start_time - - await nc.close() + try: + yield start_time + finally: + await nc.close() async def test_consume_message(self) -> None: async with self.start(): diff --git a/benchmarks/rabbit_cases/test_aiopika.py b/benchmarks/rabbit_cases/test_aiopika.py index c85e621ab4c..f5aa327c6d3 100644 --- a/benchmarks/rabbit_cases/test_aiopika.py +++ b/benchmarks/rabbit_cases/test_aiopika.py @@ -56,8 +56,10 @@ async def handler(msg: aio_pika.IncomingMessage) -> None: routing_key="in", ) - yield start_time - await connection.close() + try: + yield start_time + finally: + await connection.close() async def test_consume_message(self) -> None: async with self.start(): diff --git a/faststream/__main__.py b/faststream/__main__.py index e709fa42485..77cf8168e5f 100644 --- a/faststream/__main__.py +++ b/faststream/__main__.py @@ -15,7 +15,7 @@ warnings.filterwarnings("default", category=ImportWarning, module="faststream") -from faststream._internal.cli.main import cli # noqa: E402 +from faststream._internal.cli.main import cli # ruff: ignore[module-import-not-at-top-of-file] if __name__ == "__main__": cli(prog_name="faststream") diff --git a/faststream/_internal/_compat.py b/faststream/_internal/_compat.py index c6cf9c94f0f..5c8ef22f376 100644 --- a/faststream/_internal/_compat.py +++ b/faststream/_internal/_compat.py @@ -155,7 +155,7 @@ def with_info_plain_validator_function( # type: ignore[misc] if sys.version_info >= (3, 11): - ExceptionGroup = ExceptionGroup # noqa: F821,PLW0127 + ExceptionGroup = ExceptionGroup # ruff: ignore[undefined-name, self-assigning-variable] else: from exceptiongroup import ExceptionGroup diff --git a/faststream/_internal/application.py b/faststream/_internal/application.py index 4605ff50d4e..9e278152bce 100644 --- a/faststream/_internal/application.py +++ b/faststream/_internal/application.py @@ -85,7 +85,7 @@ def __init__( def context(self) -> "ContextRepo": return self.config.context - def _init_setupable_( # noqa: PLW3201 + def _init_setupable_( # ruff: ignore[bad-dunder-method-name] self, *brokers: "BrokerUsecase[Any, Any, Any]", specification: Optional["SpecificationFactory"] = None, @@ -249,7 +249,7 @@ async def _start_hooks_context( for func in self._on_startup_calling: await func(**run_extra_options) - yield + yield # ruff: ignore[fallible-context-manager] for func in self._after_startup_calling: await func() @@ -265,7 +265,7 @@ async def _startup_logging( "FastStream app starting...", ) - yield + yield # ruff: ignore[fallible-context-manager] self._log( log_level, @@ -292,7 +292,7 @@ async def _shutdown_hooks_context(self) -> AsyncGenerator[None, None]: for func in self._on_shutdown_calling: await func() - yield + yield # ruff: ignore[fallible-context-manager] for func in self._after_shutdown_calling: await func() @@ -305,7 +305,7 @@ async def _shutdown_logging( """Separated startup logging.""" self._log(log_level, "FastStream app shutting down...") - yield + yield # ruff: ignore[fallible-context-manager] self._log(log_level, "FastStream app shut down gracefully.") diff --git a/faststream/_internal/cli/docs.py b/faststream/_internal/cli/docs.py index 11c5ab9f8f4..4e766103f04 100644 --- a/faststream/_internal/cli/docs.py +++ b/faststream/_internal/cli/docs.py @@ -12,10 +12,10 @@ from faststream._internal.cli.utils.imports import import_from_string from faststream.exceptions import INSTALL_WATCHFILES, INSTALL_YAML, SCHEMA_NOT_SUPPORTED from faststream.specification.asyncapi.site import serve_app -from faststream.specification.asyncapi.v2_6_0.schema import ( # noqa: TID253 +from faststream.specification.asyncapi.v2_6_0.schema import ( # ruff: ignore[banned-module-level-imports] ApplicationSchema as SchemaV2_6, ) -from faststream.specification.asyncapi.v3_0_0.schema import ( # noqa: TID253 +from faststream.specification.asyncapi.v3_0_0.schema import ( # ruff: ignore[banned-module-level-imports] ApplicationSchema as SchemaV3, ) diff --git a/faststream/_internal/cli/main.py b/faststream/_internal/cli/main.py index 48633b9b9c7..e188bfd205a 100644 --- a/faststream/_internal/cli/main.py +++ b/faststream/_internal/cli/main.py @@ -127,7 +127,7 @@ def run( "--log-config", help=( "Set file to configure logging. Support " - f"{', '.join(f'`{x.value}`' for x in LogFiles)} extensions." # noqa: B008 + f"{', '.join(f'`{x.value}`' for x in LogFiles)} extensions." # ruff: ignore[function-call-in-default-argument] ), show_default=False, ), diff --git a/faststream/_internal/cli/supervisors/asgi_multiprocess.py b/faststream/_internal/cli/supervisors/asgi_multiprocess.py index 781c45f8689..973560908d1 100644 --- a/faststream/_internal/cli/supervisors/asgi_multiprocess.py +++ b/faststream/_internal/cli/supervisors/asgi_multiprocess.py @@ -41,7 +41,7 @@ def init_processes(self) -> None: self.config._run_extra_options["worker_id"] = i extra: dict[str, Any] = {"sockets": self.sockets} if _UVICORN_TAKES_TARGET: - extra["target"] = self.target + extra["target"] = self.target # type: ignore[attr-defined] process = Process(self.config, **extra) process.start() self.processes.append(process) diff --git a/faststream/_internal/configs/broker.py b/faststream/_internal/configs/broker.py index 1e624f4157e..667b78140c6 100644 --- a/faststream/_internal/configs/broker.py +++ b/faststream/_internal/configs/broker.py @@ -109,7 +109,7 @@ def insert_middleware(self, middleware: "BrokerMiddleware[Any]") -> None: ConfigType = Union["ConfigComposition[Any]", "BrokerConfigType_co", BrokerConfig] -class ConfigComposition(Generic[BrokerConfigType_co]): # noqa: PLR0904 +class ConfigComposition(Generic[BrokerConfigType_co]): # ruff: ignore[too-many-public-methods] def __init__(self, config: BrokerConfigType_co) -> None: self.configs: tuple[ConfigType[BrokerConfigType_co], ...] = (config,) diff --git a/faststream/_internal/context/composition.py b/faststream/_internal/context/composition.py index 902996f065f..7214c6f3cbf 100644 --- a/faststream/_internal/context/composition.py +++ b/faststream/_internal/context/composition.py @@ -80,7 +80,7 @@ def resolve(self, argument: str) -> Any: for context in self._contexts: try: return context.resolve(argument) - except ContextError: # noqa: PERF203 + except ContextError: # ruff: ignore[try-except-in-loop] pass raise ContextError(self.context, first) diff --git a/faststream/_internal/context/context_type.py b/faststream/_internal/context/context_type.py index 2bf5786407a..639edf72fd7 100644 --- a/faststream/_internal/context/context_type.py +++ b/faststream/_internal/context/context_type.py @@ -62,7 +62,7 @@ def use(self, /, **kwargs: Any) -> dict[str, Any]: """ name = f"{self.prefix}{self.name or self.param_name}" - if EMPTY != ( # noqa: SIM300 + if EMPTY != ( # ruff: ignore[yoda-conditions] v := resolve_context_by_name( name=name, default=self.default, diff --git a/faststream/_internal/context/resolve.py b/faststream/_internal/context/resolve.py index 7b038bb82d8..0a040b62e9a 100644 --- a/faststream/_internal/context/resolve.py +++ b/faststream/_internal/context/resolve.py @@ -19,7 +19,7 @@ def resolve_context_by_name( value = context.resolve(name) except (KeyError, AttributeError): - if EMPTY != default: # noqa: SIM300 + if EMPTY != default: # ruff: ignore[yoda-conditions] value = default elif initial is not None: diff --git a/faststream/_internal/endpoint/publisher/specification.py b/faststream/_internal/endpoint/publisher/specification.py index 42f2c45c62b..30394fb2c39 100644 --- a/faststream/_internal/endpoint/publisher/specification.py +++ b/faststream/_internal/endpoint/publisher/specification.py @@ -2,7 +2,7 @@ from typing import TYPE_CHECKING, Any from fast_depends.core import build_call_model -from fast_depends.pydantic._compat import create_model, get_config_base # noqa: PLC2701 +from fast_depends.pydantic._compat import create_model, get_config_base # ruff: ignore[import-private-name] from typing_extensions import TypeVar as TypeVar313 from faststream._internal.configs import BrokerConfig, PublisherSpecificationConfig diff --git a/faststream/_internal/endpoint/subscriber/call_item.py b/faststream/_internal/endpoint/subscriber/call_item.py index f2a233c9e5b..1ffcd0cb524 100644 --- a/faststream/_internal/endpoint/subscriber/call_item.py +++ b/faststream/_internal/endpoint/subscriber/call_item.py @@ -95,7 +95,7 @@ def _setup( @property def name(self) -> str: - """Returns the name of the original call.""" + """The name of the original call.""" if self.handler is None: return "" @@ -104,7 +104,7 @@ def name(self) -> str: @property def description(self) -> str | None: - """Returns the description of original call.""" + """The description of original call.""" if self.handler is None: return None @@ -168,7 +168,7 @@ def add_call(self, call: "HandlerItem[MsgType]") -> None: @property def name(self) -> str | None: - """Returns the name of the handler call.""" + """The name of the handler call.""" if not self.data: return None diff --git a/faststream/_internal/endpoint/subscriber/usecase.py b/faststream/_internal/endpoint/subscriber/usecase.py index d1780145812..2bc7ca08bc1 100644 --- a/faststream/_internal/endpoint/subscriber/usecase.py +++ b/faststream/_internal/endpoint/subscriber/usecase.py @@ -357,7 +357,7 @@ async def consume(self, msg: MsgType) -> Any: if app := self._outer_config.context.get("app"): app.exit() - except Exception: # nosec B110 # noqa: S110 + except Exception: # nosec B110 # ruff: ignore[try-except-pass] # All other exceptions were logged by CriticalLogMiddleware pass @@ -499,7 +499,7 @@ def __aiter__(self) -> AsyncIterator["StreamMessage[MsgType]"]: # which the `async for` protocol does not accept. raise NotImplementedError - def get_log_context( # noqa: PLR6301 + def get_log_context( # ruff: ignore[no-self-use] self, message: Optional["StreamMessage[MsgType]"], ) -> dict[str, str]: diff --git a/faststream/_internal/endpoint/subscriber/utils.py b/faststream/_internal/endpoint/subscriber/utils.py index cfd2caea28c..028c18ed630 100644 --- a/faststream/_internal/endpoint/subscriber/utils.py +++ b/faststream/_internal/endpoint/subscriber/utils.py @@ -55,12 +55,12 @@ def release(self) -> None: @property def qsize(self) -> int: - """Return the size of the queue.""" + """The size of the queue.""" return self.queue.qsize() @property def empty(self) -> bool: - """Return whether the queue is empty.""" + """Whether the queue is empty.""" return self.queue.empty() async def wait_release(self, timeout: float | None = None) -> None: diff --git a/faststream/_internal/fastapi/_compat.py b/faststream/_internal/fastapi/_compat.py index a8f2fa4ba27..1e25867e2e5 100644 --- a/faststream/_internal/fastapi/_compat.py +++ b/faststream/_internal/fastapi/_compat.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from typing import TYPE_CHECKING, Any -from fastapi import __version__ as FASTAPI_VERSION # noqa: N812 +from fastapi import __version__ as FASTAPI_VERSION # ruff: ignore[lowercase-imported-as-non-lowercase] from fastapi.dependencies.utils import solve_dependencies from starlette.background import BackgroundTasks from typing_extensions import Never @@ -73,7 +73,7 @@ def raise_fastapi_validation_error(errors: list[Any], body: dict[str, Any]) -> N ROUTER_VALIDATION_ERROR_MODEL = create_model("StreamRoute") def raise_fastapi_validation_error(errors: list[Any], body: dict[str, Any]) -> Never: - raise RequestValidationError(errors, ROUTER_VALIDATION_ERROR_MODEL) # type: ignore[misc] + raise RequestValidationError(errors, ROUTER_VALIDATION_ERROR_MODEL) # type: ignore[call-arg] if FASTAPI_v102_3: diff --git a/faststream/_internal/fastapi/context.py b/faststream/_internal/fastapi/context.py index a7df8d1cc23..467c1b502f4 100644 --- a/faststream/_internal/fastapi/context.py +++ b/faststream/_internal/fastapi/context.py @@ -9,7 +9,7 @@ from faststream._internal.context.resolve import resolve_context_by_name -def Context( # noqa: N802 +def Context( # ruff: ignore[invalid-function-name] name: str, *, default: Any = EMPTY, diff --git a/faststream/_internal/fastapi/router.py b/faststream/_internal/fastapi/router.py index b8d21de087c..5ce691bb59d 100644 --- a/faststream/_internal/fastapi/router.py +++ b/faststream/_internal/fastapi/router.py @@ -27,7 +27,7 @@ from fastapi.utils import generate_unique_id from starlette.requests import Request from starlette.responses import JSONResponse, Response -from starlette.routing import BaseRoute, _DefaultLifespan # noqa: PLC2701 +from starlette.routing import BaseRoute, _DefaultLifespan # ruff: ignore[import-private-name] from typing_extensions import override from faststream._internal.application import StartAbleApplication @@ -398,7 +398,7 @@ def download_app_json_schema() -> Response: return Response( # `json_dumps` may be orjson, which takes no `indent`: # the downloaded schema stays readable - content=json.dumps( # noqa: TID251 + content=json.dumps( # ruff: ignore[banned-api] self.schema.to_specification().to_jsonable(), indent=2, ), diff --git a/faststream/_internal/logger/formatter.py b/faststream/_internal/logger/formatter.py index f79966f0e17..94cdc799f3f 100644 --- a/faststream/_internal/logger/formatter.py +++ b/faststream/_internal/logger/formatter.py @@ -43,7 +43,7 @@ def __init__( self.use_colors = sys.stdout.isatty() super().__init__(fmt=fmt, datefmt=datefmt, style=style) - def formatMessage(self, record: logging.LogRecord) -> str: # noqa: N802 + def formatMessage(self, record: logging.LogRecord) -> str: # ruff: ignore[invalid-function-name] """Formats the log message. Args: diff --git a/faststream/_internal/middlewares.py b/faststream/_internal/middlewares.py index d8b0dae997a..e772a9098a9 100644 --- a/faststream/_internal/middlewares.py +++ b/faststream/_internal/middlewares.py @@ -31,7 +31,7 @@ def __init__( async def on_receive(self) -> None: """Hook to call on message receive.""" - async def after_processed( # noqa: PLR6301 + async def after_processed( # ruff: ignore[no-self-use] self, exc_type: type[BaseException] | None = None, exc_val: BaseException | None = None, @@ -53,7 +53,7 @@ async def __aexit__( """Exit the asynchronous context manager.""" return await self.after_processed(exc_type, exc_val, exc_tb) - async def consume_scope( # noqa: PLR6301 + async def consume_scope( # ruff: ignore[no-self-use] self, call_next: "AsyncFuncAny", msg: "StreamMessage[Any]", @@ -61,7 +61,7 @@ async def consume_scope( # noqa: PLR6301 """Asynchronously consumes a message and returns an asynchronous iterator of decoded messages.""" return await call_next(msg) - async def publish_scope( # noqa: PLR6301 + async def publish_scope( # ruff: ignore[no-self-use] self, call_next: Callable[[PublishCommandType], Awaitable[Any]], cmd: PublishCommandType, diff --git a/faststream/_internal/parser.py b/faststream/_internal/parser.py index fe52cf54c86..6efa39f727d 100644 --- a/faststream/_internal/parser.py +++ b/faststream/_internal/parser.py @@ -100,10 +100,10 @@ async def decode_batch( class DefaultCodec: __slots__ = () - async def decode(self, msg: "StreamMessage[Any]") -> "DecodedMessage": # noqa: PLR6301 + async def decode(self, msg: "StreamMessage[Any]") -> "DecodedMessage": # ruff: ignore[no-self-use] return decode_message(msg) - async def encode( # noqa: PLR6301 + async def encode( # ruff: ignore[no-self-use] self, msg: "SendableMessage", serializer: "SerializerProto | None" = None, diff --git a/faststream/_internal/proto.py b/faststream/_internal/proto.py index b8679e54403..d7fc10b59fe 100644 --- a/faststream/_internal/proto.py +++ b/faststream/_internal/proto.py @@ -3,7 +3,7 @@ from typing_extensions import Self -class NameRequired: # noqa: PLW1641 - each subclass decides whether it is hashable +class NameRequired: # ruff: ignore[eq-without-hash] - each subclass decides whether it is hashable """Required name option object.""" __slots__ = ("name",) diff --git a/faststream/_internal/testing/broker.py b/faststream/_internal/testing/broker.py index b52292a5d24..34157402546 100644 --- a/faststream/_internal/testing/broker.py +++ b/faststream/_internal/testing/broker.py @@ -49,8 +49,10 @@ def change_producer( producer: Any, ) -> Generator[None, None, None]: old_producer, config.producer = config.producer, producer - yield - config.producer = old_producer + try: + yield + finally: + config.producer = old_producer class TestBroker(Generic[Broker, EnterType]): @@ -134,10 +136,11 @@ async def _create_ctx(self) -> AsyncGenerator[list[Broker], None]: await stack.enter_async_context(self._do_start(broker)) ) - yield started_brokers - - for sub, was_running in saved_running.items(): - sub.running = was_running + try: + yield started_brokers + finally: + for sub, was_running in saved_running.items(): + sub.running = was_running @asynccontextmanager async def _do_start(self, broker: Broker) -> AsyncGenerator[Broker, None]: diff --git a/faststream/_internal/utils/nuid.py b/faststream/_internal/utils/nuid.py index 796f79aa701..10b4008c220 100644 --- a/faststream/_internal/utils/nuid.py +++ b/faststream/_internal/utils/nuid.py @@ -43,7 +43,7 @@ class NUID: ) def __init__(self) -> None: - self._prand = Random(randbelow(max_int)) # nosec B311 # noqa: S311 + self._prand = Random(randbelow(max_int)) # nosec B311 # ruff: ignore[suspicious-non-cryptographic-random-usage] self._seq = self._prand.randint(0, MAX_SEQ) self._inc = MIN_INC + self._prand.randint(BASE + 1, INC) self._prefix = bytearray() diff --git a/faststream/app.py b/faststream/app.py index cea33f42d95..47951ad5124 100644 --- a/faststream/app.py +++ b/faststream/app.py @@ -88,7 +88,7 @@ async def run( async with anyio.create_task_group() as tg: _ = tg.start_soon(self._startup, log_level, run_extra_options) - while not self._should_exit: # noqa: ASYNC110 (requested by creator) + while not self._should_exit: # ruff: ignore[async-busy-wait] (requested by creator) await anyio.sleep(sleep_time) await self._shutdown(log_level) diff --git a/faststream/asgi/app.py b/faststream/asgi/app.py index f930f6b4f31..4ebd2c1a34f 100644 --- a/faststream/asgi/app.py +++ b/faststream/asgi/app.py @@ -132,7 +132,7 @@ def __init__( if asyncapi_route.asyncapi_json_path: @get(include_in_schema=asyncapi_route.include_in_schema) - async def json_handler(scope: "Scope") -> AsgiResponse: # noqa: ARG001 + async def json_handler(scope: "Scope") -> AsgiResponse: # ruff: ignore[unused-function-argument] return JSONResponse(self.schema.to_specification().to_jsonable()) self.routes.append((asyncapi_route.asyncapi_json_path, json_handler)) @@ -155,7 +155,7 @@ async def json_handler(scope: "Scope") -> AsgiResponse: # noqa: ARG001 self._log_level: int = logging.INFO self._run_extra_options: dict[str, SettingField] = {} - def _init_setupable_( # noqa: PLW3201 + def _init_setupable_( # ruff: ignore[bad-dunder-method-name] self, *brokers: "BrokerUsecase[Any, Any, Any]", specification: Optional["SpecificationFactory"] = None, @@ -322,7 +322,7 @@ async def process_exception(ex: BaseException) -> None: else: await send({"type": "lifespan.shutdown.complete"}) - async def not_found(self, scope: "Scope", receive: "Receive", send: "Send") -> None: # noqa: PLR6301 + async def not_found(self, scope: "Scope", receive: "Receive", send: "Send") -> None: # ruff: ignore[no-self-use] not_found_msg = "Application doesn't support regular HTTP protocol." if scope["type"] == "websocket": diff --git a/faststream/asgi/factories/asyncapi/docs.py b/faststream/asgi/factories/asyncapi/docs.py index 5a5e933f888..5a8723eb53c 100644 --- a/faststream/asgi/factories/asyncapi/docs.py +++ b/faststream/asgi/factories/asyncapi/docs.py @@ -45,7 +45,7 @@ def make_asyncapi_asgi( tags=tags, unique_id=unique_id, ) - async def docs(scope: Scope) -> AsgiResponse: # noqa: ARG001 + async def docs(scope: Scope) -> AsgiResponse: # ruff: ignore[unused-function-argument] nonlocal cached_docs if not cached_docs: cached_docs = get_asyncapi_html( diff --git a/faststream/asgi/factories/asyncapi/try_it_out.py b/faststream/asgi/factories/asyncapi/try_it_out.py index 639048c65f8..794cb5e9ef1 100644 --- a/faststream/asgi/factories/asyncapi/try_it_out.py +++ b/faststream/asgi/factories/asyncapi/try_it_out.py @@ -50,7 +50,7 @@ def __init__(self, *brokers: "BrokerUsecase[Any, Any, Any]") -> None: tuple[BrokerUsecase[Any, Any, Any], type[TestBroker[Any, Any]]] ] = [] # `unittest.mock` comes with the test brokers: keep it out of `import faststream` - from faststream._internal.testing.broker import find_test_broker # noqa: PLC0415 + from faststream._internal.testing.broker import find_test_broker # ruff: ignore[import-outside-top-level] for broker in brokers: test_broker_cls = find_test_broker(broker) diff --git a/faststream/asgi/factories/ping.py b/faststream/asgi/factories/ping.py index d4662bdb21a..b012dc9f2be 100644 --- a/faststream/asgi/factories/ping.py +++ b/faststream/asgi/factories/ping.py @@ -29,7 +29,7 @@ def make_ping_asgi( tags=tags, unique_id=unique_id, ) - async def ping(scope: Scope) -> AsgiResponse: # noqa: ARG001 + async def ping(scope: Scope) -> AsgiResponse: # ruff: ignore[unused-function-argument] if await broker.ping(timeout): return healthy_response return unhealthy_response diff --git a/faststream/asgi/params.py b/faststream/asgi/params.py index c35e37d44f5..8612a44ae2f 100644 --- a/faststream/asgi/params.py +++ b/faststream/asgi/params.py @@ -4,7 +4,7 @@ from faststream._internal.context import Context as Context_ -def Header( # noqa: N802 +def Header( # ruff: ignore[invalid-function-name] real_name: str = "", *, cast: bool = False, @@ -18,7 +18,7 @@ def Header( # noqa: N802 ) -def Query( # noqa: N802 +def Query( # ruff: ignore[invalid-function-name] real_name: str = "", *, cast: bool = False, diff --git a/faststream/asgi/response.py b/faststream/asgi/response.py index 58b2fb2c67b..9418b0ff7ae 100644 --- a/faststream/asgi/response.py +++ b/faststream/asgi/response.py @@ -46,7 +46,7 @@ async def __call__(self, scope: "Scope", receive: "Receive", send: "Send") -> No ) -def JSONResponse( # noqa: N802 +def JSONResponse( # ruff: ignore[invalid-function-name] data: Any, status_code: int = 200, headers: Mapping[str, str] | None = None, diff --git a/faststream/confluent/configs/broker.py b/faststream/confluent/configs/broker.py index b2cf2e8ea77..577062ad500 100644 --- a/faststream/confluent/configs/broker.py +++ b/faststream/confluent/configs/broker.py @@ -29,17 +29,17 @@ def _context_annotations_factory() -> UnderlyingDriverAnnotations: # `annotations` reaches this module through the broker, so the # objects a row needs only exist once the package is built. - from faststream.confluent import annotations # noqa: PLC0415 - from faststream.confluent.broker.broker import ( # noqa: PLC0415 + from faststream.confluent import annotations # ruff: ignore[import-outside-top-level] + from faststream.confluent.broker.broker import ( # ruff: ignore[import-outside-top-level] KafkaBroker as KafkaBrokerDriver, ) - from faststream.confluent.helpers.client import ( # noqa: PLC0415 + from faststream.confluent.helpers.client import ( # ruff: ignore[import-outside-top-level] AsyncConfluentConsumer, ) - from faststream.confluent.message import ( # noqa: PLC0415 + from faststream.confluent.message import ( # ruff: ignore[import-outside-top-level] KafkaMessage as KafkaMessageDriver, ) - from faststream.confluent.publisher.producer import ( # noqa: PLC0415 + from faststream.confluent.publisher.producer import ( # ruff: ignore[import-outside-top-level] AsyncConfluentFastProducer, ) diff --git a/faststream/confluent/helpers/client.py b/faststream/confluent/helpers/client.py index 3fb03ace6a4..5361d99d208 100644 --- a/faststream/confluent/helpers/client.py +++ b/faststream/confluent/helpers/client.py @@ -162,7 +162,7 @@ def ack_callback(err: Any, msg: Message | None) -> None: return result_future return await result_future - def create_batch(self) -> "BatchBuilder": # noqa: PLR6301 + def create_batch(self) -> "BatchBuilder": # ruff: ignore[no-self-use] """Creates a batch for sending multiple messages.""" return BatchBuilder() diff --git a/faststream/confluent/parser.py b/faststream/confluent/parser.py index 1f952d7042e..5c13f580964 100644 --- a/faststream/confluent/parser.py +++ b/faststream/confluent/parser.py @@ -93,7 +93,7 @@ async def parse_batch( is_manual=self.is_manual, ) - async def decode_message( # noqa: PLR6301 + async def decode_message( # ruff: ignore[no-self-use] self, msg: "StreamMessage[Message]", ) -> "DecodedMessage": diff --git a/faststream/confluent/publisher/producer.py b/faststream/confluent/publisher/producer.py index 07a367501ab..5ac4c2032f0 100644 --- a/faststream/confluent/publisher/producer.py +++ b/faststream/confluent/publisher/producer.py @@ -38,10 +38,10 @@ def connect( def __bool__(self) -> bool: return False - async def disconnect(self) -> None: # noqa: PLR6301 + async def disconnect(self) -> None: # ruff: ignore[no-self-use] return None - async def flush(self) -> None: # noqa: PLR6301 + async def flush(self) -> None: # ruff: ignore[no-self-use] return None @abstractmethod diff --git a/faststream/confluent/publisher/state.py b/faststream/confluent/publisher/state.py index e4e1428fbf3..d98df1dc478 100644 --- a/faststream/confluent/publisher/state.py +++ b/faststream/confluent/publisher/state.py @@ -29,7 +29,7 @@ def producer(self) -> "AsyncConfluentProducer": msg = "You can't use producer here, please connect broker first." raise IncorrectState(msg) - async def ping(self, timeout: float) -> bool: # noqa: PLR6301 + async def ping(self, timeout: float) -> bool: # ruff: ignore[no-self-use] return False def __bool__(self) -> bool: diff --git a/faststream/confluent/subscriber/usecase.py b/faststream/confluent/subscriber/usecase.py index 47fdeb6be8b..0b66035a48a 100644 --- a/faststream/confluent/subscriber/usecase.py +++ b/faststream/confluent/subscriber/usecase.py @@ -250,7 +250,7 @@ async def _consume(self) -> None: try: msg = await self.get_msg() - except KafkaException as e: # pragma: no cover # noqa: PERF203 + except KafkaException as e: # pragma: no cover # ruff: ignore[try-except-in-loop] self._log( logging.ERROR, message="Message fetch error", diff --git a/faststream/exceptions.py b/faststream/exceptions.py index 5ba721322d8..9f6d2c9a3fb 100644 --- a/faststream/exceptions.py +++ b/faststream/exceptions.py @@ -3,7 +3,7 @@ from typing import Any -class FastStreamException(Exception): # noqa: N818 +class FastStreamException(Exception): # ruff: ignore[error-suffix-on-exception-name] """Basic FastStream exception class.""" @@ -115,7 +115,7 @@ def __str__(self) -> str: ) -class FeatureNotSupportedException(FastStreamException, NotImplementedError): # noqa: N818 +class FeatureNotSupportedException(FastStreamException, NotImplementedError): # ruff: ignore[error-suffix-on-exception-name] """Raises at planned NotImplemented operation call.""" diff --git a/faststream/kafka/broker/broker.py b/faststream/kafka/broker/broker.py index 31785f527f2..6b706100198 100644 --- a/faststream/kafka/broker/broker.py +++ b/faststream/kafka/broker/broker.py @@ -15,7 +15,7 @@ import aiokafka import anyio from aiokafka.partitioner import DefaultPartitioner -from aiokafka.producer.producer import _missing # noqa: PLC2701 +from aiokafka.producer.producer import _missing # ruff: ignore[import-private-name] from aiokafka.structs import RecordMetadata from fast_depends import Provider, dependency_provider from typing_extensions import override @@ -225,7 +225,7 @@ def __init__( partitioner: Callable[ [bytes, list[Partition], list[Partition]], Partition, - ] = DefaultPartitioner(), # noqa: B008 + ] = DefaultPartitioner(), # ruff: ignore[function-call-in-default-argument] max_request_size: int = 1024 * 1024, linger_ms: int = 0, enable_idempotence: bool = False, diff --git a/faststream/kafka/configs/broker.py b/faststream/kafka/configs/broker.py index c812962aa28..c5217f42be7 100644 --- a/faststream/kafka/configs/broker.py +++ b/faststream/kafka/configs/broker.py @@ -25,16 +25,16 @@ def _context_annotations_factory() -> UnderlyingDriverAnnotations: # `annotations` reaches this module through the broker, so the # objects a row needs only exist once the package is built. - from aiokafka.consumer.consumer import AIOKafkaConsumer # noqa: PLC0415 + from aiokafka.consumer.consumer import AIOKafkaConsumer # ruff: ignore[import-outside-top-level] - from faststream.kafka import annotations # noqa: PLC0415 - from faststream.kafka.broker.broker import ( # noqa: PLC0415 + from faststream.kafka import annotations # ruff: ignore[import-outside-top-level] + from faststream.kafka.broker.broker import ( # ruff: ignore[import-outside-top-level] KafkaBroker as KafkaBrokerDriver, ) - from faststream.kafka.message import ( # noqa: PLC0415 + from faststream.kafka.message import ( # ruff: ignore[import-outside-top-level] KafkaMessage as KafkaMessageDriver, ) - from faststream.kafka.publisher.producer import AioKafkaFastProducer # noqa: PLC0415 + from faststream.kafka.publisher.producer import AioKafkaFastProducer # ruff: ignore[import-outside-top-level] return MappingProxyType( { diff --git a/faststream/kafka/fastapi/fastapi.py b/faststream/kafka/fastapi/fastapi.py index 71c272be845..444f444c176 100644 --- a/faststream/kafka/fastapi/fastapi.py +++ b/faststream/kafka/fastapi/fastapi.py @@ -14,7 +14,7 @@ from aiokafka import ConsumerRecord from aiokafka.coordinator.assignors.roundrobin import RoundRobinPartitionAssignor from aiokafka.partitioner import DefaultPartitioner -from aiokafka.producer.producer import _missing # noqa: PLC2701 +from aiokafka.producer.producer import _missing # ruff: ignore[import-private-name] from fastapi.datastructures import Default from fastapi.routing import APIRoute from fastapi.utils import generate_unique_id @@ -96,7 +96,7 @@ def __init__( partitioner: Callable[ [bytes, list[Partition], list[Partition]], Partition, - ] = DefaultPartitioner(), # noqa: B008 + ] = DefaultPartitioner(), # ruff: ignore[function-call-in-default-argument] max_request_size: int = 1024 * 1024, linger_ms: int = 0, enable_idempotence: bool = False, diff --git a/faststream/kafka/parser.py b/faststream/kafka/parser.py index 912fea2ab9b..ac3cde456c4 100644 --- a/faststream/kafka/parser.py +++ b/faststream/kafka/parser.py @@ -59,7 +59,7 @@ async def parse_message( consumer=getattr(message, "consumer", self._consumer), ) - async def decode_message( # noqa: PLR6301 + async def decode_message( # ruff: ignore[no-self-use] self, msg: "StreamMessage[ConsumerRecord]", ) -> "DecodedMessage": diff --git a/faststream/kafka/publisher/producer.py b/faststream/kafka/publisher/producer.py index bed989383da..9ebb9273408 100644 --- a/faststream/kafka/publisher/producer.py +++ b/faststream/kafka/publisher/producer.py @@ -44,7 +44,7 @@ def __bool__(self) -> bool: def closed(self) -> bool: return True - async def flush(self) -> None: # noqa: PLR6301 + async def flush(self) -> None: # ruff: ignore[no-self-use] return None @abstractmethod diff --git a/faststream/kafka/subscriber/usecase.py b/faststream/kafka/subscriber/usecase.py index d75ed2eb49a..97aff36bccc 100644 --- a/faststream/kafka/subscriber/usecase.py +++ b/faststream/kafka/subscriber/usecase.py @@ -347,7 +347,7 @@ async def _run_consume_loop(self, consumer: "AIOKafkaConsumer") -> None: try: msg = await self.get_msg(consumer) - except UnsupportedCodecError as e: # noqa: PERF203 + except UnsupportedCodecError as e: # ruff: ignore[try-except-in-loop] self._log( logging.ERROR, "There is no suitable compression library available. Please refer to the Kafka " diff --git a/faststream/mqtt/annotations.py b/faststream/mqtt/annotations.py index 504cc7cf54e..923cbd91c72 100644 --- a/faststream/mqtt/annotations.py +++ b/faststream/mqtt/annotations.py @@ -4,8 +4,8 @@ from faststream._internal.context import Context from faststream.annotations import ContextRepo, Logger -from faststream.mqtt.broker.broker import MQTTBroker as MB # noqa: N814 -from faststream.mqtt.message import MQTTMessage as MM # noqa: N814 +from faststream.mqtt.broker.broker import MQTTBroker as MB # ruff: ignore[camelcase-imported-as-constant] +from faststream.mqtt.message import MQTTMessage as MM # ruff: ignore[camelcase-imported-as-constant] from faststream.params import NoCast __all__ = ( diff --git a/faststream/mqtt/broker/config.py b/faststream/mqtt/broker/config.py index 672339d58f5..4bbf73ee25e 100644 --- a/faststream/mqtt/broker/config.py +++ b/faststream/mqtt/broker/config.py @@ -29,13 +29,13 @@ def _context_annotations_factory() -> UnderlyingDriverAnnotations: # `annotations` reaches this module through the broker, so the # objects a row needs only exist once the package is built. - from zmqtt.client import MQTTClient # noqa: PLC0415 + from zmqtt.client import MQTTClient # ruff: ignore[import-outside-top-level] - from faststream.mqtt import annotations # noqa: PLC0415 - from faststream.mqtt.broker.broker import ( # noqa: PLC0415 + from faststream.mqtt import annotations # ruff: ignore[import-outside-top-level] + from faststream.mqtt.broker.broker import ( # ruff: ignore[import-outside-top-level] MQTTBroker as MQTTBrokerDriver, ) - from faststream.mqtt.message import MQTTMessage as MQTTMessageDriver # noqa: PLC0415 + from faststream.mqtt.message import MQTTMessage as MQTTMessageDriver # ruff: ignore[import-outside-top-level] return MappingProxyType( { diff --git a/faststream/mqtt/broker/registrator.py b/faststream/mqtt/broker/registrator.py index c8cc58124a8..61bac46d5b0 100644 --- a/faststream/mqtt/broker/registrator.py +++ b/faststream/mqtt/broker/registrator.py @@ -12,7 +12,7 @@ from faststream.mqtt.subscriber.factory import create_subscriber if TYPE_CHECKING: - import zmqtt # noqa: F401 + import zmqtt # ruff: ignore[unused-import] from fast_depends.dependencies import Dependant from faststream._internal.parser import CodecProto diff --git a/faststream/mqtt/fastapi/__init__.py b/faststream/mqtt/fastapi/__init__.py index d763c52218d..d7365eea71a 100644 --- a/faststream/mqtt/fastapi/__init__.py +++ b/faststream/mqtt/fastapi/__init__.py @@ -4,8 +4,8 @@ import zmqtt from faststream._internal.fastapi.context import Context, ContextRepo, Logger -from faststream.mqtt.broker.broker import MQTTBroker as MB # noqa: N814 -from faststream.mqtt.message import MQTTMessage as MM # noqa: N814 +from faststream.mqtt.broker.broker import MQTTBroker as MB # ruff: ignore[camelcase-imported-as-constant] +from faststream.mqtt.message import MQTTMessage as MM # ruff: ignore[camelcase-imported-as-constant] from .fastapi import MQTTRouter diff --git a/faststream/mqtt/parser.py b/faststream/mqtt/parser.py index 60f24be6b96..ef6a30b72d6 100644 --- a/faststream/mqtt/parser.py +++ b/faststream/mqtt/parser.py @@ -40,7 +40,7 @@ def _extract_path(self, topic: str) -> dict[str, Any]: async def parse_message(self, msg: zmqtt.Message) -> MQTTMessage: raise NotImplementedError - async def decode_message(self, msg: "StreamMessage[Any]") -> "DecodedMessage": # noqa: PLR6301 + async def decode_message(self, msg: "StreamMessage[Any]") -> "DecodedMessage": # ruff: ignore[no-self-use] return decode_message(msg) diff --git a/faststream/nats/broker/broker.py b/faststream/nats/broker/broker.py index ae2e3e1f96a..569a7b5a84c 100644 --- a/faststream/nats/broker/broker.py +++ b/faststream/nats/broker/broker.py @@ -717,7 +717,7 @@ async def start(self) -> None: subjects=list(subjects), ) - except BadRequestError as e: # noqa: PERF203 + except BadRequestError as e: # ruff: ignore[try-except-in-loop] self._setup_logger() log_context = LogicSubscriber.build_log_context( diff --git a/faststream/nats/configs/broker.py b/faststream/nats/configs/broker.py index 1b7b3e47b10..1e881bb0350 100644 --- a/faststream/nats/configs/broker.py +++ b/faststream/nats/configs/broker.py @@ -30,15 +30,15 @@ class JsInitOptions(TypedDict, total=False): def _context_annotations_factory() -> UnderlyingDriverAnnotations: # `annotations` reaches this module through the broker, so the # objects a row needs only exist once the package is built. - from nats.aio.client import Client as ClientDriver # noqa: PLC0415 - from nats.js.client import JetStreamContext # noqa: PLC0415 - from nats.js.object_store import ObjectStore # noqa: PLC0415 + from nats.aio.client import Client as ClientDriver # ruff: ignore[import-outside-top-level] + from nats.js.client import JetStreamContext # ruff: ignore[import-outside-top-level] + from nats.js.object_store import ObjectStore # ruff: ignore[import-outside-top-level] - from faststream.nats import annotations # noqa: PLC0415 - from faststream.nats.broker.broker import ( # noqa: PLC0415 + from faststream.nats import annotations # ruff: ignore[import-outside-top-level] + from faststream.nats.broker.broker import ( # ruff: ignore[import-outside-top-level] NatsBroker as NatsBrokerDriver, ) - from faststream.nats.message import ( # noqa: PLC0415 + from faststream.nats.message import ( # ruff: ignore[import-outside-top-level] NatsKvMessage as NatsKvMessageDriver, NatsMessage as NatsMessageDriver, ) diff --git a/faststream/nats/helpers/state.py b/faststream/nats/helpers/state.py index 41d7e70188e..c1a001816b9 100644 --- a/faststream/nats/helpers/state.py +++ b/faststream/nats/helpers/state.py @@ -22,7 +22,7 @@ def connection(self) -> ClientT: raise IncorrectState @connection.setter - def connection(self, v: ClientT) -> None: # noqa: PLR6301 + def connection(self, v: ClientT) -> None: # ruff: ignore[no-self-use] raise IncorrectState diff --git a/faststream/nats/parser.py b/faststream/nats/parser.py index 983552ff966..e39224b834e 100644 --- a/faststream/nats/parser.py +++ b/faststream/nats/parser.py @@ -34,7 +34,7 @@ def __init__( path_re, _ = compile_nats_wildcard(pattern) self._path_re = path_re - async def decode_message( # noqa: PLR6301 + async def decode_message( # ruff: ignore[no-self-use] self, msg: "StreamMessage[Any]", ) -> "DecodedMessage": @@ -161,7 +161,7 @@ async def parse_message( class ObjParser(NatsBaseParser): __slots__ = () - async def parse_message(self, msg: "ObjectInfo") -> StreamMessage["ObjectInfo"]: # noqa: PLR6301 + async def parse_message(self, msg: "ObjectInfo") -> StreamMessage["ObjectInfo"]: # ruff: ignore[no-self-use] return NatsObjMessage( raw_message=msg, body=msg.name, diff --git a/faststream/nats/subscriber/factory.py b/faststream/nats/subscriber/factory.py index cae24b4cd83..77559d15fb4 100644 --- a/faststream/nats/subscriber/factory.py +++ b/faststream/nats/subscriber/factory.py @@ -252,7 +252,7 @@ def create_subscriber( ) -def _validate_input_for_misconfigure( # noqa: PLR0915 +def _validate_input_for_misconfigure( # ruff: ignore[too-many-statements] subject: str, queue: str, # default "" pending_msgs_limit: int | None, diff --git a/faststream/nats/subscriber/state.py b/faststream/nats/subscriber/state.py index d6a7fa1d288..ea139a9d9d0 100644 --- a/faststream/nats/subscriber/state.py +++ b/faststream/nats/subscriber/state.py @@ -42,7 +42,7 @@ def kv_declarer(self) -> "KVBucketDeclarer": raise IncorrectState(msg) @kv_declarer.setter - def kv_declarer(self, v: "KVBucketDeclarer") -> None: # noqa: PLR6301 + def kv_declarer(self, v: "KVBucketDeclarer") -> None: # ruff: ignore[no-self-use] msg = "Connection is not available yet. Please, setup the subscriber first." raise IncorrectState(msg) @@ -52,7 +52,7 @@ def os_declarer(self) -> "OSBucketDeclarer": raise IncorrectState(msg) @os_declarer.setter - def os_declarer(self, v: "OSBucketDeclarer") -> None: # noqa: PLR6301 + def os_declarer(self, v: "OSBucketDeclarer") -> None: # ruff: ignore[no-self-use] msg = "Connection is not available yet. Please, setup the subscriber first." raise IncorrectState(msg) diff --git a/faststream/nats/subscriber/usecases/key_value_subscriber.py b/faststream/nats/subscriber/usecases/key_value_subscriber.py index 004032f2cb0..cb88150725c 100644 --- a/faststream/nats/subscriber/usecases/key_value_subscriber.py +++ b/faststream/nats/subscriber/usecases/key_value_subscriber.py @@ -80,7 +80,7 @@ async def get_one( msg = None sleep_interval = timeout / 10 with anyio.move_on_after(timeout): - while ( # noqa: ASYNC110 + while ( # ruff: ignore[async-busy-wait] msg := await fetch_sub.obj.updates(timeout) # type: ignore[no-untyped-call] ) is None: await anyio.sleep(sleep_interval) @@ -131,7 +131,7 @@ async def __aiter__(self) -> AsyncIterator["NatsKvMessage"]: while True: msg = None with anyio.move_on_after(timeout): - while ( # noqa: ASYNC110 + while ( # ruff: ignore[async-busy-wait] msg := await fetch_sub.obj.updates(timeout) # type: ignore[no-untyped-call] ) is None: await anyio.sleep(sleep_interval) diff --git a/faststream/nats/subscriber/usecases/object_storage_subscriber.py b/faststream/nats/subscriber/usecases/object_storage_subscriber.py index ba1d4e730e8..db757cd2f3d 100644 --- a/faststream/nats/subscriber/usecases/object_storage_subscriber.py +++ b/faststream/nats/subscriber/usecases/object_storage_subscriber.py @@ -84,7 +84,7 @@ async def get_one(self, *, timeout: float = 5) -> Optional["NatsObjMessage"]: msg = None sleep_interval = timeout / 10 with anyio.move_on_after(timeout): - while ( # noqa: ASYNC110 + while ( # ruff: ignore[async-busy-wait] msg := await fetch_sub.obj.updates(timeout) # type: ignore[no-untyped-call] ) is None: await anyio.sleep(sleep_interval) @@ -134,7 +134,7 @@ async def __aiter__(self) -> AsyncIterator["NatsObjMessage"]: while True: msg = None with anyio.move_on_after(timeout): - while ( # noqa: ASYNC110 + while ( # ruff: ignore[async-busy-wait] msg := await fetch_sub.obj.updates(timeout) # type: ignore[no-untyped-call] ) is None: await anyio.sleep(sleep_interval) diff --git a/faststream/nats/testing.py b/faststream/nats/testing.py index 8320d6d37fe..1dc9e4db18d 100644 --- a/faststream/nats/testing.py +++ b/faststream/nats/testing.py @@ -45,9 +45,11 @@ def change_producer( config.broker_config.js_producer, producer, ) - yield - config.broker_config.producer = old_producer - config.broker_config.js_producer = old_js_producer + try: + yield + finally: + config.broker_config.producer = old_producer + config.broker_config.js_producer = old_js_producer class TestNatsBroker( diff --git a/faststream/params/params.py b/faststream/params/params.py index 61d886c3fa6..508d3464ee0 100644 --- a/faststream/params/params.py +++ b/faststream/params/params.py @@ -5,7 +5,7 @@ from faststream._internal.context import Context as Context_ -def Context( # noqa: N802 +def Context( # ruff: ignore[invalid-function-name] real_name: str = "", *, cast: bool = False, @@ -20,7 +20,7 @@ def Context( # noqa: N802 ) -def Header( # noqa: N802 +def Header( # ruff: ignore[invalid-function-name] real_name: str = "", *, cast: bool = True, @@ -34,7 +34,7 @@ def Header( # noqa: N802 ) -def Path( # noqa: N802 +def Path( # ruff: ignore[invalid-function-name] real_name: str = "", *, cast: bool = True, diff --git a/faststream/rabbit/configs/broker.py b/faststream/rabbit/configs/broker.py index 4e191c9ccd7..f67049baebf 100644 --- a/faststream/rabbit/configs/broker.py +++ b/faststream/rabbit/configs/broker.py @@ -22,17 +22,17 @@ def _context_annotations_factory() -> UnderlyingDriverAnnotations: # `annotations` reaches this module through the broker, so the # objects a row needs only exist once the package is built. - from aio_pika.robust_channel import RobustChannel # noqa: PLC0415 - from aio_pika.robust_connection import RobustConnection # noqa: PLC0415 + from aio_pika.robust_channel import RobustChannel # ruff: ignore[import-outside-top-level] + from aio_pika.robust_connection import RobustConnection # ruff: ignore[import-outside-top-level] - from faststream.rabbit import annotations # noqa: PLC0415 - from faststream.rabbit.broker.broker import ( # noqa: PLC0415 + from faststream.rabbit import annotations # ruff: ignore[import-outside-top-level] + from faststream.rabbit.broker.broker import ( # ruff: ignore[import-outside-top-level] RabbitBroker as RabbitBrokerDriver, ) - from faststream.rabbit.message import ( # noqa: PLC0415 + from faststream.rabbit.message import ( # ruff: ignore[import-outside-top-level] RabbitMessage as RabbitMessageDriver, ) - from faststream.rabbit.publisher.producer import AioPikaFastProducer # noqa: PLC0415 + from faststream.rabbit.publisher.producer import AioPikaFastProducer # ruff: ignore[import-outside-top-level] return MappingProxyType( { diff --git a/faststream/rabbit/parser.py b/faststream/rabbit/parser.py index ea5af0288b9..82d84151564 100644 --- a/faststream/rabbit/parser.py +++ b/faststream/rabbit/parser.py @@ -1,4 +1,4 @@ -import datetime +from datetime import datetime, timezone from typing import TYPE_CHECKING, Optional from aio_pika import Message @@ -52,7 +52,7 @@ async def parse_message( raw_message=message, ) - async def decode_message( # noqa: PLR6301 + async def decode_message( # ruff: ignore[no-self-use] self, msg: StreamMessage["IncomingMessage"], ) -> "DecodedMessage": @@ -103,7 +103,7 @@ async def encode_message( priority=priority, expiration=expiration, message_id=message_id, - timestamp=timestamp or datetime.datetime.now(tz=datetime.timezone.utc), + timestamp=timestamp or datetime.now(tz=timezone.utc), type=message_type, user_id=user_id, app_id=app_id, diff --git a/faststream/rabbit/subscriber/usecase.py b/faststream/rabbit/subscriber/usecase.py index 98e5bc56568..df04ed131ac 100644 --- a/faststream/rabbit/subscriber/usecase.py +++ b/faststream/rabbit/subscriber/usecase.py @@ -148,7 +148,7 @@ async def get_one( contextlib.suppress(asyncio.exceptions.CancelledError), anyio.move_on_after(timeout), ): - while ( # noqa: ASYNC110 + while ( # ruff: ignore[async-busy-wait] raw_message := await self._queue_obj.get( fail=False, no_ack=no_ack, @@ -192,7 +192,7 @@ async def __aiter__(self) -> AsyncIterator["RabbitMessage"]: parser=async_parser, decoder=async_decoder, ) - yield msg + yield msg # ruff: ignore[yield-in-context-manager-in-async-generator] def _make_response_publisher( self, diff --git a/faststream/redis/annotations.py b/faststream/redis/annotations.py index 0d80e946d59..08236b516a7 100644 --- a/faststream/redis/annotations.py +++ b/faststream/redis/annotations.py @@ -50,7 +50,7 @@ async def get_pipe(redis: Redis) -> AsyncGenerator[RedisPipeline, None]: async with redis.pipeline() as pipe: - yield pipe + yield pipe # ruff: ignore[yield-in-context-manager-in-async-generator] Pipeline = Annotated[RedisPipeline, Depends(get_pipe, cast=False)] diff --git a/faststream/redis/broker/broker.py b/faststream/redis/broker/broker.py index f25f1067304..f7181113bcf 100644 --- a/faststream/redis/broker/broker.py +++ b/faststream/redis/broker/broker.py @@ -154,7 +154,7 @@ def _init_broker(self, url: str, kwargs: dict[str, Any]) -> None: def _validate_init_params(self, kwargs: dict[str, Any]) -> None: """Validate constructor params. Hook for subclasses; no-op by default.""" - def _make_connection_state( # noqa: PLR6301 + def _make_connection_state( # ruff: ignore[no-self-use] self, connection_options: dict[str, Any], kwargs: dict[str, Any], diff --git a/faststream/redis/configs/broker.py b/faststream/redis/configs/broker.py index bdd7d9627f6..7285214fa44 100644 --- a/faststream/redis/configs/broker.py +++ b/faststream/redis/configs/broker.py @@ -26,16 +26,16 @@ def _context_annotations_factory() -> UnderlyingDriverAnnotations: # `annotations` reaches this module through the broker, so the # objects a row needs only exist once the package is built. - from redis.asyncio.client import ( # noqa: PLC0415 + from redis.asyncio.client import ( # ruff: ignore[import-outside-top-level] Pipeline as PipelineDriver, Redis as RedisDriver, ) - from faststream.redis import annotations # noqa: PLC0415 - from faststream.redis.broker.broker import ( # noqa: PLC0415 + from faststream.redis import annotations # ruff: ignore[import-outside-top-level] + from faststream.redis.broker.broker import ( # ruff: ignore[import-outside-top-level] RedisBroker as RedisBrokerDriver, ) - from faststream.redis.message import ( # noqa: PLC0415 + from faststream.redis.message import ( # ruff: ignore[import-outside-top-level] RedisBatchStreamMessage as RedisBatchStreamMessageDriver, RedisChannelMessage as RedisChannelMessageDriver, RedisListMessage as RedisListMessageDriver, diff --git a/faststream/redis/fastapi/__init__.py b/faststream/redis/fastapi/__init__.py index 491e9d73ad5..02e6fb403b7 100644 --- a/faststream/redis/fastapi/__init__.py +++ b/faststream/redis/fastapi/__init__.py @@ -5,7 +5,7 @@ from faststream._internal.fastapi.context import Context, ContextRepo, Logger from faststream.redis.broker.broker import RedisBroker as RB -from faststream.redis.message import BaseMessage as RM # noqa: N814 +from faststream.redis.message import BaseMessage as RM # ruff: ignore[camelcase-imported-as-constant] from .fastapi import RedisRouter, RedisSentinelRouter diff --git a/faststream/redis/message.py b/faststream/redis/message.py index f8634c844f2..069bbd365d5 100644 --- a/faststream/redis/message.py +++ b/faststream/redis/message.py @@ -93,7 +93,7 @@ class RedisBatchListMessage(BrokerStreamMessage[BatchListMessage]): DATA_KEY = "__data__" -bDATA_KEY = DATA_KEY.encode() # noqa: N816 +bDATA_KEY = DATA_KEY.encode() # ruff: ignore[mixed-case-variable-in-global-scope] class _StreamMessage(TypedDict): @@ -146,7 +146,7 @@ async def xack(self, name: str, groupname: str, *ids: bytes) -> None: async def xdel(self, name: str, *ids: bytes) -> None: pass - async def xpending_range( # noqa: PLR6301 + async def xpending_range( # ruff: ignore[no-self-use] self, name: str, groupname: str, min: bytes, max: bytes, count: int ) -> list[dict[str, Any]]: return [] diff --git a/faststream/redis/parser/parsers.py b/faststream/redis/parser/parsers.py index 1139fa232e6..f6745cf74aa 100644 --- a/faststream/redis/parser/parsers.py +++ b/faststream/redis/parser/parsers.py @@ -94,7 +94,7 @@ def _parse_data( ) -> tuple[bytes, dict[str, Any], list[dict[str, Any]]]: return (*self.config.message_format.parse(message["data"]), []) - async def decode_message( # noqa: PLR6301 + async def decode_message( # ruff: ignore[no-self-use] self, msg: "StreamMessage[Any]", ) -> DecodedMessage: diff --git a/faststream/redis/subscriber/usecases/basic.py b/faststream/redis/subscriber/usecases/basic.py index 52139177652..1350588099e 100644 --- a/faststream/redis/subscriber/usecases/basic.py +++ b/faststream/redis/subscriber/usecases/basic.py @@ -97,7 +97,7 @@ async def _consume(self, *args: Any, start_signal: anyio.Event) -> None: try: await self._get_msgs(*args) - except Exception as e: # noqa: PERF203 + except Exception as e: # ruff: ignore[try-except-in-loop] self._log( log_level=logging.ERROR, message="Message fetch error", diff --git a/faststream/redis/subscriber/usecases/channel_subscriber.py b/faststream/redis/subscriber/usecases/channel_subscriber.py index 250065236ac..a752db9792b 100644 --- a/faststream/redis/subscriber/usecases/channel_subscriber.py +++ b/faststream/redis/subscriber/usecases/channel_subscriber.py @@ -102,7 +102,7 @@ async def get_one( raw_message: PubSubMessage | None = None with anyio.move_on_after(timeout): - while (raw_message := await self._get_message(self.subscription)) is None: # noqa: ASYNC110 + while (raw_message := await self._get_message(self.subscription)) is None: # ruff: ignore[async-busy-wait] await anyio.sleep(sleep_interval) context = self._outer_config.context @@ -135,7 +135,7 @@ async def __aiter__(self) -> AsyncIterator["RedisChannelMessage"]: while True: with anyio.move_on_after(timeout): - while ( # noqa: ASYNC110 + while ( # ruff: ignore[async-busy-wait] raw_message := await self._get_message(self.subscription) ) is None: await anyio.sleep(sleep_interval) diff --git a/faststream/redis/subscriber/usecases/list_subscriber.py b/faststream/redis/subscriber/usecases/list_subscriber.py index 620d7c873ed..97ddc814410 100644 --- a/faststream/redis/subscriber/usecases/list_subscriber.py +++ b/faststream/redis/subscriber/usecases/list_subscriber.py @@ -99,7 +99,7 @@ async def get_one( raw_message = None with anyio.move_on_after(timeout): - while ( # noqa: ASYNC110 + while ( # ruff: ignore[async-busy-wait] raw_message := await self._client.lpop(name=self.list_sub.name) ) is None: await anyio.sleep(sleep_interval) @@ -141,7 +141,7 @@ async def __aiter__(self) -> AsyncIterator["RedisListMessage"]: while True: with anyio.move_on_after(timeout): - while ( # noqa: ASYNC110 + while ( # ruff: ignore[async-busy-wait] raw_message := await self._client.lpop(name=self.list_sub.name) ) is None: await anyio.sleep(sleep_interval) diff --git a/faststream/redis/subscriber/usecases/stream_subscriber.py b/faststream/redis/subscriber/usecases/stream_subscriber.py index ae9439a3aeb..4057a40ba6a 100644 --- a/faststream/redis/subscriber/usecases/stream_subscriber.py +++ b/faststream/redis/subscriber/usecases/stream_subscriber.py @@ -120,7 +120,7 @@ async def _consume(self, *args: Any, start_signal: "Event") -> None: try: await self._get_msgs(*args) - except StreamClaimUnsupportedError as e: # noqa: PERF203 + except StreamClaimUnsupportedError as e: # ruff: ignore[try-except-in-loop] await self._stop_on_terminal_error(e, str(e)) return diff --git a/faststream/response/response.py b/faststream/response/response.py index 17f893b703c..76b9287ad73 100644 --- a/faststream/response/response.py +++ b/faststream/response/response.py @@ -28,7 +28,7 @@ def as_publish_command(self) -> "PublishCommand": _publish_type=PublishType.PUBLISH, ) - def get_publish_key(self) -> Any | None: # noqa: PLR6301 + def get_publish_key(self) -> Any | None: # ruff: ignore[no-self-use] """Get the key for publishing this message. Override this method in subclasses to provide broker-specific keys. diff --git a/faststream/security.py b/faststream/security.py index 51c63decc16..e7a2ec2f354 100644 --- a/faststream/security.py +++ b/faststream/security.py @@ -32,11 +32,11 @@ def __init__( self.use_ssl = use_ssl self.ssl_context = ssl_context - def get_requirement(self) -> list["dict[str, Any]"]: # noqa: PLR6301 + def get_requirement(self) -> list["dict[str, Any]"]: # ruff: ignore[no-self-use] """Get the security requirements.""" return [] - def get_schema(self) -> dict[str, dict[str, str]]: # noqa: PLR6301 + def get_schema(self) -> dict[str, dict[str, str]]: # ruff: ignore[no-self-use] """Get the security schema.""" return {} diff --git a/pyproject.toml b/pyproject.toml index fb663977b9e..f290ef92892 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -92,38 +92,37 @@ prometheus = ["prometheus-client>=0.20.0,<0.30.0"] optionals = ["faststream[rabbit,kafka,confluent,nats,redis,mqtt,otel,cli,prometheus]"] docs = [ - "mkdocs-material==9.7.7", + "mkdocs-material==9.8.0", "mdx-include==1.4.2", "mkdocstrings[python]==1.0.8", "pymdown-extensions==12.3", - "griffe==1.15.0", - "mkdocs-literate-nav==0.6.2", - "mkdocs-git-revision-date-localized-plugin==1.5.1", - "mike==2.1.3", # versioning + "griffe==2.4.1", + "mkdocs-literate-nav==0.6.3", + "mkdocs-git-revision-date-localized-plugin==1.6.0", + "mike==2.2.0", # versioning "mkdocs-minify-plugin==0.8.0", "mkdocs-macros-plugin==1.5.0", # includes with variables "mkdocs-glightbox==0.5.2", # img zoom "pillow", # required for mkdocs-glightbox "cairosvg", # required for mkdocs-glightbox - "httpx2==2.14.0", # using in CI + "httpx2==2.14.0", # using in CI ] lint = [ - "ruff==0.14.14", - "bandit==1.9.3", - "codespell==2.4.1", + "ruff==0.17.2", + "bandit==1.9.4", + "codespell==2.4.3", "zizmor==1.22.0", "import-linter==2.15", - "actionlint-py==1.7.12.24", + "actionlint-py==1.7.12.25", "shellcheck-py==0.11.0.1", # actionlint runs it over `run:` scripts "slotscheck==0.21.0", - "mypy==1.19.1", - "pyright==1.1.407", - "pyrefly==1.3.1", + "mypy==2.4.0", + "pyright==1.1.414", + "pyrefly==1.4.0", # type checkers extensions "types-Deprecated", "types-PyYAML", - "types-setuptools", "types-redis", "types-Pygments", "types-docutils", @@ -133,30 +132,30 @@ lint = [ test-core = [ "dirty-equals==0.11", "httpx2==2.14.0", - "pytest==9.0.3", - "pytest-asyncio==1.3.0", - "pytest-rerunfailures>=15.1", - "pytest-timeout>=2.4.0", - "pytest-xdist>=3.8.0", - "pytest-cov>=6.2.1", - "covdefaults>=2.3.0", - "freezegun>=1.5.5", - "syrupy==6.0.0", + "pytest==9.1.1", + "pytest-asyncio==1.4.0", + "pytest-rerunfailures==16.7", + "pytest-timeout==2.4.0", + "pytest-xdist==3.8.0", + "pytest-cov==6.2.1", + "covdefaults==2.3.0", + "freezegun==1.5.5", + "syrupy==6.1.1", ] testing = [ {include-group = "test-core"}, - "fastapi==0.140.0", + "fastapi==0.162.0", "pydantic-settings>=2.0.0,<3.0.0", "PyYAML==6.0.3", "email-validator==2.3.0", "msgspec", "nkeys", - "uvicorn>=0.34.3", + "uvicorn==0.54.0", "uvloop>=0.15.1; sys_platform != 'win32' and (sys_platform != 'cygwin' and platform_python_implementation != 'PyPy')", "psutil==7.2.2", - "prometheus-client>=0.20.0,<0.30.0", - "opentelemetry-sdk>=1.24.0,<2.0.0", + "prometheus-client==0.26.0", + "opentelemetry-sdk==1.45.1", ] dev = [ @@ -164,10 +163,9 @@ dev = [ {include-group = "lint"}, {include-group = "testing"}, {include-group = "docs"}, - "pre-commit==4.5.1", + "pre-commit==4.6.2", "detect-secrets==1.5.0", - "pytest-codspeed>=4.3.0", - "setuptools>=80.9.0", + "pytest-codspeed==5.0.3", ] [project.urls] diff --git a/ruff.toml b/ruff.toml index a3b4b29bfff..d5e8ceb3ce4 100644 --- a/ruff.toml +++ b/ruff.toml @@ -87,7 +87,9 @@ ignore = [ "FBT", # FIXME "BLE001", # FIXME - "PLR0917" # FIXME + "PLR0917", # FIXME + + "too-many-statements-in-try-clause", ] [lint.per-file-ignores] @@ -139,6 +141,7 @@ ignore = [ "PLR0914", "PLC1901", "RUF045", + "pytest-fixture-autouse", # pytest.fixture(autouse=True) ] # these files mix brokers under require_* marks, and docs_src modules build a broker on import diff --git a/tests/asyncapi/base/v2_6_0/arguments.py b/tests/asyncapi/base/v2_6_0/arguments.py index e90a89ab9aa..293cc3d349a 100644 --- a/tests/asyncapi/base/v2_6_0/arguments.py +++ b/tests/asyncapi/base/v2_6_0/arguments.py @@ -28,7 +28,7 @@ def test_custom_naming(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert key == "custom_name" assert schema["channels"][key]["description"] == "test description" @@ -60,7 +60,7 @@ async def handle(msg: Any) -> None: """Test description.""" schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert key == "custom_name" assert schema["channels"][key]["description"] == "Test description.", schema[ @@ -511,7 +511,7 @@ class User(pydantic.BaseModel): else: class Config: - schema_extra = {"examples": [{"name": "john", "id": 1}]} # noqa: RUF012 + schema_extra = {"examples": [{"name": "john", "id": 1}]} # ruff: ignore[mutable-class-default] broker = self.broker_class() diff --git a/tests/asyncapi/base/v2_6_0/naming.py b/tests/asyncapi/base/v2_6_0/naming.py index 9175c607b74..f1c8fa13efd 100644 --- a/tests/asyncapi/base/v2_6_0/naming.py +++ b/tests/asyncapi/base/v2_6_0/naming.py @@ -144,7 +144,7 @@ async def handle_broker() -> None: ... broker_second = self.broker_class(description="2") @broker_second.subscriber("test") # type: ignore[no-redef] - async def handle_broker() -> None: ... # noqa: F811 + async def handle_broker() -> None: ... # ruff: ignore[redefined-while-unused] with pytest.warns(RuntimeWarning, match=r"test[\w:]*:HandleBroker"): schema = self.get_spec(broker_first, broker_second).to_jsonable() @@ -235,7 +235,7 @@ async def handle_user_created(msg: str) -> None: ... def test_subscriber_naming_default(self) -> None: broker = self.broker_class() - sub = broker.subscriber("test") # noqa: F841 + sub = broker.subscriber("test") # ruff: ignore[unused-variable] schema = self.get_spec(broker).to_jsonable() @@ -254,7 +254,7 @@ def test_subscriber_naming_default(self) -> None: def test_subscriber_naming_default_with_title(self) -> None: broker = self.broker_class() - sub = broker.subscriber("test", title="custom") # noqa: F841 + sub = broker.subscriber("test", title="custom") # ruff: ignore[unused-variable] schema = self.get_spec(broker).to_jsonable() @@ -292,8 +292,8 @@ def test_multi_subscribers_naming_default(self) -> None: @broker.subscriber("test") async def handle_user_created(msg: str) -> None: ... - sub1 = broker.subscriber("test2") # noqa: F841 - sub2 = broker.subscriber("test3") # noqa: F841 + sub1 = broker.subscriber("test2") # ruff: ignore[unused-variable] + sub2 = broker.subscriber("test3") # ruff: ignore[unused-variable] schema = self.get_spec(broker).to_jsonable() diff --git a/tests/asyncapi/base/v2_6_0/publisher.py b/tests/asyncapi/base/v2_6_0/publisher.py index 8d7a42175b9..9ddcf6eb345 100644 --- a/tests/asyncapi/base/v2_6_0/publisher.py +++ b/tests/asyncapi/base/v2_6_0/publisher.py @@ -16,7 +16,7 @@ async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["description"] == "test description" def test_basic_publisher(self) -> None: @@ -27,7 +27,7 @@ async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key].get("description") is None assert schema["channels"][key].get("subscribe") is not None diff --git a/tests/asyncapi/base/v2_6_0/router.py b/tests/asyncapi/base/v2_6_0/router.py index 3fd51e766f2..b7a088c606e 100644 --- a/tests/asyncapi/base/v2_6_0/router.py +++ b/tests/asyncapi/base/v2_6_0/router.py @@ -25,7 +25,7 @@ async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() payload = schema["components"]["schemas"] - key = list(payload.keys())[0] # noqa: RUF015 + key = list(payload.keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert payload[key]["title"] == key == "Handle:Message:Payload" def test_delay_publisher(self) -> None: diff --git a/tests/asyncapi/base/v3_0_0/arguments.py b/tests/asyncapi/base/v3_0_0/arguments.py index fc08c512419..3fe4bccca1d 100644 --- a/tests/asyncapi/base/v3_0_0/arguments.py +++ b/tests/asyncapi/base/v3_0_0/arguments.py @@ -30,8 +30,8 @@ async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - channel_key = tuple(schema["channels"].keys())[0] # noqa: RUF015 - operation_key = tuple(schema["operations"].keys())[0] # noqa: RUF015 + channel_key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] + operation_key = tuple(schema["operations"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert channel_key == IsStr(regex=r"test[\w:]*:Handle"), channel_key assert operation_key == IsStr(regex=r"test[\w:]*:HandleSubscribe"), operation_key @@ -44,8 +44,8 @@ async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - channel_key = tuple(schema["channels"].keys())[0] # noqa: RUF015 - operation_key = tuple(schema["operations"].keys())[0] # noqa: RUF015 + channel_key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] + operation_key = tuple(schema["operations"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert channel_key == "custom_name" assert operation_key == "custom_name" @@ -60,8 +60,8 @@ async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - channel_key = tuple(schema["channels"].keys())[0] # noqa: RUF015 - operation_key = tuple(schema["operations"].keys())[0] # noqa: RUF015 + channel_key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] + operation_key = tuple(schema["operations"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert channel_key == "." # the title names the channel; `address` stays the address subscribed to @@ -89,7 +89,7 @@ async def handle(msg: Any) -> None: """Test description.""" schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert key == "custom_name" assert schema["channels"][key]["description"] == "Test description.", schema[ @@ -495,7 +495,7 @@ class User(pydantic.BaseModel): else: class Config: - schema_extra = {"examples": [{"name": "john", "id": 1}]} # noqa: RUF012 + schema_extra = {"examples": [{"name": "john", "id": 1}]} # ruff: ignore[mutable-class-default] broker = self.broker_class() diff --git a/tests/asyncapi/base/v3_0_0/naming.py b/tests/asyncapi/base/v3_0_0/naming.py index d20c66d9056..5d4201384a1 100644 --- a/tests/asyncapi/base/v3_0_0/naming.py +++ b/tests/asyncapi/base/v3_0_0/naming.py @@ -144,7 +144,7 @@ async def handle_broker() -> None: ... broker_second = self.broker_class(description="2") @broker_second.subscriber("test") # type: ignore[no-redef] - async def handle_broker() -> None: ... # noqa: F811 + async def handle_broker() -> None: ... # ruff: ignore[redefined-while-unused] with pytest.warns(RuntimeWarning, match=r"test[\w:]*:HandleBroke"): schema = self.get_spec(broker_first, broker_second).to_jsonable() @@ -237,7 +237,7 @@ async def handle_user_created(msg: str) -> None: ... def test_subscriber_naming_default(self) -> None: broker = self.broker_class() - sub = broker.subscriber("test") # noqa: F841 + sub = broker.subscriber("test") # ruff: ignore[unused-variable] schema = self.get_spec(broker).to_jsonable() @@ -256,7 +256,7 @@ def test_subscriber_naming_default(self) -> None: def test_subscriber_naming_default_with_title(self) -> None: broker = self.broker_class() - sub = broker.subscriber("test", title="custom") # noqa: F841 + sub = broker.subscriber("test", title="custom") # ruff: ignore[unused-variable] schema = self.get_spec(broker).to_jsonable() @@ -304,8 +304,8 @@ def test_multi_subscribers_naming_default(self) -> None: @broker.subscriber("test") async def handle_user_created(msg: str) -> None: ... - sub1 = broker.subscriber("test2") # noqa: F841 - sub2 = broker.subscriber("test3") # noqa: F841 + sub1 = broker.subscriber("test2") # ruff: ignore[unused-variable] + sub2 = broker.subscriber("test3") # ruff: ignore[unused-variable] schema = self.get_spec(broker).to_jsonable() diff --git a/tests/asyncapi/base/v3_0_0/publisher.py b/tests/asyncapi/base/v3_0_0/publisher.py index a915dae0794..c89b6004f73 100644 --- a/tests/asyncapi/base/v3_0_0/publisher.py +++ b/tests/asyncapi/base/v3_0_0/publisher.py @@ -16,7 +16,7 @@ async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["description"] == "test description" def test_basic_publisher(self) -> None: @@ -27,7 +27,7 @@ async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key].get("description") is None assert schema["operations"][key] is not None @@ -101,7 +101,7 @@ async def handle(msg: Any) -> int: ... def test_with_schema(self) -> None: broker = self.broker_class() - pub = broker.publisher("test", title="Custom", schema=int) # noqa: F841 + pub = broker.publisher("test", title="Custom", schema=int) # ruff: ignore[unused-variable] schema = self.get_spec(broker).to_jsonable() diff --git a/tests/asyncapi/base/v3_0_0/router.py b/tests/asyncapi/base/v3_0_0/router.py index b1599a9445b..b98d4f316a0 100644 --- a/tests/asyncapi/base/v3_0_0/router.py +++ b/tests/asyncapi/base/v3_0_0/router.py @@ -25,7 +25,7 @@ async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() payload = schema["components"]["schemas"] - key = list(payload.keys())[0] # noqa: RUF015 + key = list(payload.keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert payload[key]["title"] == key == "Handle:Message:Payload" def test_delay_publisher(self) -> None: diff --git a/tests/asyncapi/confluent/v2_6_0/test_arguments.py b/tests/asyncapi/confluent/v2_6_0/test_arguments.py index 13e99e327d8..1e191dddf67 100644 --- a/tests/asyncapi/confluent/v2_6_0/test_arguments.py +++ b/tests/asyncapi/confluent/v2_6_0/test_arguments.py @@ -17,7 +17,7 @@ def test_subscriber_bindings(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["bindings"] == { "kafka": {"bindingVersion": "0.4.0", "topic": "test"}, @@ -33,7 +33,7 @@ def test_subscriber_with_one_topic_partitions(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["bindings"] == { "kafka": {"bindingVersion": "0.4.0", "topic": "topic_name"}, @@ -49,7 +49,7 @@ def test_subscriber_with_multi_topics_partitions(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key1 = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key1 = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] key2 = tuple(schema["channels"].keys())[1] assert sorted(( diff --git a/tests/asyncapi/confluent/v2_6_0/test_publisher.py b/tests/asyncapi/confluent/v2_6_0/test_publisher.py index 7d01805f883..d514a41dd92 100644 --- a/tests/asyncapi/confluent/v2_6_0/test_publisher.py +++ b/tests/asyncapi/confluent/v2_6_0/test_publisher.py @@ -17,7 +17,7 @@ def test_publisher_bindings(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["bindings"] == { "kafka": {"bindingVersion": "0.4.0", "topic": "test"}, diff --git a/tests/asyncapi/confluent/v3_0_0/test_arguments.py b/tests/asyncapi/confluent/v3_0_0/test_arguments.py index 288d221da91..f661cf5302e 100644 --- a/tests/asyncapi/confluent/v3_0_0/test_arguments.py +++ b/tests/asyncapi/confluent/v3_0_0/test_arguments.py @@ -17,7 +17,7 @@ def test_subscriber_bindings(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["bindings"] == { "kafka": {"bindingVersion": "0.4.0", "topic": "test"}, diff --git a/tests/asyncapi/confluent/v3_0_0/test_publisher.py b/tests/asyncapi/confluent/v3_0_0/test_publisher.py index 4ea54e92f56..8c127f58c9a 100644 --- a/tests/asyncapi/confluent/v3_0_0/test_publisher.py +++ b/tests/asyncapi/confluent/v3_0_0/test_publisher.py @@ -17,7 +17,7 @@ def test_publisher_bindings(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["bindings"] == { "kafka": {"bindingVersion": "0.4.0", "topic": "test"}, diff --git a/tests/asyncapi/kafka/v2_6_0/test_arguments.py b/tests/asyncapi/kafka/v2_6_0/test_arguments.py index 43427d5ce15..9b8c188b063 100644 --- a/tests/asyncapi/kafka/v2_6_0/test_arguments.py +++ b/tests/asyncapi/kafka/v2_6_0/test_arguments.py @@ -17,7 +17,7 @@ def test_subscriber_bindings(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["bindings"] == { "kafka": {"bindingVersion": "0.4.0", "topic": "test"}, @@ -33,7 +33,7 @@ def test_subscriber_with_one_topic_partitions(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["bindings"] == { "kafka": {"bindingVersion": "0.4.0", "topic": "topic_name"}, @@ -49,7 +49,7 @@ def test_subscriber_with_multi_topics_partitions(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key1 = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key1 = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] key2 = tuple(schema["channels"].keys())[1] assert sorted(( diff --git a/tests/asyncapi/kafka/v2_6_0/test_publisher.py b/tests/asyncapi/kafka/v2_6_0/test_publisher.py index 5fd4ae836e6..b28a8e35c4d 100644 --- a/tests/asyncapi/kafka/v2_6_0/test_publisher.py +++ b/tests/asyncapi/kafka/v2_6_0/test_publisher.py @@ -17,7 +17,7 @@ def test_publisher_bindings(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["bindings"] == { "kafka": {"bindingVersion": "0.4.0", "topic": "test"}, diff --git a/tests/asyncapi/kafka/v3_0_0/test_arguments.py b/tests/asyncapi/kafka/v3_0_0/test_arguments.py index 9d0626b4093..7d4403bbdfa 100644 --- a/tests/asyncapi/kafka/v3_0_0/test_arguments.py +++ b/tests/asyncapi/kafka/v3_0_0/test_arguments.py @@ -17,7 +17,7 @@ def test_subscriber_bindings(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["bindings"] == { "kafka": {"bindingVersion": "0.4.0", "topic": "test"}, diff --git a/tests/asyncapi/kafka/v3_0_0/test_publisher.py b/tests/asyncapi/kafka/v3_0_0/test_publisher.py index 323dfce1f4d..3def8f5f917 100644 --- a/tests/asyncapi/kafka/v3_0_0/test_publisher.py +++ b/tests/asyncapi/kafka/v3_0_0/test_publisher.py @@ -17,7 +17,7 @@ def test_publisher_bindings(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["bindings"] == { "kafka": {"bindingVersion": "0.4.0", "topic": "test"}, diff --git a/tests/asyncapi/mqtt/v2_6_0/test_arguments.py b/tests/asyncapi/mqtt/v2_6_0/test_arguments.py index c2347a125e7..e3c619b476e 100644 --- a/tests/asyncapi/mqtt/v2_6_0/test_arguments.py +++ b/tests/asyncapi/mqtt/v2_6_0/test_arguments.py @@ -17,7 +17,7 @@ def test_subscriber_bindings(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["bindings"] == { "mqtt": { diff --git a/tests/asyncapi/mqtt/v2_6_0/test_publisher.py b/tests/asyncapi/mqtt/v2_6_0/test_publisher.py index 06f3381f2aa..ca9db1b6138 100644 --- a/tests/asyncapi/mqtt/v2_6_0/test_publisher.py +++ b/tests/asyncapi/mqtt/v2_6_0/test_publisher.py @@ -17,7 +17,7 @@ def test_publisher_bindings(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["bindings"] == { "mqtt": { diff --git a/tests/asyncapi/mqtt/v3_0_0/test_arguments.py b/tests/asyncapi/mqtt/v3_0_0/test_arguments.py index 0f8075fbfc0..cdd58ceb0d4 100644 --- a/tests/asyncapi/mqtt/v3_0_0/test_arguments.py +++ b/tests/asyncapi/mqtt/v3_0_0/test_arguments.py @@ -17,7 +17,7 @@ def test_subscriber_bindings(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["bindings"] == { "mqtt": { diff --git a/tests/asyncapi/mqtt/v3_0_0/test_publisher.py b/tests/asyncapi/mqtt/v3_0_0/test_publisher.py index 4354fe89c08..65097e9420d 100644 --- a/tests/asyncapi/mqtt/v3_0_0/test_publisher.py +++ b/tests/asyncapi/mqtt/v3_0_0/test_publisher.py @@ -17,7 +17,7 @@ def test_publisher_bindings(self) -> None: async def handle(msg: Any) -> None: ... schema = self.get_spec(broker).to_jsonable() - key = tuple(schema["channels"].keys())[0] # noqa: RUF015 + key = tuple(schema["channels"].keys())[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] assert schema["channels"][key]["bindings"] == { "mqtt": { diff --git a/tests/asyncapi/rabbit/v2_6_0/test_connection.py b/tests/asyncapi/rabbit/v2_6_0/test_connection.py index aee4a4f6984..eeb35a85075 100644 --- a/tests/asyncapi/rabbit/v2_6_0/test_connection.py +++ b/tests/asyncapi/rabbit/v2_6_0/test_connection.py @@ -40,7 +40,7 @@ def test_custom(snapshot_json: SnapshotAssertion) -> None: specification_url="amqp://guest:guest@127.0.0.1:5672/vh", ) - pub = broker.publisher("test") # noqa: F841 + pub = broker.publisher("test") # ruff: ignore[unused-variable] schema = get_2_6_0_schema(broker) assert schema == snapshot_json diff --git a/tests/asyncapi/rabbit/v3_0_0/test_connection.py b/tests/asyncapi/rabbit/v3_0_0/test_connection.py index 94df500eaa1..a5632bdeef9 100644 --- a/tests/asyncapi/rabbit/v3_0_0/test_connection.py +++ b/tests/asyncapi/rabbit/v3_0_0/test_connection.py @@ -40,7 +40,7 @@ def test_custom(snapshot_json: SnapshotAssertion) -> None: specification_url="amqp://guest:guest@127.0.0.1:5672/vh", ) - pub = broker.publisher("test") # noqa: F841 + pub = broker.publisher("test") # ruff: ignore[unused-variable] schema = get_3_0_0_schema(broker) assert schema == snapshot_json diff --git a/tests/brokers/base/basic.py b/tests/brokers/base/basic.py index 1702f890f05..19e0510a8cc 100644 --- a/tests/brokers/base/basic.py +++ b/tests/brokers/base/basic.py @@ -56,7 +56,7 @@ async def enter_broker() -> AsyncGenerator[tuple[Any, ...], None]: async with AsyncExitStack() as stack: for br in brokers: - started_brokers.append(await stack.enter_async_context(br)) # noqa: PERF401 + started_brokers.append(await stack.enter_async_context(br)) # ruff: ignore[manual-list-comprehension] yield tuple(started_brokers) diff --git a/tests/brokers/base/fastapi.py b/tests/brokers/base/fastapi.py index b961e5a9ebf..c8b85eb3444 100644 --- a/tests/brokers/base/fastapi.py +++ b/tests/brokers/base/fastapi.py @@ -1,5 +1,5 @@ import asyncio -from collections.abc import AsyncIterator, Iterator +from collections.abc import AsyncGenerator, Iterator from contextlib import asynccontextmanager from typing import Annotated, Any from unittest.mock import Mock @@ -357,9 +357,8 @@ async def hello(msg: int) -> None: ... app.include_router(router) async with self.patch_broker(router.broker) as br: - with TestClient(app): - with pytest.raises(RequestValidationError): - await br.publish("hi", queue) + with TestClient(app), pytest.raises(RequestValidationError): + await br.publish("hi", queue) async def test_headers(self, queue: str) -> None: router = self.router_class() @@ -445,7 +444,7 @@ def sub(d: Any = FSDepends(lambda: 1)) -> None: ... app = FastAPI() app.include_router(router) - with pytest.raises(SetupError): # noqa: PT012 + with pytest.raises(SetupError): # ruff: ignore[pytest-raises-with-multiple-statements] async with self.patch_broker(router.broker): with TestClient(app): ... @@ -463,7 +462,7 @@ def sub(d: Annotated[Any, FSDepends(lambda: 1)]) -> None: ... app = FastAPI() app.include_router(router) - with pytest.raises(SetupError): # noqa: PT012 + with pytest.raises(SetupError): # ruff: ignore[pytest-raises-with-multiple-statements] async with self.patch_broker(router.broker): with TestClient(app): ... @@ -498,7 +497,7 @@ async def hello(msg: Any = FSContext()) -> None: ... app = FastAPI() app.include_router(router) - with pytest.raises(SetupError): # noqa: PT012 + with pytest.raises(SetupError): # ruff: ignore[pytest-raises-with-multiple-statements] async with self.patch_broker(router.broker): with TestClient(app): ... @@ -514,7 +513,7 @@ async def hello(msg: Annotated[Any, FSContext()]) -> None: ... app = FastAPI() app.include_router(router) - with pytest.raises(SetupError): # noqa: PT012 + with pytest.raises(SetupError): # ruff: ignore[pytest-raises-with-multiple-statements] async with self.patch_broker(router.broker): with TestClient(app): ... @@ -663,10 +662,12 @@ async def test_shutdown_async(app: Any) -> None: async def test_existed_lifespan_startup(self, mock: Mock) -> None: @asynccontextmanager - async def lifespan(app: Any) -> AsyncIterator[Any]: + async def lifespan(app: Any) -> AsyncGenerator[Any, None]: mock.start() - yield {"lifespan": True} - mock.close() + try: + yield {"lifespan": True} + finally: + mock.close() router = self.router_class(lifespan=lifespan) diff --git a/tests/brokers/base/middlewares.py b/tests/brokers/base/middlewares.py index 6e44322d844..5d111993f83 100644 --- a/tests/brokers/base/middlewares.py +++ b/tests/brokers/base/middlewares.py @@ -407,7 +407,7 @@ async def test_global_middleware( mock: MagicMock, event: asyncio.Event, ) -> None: - class mid(BaseMiddleware): # noqa: N801 + class mid(BaseMiddleware): # ruff: ignore[invalid-class-name] async def on_receive(self) -> Any: mock.start(self.msg) return await super().on_receive() @@ -453,7 +453,7 @@ async def test_add_global_middleware( event: asyncio.Event, event2: asyncio.Event, ) -> None: - class mid(BaseMiddleware): # noqa: N801 + class mid(BaseMiddleware): # ruff: ignore[invalid-class-name] async def on_receive(self) -> Any: mock.start(self.msg) return await super().on_receive() diff --git a/tests/brokers/base/testclient.py b/tests/brokers/base/testclient.py index 92fc493dcb7..1ed4ac80ab7 100644 --- a/tests/brokers/base/testclient.py +++ b/tests/brokers/base/testclient.py @@ -36,8 +36,8 @@ async def test_correct_clean_fake_subscribers(self) -> None: async def handler1(msg: Any) -> None: ... # protect publishers from gc - pub1 = broker.publisher("test2") # noqa: F841 - pub2 = broker.publisher("test") # noqa: F841 + pub1 = broker.publisher("test2") # ruff: ignore[unused-variable] + pub2 = broker.publisher("test") # ruff: ignore[unused-variable] assert len(broker.subscribers) == 1, len(broker.subscribers) @@ -59,7 +59,7 @@ async def test_fake_subscribers_deregistered_without_gc(self) -> None: @broker.subscriber("test") async def handler(msg: Any) -> None: ... - pub = broker.publisher("test2") # noqa: F841 + pub = broker.publisher("test2") # ruff: ignore[unused-variable] async with self.patch_broker(broker): pass @@ -192,7 +192,7 @@ async def m(msg: Any) -> Any: # pragma: no cover async with self.patch_broker(test_broker) as br: await br.start() - with pytest.raises(ValueError): # noqa: PT011 + with pytest.raises(ValueError): # ruff: ignore[pytest-raises-too-broad] await br.publish("hello", queue) @pytest.mark.asyncio() @@ -211,7 +211,7 @@ async def m(msg: Any) -> None: # pragma: no cover async with self.patch_broker(test_broker) as br: await br.start() - with pytest.raises(ValueError): # noqa: PT011 + with pytest.raises(ValueError): # ruff: ignore[pytest-raises-too-broad] await br.publish("hello", queue) @pytest.mark.asyncio() @@ -272,7 +272,7 @@ async def m(msg: Any) -> None: m.mock.assert_called_once_with("hello") with anyio.fail_after(self.timeout): - while not publisher.mock.called: # noqa: ASYNC110 + while not publisher.mock.called: # ruff: ignore[async-busy-wait] await asyncio.sleep(0.1) publisher.mock.assert_called_once_with("response: hello") @@ -282,7 +282,7 @@ async def m(msg: Any) -> None: async def test_broker_with_real_stops_fake_subscribers(self, queue: str) -> None: test_broker = self.get_broker() - publisher = test_broker.publisher(queue) # noqa: F841 + publisher = test_broker.publisher(queue) # ruff: ignore[unused-variable] test_client: Any = self.patch_broker(test_broker, with_real=True) async with test_client: diff --git a/tests/brokers/confluent/test_ack_policy.py b/tests/brokers/confluent/test_ack_policy.py index c1359d5e7f5..3d547768523 100644 --- a/tests/brokers/confluent/test_ack_policy.py +++ b/tests/brokers/confluent/test_ack_policy.py @@ -198,7 +198,7 @@ async def test_commit_called_in_middleware_on_error( @consume_broker.subscriber(*args, **kwargs) # type: ignore[untyped-decorator] async def handler(msg: KafkaMessage) -> None: event.set() - raise Exception # noqa: TRY002 + raise Exception # ruff: ignore[raise-vanilla-class] async with self.patch_broker(consume_broker) as br: await br.start() @@ -241,7 +241,7 @@ async def test_seek_called_on_nack_on_error( @consume_broker.subscriber(*args, **kwargs) # type: ignore[untyped-decorator] async def handler(msg: KafkaMessage) -> None: event.set() - raise Exception # noqa: TRY002 + raise Exception # ruff: ignore[raise-vanilla-class] async with self.patch_broker(consume_broker) as br: await br.start() diff --git a/tests/brokers/confluent/test_security.py b/tests/brokers/confluent/test_security.py index b0eff5fca9f..cdd4fc4d6b2 100644 --- a/tests/brokers/confluent/test_security.py +++ b/tests/brokers/confluent/test_security.py @@ -14,16 +14,13 @@ def patch_aio_consumer_and_producer() -> Generator[ tuple[MagicMock, MagicMock], None, None ]: - try: - producer = MagicMock(return_value=AsyncMock()) - - with patch( - "faststream.confluent.helpers.client.AsyncConfluentProducer", - new=producer, - ): - yield producer - finally: - pass + producer = MagicMock(return_value=AsyncMock()) + + with patch( + "faststream.confluent.helpers.client.AsyncConfluentProducer", + new=producer, + ): + yield producer @pytest.mark.confluent() diff --git a/tests/brokers/confluent/test_test_client.py b/tests/brokers/confluent/test_test_client.py index 85666fd024c..fdcb4dcd0fb 100644 --- a/tests/brokers/confluent/test_test_client.py +++ b/tests/brokers/confluent/test_test_client.py @@ -194,7 +194,7 @@ async def test_publisher_assertions_take_the_kafka_fields(self, queue: str) -> N @require_aiopika async def test_kafka_fields_refuse_another_brokers_message(self, queue: str) -> None: - from faststream.rabbit import RabbitBroker, TestRabbitBroker # noqa: PLC0415 + from faststream.rabbit import RabbitBroker, TestRabbitBroker # ruff: ignore[import-outside-top-level] broker = self.get_broker() rabbit = RabbitBroker() diff --git a/tests/brokers/kafka/test_ack_policy.py b/tests/brokers/kafka/test_ack_policy.py index 586016e361d..18b2fd5da59 100644 --- a/tests/brokers/kafka/test_ack_policy.py +++ b/tests/brokers/kafka/test_ack_policy.py @@ -190,7 +190,7 @@ async def test_commit_called_in_middleware_on_error( @consume_broker.subscriber(*args, **kwargs) # type: ignore[untyped-decorator] async def handler(msg: KafkaMessage) -> None: event.set() - raise Exception # noqa: TRY002 + raise Exception # ruff: ignore[raise-vanilla-class] async with self.patch_broker(consume_broker) as br: await br.start() @@ -232,7 +232,7 @@ async def test_seek_called_on_nack_on_error( @consume_broker.subscriber(*args, **kwargs) # type: ignore[untyped-decorator] async def handler(msg: KafkaMessage) -> None: event.set() - raise Exception # noqa: TRY002 + raise Exception # ruff: ignore[raise-vanilla-class] async with self.patch_broker(consume_broker) as br: await br.start() diff --git a/tests/brokers/kafka/test_consume.py b/tests/brokers/kafka/test_consume.py index edbc2a71979..9dcc2a3844e 100644 --- a/tests/brokers/kafka/test_consume.py +++ b/tests/brokers/kafka/test_consume.py @@ -620,7 +620,7 @@ def on_partitions_assigned(self, assigned: set[str]) -> None: mock.on_partitions_assigned() event.set() - sub = consume_broker.subscriber( # noqa: F841 + sub = consume_broker.subscriber( # ruff: ignore[unused-variable] queue, ack_policy=AckPolicy.MANUAL, group_id="service_1", @@ -646,7 +646,7 @@ async def on_partitions_revoked(self, revoked: set[str]) -> None: async def on_partitions_assigned(self, assigned: set[str]) -> None: mock.on_partitions_assigned() - sub = consume_broker.subscriber( # noqa: F841 + sub = consume_broker.subscriber( # ruff: ignore[unused-variable] queue, ack_policy=AckPolicy.MANUAL, group_id="service_1", diff --git a/tests/brokers/kafka/test_test_client.py b/tests/brokers/kafka/test_test_client.py index 733f9620aa4..3813ca70dbc 100644 --- a/tests/brokers/kafka/test_test_client.py +++ b/tests/brokers/kafka/test_test_client.py @@ -246,7 +246,7 @@ async def test_publisher_assertions_take_the_kafka_fields(self, queue: str) -> N @require_aiopika async def test_kafka_fields_refuse_another_brokers_message(self, queue: str) -> None: - from faststream.rabbit import RabbitBroker, TestRabbitBroker # noqa: PLC0415 + from faststream.rabbit import RabbitBroker, TestRabbitBroker # ruff: ignore[import-outside-top-level] broker = self.get_broker() rabbit = RabbitBroker() diff --git a/tests/brokers/mqtt/test_config.py b/tests/brokers/mqtt/test_config.py index c8cd8b485ce..3c0c502aa96 100644 --- a/tests/brokers/mqtt/test_config.py +++ b/tests/brokers/mqtt/test_config.py @@ -91,7 +91,7 @@ def test_sub_overrides_broker_and_router() -> None: @pytest.mark.mqtt() def test_mqtt_connect_timeout_threaded_to_client() -> None: broker = MQTTBroker(mqtt_connect_timeout=7.0) - assert broker._connection_kwargs["mqtt_connect_timeout"] == 7.0 + assert broker._connection_kwargs["mqtt_connect_timeout"] == 7 @pytest.mark.mqtt() @@ -117,7 +117,7 @@ def test_session_replay_config_threaded_to_client() -> None: ) assert broker._connection_kwargs["session_replay_buffer_size"] == 10 - assert broker._connection_kwargs["session_replay_timeout"] == 20.0 + assert broker._connection_kwargs["session_replay_timeout"] == 20 @pytest.mark.mqtt() diff --git a/tests/brokers/mqtt/test_fastapi.py b/tests/brokers/mqtt/test_fastapi.py index 30d836c9e23..4f4ac5a3779 100644 --- a/tests/brokers/mqtt/test_fastapi.py +++ b/tests/brokers/mqtt/test_fastapi.py @@ -88,7 +88,7 @@ def test_router_session_replay_config_threaded_to_broker() -> None: ) assert router.broker._connection_kwargs["session_replay_buffer_size"] == 10 - assert router.broker._connection_kwargs["session_replay_timeout"] == 20.0 + assert router.broker._connection_kwargs["session_replay_timeout"] == 20 @pytest.mark.connected() diff --git a/tests/brokers/redis/cluster/test_cluster_test_client.py b/tests/brokers/redis/cluster/test_cluster_test_client.py index c3522947499..b789183f1dd 100644 --- a/tests/brokers/redis/cluster/test_cluster_test_client.py +++ b/tests/brokers/redis/cluster/test_cluster_test_client.py @@ -146,7 +146,7 @@ async def test_publish_to_none(self) -> None: broker = self.get_broker() async with self.patch_broker(broker) as br: - with pytest.raises(ValueError): # noqa: PT011 + with pytest.raises(ValueError): # ruff: ignore[pytest-raises-too-broad] await br.publish("hello") @pytest.mark.connected() diff --git a/tests/brokers/redis/test_schemas.py b/tests/brokers/redis/test_schemas.py index b1d2e7b4e9c..fd54742dac6 100644 --- a/tests/brokers/redis/test_schemas.py +++ b/tests/brokers/redis/test_schemas.py @@ -16,10 +16,10 @@ def test_list_records() -> None: @pytest.mark.redis() def test_stream_group() -> None: - with pytest.raises(ValueError): # noqa: PT011 + with pytest.raises(ValueError): # ruff: ignore[pytest-raises-too-broad] StreamSub("test", group="group") - with pytest.raises(ValueError): # noqa: PT011 + with pytest.raises(ValueError): # ruff: ignore[pytest-raises-too-broad] StreamSub("test", consumer="consumer") StreamSub("test", group="group", consumer="consumer") diff --git a/tests/brokers/redis/test_stream_group_pel.py b/tests/brokers/redis/test_stream_group_pel.py index 8d6b818de7a..659666eb14c 100644 --- a/tests/brokers/redis/test_stream_group_pel.py +++ b/tests/brokers/redis/test_stream_group_pel.py @@ -72,7 +72,7 @@ async def test_only_min_idle_time_subscriber_processes_pel(self, pel: PEL) -> No @broker.subscriber(stream=StreamSub("tasks", group="workers", consumer="w1")) async def worker(msg: str) -> None: - call_order.append("worker") # noqa: B023 + call_order.append("worker") # ruff: ignore[function-uses-loop-variable] raise NackMessage @broker.subscriber( @@ -84,7 +84,7 @@ async def worker(msg: str) -> None: ), ) async def claimer(msg: str) -> None: - call_order.append("claimer") # noqa: B023 + call_order.append("claimer") # ruff: ignore[function-uses-loop-variable] pel = PEL() async with self.patch_broker(broker, pel=pel) as br: diff --git a/tests/brokers/redis/test_test_client.py b/tests/brokers/redis/test_test_client.py index ce9b0af6b3b..4e676c9a8f8 100644 --- a/tests/brokers/redis/test_test_client.py +++ b/tests/brokers/redis/test_test_client.py @@ -336,7 +336,7 @@ async def test_publish_to_none(self) -> None: broker = self.get_broker() async with self.patch_broker(broker) as br: - with pytest.raises(ValueError): # noqa: PT011 + with pytest.raises(ValueError): # ruff: ignore[pytest-raises-too-broad] await br.publish("hello") @pytest.mark.connected() diff --git a/tests/cli/require_broker/test_app.py b/tests/cli/require_broker/test_app.py index 9123d41053e..e0db9565e6d 100644 --- a/tests/cli/require_broker/test_app.py +++ b/tests/cli/require_broker/test_app.py @@ -283,8 +283,10 @@ async def test_running_lifespan_contextmanager( @asynccontextmanager async def lifespan(env: str) -> AsyncGenerator[None, None]: mock.on(env) - yield - mock.off() + try: + yield + finally: + mock.off() broker = AsyncMock(spec=RabbitBroker) app = FastStream(broker, lifespan=lifespan) @@ -349,7 +351,7 @@ async def test_test_app_with_excp(mock: MagicMock) -> None: app.on_startup(mock.on) app.on_shutdown(mock.off) - with pytest.raises(ValueError): # noqa: PT011 + with pytest.raises(ValueError): # ruff: ignore[pytest-raises-too-broad] async with TestApp(app): raise ValueError @@ -376,7 +378,7 @@ def test_sync_test_app_with_excp(mock: MagicMock) -> None: app.on_startup(mock.on) app.on_shutdown(mock.off) - with pytest.raises(ValueError), TestApp(app): # noqa: PT011 + with pytest.raises(ValueError), TestApp(app): # ruff: ignore[pytest-raises-too-broad] raise ValueError mock.on.assert_called_once() @@ -388,8 +390,10 @@ async def test_lifespan_contextmanager(async_mock: AsyncMock, app: FastStream) - @asynccontextmanager async def lifespan(env: str) -> AsyncGenerator[None, None]: await async_mock.on(env) - yield - await async_mock.off() + try: + yield + finally: + await async_mock.off() assert app.broker app = FastStream(app.broker, lifespan=lifespan) @@ -411,8 +415,10 @@ def test_sync_lifespan_contextmanager(async_mock: AsyncMock, app: FastStream) -> @asynccontextmanager async def lifespan(env: str) -> AsyncGenerator[None, None]: await async_mock.on(env) - yield - await async_mock.off() + try: + yield + finally: + await async_mock.off() assert app.broker app = FastStream(app.broker, lifespan=lifespan) diff --git a/tests/docs/getting_started/asyncapi/asyncapi_customization/test_handler.py b/tests/docs/getting_started/asyncapi/asyncapi_customization/test_handler.py index 767ae125268..16c3fa0a361 100644 --- a/tests/docs/getting_started/asyncapi/asyncapi_customization/test_handler.py +++ b/tests/docs/getting_started/asyncapi/asyncapi_customization/test_handler.py @@ -24,7 +24,7 @@ def test_handler_customization() -> None: }, }), subscriber_value desc = subscriber_value["description"] - assert ( # noqa: PT018 + assert ( # ruff: ignore[pytest-composite-assertion] "Consumer function\n\n" in desc and "Args:\n" in desc and " msg: input msg" in desc diff --git a/tests/docs/getting_started/dependencies/test_global.py b/tests/docs/getting_started/dependencies/test_global.py index 528ed0954b8..9b8e3f530e7 100644 --- a/tests/docs/getting_started/dependencies/test_global.py +++ b/tests/docs/getting_started/dependencies/test_global.py @@ -22,5 +22,5 @@ async def test_global_kafka() -> None: }, ) - with pytest.raises(ValueError): # noqa: PT011 + with pytest.raises(ValueError): # ruff: ignore[pytest-raises-too-broad] await broker.publish({"name": "Ted", "user_id": 1}, "test-topic") diff --git a/tests/docs/getting_started/dependencies/test_global_broker.py b/tests/docs/getting_started/dependencies/test_global_broker.py index 5f033c8135d..c774280f24d 100644 --- a/tests/docs/getting_started/dependencies/test_global_broker.py +++ b/tests/docs/getting_started/dependencies/test_global_broker.py @@ -22,5 +22,5 @@ async def test_global_broker_kafka() -> None: }, ) - with pytest.raises(ValueError): # noqa: PT011 + with pytest.raises(ValueError): # ruff: ignore[pytest-raises-too-broad] await broker.publish({"name": "Ted", "user_id": 1}, "test-topic") diff --git a/tests/docs/getting_started/lifespan/test_manual_run.py b/tests/docs/getting_started/lifespan/test_manual_run.py index 2b0a088a775..3be3a4284dd 100644 --- a/tests/docs/getting_started/lifespan/test_manual_run.py +++ b/tests/docs/getting_started/lifespan/test_manual_run.py @@ -16,7 +16,7 @@ async def wait_started(broker: Any) -> None: # the fake broker exposes no "started" event, so poll the subscribers - while not all(sub.running for sub in broker.subscribers): # noqa: ASYNC110 + while not all(sub.running for sub in broker.subscribers): # ruff: ignore[async-busy-wait] await asyncio.sleep(0) diff --git a/tests/docs/getting_started/subscription/test_dynamic.py b/tests/docs/getting_started/subscription/test_dynamic.py index 4590f504f2b..77cd48f8357 100644 --- a/tests/docs/getting_started/subscription/test_dynamic.py +++ b/tests/docs/getting_started/subscription/test_dynamic.py @@ -38,8 +38,10 @@ async def publish_forever() -> None: async with broker, anyio.create_task_group() as tg: _ = tg.start_soon(publish_forever) - yield - tg.cancel_scope.cancel() + try: + yield + finally: + tg.cancel_scope.cancel() async def consumed_message(snippet: Any, broker_name: str, destination: str) -> Any: diff --git a/tests/docs/index/test_basic.py b/tests/docs/index/test_basic.py index 1181361bf79..cb1ee7e8e12 100644 --- a/tests/docs/index/test_basic.py +++ b/tests/docs/index/test_basic.py @@ -21,7 +21,7 @@ async def test_index_kafka_base() -> None: handle_msg.mock.assert_called_once_with({"user": "John", "user_id": 1}) - list(br.publishers)[0].mock.assert_called_once_with( # noqa: RUF015 + list(br.publishers)[0].mock.assert_called_once_with( # ruff: ignore[unnecessary-iterable-allocation-for-first-element] "User: 1 - John registered", ) @@ -37,7 +37,7 @@ async def test_index_confluent_base() -> None: handle_msg.mock.assert_called_once_with({"user": "John", "user_id": 1}) - list(br.publishers)[0].mock.assert_called_once_with( # noqa: RUF015 + list(br.publishers)[0].mock.assert_called_once_with( # ruff: ignore[unnecessary-iterable-allocation-for-first-element] "User: 1 - John registered", ) @@ -53,7 +53,7 @@ async def test_index_rabbit_base() -> None: handle_msg.mock.assert_called_once_with({"user": "John", "user_id": 1}) - list(br.publishers)[0].mock.assert_called_once_with( # noqa: RUF015 + list(br.publishers)[0].mock.assert_called_once_with( # ruff: ignore[unnecessary-iterable-allocation-for-first-element] "User: 1 - John registered", ) @@ -69,7 +69,7 @@ async def test_index_nats_base() -> None: handle_msg.mock.assert_called_once_with({"user": "John", "user_id": 1}) - list(br.publishers)[0].mock.assert_called_once_with( # noqa: RUF015 + list(br.publishers)[0].mock.assert_called_once_with( # ruff: ignore[unnecessary-iterable-allocation-for-first-element] "User: 1 - John registered", ) @@ -85,7 +85,7 @@ async def test_index_redis_base() -> None: handle_msg.mock.assert_called_once_with({"user": "John", "user_id": 1}) - list(br.publishers)[0].mock.assert_called_once_with( # noqa: RUF015 + list(br.publishers)[0].mock.assert_called_once_with( # ruff: ignore[unnecessary-iterable-allocation-for-first-element] "User: 1 - John registered", ) @@ -101,6 +101,6 @@ async def test_index_mqtt_base() -> None: handle_msg.mock.assert_called_once_with({"user": "John", "user_id": 1}) - list(br.publishers)[0].mock.assert_called_once_with( # noqa: RUF015 + list(br.publishers)[0].mock.assert_called_once_with( # ruff: ignore[unnecessary-iterable-allocation-for-first-element] "User: 1 - John registered", ) diff --git a/tests/docs/integration/fastapi/test_base.py b/tests/docs/integration/fastapi/test_base.py index d5f064426b5..0df9c5b1a7b 100644 --- a/tests/docs/integration/fastapi/test_base.py +++ b/tests/docs/integration/fastapi/test_base.py @@ -25,7 +25,7 @@ async def test_fastapi_kafka_base() -> None: hello.mock.assert_called_once_with({"m": {}}) - list(br.publishers)[0].mock.assert_called_with( # noqa: RUF015 + list(br.publishers)[0].mock.assert_called_with( # ruff: ignore[unnecessary-iterable-allocation-for-first-element] {"response": "Hello, Kafka!"}, ) @@ -44,7 +44,7 @@ async def test_fastapi_confluent_base() -> None: hello.mock.assert_called_once_with({"m": {}}) - list(br.publishers)[0].mock.assert_called_with( # noqa: RUF015 + list(br.publishers)[0].mock.assert_called_with( # ruff: ignore[unnecessary-iterable-allocation-for-first-element] {"response": "Hello, Kafka!"}, ) @@ -63,7 +63,7 @@ async def test_fastapi_rabbit_base() -> None: hello.mock.assert_called_once_with({"m": {}}) - list(br.publishers)[0].mock.assert_called_with( # noqa: RUF015 + list(br.publishers)[0].mock.assert_called_with( # ruff: ignore[unnecessary-iterable-allocation-for-first-element] {"response": "Hello, Rabbit!"}, ) @@ -82,7 +82,7 @@ async def test_fastapi_nats_base() -> None: hello.mock.assert_called_once_with({"m": {}}) - list(br.publishers)[0].mock.assert_called_with( # noqa: RUF015 + list(br.publishers)[0].mock.assert_called_with( # ruff: ignore[unnecessary-iterable-allocation-for-first-element] {"response": "Hello, NATS!"}, ) @@ -101,7 +101,7 @@ async def test_fastapi_redis_base() -> None: hello.mock.assert_called_once_with({"m": {}}) - list(br.publishers)[0].mock.assert_called_with( # noqa: RUF015 + list(br.publishers)[0].mock.assert_called_with( # ruff: ignore[unnecessary-iterable-allocation-for-first-element] {"response": "Hello, Redis!"}, ) @@ -120,6 +120,6 @@ async def test_fastapi_mqtt_base() -> None: hello.mock.assert_called_once_with({"m": {}}) - list(br.publishers)[0].mock.assert_called_with( # noqa: RUF015 + list(br.publishers)[0].mock.assert_called_with( # ruff: ignore[unnecessary-iterable-allocation-for-first-element] {"response": "Hello, MQTT!"}, ) diff --git a/tests/docs/kafka/basic/test_basic.py b/tests/docs/kafka/basic/test_basic.py index a0574f53574..6b3de809872 100644 --- a/tests/docs/kafka/basic/test_basic.py +++ b/tests/docs/kafka/basic/test_basic.py @@ -8,7 +8,7 @@ async def test_basic() -> None: from docs.docs_src.kafka.basic.basic import broker, on_input_data - publisher = list(broker.publishers)[0] # noqa: RUF015 + publisher = list(broker.publishers)[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] async with TestKafkaBroker(broker) as br: await br.publish({"data": 1.0}, "input_data") diff --git a/tests/docs/kafka/test_security.py b/tests/docs/kafka/test_security.py index 15a6b2702c1..0f498e14157 100644 --- a/tests/docs/kafka/test_security.py +++ b/tests/docs/kafka/test_security.py @@ -9,17 +9,14 @@ @contextmanager def patch_aio_consumer_and_producer() -> Generator[MagicMock, None, None]: - try: - producer = MagicMock(return_value=AsyncMock()) - admin_client = MagicMock(return_value=AsyncMock()) - - with ( - patch("aiokafka.AIOKafkaProducer", new=producer), - patch("aiokafka.admin.client.AIOKafkaAdminClient", new=admin_client), - ): - yield producer - finally: - pass + producer = MagicMock(return_value=AsyncMock()) + admin_client = MagicMock(return_value=AsyncMock()) + + with ( + patch("aiokafka.AIOKafkaProducer", new=producer), + patch("aiokafka.admin.client.AIOKafkaAdminClient", new=admin_client), + ): + yield producer @pytest.mark.asyncio() diff --git a/tests/docs/redis/list/test_list_pub.py b/tests/docs/redis/list/test_list_pub.py index 4a4116b2a82..7a1ac6dcee2 100644 --- a/tests/docs/redis/list/test_list_pub.py +++ b/tests/docs/redis/list/test_list_pub.py @@ -8,7 +8,7 @@ async def test_list_publisher() -> None: from docs.docs_src.redis.list.list_pub import broker, on_input_data - publisher = list(broker.publishers)[0] # noqa: RUF015 + publisher = list(broker.publishers)[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] async with TestRedisBroker(broker) as br: await br.publish({"data": 1.0}, list="input-list") diff --git a/tests/docs/redis/stream/test_pub.py b/tests/docs/redis/stream/test_pub.py index c36c32f01f3..b66ac6d282b 100644 --- a/tests/docs/redis/stream/test_pub.py +++ b/tests/docs/redis/stream/test_pub.py @@ -8,7 +8,7 @@ async def test_stream_pub() -> None: from docs.docs_src.redis.stream.pub import broker, on_input_data - publisher = list(broker.publishers)[0] # noqa: RUF015 + publisher = list(broker.publishers)[0] # ruff: ignore[unnecessary-iterable-allocation-for-first-element] async with TestRedisBroker(broker) as br: await br.publish({"data": 1.0}, stream="input-stream") diff --git a/tests/docs/redis/test_security.py b/tests/docs/redis/test_security.py index affa28ea6b6..99dbc510b3c 100644 --- a/tests/docs/redis/test_security.py +++ b/tests/docs/redis/test_security.py @@ -10,21 +10,18 @@ @contextmanager def patch_asyncio_open_connection() -> Generator[AsyncMock, None, None]: - try: - reader = MagicMock() - reader.readline = AsyncMock(return_value=b":1\r\n") - reader.read = AsyncMock(return_value=b"") + reader = MagicMock() + reader.readline = AsyncMock(return_value=b":1\r\n") + reader.read = AsyncMock(return_value=b"") - writer = MagicMock() - writer.drain = AsyncMock() - writer.wait_closed = AsyncMock() + writer = MagicMock() + writer.drain = AsyncMock() + writer.wait_closed = AsyncMock() - open_connection = AsyncMock(return_value=(reader, writer)) + open_connection = AsyncMock(return_value=(reader, writer)) - with patch("asyncio.open_connection", new=open_connection): - yield open_connection - finally: - pass + with patch("asyncio.open_connection", new=open_connection): + yield open_connection @pytest.mark.connected() diff --git a/tests/marks.py b/tests/marks.py index a3c04cce3fa..aa4b224abec 100644 --- a/tests/marks.py +++ b/tests/marks.py @@ -28,7 +28,7 @@ try: - from faststream.confluent import KafkaBroker as ConfluentBroker # noqa: F401 + from faststream.confluent import KafkaBroker as ConfluentBroker # ruff: ignore[unused-import] except ImportError: HAS_CONFLUENT = False else: @@ -41,7 +41,7 @@ try: - from faststream.kafka import KafkaBroker # noqa: F401 + from faststream.kafka import KafkaBroker # ruff: ignore[unused-import] from faststream.kafka._compat import AIOKAFKA_V014 except ImportError: HAS_AIOKAFKA = False @@ -61,7 +61,7 @@ try: - from faststream.rabbit import RabbitBroker # noqa: F401 + from faststream.rabbit import RabbitBroker # ruff: ignore[unused-import] except ImportError: HAS_AIOPIKA = False else: @@ -74,7 +74,7 @@ try: - from faststream.redis import RedisBroker # noqa: F401 + from faststream.redis import RedisBroker # ruff: ignore[unused-import] from faststream.redis._compat import REDIS_V710 except ImportError: HAS_REDIS = False @@ -94,7 +94,7 @@ try: - from faststream.nats import NatsBroker # noqa: F401 + from faststream.nats import NatsBroker # ruff: ignore[unused-import] except ImportError: HAS_NATS = False else: @@ -107,7 +107,7 @@ try: - from faststream.mqtt import MQTTBroker # noqa: F401 + from faststream.mqtt import MQTTBroker # ruff: ignore[unused-import] except ImportError: HAS_MQTT = False else: diff --git a/tests/mocks.py b/tests/mocks.py index f8a9c3d4957..b9cc531b20e 100644 --- a/tests/mocks.py +++ b/tests/mocks.py @@ -3,7 +3,7 @@ from typing import Any from unittest.mock import Mock -from pytest import MonkeyPatch # noqa: PT013 +from pytest import MonkeyPatch # ruff: ignore[pytest-incorrect-pytest-import] @contextmanager diff --git a/tests/utils/context/test_depends.py b/tests/utils/context/test_depends.py index 674f000e523..dc10400a1ef 100644 --- a/tests/utils/context/test_depends.py +++ b/tests/utils/context/test_depends.py @@ -58,7 +58,7 @@ async def func(k: Any = Depends(sync_dep)) -> Any: @pytest.mark.asyncio() async def test_annotated_depends() -> None: - D = Annotated[int, Depends(sync_dep)] # noqa: N806 + D = Annotated[int, Depends(sync_dep)] # ruff: ignore[non-lowercase-variable-in-function] key = 1000 diff --git a/tests/utils/context/test_main.py b/tests/utils/context/test_main.py index db23ec03b76..0f30e556f9c 100644 --- a/tests/utils/context/test_main.py +++ b/tests/utils/context/test_main.py @@ -208,7 +208,7 @@ def use( async def test_context_with_custom_object_implementing_comparison( context: ContextRepo, ) -> None: - class User: # noqa: PLW1641 - a user object that defines only `__eq__` + class User: # ruff: ignore[eq-without-hash] - a user object that defines only `__eq__` def __init__(self, user_id: int) -> None: self.user_id = user_id diff --git a/tests/utils/test_ast.py b/tests/utils/test_ast.py index 181197724b7..3b3a2fb3450 100644 --- a/tests/utils/test_ast.py +++ b/tests/utils/test_ast.py @@ -63,14 +63,14 @@ async def test_nested_async() -> None: @pytest.mark.asyncio() -async def test_async_A() -> None: # noqa: N802 +async def test_async_A() -> None: # ruff: ignore[invalid-function-name] async with A() as a: with B(): assert a.contains @pytest.mark.asyncio() -async def test_async_B() -> None: # noqa: N802 +async def test_async_B() -> None: # ruff: ignore[invalid-function-name] with A() as a: async with B(): assert a.contains @@ -107,5 +107,5 @@ def test_not_broken() -> None: assert a.contains # test ast processes another context correctly - with pytest.raises(ValueError): # noqa: PT011 + with pytest.raises(ValueError): # ruff: ignore[pytest-raises-too-broad] raise ValueError diff --git a/tests/utils/type_cast/test_base.py b/tests/utils/type_cast/test_base.py index d413ddba803..681b04e7f83 100644 --- a/tests/utils/type_cast/test_base.py +++ b/tests/utils/type_cast/test_base.py @@ -37,7 +37,7 @@ def test_int_default() -> None: def test_int_wrong_value() -> None: value: Any = [] - with pytest.raises(ValueError): # noqa: PT011 + with pytest.raises(ValueError): # ruff: ignore[pytest-raises-too-broad] cast_int(value) @@ -54,5 +54,5 @@ def test_cast_default_default() -> None: def test_cast_default_wrong_value() -> None: value: Any = [] - with pytest.raises(ValueError): # noqa: PT011 + with pytest.raises(ValueError): # ruff: ignore[pytest-raises-too-broad] cast_default(value) diff --git a/tests/utils/type_cast/test_model.py b/tests/utils/type_cast/test_model.py index 240ac16942f..5eebb627457 100644 --- a/tests/utils/type_cast/test_model.py +++ b/tests/utils/type_cast/test_model.py @@ -30,5 +30,5 @@ def test_model(value: Any) -> None: def test_model_wrong_value() -> None: value: Any = ("field", 1) - with pytest.raises(ValueError): # noqa: PT011 + with pytest.raises(ValueError): # ruff: ignore[pytest-raises-too-broad] cast_model(value) diff --git a/uv.lock b/uv.lock index 9e0c7957a58..10fa2a00dda 100644 --- a/uv.lock +++ b/uv.lock @@ -2,7 +2,8 @@ version = 1 revision = 3 requires-python = ">=3.10" resolution-markers = [ - "python_full_version >= '3.13'", + "python_full_version >= '3.15'", + "python_full_version >= '3.13' and python_full_version < '3.15'", "python_full_version == '3.12.*' and sys_platform == 'emscripten'", "(python_full_version >= '3.11' and python_full_version < '3.13' and sys_platform != 'emscripten') or (python_full_version == '3.11.*' and sys_platform == 'emscripten')", "python_full_version < '3.11'", @@ -10,9 +11,9 @@ resolution-markers = [ [[package]] name = "actionlint-py" -version = "1.7.12.24" +version = "1.7.12.25" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6f/0b/3f29683dfbe94208fb5c3806806a6ef419972892e25c3c4f95198f68c978/actionlint_py-1.7.12.24.tar.gz", hash = "sha256:7571b0724fde79b2572b98b2b53792c470249d4db29951b57fc49b9cd3eaf11e", size = 12071, upload-time = "2026-03-31T06:21:35.015Z" } +sdist = { url = "https://files.pythonhosted.org/packages/33/75/36ee89db39bb3620d1e46fe1f6ec77d6000d30ff45345699e51b4c850e83/actionlint_py-1.7.12.25.tar.gz", hash = "sha256:83f83be4cd317c79b15cbb7022787513a6994f00bfb2dd8da02fa4e62b4f640d", size = 12438, upload-time = "2026-09-22T16:24:42.477Z" } [[package]] name = "aio-pika" @@ -117,6 +118,70 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" }, ] +[[package]] +name = "ast-serialize" +version = "0.13.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/d5/5dc1ee8a80c3b20a0b63c61b43ba6bc53517faecd1def47bcd752d22268e/ast_serialize-0.13.1.tar.gz", hash = "sha256:401cc84e8888d4d76f2c8d296fa006ed1a5ff993b6aff90dd777c03973efd025", size = 955137, upload-time = "2026-10-17T00:04:17.183Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/a8/fbd136b9f70c59e75f59a8e974c84102976f1201828b4f886480ba956936/ast_serialize-0.13.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:3e129d44b0cffbea24a7f40117ce49e30993c3d119e584d4817ebd6f87246456", size = 897306, upload-time = "2026-10-17T00:02:52.479Z" }, + { url = "https://files.pythonhosted.org/packages/50/3f/2ad51e9823a790e7a70fd781e9595ab3abeace27f3aefcaa1939457efd72/ast_serialize-0.13.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:523d45bab16ddaf1399c04c4fe81bbf180f81e33c2f7bcbe76be56b0f7311ab4", size = 1236082, upload-time = "2026-10-17T00:02:54.82Z" }, + { url = "https://files.pythonhosted.org/packages/c0/5c/8e959db5cc2237f9d4c560a8e2253c98f9746883fb4774651e4cda458901/ast_serialize-0.13.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:638333fb8ae72c62753f9e794fda20290883ddc65b0d85e26e08f8bb227567ad", size = 1221242, upload-time = "2026-10-17T00:02:56.395Z" }, + { url = "https://files.pythonhosted.org/packages/d6/05/ab1c56c3b7adcac88764bba609502d6b4989e449b2dd60eb478e1d20e369/ast_serialize-0.13.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc34c670747d85d4232834665e247009413eaebe47c69eaf60a5c439aaecaed9", size = 1282105, upload-time = "2026-10-17T00:02:58.275Z" }, + { url = "https://files.pythonhosted.org/packages/0d/f4/41981fcd2ddffe0760e5326be9dcbd2eda9478a8430a637e5123bd8fcb26/ast_serialize-0.13.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c8ebd419811c435812d242fb2a173e57dfede198c9ac9a0a584666ebc9b9331", size = 1287905, upload-time = "2026-10-17T00:03:00.068Z" }, + { url = "https://files.pythonhosted.org/packages/6a/43/b783addc5681153707121991b7b47892f7e9c8ba58a0d03b71a3b023ba47/ast_serialize-0.13.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8899c038b1c15ae8b98e379057fb3ef398ceb0b21d1737a8156dd5a0923b7e51", size = 1541806, upload-time = "2026-10-17T00:03:01.503Z" }, + { url = "https://files.pythonhosted.org/packages/47/10/969db095038ee15270f65ad20d1129c5e4da605bf7e93b70ae640f1c8a9f/ast_serialize-0.13.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e14c4de98f965647a74e6eaf37e20207124e45451ccd36e84a6f6ebab45e0372", size = 1309946, upload-time = "2026-10-17T00:03:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/06/dd/7c623d2fb0b868948952d1787e629a43b866f7d4caefd5445e20aefacec4/ast_serialize-0.13.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f3e8a3eff69af640db985360fef35073fb46956dfc3e5c614cf00920d2746dd", size = 1302773, upload-time = "2026-10-17T00:03:04.378Z" }, + { url = "https://files.pythonhosted.org/packages/d4/c2/4d49469110a19a44fc6269f4fd59679bcf84df068f185f89b73bee4da19b/ast_serialize-0.13.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:75d7750fe98f6f35a96c43aba8d98a2e623e22c778a0c17ab9ede92eb10f5d82", size = 1299579, upload-time = "2026-10-17T00:03:05.88Z" }, + { url = "https://files.pythonhosted.org/packages/9d/9a/2d381f1f262dda15affc8ad643fba1619eb07e7d9f8bd904deffef183006/ast_serialize-0.13.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43e8ddd63e80fc280c2f790157386f27f9b9f6ccb9c4f8e803b863cbfb085769", size = 1355969, upload-time = "2026-10-17T00:03:07.321Z" }, + { url = "https://files.pythonhosted.org/packages/9d/9c/2266794e6c25fa9ce51ce04a9bf4b7e330e3ac9351ba3fa14e487678acdb/ast_serialize-0.13.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9221e09496fb942901993c1812ee87950cc0ecbb514c7c0f1f5fa6d78f701ed8", size = 1460227, upload-time = "2026-10-17T00:03:08.733Z" }, + { url = "https://files.pythonhosted.org/packages/2b/d6/14deb28e5d8f328f626a0778ea2cf98fe908f2bbcccd804cb6f449ee1782/ast_serialize-0.13.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:7a5c38bdb93669c596f94fb7204dd6ebe4fadb19058ac9a2faf2948c2a175f96", size = 1562691, upload-time = "2026-10-17T00:03:10.25Z" }, + { url = "https://files.pythonhosted.org/packages/f5/19/7a28c0e5ba54f0d3e054f847a2a549b748cb179ab433321a8dc1b39e398d/ast_serialize-0.13.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:acf4e9f055d75058ab01536da330648746f2f82b7697a85230547f2d5ebe895c", size = 1558669, upload-time = "2026-10-17T00:03:11.799Z" }, + { url = "https://files.pythonhosted.org/packages/18/9a/f9e2690eab58217f1d395a964a78efa7eaf813a1e38be8dfd9a8d45d0840/ast_serialize-0.13.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:87427913c325adc811e81e7c9a757b061f47ef1e29114ac479aa0953a2687a98", size = 1665071, upload-time = "2026-10-17T00:03:13.284Z" }, + { url = "https://files.pythonhosted.org/packages/8e/f3/ef5b159a0d7161b404f05e7ec21cf7735ee7edc10c000cd2cbbc7bb6b69a/ast_serialize-0.13.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:ad88921f95b92bc144d9ad059a0e16f8c1ae69f5239f2d3c6536fd2774f73dfe", size = 1473364, upload-time = "2026-10-17T00:03:14.563Z" }, + { url = "https://files.pythonhosted.org/packages/1d/87/6e8ac4a865124a12cc4f915bf1bcfac3bba426cd5f58d3712a873ee61012/ast_serialize-0.13.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f8b17e2921e56621bcb46792bd3e0b82ca3b85de78d5936e7b8174ba1758b0aa", size = 1500566, upload-time = "2026-10-17T00:03:15.917Z" }, + { url = "https://files.pythonhosted.org/packages/f5/1e/29155f1621433008013ad5c940a03d41a676be0680c41527040472d37583/ast_serialize-0.13.1-cp314-cp314t-win32.whl", hash = "sha256:2f9a9ce8b0994f757b941f7f7fe384a6666b4162b941ebc5c248081baea18e47", size = 1128674, upload-time = "2026-10-17T00:03:17.481Z" }, + { url = "https://files.pythonhosted.org/packages/bb/64/2506da65143ea138de5822e9173e0b72320a2f70e23bd723f044033175f1/ast_serialize-0.13.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5d99910e6b9a9b9360bcca2ae99aee36cc912ce058df2a57d1c33099b6cb2593", size = 1163306, upload-time = "2026-10-17T00:03:19.046Z" }, + { url = "https://files.pythonhosted.org/packages/6d/8f/c7cb22638899b0cf15908809c270560e46395e65604bc59e4b623ab9f405/ast_serialize-0.13.1-cp314-cp314t-win_arm64.whl", hash = "sha256:a789cbe14d0a0e9ec9b32a456e5abc81ad8799479c3cfd88a29e3442262aebe6", size = 1133775, upload-time = "2026-10-17T00:03:20.377Z" }, + { url = "https://files.pythonhosted.org/packages/2b/e2/b0c140fe50fa39dd249e382f7733af6f816c90021fe7959a0b026f86237f/ast_serialize-0.13.1-cp315-abi3.abi3t-macosx_10_12_x86_64.whl", hash = "sha256:23d768369b89d551077dc173da6892fad00443338417523b6732f4e8ba4a7ed5", size = 1236160, upload-time = "2026-10-17T00:03:21.945Z" }, + { url = "https://files.pythonhosted.org/packages/23/c4/a8a2ca21e3943555b48221f8fba546877a7ad39efaf6505506524967d7c4/ast_serialize-0.13.1-cp315-abi3.abi3t-macosx_11_0_arm64.whl", hash = "sha256:68f8829d114dab6c9db4a8bbb8d0e342958faee1b5e15a29022678df639960f8", size = 1222214, upload-time = "2026-10-17T00:03:23.462Z" }, + { url = "https://files.pythonhosted.org/packages/15/19/2f58f2ba64e4799b39de85c140aef09a03aa6ea53be75dd292a9d9b9d8ae/ast_serialize-0.13.1-cp315-abi3.abi3t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e385b17d5bde892a6184003a9aff3518387908b73f8f5ea539313c07c8c0ede", size = 1282979, upload-time = "2026-10-17T00:03:24.695Z" }, + { url = "https://files.pythonhosted.org/packages/b1/af/ca6087fe84210c1ccd43e3182917bb70649fa1e69745a90c1d59ba08fea8/ast_serialize-0.13.1-cp315-abi3.abi3t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:02686b281ec9b8e9614f6f0db27e12e4cac515f336c5d05b678bc9eb73ff2af5", size = 1288596, upload-time = "2026-10-17T00:03:26.04Z" }, + { url = "https://files.pythonhosted.org/packages/b0/2c/4ef964c763329a0347125e745ec0451ba4fbaceec9efe2ac729b7cd55f17/ast_serialize-0.13.1-cp315-abi3.abi3t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8ab2c2585b2e22e48cd4aff2136fce4eab4ced569b85f150ef9a5a5d6f34d49", size = 1545540, upload-time = "2026-10-17T00:03:27.52Z" }, + { url = "https://files.pythonhosted.org/packages/bb/85/aa961dbb75813cfa94de0ce9a16a9510c226b95f604c405421e727f44bb0/ast_serialize-0.13.1-cp315-abi3.abi3t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c652d9f5d52d8b81eff3ff2c95c9dd0f281de45f6ad5d3fa95527550c396454a", size = 1309374, upload-time = "2026-10-17T00:03:29.091Z" }, + { url = "https://files.pythonhosted.org/packages/b4/e6/f2b67c327d9f9533e41791804403ccc2dc457821195a2e51f0b587a90b90/ast_serialize-0.13.1-cp315-abi3.abi3t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:121e1d08d58b75c15491cc3003609cbad71ac2b0016043c36d30a6b2032b6605", size = 1303466, upload-time = "2026-10-17T00:03:30.451Z" }, + { url = "https://files.pythonhosted.org/packages/73/1d/33f18b81d1bb1f5d682943ea92fda8130a6593627f12f6201668d40824fd/ast_serialize-0.13.1-cp315-abi3.abi3t-manylinux_2_31_riscv64.whl", hash = "sha256:30cf89b6a6844542d116c758725d13de5b97b9410a51ee577715f761270d0c1c", size = 1300576, upload-time = "2026-10-17T00:03:32.102Z" }, + { url = "https://files.pythonhosted.org/packages/25/cb/64914144925f1a4abdd9217e717b122255c38fc5ebe4342f92052f3bacbc/ast_serialize-0.13.1-cp315-abi3.abi3t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:732aaae9e498c973fc63fd7f308009b57c4afa6ff59d0b674d894e57d0bca01a", size = 1355960, upload-time = "2026-10-17T00:03:33.676Z" }, + { url = "https://files.pythonhosted.org/packages/ee/80/bd29379fab2bce19adc0bf9177002b11b23dfe8d8fecf409998b458b4624/ast_serialize-0.13.1-cp315-abi3.abi3t-musllinux_1_2_aarch64.whl", hash = "sha256:d9c1a920b2aa0c1e016bed7721689717034ca0dba64ac3a3ff243b003d4e8dd8", size = 1459779, upload-time = "2026-10-17T00:03:35.09Z" }, + { url = "https://files.pythonhosted.org/packages/83/89/012dbe733de05ffdf8e40ca0f9fa5d417cb16ec93a74463c57c001914198/ast_serialize-0.13.1-cp315-abi3.abi3t-musllinux_1_2_armv7l.whl", hash = "sha256:847cad4c22953823f5e76d0b126c6f9da670cfa45b1df41b9324e22189d77611", size = 1563399, upload-time = "2026-10-17T00:03:37.285Z" }, + { url = "https://files.pythonhosted.org/packages/69/37/ee4bcb0358bee38744eb0f18560446572d095fe3bf6b63d6f739d08a839c/ast_serialize-0.13.1-cp315-abi3.abi3t-musllinux_1_2_i686.whl", hash = "sha256:aca07de3ca8e3d9f2b716c3c31f4f384fe4bd2d03e09912417cff7a3e08036f7", size = 1558808, upload-time = "2026-10-17T00:03:38.711Z" }, + { url = "https://files.pythonhosted.org/packages/54/1c/ff44c5355251d61ef22934c4430bb31a61de4781d25a992154aac9b8c82a/ast_serialize-0.13.1-cp315-abi3.abi3t-musllinux_1_2_ppc64le.whl", hash = "sha256:5db12d843d931b9d1f1519ce66b9cbfe72d8563b75c1204d255322254d1964dd", size = 1666324, upload-time = "2026-10-17T00:03:40.376Z" }, + { url = "https://files.pythonhosted.org/packages/c8/bb/6da4bfc8aa3403e6447607131bf3463acaf954d990c6c8b6787c1902ddfe/ast_serialize-0.13.1-cp315-abi3.abi3t-musllinux_1_2_riscv64.whl", hash = "sha256:fb8021f4dc3296de18737e3b8b34994411da725374d74a0b9eb32a738f2a23d0", size = 1474089, upload-time = "2026-10-17T00:03:41.715Z" }, + { url = "https://files.pythonhosted.org/packages/21/97/897e33bef2eefd880e6350e375cc66bc5bcd00a139be480fd655f5b3f095/ast_serialize-0.13.1-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl", hash = "sha256:0d764913374ba21df8cd618045b371ed104ce55c6276de7c59e554a4f5ba26fd", size = 1501542, upload-time = "2026-10-17T00:03:43.08Z" }, + { url = "https://files.pythonhosted.org/packages/8d/4c/821211ac83870c27e4412381b7c7838336456b40575bf840e4680b2018d9/ast_serialize-0.13.1-cp315-abi3.abi3t-win32.whl", hash = "sha256:2bad302ae2427454ef9dab71bd5c3ad67188860c39d36daee38f72031edb39c4", size = 1126118, upload-time = "2026-10-17T00:03:44.616Z" }, + { url = "https://files.pythonhosted.org/packages/1f/86/2b2d5e6c4fa352874a80618e742ffd32d249dee6c119f4233b51afc6b8f4/ast_serialize-0.13.1-cp315-abi3.abi3t-win_amd64.whl", hash = "sha256:032b09d86c785c3984e975378b7861f2a68ac44e22ba7b07b93a536b2524eeb8", size = 1163766, upload-time = "2026-10-17T00:03:45.986Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/d610cfcdabaa44fd62a54ca1fc57a7dba120643798b089a14914973562de/ast_serialize-0.13.1-cp315-abi3.abi3t-win_arm64.whl", hash = "sha256:929eda0c419e622ab49df3a4c45f81c57dcc10874bbad55d0470a4a03324dac3", size = 1134043, upload-time = "2026-10-17T00:03:48.453Z" }, + { url = "https://files.pythonhosted.org/packages/f0/89/0e30f9eddf7d44ccf9d25979030754fd0457af61fa4279acb8c293a04f97/ast_serialize-0.13.1-cp315-cp315-pyemscripten_2026_5_wasm32.whl", hash = "sha256:bf53a3ba1cbe45399fc1e4ccd684b8f2a11cca450f89706b79122f478534c6f5", size = 897546, upload-time = "2026-10-17T00:03:50.093Z" }, + { url = "https://files.pythonhosted.org/packages/81/92/d705be88ff452b9ba0088b554a0cbd308fd01879da092b33fd2ad7d1aa60/ast_serialize-0.13.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:4bcf1d5f4eefecaa325a34ecf079b2741189e7d0821523f92cb343a389a67489", size = 1242416, upload-time = "2026-10-17T00:03:51.521Z" }, + { url = "https://files.pythonhosted.org/packages/60/c2/98370845a7f35cb8a25782e78284b48e01bf3128339881d48d613f304f8f/ast_serialize-0.13.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:1b158f1c9e3a0d386913924c57995d6df78224868a4d0f215bdd41587c97b34a", size = 1229729, upload-time = "2026-10-17T00:03:52.825Z" }, + { url = "https://files.pythonhosted.org/packages/d8/8b/2d7ffed76addd9d3fcf37fb171400942735c8912264c763561a85407f6a8/ast_serialize-0.13.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77a6201b69ce42e919f2fd9a559138d5410b5d8afff7c3a6b1f500b0481ff7d8", size = 1292255, upload-time = "2026-10-17T00:03:54.148Z" }, + { url = "https://files.pythonhosted.org/packages/6b/2a/bb9e0e719d89cc950fadfcfcc9cb4bc7640419c4228c852f031ab8abf440/ast_serialize-0.13.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eb0be64c9b8f1ed26637eef345abe75ea90351c92c85a8aec7838b3af971011", size = 1298501, upload-time = "2026-10-17T00:03:55.559Z" }, + { url = "https://files.pythonhosted.org/packages/7a/32/13ce07dce48226f5bd9cfd8f708ec101a8be05aa430cda4918ce31ce8c82/ast_serialize-0.13.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f2427bddfca208e84de700044fadf9aef2769a70bae740a1bdabb89ee9e1117", size = 1553758, upload-time = "2026-10-17T00:03:56.952Z" }, + { url = "https://files.pythonhosted.org/packages/e2/fb/9b51d186db0c20ca28cbaaefd50f03b573c89327b9a2627820cbce22196b/ast_serialize-0.13.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88df960e67184a71874e5b2ee014f87d1254a0dbc1f903c7bd7b1ab7733ecaef", size = 1318258, upload-time = "2026-10-17T00:03:58.418Z" }, + { url = "https://files.pythonhosted.org/packages/c5/fa/da311559dd3dae9af5825cf21660775a929b970f72e3786af3f2cd667944/ast_serialize-0.13.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f99786e0d62082a5b121b3437f3167562133711df22128de1e9886f57f0b226", size = 1313260, upload-time = "2026-10-17T00:04:00.194Z" }, + { url = "https://files.pythonhosted.org/packages/2b/11/97a4b9e5b4776d72f47fcd9a09a497bbf68ec8c1ae074307a2c51e410d85/ast_serialize-0.13.1-cp39-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:a01b515b25a03184eff4acef25b981ae007916379682e908fc8785b342a0bf3e", size = 1309992, upload-time = "2026-10-17T00:04:01.575Z" }, + { url = "https://files.pythonhosted.org/packages/2e/c4/62f85121a80cd451ef04f550cf0f7ea0ad9ff46cc4e9a5b9ae439b6527b1/ast_serialize-0.13.1-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:29422d7bcd9e7f39411571c36cec45ce8a7a9b3ad4b2e7aa64497c15a9e397f6", size = 1362715, upload-time = "2026-10-17T00:04:02.881Z" }, + { url = "https://files.pythonhosted.org/packages/c1/fa/c5f4a545f72a7681e3295bab6e3600ee0862ec4391bed961fe9f735b67e0/ast_serialize-0.13.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6ffb0f548a7dc126067fdfb7b2325ab5dfcdeecc29faf5e0f0461c96d6ebfa3d", size = 1469931, upload-time = "2026-10-17T00:04:04.181Z" }, + { url = "https://files.pythonhosted.org/packages/38/a9/65aed4f8fa7a001a7cfdc03e68e844517ab041ba6fb614b7d78a1d6ac056/ast_serialize-0.13.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:2876444a5f87a7c76f371af3c07c2fda563a08bc8af52568df812e8aba4bf568", size = 1570945, upload-time = "2026-10-17T00:04:05.778Z" }, + { url = "https://files.pythonhosted.org/packages/fb/8c/44b2da991cede79bfbf52089f33a5f0168945466b3d9cd38b5dcf08e7130/ast_serialize-0.13.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:885a62ec6481ce58ab24c6357360d7a82023b62dd7e5e7ceccf59e9662a3272b", size = 1569978, upload-time = "2026-10-17T00:04:07.347Z" }, + { url = "https://files.pythonhosted.org/packages/46/e4/109b2a5beca700237767d5add920c2f8e1ba9bd5799b0faf143d0e9cf4ef/ast_serialize-0.13.1-cp39-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:2015fd0165e463aac3b1aadc6a1fa1e5820c14ca950821f4fe02f8a3f6a388d6", size = 1676082, upload-time = "2026-10-17T00:04:08.7Z" }, + { url = "https://files.pythonhosted.org/packages/73/e0/7df70f6dbb11b5762da5416318f08316a1c51348e0d69ec79ca5f98f836a/ast_serialize-0.13.1-cp39-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:eb41e1906502ac80d24ff343f45008552a3f5b5158607959fe6a07dbfc6eb037", size = 1483207, upload-time = "2026-10-17T00:04:10.162Z" }, + { url = "https://files.pythonhosted.org/packages/1f/bc/523aa1c08bd69b5654621beb3dc1a9035715a4a63762fb8d219d6fb3eb81/ast_serialize-0.13.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ca9acc67f796aa2554fa3037dccc022a4b08b38b2ad153edfac9c9bb7cb1f3c6", size = 1512140, upload-time = "2026-10-17T00:04:11.589Z" }, + { url = "https://files.pythonhosted.org/packages/66/83/6607060659998f00afdea0d8375c1e6e2b7d515ab905090d9a5a02f48851/ast_serialize-0.13.1-cp39-abi3-win32.whl", hash = "sha256:4f98da562e5901d69c7dd30885594c5438f859edf354e9ac7517d188fb026c3a", size = 1131889, upload-time = "2026-10-17T00:04:12.953Z" }, + { url = "https://files.pythonhosted.org/packages/9f/6f/bafd6490fe7b355627fabe95f4417e3d02da93102c8552550eb9a0774e1e/ast_serialize-0.13.1-cp39-abi3-win_amd64.whl", hash = "sha256:ddf7cbc9c8abf70102c4a088efe154bb86bfb825b0a10e556d2b15972cf99bd7", size = 1171153, upload-time = "2026-10-17T00:04:14.362Z" }, + { url = "https://files.pythonhosted.org/packages/11/25/4235f4b375a67a37ac595bf478a5407a744eaf7b64113c1c3a5432b8d954/ast_serialize-0.13.1-cp39-abi3-win_arm64.whl", hash = "sha256:48f11d96c9ec71119612f8e79a8c55c12f2b136716d68347433c561d27a25f43", size = 1139035, upload-time = "2026-10-17T00:04:15.767Z" }, +] + [[package]] name = "async-timeout" version = "5.0.1" @@ -160,7 +225,7 @@ wheels = [ [[package]] name = "bandit" -version = "1.9.3" +version = "1.9.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -168,9 +233,9 @@ dependencies = [ { name = "rich" }, { name = "stevedore" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/89/76/a7f3e639b78601118aaa4a394db2c66ae2597fbd8c39644c32874ed11e0c/bandit-1.9.3.tar.gz", hash = "sha256:ade4b9b7786f89ef6fc7344a52b34558caec5da74cb90373aed01de88472f774", size = 4242154, upload-time = "2026-01-19T04:05:22.802Z" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c3/0cb80dfe0f3076e5da7e4c5ad8e57bac6ac357ff4a6406205501cade4965/bandit-1.9.4.tar.gz", hash = "sha256:b589e5de2afe70bd4d53fa0c1da6199f4085af666fde00e8a034f152a52cd628", size = 4242677, upload-time = "2026-02-25T06:44:15.503Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/0b/8bdc52111c83e2dc2f97403dc87c0830b8989d9ae45732b34b686326fb2c/bandit-1.9.3-py3-none-any.whl", hash = "sha256:4745917c88d2246def79748bde5e08b9d5e9b92f877863d43fab70cd8814ce6a", size = 134451, upload-time = "2026-01-19T04:05:20.938Z" }, + { url = "https://files.pythonhosted.org/packages/05/a4/a26d5b25671d27e03afb5401a0be5899d94ff8fab6a698b1ac5be3ec29ef/bandit-1.9.4-py3-none-any.whl", hash = "sha256:f89ffa663767f5a0585ea075f01020207e966a9c0f2b9ef56a57c7963a3f6f8e", size = 134741, upload-time = "2026-02-25T06:44:13.694Z" }, ] [[package]] @@ -420,11 +485,11 @@ wheels = [ [[package]] name = "codespell" -version = "2.4.1" +version = "2.4.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/e0/709453393c0ea77d007d907dd436b3ee262e28b30995ea1aa36c6ffbccaf/codespell-2.4.1.tar.gz", hash = "sha256:299fcdcb09d23e81e35a671bbe746d5ad7e8385972e65dbb833a2eaac33c01e5", size = 344740, upload-time = "2025-01-28T18:52:39.411Z" } +sdist = { url = "https://files.pythonhosted.org/packages/80/19/45e941380f69c042b43423513d201e6592346f992394347f5e7174c31407/codespell-2.4.3.tar.gz", hash = "sha256:cbe085e331227b37bb86ef8bddd08dc768c704ee9a07ca869852c093fa2793e2", size = 352773, upload-time = "2026-07-15T11:51:54.159Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/01/b394922252051e97aab231d416c86da3d8a6d781eeadcdca1082867de64e/codespell-2.4.1-py3-none-any.whl", hash = "sha256:3dadafa67df7e4a3dbf51e0d7315061b80d265f9552ebd699b3dd6834b47e425", size = 344501, upload-time = "2025-01-28T18:52:37.057Z" }, + { url = "https://files.pythonhosted.org/packages/8b/bf/bdb951d34eb169140b546f44be9ec4525d1acefb9eb5572071f5492b19fc/codespell-2.4.3-py3-none-any.whl", hash = "sha256:af2505b335e8573dbd2d384d1c4ef498f4006f4ba2d6fceca01e55b91f52628a", size = 340736, upload-time = "2026-07-15T11:51:52.925Z" }, ] [[package]] @@ -788,19 +853,20 @@ pydantic = [ [[package]] name = "fastapi" -version = "0.140.0" +version = "0.162.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-doc" }, + { name = "opentelemetry-api" }, { name = "pydantic" }, { name = "starlette" }, { name = "typing-extensions", version = "4.15.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, { name = "typing-extensions", version = "4.16.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0d/fb/fd7671137d9fa3df1d93a2f5111eb982709201724b29f211e4beb2d58688/fastapi-0.140.0.tar.gz", hash = "sha256:f338951b82fd74ca8f843163aec43ea1a1ce84d515415a50fa98fa25572a5544", size = 420968, upload-time = "2026-07-24T21:16:41.187Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e9/eb/2cf8c80abf09b2800aef0a83b41066fbfda8ee5495b7a08b9d1af40f7046/fastapi-0.162.0.tar.gz", hash = "sha256:6a22c1e2e6e32e0633ee7e170f00009a29b8228b16feb219ee42f32fd8d88a8f", size = 527867, upload-time = "2026-10-23T18:47:33.264Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/76/6d9e25ad88da9d3ff744bcdbec4736e38c2288611d43f673a5d9bfa27c07/fastapi-0.140.0-py3-none-any.whl", hash = "sha256:e951c0a0d9540bf5d9a2a9e078fd415da2ab7e312d435139e7d9e2e7fe9f0b23", size = 130863, upload-time = "2026-07-24T21:16:42.89Z" }, + { url = "https://files.pythonhosted.org/packages/b4/4f/3f2c25c9b43970b5e9a08beb5e04776247edea684ddc0930f4f02f0bb6cb/fastapi-0.162.0-py3-none-any.whl", hash = "sha256:3785963de305dd09912426cb81f2d230fce98ab3521cdfe97265c8d14983128c", size = 148912, upload-time = "2026-10-23T18:47:31.734Z" }, ] [[package]] @@ -890,7 +956,6 @@ dev = [ { name = "pytest-xdist" }, { name = "pyyaml" }, { name = "ruff" }, - { name = "setuptools" }, { name = "shellcheck-py" }, { name = "slotscheck" }, { name = "syrupy" }, @@ -900,7 +965,6 @@ dev = [ { name = "types-pygments" }, { name = "types-pyyaml" }, { name = "types-redis" }, - { name = "types-setuptools" }, { name = "uvicorn" }, { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'" }, { name = "zizmor" }, @@ -938,7 +1002,6 @@ lint = [ { name = "types-pygments" }, { name = "types-pyyaml" }, { name = "types-redis" }, - { name = "types-setuptools" }, { name = "zizmor" }, ] optionals = [ @@ -1003,91 +1066,89 @@ provides-extras = ["rabbit", "kafka", "confluent", "nats", "redis", "mqtt", "cli [package.metadata.requires-dev] dev = [ - { name = "actionlint-py", specifier = "==1.7.12.24" }, - { name = "bandit", specifier = "==1.9.3" }, + { name = "actionlint-py", specifier = "==1.7.12.25" }, + { name = "bandit", specifier = "==1.9.4" }, { name = "cairosvg", marker = "python_full_version >= '3.11'" }, - { name = "codespell", specifier = "==2.4.1" }, - { name = "covdefaults", specifier = ">=2.3.0" }, + { name = "codespell", specifier = "==2.4.3" }, + { name = "covdefaults", specifier = "==2.3.0" }, { name = "detect-secrets", specifier = "==1.5.0" }, { name = "dirty-equals", specifier = "==0.11" }, { name = "email-validator", specifier = "==2.3.0" }, - { name = "fastapi", specifier = "==0.140.0" }, + { name = "fastapi", specifier = "==0.162.0" }, { name = "faststream", extras = ["rabbit", "kafka", "confluent", "nats", "redis", "mqtt", "otel", "cli", "prometheus"] }, - { name = "freezegun", specifier = ">=1.5.5" }, - { name = "griffe", marker = "python_full_version >= '3.11'", specifier = "==1.15.0" }, + { name = "freezegun", specifier = "==1.5.5" }, + { name = "griffe", marker = "python_full_version >= '3.11'", specifier = "==2.4.1" }, { name = "httpx2", specifier = "==2.14.0" }, { name = "httpx2", marker = "python_full_version >= '3.11'", specifier = "==2.14.0" }, { name = "import-linter", specifier = "==2.15" }, { name = "mdx-include", marker = "python_full_version >= '3.11'", specifier = "==1.4.2" }, - { name = "mike", marker = "python_full_version >= '3.11'", specifier = "==2.1.3" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "python_full_version >= '3.11'", specifier = "==1.5.1" }, + { name = "mike", marker = "python_full_version >= '3.11'", specifier = "==2.2.0" }, + { name = "mkdocs-git-revision-date-localized-plugin", marker = "python_full_version >= '3.11'", specifier = "==1.6.0" }, { name = "mkdocs-glightbox", marker = "python_full_version >= '3.11'", specifier = "==0.5.2" }, - { name = "mkdocs-literate-nav", marker = "python_full_version >= '3.11'", specifier = "==0.6.2" }, + { name = "mkdocs-literate-nav", marker = "python_full_version >= '3.11'", specifier = "==0.6.3" }, { name = "mkdocs-macros-plugin", marker = "python_full_version >= '3.11'", specifier = "==1.5.0" }, - { name = "mkdocs-material", marker = "python_full_version >= '3.11'", specifier = "==9.7.7" }, + { name = "mkdocs-material", marker = "python_full_version >= '3.11'", specifier = "==9.8.0" }, { name = "mkdocs-minify-plugin", marker = "python_full_version >= '3.11'", specifier = "==0.8.0" }, { name = "mkdocstrings", extras = ["python"], marker = "python_full_version >= '3.11'", specifier = "==1.0.8" }, { name = "msgspec" }, - { name = "mypy", specifier = "==1.19.1" }, + { name = "mypy", specifier = "==2.4.0" }, { name = "nkeys" }, - { name = "opentelemetry-sdk", specifier = ">=1.24.0,<2.0.0" }, + { name = "opentelemetry-sdk", specifier = "==1.45.1" }, { name = "pillow", marker = "python_full_version >= '3.11'" }, - { name = "pre-commit", specifier = "==4.5.1" }, - { name = "prometheus-client", specifier = ">=0.20.0,<0.30.0" }, + { name = "pre-commit", specifier = "==4.6.2" }, + { name = "prometheus-client", specifier = "==0.26.0" }, { name = "psutil", specifier = "==7.2.2" }, { name = "pydantic-settings", specifier = ">=2.0.0,<3.0.0" }, { name = "pymdown-extensions", marker = "python_full_version >= '3.11'", specifier = "==12.3" }, - { name = "pyrefly", specifier = "==1.3.1" }, - { name = "pyright", specifier = "==1.1.407" }, - { name = "pytest", specifier = "==9.0.3" }, - { name = "pytest-asyncio", specifier = "==1.3.0" }, - { name = "pytest-codspeed", specifier = ">=4.3.0" }, - { name = "pytest-cov", specifier = ">=6.2.1" }, - { name = "pytest-rerunfailures", specifier = ">=15.1" }, - { name = "pytest-timeout", specifier = ">=2.4.0" }, - { name = "pytest-xdist", specifier = ">=3.8.0" }, + { name = "pyrefly", specifier = "==1.4.0" }, + { name = "pyright", specifier = "==1.1.414" }, + { name = "pytest", specifier = "==9.1.1" }, + { name = "pytest-asyncio", specifier = "==1.4.0" }, + { name = "pytest-codspeed", specifier = "==5.0.3" }, + { name = "pytest-cov", specifier = "==6.2.1" }, + { name = "pytest-rerunfailures", specifier = "==16.7" }, + { name = "pytest-timeout", specifier = "==2.4.0" }, + { name = "pytest-xdist", specifier = "==3.8.0" }, { name = "pyyaml", specifier = "==6.0.3" }, - { name = "ruff", specifier = "==0.14.14" }, - { name = "setuptools", specifier = ">=80.9.0" }, + { name = "ruff", specifier = "==0.17.2" }, { name = "shellcheck-py", specifier = "==0.11.0.1" }, { name = "slotscheck", specifier = "==0.21.0" }, - { name = "syrupy", specifier = "==6.0.0" }, + { name = "syrupy", specifier = "==6.1.1" }, { name = "types-aiofiles" }, { name = "types-deprecated" }, { name = "types-docutils" }, { name = "types-pygments" }, { name = "types-pyyaml" }, { name = "types-redis" }, - { name = "types-setuptools" }, - { name = "uvicorn", specifier = ">=0.34.3" }, + { name = "uvicorn", specifier = "==0.54.0" }, { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'", specifier = ">=0.15.1" }, { name = "zizmor", specifier = "==1.22.0" }, ] docs = [ { name = "cairosvg", marker = "python_full_version >= '3.11'" }, - { name = "griffe", marker = "python_full_version >= '3.11'", specifier = "==1.15.0" }, + { name = "griffe", marker = "python_full_version >= '3.11'", specifier = "==2.4.1" }, { name = "httpx2", marker = "python_full_version >= '3.11'", specifier = "==2.14.0" }, { name = "mdx-include", marker = "python_full_version >= '3.11'", specifier = "==1.4.2" }, - { name = "mike", marker = "python_full_version >= '3.11'", specifier = "==2.1.3" }, - { name = "mkdocs-git-revision-date-localized-plugin", marker = "python_full_version >= '3.11'", specifier = "==1.5.1" }, + { name = "mike", marker = "python_full_version >= '3.11'", specifier = "==2.2.0" }, + { name = "mkdocs-git-revision-date-localized-plugin", marker = "python_full_version >= '3.11'", specifier = "==1.6.0" }, { name = "mkdocs-glightbox", marker = "python_full_version >= '3.11'", specifier = "==0.5.2" }, - { name = "mkdocs-literate-nav", marker = "python_full_version >= '3.11'", specifier = "==0.6.2" }, + { name = "mkdocs-literate-nav", marker = "python_full_version >= '3.11'", specifier = "==0.6.3" }, { name = "mkdocs-macros-plugin", marker = "python_full_version >= '3.11'", specifier = "==1.5.0" }, - { name = "mkdocs-material", marker = "python_full_version >= '3.11'", specifier = "==9.7.7" }, + { name = "mkdocs-material", marker = "python_full_version >= '3.11'", specifier = "==9.8.0" }, { name = "mkdocs-minify-plugin", marker = "python_full_version >= '3.11'", specifier = "==0.8.0" }, { name = "mkdocstrings", extras = ["python"], marker = "python_full_version >= '3.11'", specifier = "==1.0.8" }, { name = "pillow", marker = "python_full_version >= '3.11'" }, { name = "pymdown-extensions", marker = "python_full_version >= '3.11'", specifier = "==12.3" }, ] lint = [ - { name = "actionlint-py", specifier = "==1.7.12.24" }, - { name = "bandit", specifier = "==1.9.3" }, - { name = "codespell", specifier = "==2.4.1" }, + { name = "actionlint-py", specifier = "==1.7.12.25" }, + { name = "bandit", specifier = "==1.9.4" }, + { name = "codespell", specifier = "==2.4.3" }, { name = "import-linter", specifier = "==2.15" }, - { name = "mypy", specifier = "==1.19.1" }, - { name = "pyrefly", specifier = "==1.3.1" }, - { name = "pyright", specifier = "==1.1.407" }, - { name = "ruff", specifier = "==0.14.14" }, + { name = "mypy", specifier = "==2.4.0" }, + { name = "pyrefly", specifier = "==1.4.0" }, + { name = "pyright", specifier = "==1.1.414" }, + { name = "ruff", specifier = "==0.17.2" }, { name = "shellcheck-py", specifier = "==0.11.0.1" }, { name = "slotscheck", specifier = "==0.21.0" }, { name = "types-aiofiles" }, @@ -1096,45 +1157,44 @@ lint = [ { name = "types-pygments" }, { name = "types-pyyaml" }, { name = "types-redis" }, - { name = "types-setuptools" }, { name = "zizmor", specifier = "==1.22.0" }, ] optionals = [{ name = "faststream", extras = ["rabbit", "kafka", "confluent", "nats", "redis", "mqtt", "otel", "cli", "prometheus"] }] test-core = [ - { name = "covdefaults", specifier = ">=2.3.0" }, + { name = "covdefaults", specifier = "==2.3.0" }, { name = "dirty-equals", specifier = "==0.11" }, - { name = "freezegun", specifier = ">=1.5.5" }, + { name = "freezegun", specifier = "==1.5.5" }, { name = "httpx2", specifier = "==2.14.0" }, - { name = "pytest", specifier = "==9.0.3" }, - { name = "pytest-asyncio", specifier = "==1.3.0" }, - { name = "pytest-cov", specifier = ">=6.2.1" }, - { name = "pytest-rerunfailures", specifier = ">=15.1" }, - { name = "pytest-timeout", specifier = ">=2.4.0" }, - { name = "pytest-xdist", specifier = ">=3.8.0" }, - { name = "syrupy", specifier = "==6.0.0" }, + { name = "pytest", specifier = "==9.1.1" }, + { name = "pytest-asyncio", specifier = "==1.4.0" }, + { name = "pytest-cov", specifier = "==6.2.1" }, + { name = "pytest-rerunfailures", specifier = "==16.7" }, + { name = "pytest-timeout", specifier = "==2.4.0" }, + { name = "pytest-xdist", specifier = "==3.8.0" }, + { name = "syrupy", specifier = "==6.1.1" }, ] testing = [ - { name = "covdefaults", specifier = ">=2.3.0" }, + { name = "covdefaults", specifier = "==2.3.0" }, { name = "dirty-equals", specifier = "==0.11" }, { name = "email-validator", specifier = "==2.3.0" }, - { name = "fastapi", specifier = "==0.140.0" }, - { name = "freezegun", specifier = ">=1.5.5" }, + { name = "fastapi", specifier = "==0.162.0" }, + { name = "freezegun", specifier = "==1.5.5" }, { name = "httpx2", specifier = "==2.14.0" }, { name = "msgspec" }, { name = "nkeys" }, - { name = "opentelemetry-sdk", specifier = ">=1.24.0,<2.0.0" }, - { name = "prometheus-client", specifier = ">=0.20.0,<0.30.0" }, + { name = "opentelemetry-sdk", specifier = "==1.45.1" }, + { name = "prometheus-client", specifier = "==0.26.0" }, { name = "psutil", specifier = "==7.2.2" }, { name = "pydantic-settings", specifier = ">=2.0.0,<3.0.0" }, - { name = "pytest", specifier = "==9.0.3" }, - { name = "pytest-asyncio", specifier = "==1.3.0" }, - { name = "pytest-cov", specifier = ">=6.2.1" }, - { name = "pytest-rerunfailures", specifier = ">=15.1" }, - { name = "pytest-timeout", specifier = ">=2.4.0" }, - { name = "pytest-xdist", specifier = ">=3.8.0" }, + { name = "pytest", specifier = "==9.1.1" }, + { name = "pytest-asyncio", specifier = "==1.4.0" }, + { name = "pytest-cov", specifier = "==6.2.1" }, + { name = "pytest-rerunfailures", specifier = "==16.7" }, + { name = "pytest-timeout", specifier = "==2.4.0" }, + { name = "pytest-xdist", specifier = "==3.8.0" }, { name = "pyyaml", specifier = "==6.0.3" }, - { name = "syrupy", specifier = "==6.0.0" }, - { name = "uvicorn", specifier = ">=0.34.3" }, + { name = "syrupy", specifier = "==6.1.1" }, + { name = "uvicorn", specifier = "==0.54.0" }, { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'", specifier = ">=0.15.1" }, ] @@ -1197,23 +1257,37 @@ wheels = [ [[package]] name = "griffe" -version = "1.15.0" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "griffecli" }, + { name = "griffelib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/a4/be055b9ced02e39ac0ab85960e0ed3d8c6017c03e90965e77ff276684418/griffe-2.4.1.tar.gz", hash = "sha256:766123e26ec35b2ead63202e9e43ec309d876085d571b7df288256cd6fe4a3ef", size = 450805, upload-time = "2026-10-22T11:20:02.532Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/93/67a1814b4b13e9a5cc02510dbfa1d3937603140192a701c96d861b272611/griffe-2.4.1-py3-none-any.whl", hash = "sha256:ca58ccdb1d8590ad062fad837a875dd704f94acf7a0104795a098a991ceaf728", size = 5100, upload-time = "2026-10-22T11:19:58.365Z" }, +] + +[[package]] +name = "griffecli" +version = "2.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama" }, + { name = "griffelib" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0d/0c/3a471b6e31951dce2360477420d0a8d1e00dea6cf33b70f3e8c3ab6e28e1/griffe-1.15.0.tar.gz", hash = "sha256:7726e3afd6f298fbc3696e67958803e7ac843c1cfe59734b6251a40cdbfb5eea", size = 424112, upload-time = "2025-11-10T15:03:15.52Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/8e/d3130e17ae27c900f8f76c96ceb2f02edfe0c7db0366b49e033f81ff81d7/griffecli-2.4.1.tar.gz", hash = "sha256:6db9acad984990b08c833ab5ec73d5a604e317b2290074d04c91ca9e52d35a7b", size = 61762, upload-time = "2026-10-22T11:20:01.054Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/83/3b1d03d36f224edded98e9affd0467630fc09d766c0e56fb1498cbb04a9b/griffe-1.15.0-py3-none-any.whl", hash = "sha256:6f6762661949411031f5fcda9593f586e6ce8340f0ba88921a0f2ef7a81eb9a3", size = 150705, upload-time = "2025-11-10T15:03:13.549Z" }, + { url = "https://files.pythonhosted.org/packages/3f/dc/5cdbbbfd1a9e8c0e9b6b8b6e6d839e67f82cb138b77cf74856e5b80527de/griffecli-2.4.1-py3-none-any.whl", hash = "sha256:1678938e7b75a0aa34d3e408d550707a192f5297c3005aa0f92660648c30bc0a", size = 11774, upload-time = "2026-10-22T11:19:57.134Z" }, ] [[package]] name = "griffelib" -version = "2.0.2" +version = "2.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9d/82/74f4a3310cdabfbb10da554c3a672847f1ed33c6f61dd472681ce7f1fe67/griffelib-2.0.2.tar.gz", hash = "sha256:3cf20b3bc470e83763ffbf236e0076b1211bac1bc67de13daf494640f2de707e", size = 166461, upload-time = "2026-03-27T11:34:51.091Z" } +sdist = { url = "https://files.pythonhosted.org/packages/36/e2/0f5d8ed08766bc6dcd3eebf5a6623d83cbca33a6e4c90aef57156ce745ad/griffelib-2.4.1.tar.gz", hash = "sha256:40c028dd2e623f464423f0e11e3c553158f1cf4f1368239a370534d73e1407ff", size = 245153, upload-time = "2026-10-22T11:20:03.705Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl", hash = "sha256:925c857658fb1ba40c0772c37acbc2ab650bd794d9c1b9726922e36ea4117ea1", size = 142357, upload-time = "2026-03-27T11:34:46.275Z" }, + { url = "https://files.pythonhosted.org/packages/de/02/1156d5f5307f573b901b14373848b84e69ca6cab09169b8cc97d16a181f9/griffelib-2.4.1-py3-none-any.whl", hash = "sha256:76bc562f936ad1ce198d2cf6d0731bd5c92a7d934b69ef828ef22ee0ffdb62ce", size = 172983, upload-time = "2026-10-22T11:19:59.843Z" }, ] [[package]] @@ -1435,27 +1509,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/08/31/4571c20652a4002ed9e500046386f3731a77e23d95a608ae8a87f1fbb2da/import_linter-2.15-py3-none-any.whl", hash = "sha256:9aaf16a88ac1e99d5a464cd7f66b6a05f7060bfa761162e0ed441773a267ed3b", size = 640512, upload-time = "2026-09-04T14:47:54.878Z" }, ] -[[package]] -name = "importlib-metadata" -version = "8.7.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "zipp" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" }, -] - -[[package]] -name = "importlib-resources" -version = "6.5.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cf/8c/f834fbf984f691b4f7ff60f50b514cc3de5cc08abfc3295564dd89c5e2e7/importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c", size = 44693, upload-time = "2025-01-03T18:51:56.698Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec", size = 37461, upload-time = "2025-01-03T18:51:54.306Z" }, -] - [[package]] name = "iniconfig" version = "2.3.0" @@ -1485,87 +1538,132 @@ sdist = { url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f [[package]] name = "librt" -version = "0.8.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/56/9c/b4b0c54d84da4a94b37bd44151e46d5e583c9534c7e02250b961b1b6d8a8/librt-0.8.1.tar.gz", hash = "sha256:be46a14693955b3bd96014ccbdb8339ee8c9346fbe11c1b78901b55125f14c73", size = 177471, upload-time = "2026-02-17T16:13:06.101Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/5f/63f5fa395c7a8a93558c0904ba8f1c8d1b997ca6a3de61bc7659970d66bf/librt-0.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:81fd938344fecb9373ba1b155968c8a329491d2ce38e7ddb76f30ffb938f12dc", size = 65697, upload-time = "2026-02-17T16:11:06.903Z" }, - { url = "https://files.pythonhosted.org/packages/ff/e0/0472cf37267b5920eff2f292ccfaede1886288ce35b7f3203d8de00abfe6/librt-0.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5db05697c82b3a2ec53f6e72b2ed373132b0c2e05135f0696784e97d7f5d48e7", size = 68376, upload-time = "2026-02-17T16:11:08.395Z" }, - { url = "https://files.pythonhosted.org/packages/c8/be/8bd1359fdcd27ab897cd5963294fa4a7c83b20a8564678e4fd12157e56a5/librt-0.8.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d56bc4011975f7460bea7b33e1ff425d2f1adf419935ff6707273c77f8a4ada6", size = 197084, upload-time = "2026-02-17T16:11:09.774Z" }, - { url = "https://files.pythonhosted.org/packages/e2/fe/163e33fdd091d0c2b102f8a60cc0a61fd730ad44e32617cd161e7cd67a01/librt-0.8.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cdc0f588ff4b663ea96c26d2a230c525c6fc62b28314edaaaca8ed5af931ad0", size = 207337, upload-time = "2026-02-17T16:11:11.311Z" }, - { url = "https://files.pythonhosted.org/packages/01/99/f85130582f05dcf0c8902f3d629270231d2f4afdfc567f8305a952ac7f14/librt-0.8.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:97c2b54ff6717a7a563b72627990bec60d8029df17df423f0ed37d56a17a176b", size = 219980, upload-time = "2026-02-17T16:11:12.499Z" }, - { url = "https://files.pythonhosted.org/packages/6f/54/cb5e4d03659e043a26c74e08206412ac9a3742f0477d96f9761a55313b5f/librt-0.8.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8f1125e6bbf2f1657d9a2f3ccc4a2c9b0c8b176965bb565dd4d86be67eddb4b6", size = 212921, upload-time = "2026-02-17T16:11:14.484Z" }, - { url = "https://files.pythonhosted.org/packages/b1/81/a3a01e4240579c30f3487f6fed01eb4bc8ef0616da5b4ebac27ca19775f3/librt-0.8.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8f4bb453f408137d7581be309b2fbc6868a80e7ef60c88e689078ee3a296ae71", size = 221381, upload-time = "2026-02-17T16:11:17.459Z" }, - { url = "https://files.pythonhosted.org/packages/08/b0/fc2d54b4b1c6fb81e77288ff31ff25a2c1e62eaef4424a984f228839717b/librt-0.8.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c336d61d2fe74a3195edc1646d53ff1cddd3a9600b09fa6ab75e5514ba4862a7", size = 216714, upload-time = "2026-02-17T16:11:19.197Z" }, - { url = "https://files.pythonhosted.org/packages/96/96/85daa73ffbd87e1fb287d7af6553ada66bf25a2a6b0de4764344a05469f6/librt-0.8.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:eb5656019db7c4deacf0c1a55a898c5bb8f989be904597fcb5232a2f4828fa05", size = 214777, upload-time = "2026-02-17T16:11:20.443Z" }, - { url = "https://files.pythonhosted.org/packages/12/9c/c3aa7a2360383f4bf4f04d98195f2739a579128720c603f4807f006a4225/librt-0.8.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c25d9e338d5bed46c1632f851babf3d13c78f49a225462017cf5e11e845c5891", size = 237398, upload-time = "2026-02-17T16:11:22.083Z" }, - { url = "https://files.pythonhosted.org/packages/61/19/d350ea89e5274665185dabc4bbb9c3536c3411f862881d316c8b8e00eb66/librt-0.8.1-cp310-cp310-win32.whl", hash = "sha256:aaab0e307e344cb28d800957ef3ec16605146ef0e59e059a60a176d19543d1b7", size = 54285, upload-time = "2026-02-17T16:11:23.27Z" }, - { url = "https://files.pythonhosted.org/packages/4f/d6/45d587d3d41c112e9543a0093d883eb57a24a03e41561c127818aa2a6bcc/librt-0.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:56e04c14b696300d47b3bc5f1d10a00e86ae978886d0cee14e5714fafb5df5d2", size = 61352, upload-time = "2026-02-17T16:11:24.207Z" }, - { url = "https://files.pythonhosted.org/packages/1d/01/0e748af5e4fee180cf7cd12bd12b0513ad23b045dccb2a83191bde82d168/librt-0.8.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:681dc2451d6d846794a828c16c22dc452d924e9f700a485b7ecb887a30aad1fd", size = 65315, upload-time = "2026-02-17T16:11:25.152Z" }, - { url = "https://files.pythonhosted.org/packages/9d/4d/7184806efda571887c798d573ca4134c80ac8642dcdd32f12c31b939c595/librt-0.8.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3b4350b13cc0e6f5bec8fa7caf29a8fb8cdc051a3bae45cfbfd7ce64f009965", size = 68021, upload-time = "2026-02-17T16:11:26.129Z" }, - { url = "https://files.pythonhosted.org/packages/ae/88/c3c52d2a5d5101f28d3dc89298444626e7874aa904eed498464c2af17627/librt-0.8.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ac1e7817fd0ed3d14fd7c5df91daed84c48e4c2a11ee99c0547f9f62fdae13da", size = 194500, upload-time = "2026-02-17T16:11:27.177Z" }, - { url = "https://files.pythonhosted.org/packages/d6/5d/6fb0a25b6a8906e85b2c3b87bee1d6ed31510be7605b06772f9374ca5cb3/librt-0.8.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:747328be0c5b7075cde86a0e09d7a9196029800ba75a1689332348e998fb85c0", size = 205622, upload-time = "2026-02-17T16:11:28.242Z" }, - { url = "https://files.pythonhosted.org/packages/b2/a6/8006ae81227105476a45691f5831499e4d936b1c049b0c1feb17c11b02d1/librt-0.8.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0af2bd2bc204fa27f3d6711d0f360e6b8c684a035206257a81673ab924aa11e", size = 218304, upload-time = "2026-02-17T16:11:29.344Z" }, - { url = "https://files.pythonhosted.org/packages/ee/19/60e07886ad16670aae57ef44dada41912c90906a6fe9f2b9abac21374748/librt-0.8.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d480de377f5b687b6b1bc0c0407426da556e2a757633cc7e4d2e1a057aa688f3", size = 211493, upload-time = "2026-02-17T16:11:30.445Z" }, - { url = "https://files.pythonhosted.org/packages/9c/cf/f666c89d0e861d05600438213feeb818c7514d3315bae3648b1fc145d2b6/librt-0.8.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d0ee06b5b5291f609ddb37b9750985b27bc567791bc87c76a569b3feed8481ac", size = 219129, upload-time = "2026-02-17T16:11:32.021Z" }, - { url = "https://files.pythonhosted.org/packages/8f/ef/f1bea01e40b4a879364c031476c82a0dc69ce068daad67ab96302fed2d45/librt-0.8.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9e2c6f77b9ad48ce5603b83b7da9ee3e36b3ab425353f695cba13200c5d96596", size = 213113, upload-time = "2026-02-17T16:11:33.192Z" }, - { url = "https://files.pythonhosted.org/packages/9b/80/cdab544370cc6bc1b72ea369525f547a59e6938ef6863a11ab3cd24759af/librt-0.8.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:439352ba9373f11cb8e1933da194dcc6206daf779ff8df0ed69c5e39113e6a99", size = 212269, upload-time = "2026-02-17T16:11:34.373Z" }, - { url = "https://files.pythonhosted.org/packages/9d/9c/48d6ed8dac595654f15eceab2035131c136d1ae9a1e3548e777bb6dbb95d/librt-0.8.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:82210adabbc331dbb65d7868b105185464ef13f56f7f76688565ad79f648b0fe", size = 234673, upload-time = "2026-02-17T16:11:36.063Z" }, - { url = "https://files.pythonhosted.org/packages/16/01/35b68b1db517f27a01be4467593292eb5315def8900afad29fabf56304ba/librt-0.8.1-cp311-cp311-win32.whl", hash = "sha256:52c224e14614b750c0a6d97368e16804a98c684657c7518752c356834fff83bb", size = 54597, upload-time = "2026-02-17T16:11:37.544Z" }, - { url = "https://files.pythonhosted.org/packages/71/02/796fe8f02822235966693f257bf2c79f40e11337337a657a8cfebba5febc/librt-0.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:c00e5c884f528c9932d278d5c9cbbea38a6b81eb62c02e06ae53751a83a4d52b", size = 61733, upload-time = "2026-02-17T16:11:38.691Z" }, - { url = "https://files.pythonhosted.org/packages/28/ad/232e13d61f879a42a4e7117d65e4984bb28371a34bb6fb9ca54ec2c8f54e/librt-0.8.1-cp311-cp311-win_arm64.whl", hash = "sha256:f7cdf7f26c2286ffb02e46d7bac56c94655540b26347673bea15fa52a6af17e9", size = 52273, upload-time = "2026-02-17T16:11:40.308Z" }, - { url = "https://files.pythonhosted.org/packages/95/21/d39b0a87ac52fc98f621fb6f8060efb017a767ebbbac2f99fbcbc9ddc0d7/librt-0.8.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a28f2612ab566b17f3698b0da021ff9960610301607c9a5e8eaca62f5e1c350a", size = 66516, upload-time = "2026-02-17T16:11:41.604Z" }, - { url = "https://files.pythonhosted.org/packages/69/f1/46375e71441c43e8ae335905e069f1c54febee63a146278bcee8782c84fd/librt-0.8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:60a78b694c9aee2a0f1aaeaa7d101cf713e92e8423a941d2897f4fa37908dab9", size = 68634, upload-time = "2026-02-17T16:11:43.268Z" }, - { url = "https://files.pythonhosted.org/packages/0a/33/c510de7f93bf1fa19e13423a606d8189a02624a800710f6e6a0a0f0784b3/librt-0.8.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:758509ea3f1eba2a57558e7e98f4659d0ea7670bff49673b0dde18a3c7e6c0eb", size = 198941, upload-time = "2026-02-17T16:11:44.28Z" }, - { url = "https://files.pythonhosted.org/packages/dd/36/e725903416409a533d92398e88ce665476f275081d0d7d42f9c4951999e5/librt-0.8.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:039b9f2c506bd0ab0f8725aa5ba339c6f0cd19d3b514b50d134789809c24285d", size = 209991, upload-time = "2026-02-17T16:11:45.462Z" }, - { url = "https://files.pythonhosted.org/packages/30/7a/8d908a152e1875c9f8eac96c97a480df425e657cdb47854b9efaa4998889/librt-0.8.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bb54f1205a3a6ab41a6fd71dfcdcbd278670d3a90ca502a30d9da583105b6f7", size = 224476, upload-time = "2026-02-17T16:11:46.542Z" }, - { url = "https://files.pythonhosted.org/packages/a8/b8/a22c34f2c485b8903a06f3fe3315341fe6876ef3599792344669db98fcff/librt-0.8.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:05bd41cdee35b0c59c259f870f6da532a2c5ca57db95b5f23689fcb5c9e42440", size = 217518, upload-time = "2026-02-17T16:11:47.746Z" }, - { url = "https://files.pythonhosted.org/packages/79/6f/5c6fea00357e4f82ba44f81dbfb027921f1ab10e320d4a64e1c408d035d9/librt-0.8.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adfab487facf03f0d0857b8710cf82d0704a309d8ffc33b03d9302b4c64e91a9", size = 225116, upload-time = "2026-02-17T16:11:49.298Z" }, - { url = "https://files.pythonhosted.org/packages/f2/a0/95ced4e7b1267fe1e2720a111685bcddf0e781f7e9e0ce59d751c44dcfe5/librt-0.8.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:153188fe98a72f206042be10a2c6026139852805215ed9539186312d50a8e972", size = 217751, upload-time = "2026-02-17T16:11:50.49Z" }, - { url = "https://files.pythonhosted.org/packages/93/c2/0517281cb4d4101c27ab59472924e67f55e375bc46bedae94ac6dc6e1902/librt-0.8.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:dd3c41254ee98604b08bd5b3af5bf0a89740d4ee0711de95b65166bf44091921", size = 218378, upload-time = "2026-02-17T16:11:51.783Z" }, - { url = "https://files.pythonhosted.org/packages/43/e8/37b3ac108e8976888e559a7b227d0ceac03c384cfd3e7a1c2ee248dbae79/librt-0.8.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e0d138c7ae532908cbb342162b2611dbd4d90c941cd25ab82084aaf71d2c0bd0", size = 241199, upload-time = "2026-02-17T16:11:53.561Z" }, - { url = "https://files.pythonhosted.org/packages/4b/5b/35812d041c53967fedf551a39399271bbe4257e681236a2cf1a69c8e7fa1/librt-0.8.1-cp312-cp312-win32.whl", hash = "sha256:43353b943613c5d9c49a25aaffdba46f888ec354e71e3529a00cca3f04d66a7a", size = 54917, upload-time = "2026-02-17T16:11:54.758Z" }, - { url = "https://files.pythonhosted.org/packages/de/d1/fa5d5331b862b9775aaf2a100f5ef86854e5d4407f71bddf102f4421e034/librt-0.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:ff8baf1f8d3f4b6b7257fcb75a501f2a5499d0dda57645baa09d4d0d34b19444", size = 62017, upload-time = "2026-02-17T16:11:55.748Z" }, - { url = "https://files.pythonhosted.org/packages/c7/7c/c614252f9acda59b01a66e2ddfd243ed1c7e1deab0293332dfbccf862808/librt-0.8.1-cp312-cp312-win_arm64.whl", hash = "sha256:0f2ae3725904f7377e11cc37722d5d401e8b3d5851fb9273d7f4fe04f6b3d37d", size = 52441, upload-time = "2026-02-17T16:11:56.801Z" }, - { url = "https://files.pythonhosted.org/packages/c5/3c/f614c8e4eaac7cbf2bbdf9528790b21d89e277ee20d57dc6e559c626105f/librt-0.8.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7e6bad1cd94f6764e1e21950542f818a09316645337fd5ab9a7acc45d99a8f35", size = 66529, upload-time = "2026-02-17T16:11:57.809Z" }, - { url = "https://files.pythonhosted.org/packages/ab/96/5836544a45100ae411eda07d29e3d99448e5258b6e9c8059deb92945f5c2/librt-0.8.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cf450f498c30af55551ba4f66b9123b7185362ec8b625a773b3d39aa1a717583", size = 68669, upload-time = "2026-02-17T16:11:58.843Z" }, - { url = "https://files.pythonhosted.org/packages/06/53/f0b992b57af6d5531bf4677d75c44f095f2366a1741fb695ee462ae04b05/librt-0.8.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:eca45e982fa074090057132e30585a7e8674e9e885d402eae85633e9f449ce6c", size = 199279, upload-time = "2026-02-17T16:11:59.862Z" }, - { url = "https://files.pythonhosted.org/packages/f3/ad/4848cc16e268d14280d8168aee4f31cea92bbd2b79ce33d3e166f2b4e4fc/librt-0.8.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c3811485fccfda840861905b8c70bba5ec094e02825598bb9d4ca3936857a04", size = 210288, upload-time = "2026-02-17T16:12:00.954Z" }, - { url = "https://files.pythonhosted.org/packages/52/05/27fdc2e95de26273d83b96742d8d3b7345f2ea2bdbd2405cc504644f2096/librt-0.8.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e4af413908f77294605e28cfd98063f54b2c790561383971d2f52d113d9c363", size = 224809, upload-time = "2026-02-17T16:12:02.108Z" }, - { url = "https://files.pythonhosted.org/packages/7a/d0/78200a45ba3240cb042bc597d6f2accba9193a2c57d0356268cbbe2d0925/librt-0.8.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5212a5bd7fae98dae95710032902edcd2ec4dc994e883294f75c857b83f9aba0", size = 218075, upload-time = "2026-02-17T16:12:03.631Z" }, - { url = "https://files.pythonhosted.org/packages/af/72/a210839fa74c90474897124c064ffca07f8d4b347b6574d309686aae7ca6/librt-0.8.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e692aa2d1d604e6ca12d35e51fdc36f4cda6345e28e36374579f7ef3611b3012", size = 225486, upload-time = "2026-02-17T16:12:04.725Z" }, - { url = "https://files.pythonhosted.org/packages/a3/c1/a03cc63722339ddbf087485f253493e2b013039f5b707e8e6016141130fa/librt-0.8.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4be2a5c926b9770c9e08e717f05737a269b9d0ebc5d2f0060f0fe3fe9ce47acb", size = 218219, upload-time = "2026-02-17T16:12:05.828Z" }, - { url = "https://files.pythonhosted.org/packages/58/f5/fff6108af0acf941c6f274a946aea0e484bd10cd2dc37610287ce49388c5/librt-0.8.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fd1a720332ea335ceb544cf0a03f81df92abd4bb887679fd1e460976b0e6214b", size = 218750, upload-time = "2026-02-17T16:12:07.09Z" }, - { url = "https://files.pythonhosted.org/packages/71/67/5a387bfef30ec1e4b4f30562c8586566faf87e47d696768c19feb49e3646/librt-0.8.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2af9e01e0ef80d95ae3c720be101227edae5f2fe7e3dc63d8857fadfc5a1d", size = 241624, upload-time = "2026-02-17T16:12:08.43Z" }, - { url = "https://files.pythonhosted.org/packages/d4/be/24f8502db11d405232ac1162eb98069ca49c3306c1d75c6ccc61d9af8789/librt-0.8.1-cp313-cp313-win32.whl", hash = "sha256:086a32dbb71336627e78cc1d6ee305a68d038ef7d4c39aaff41ae8c9aa46e91a", size = 54969, upload-time = "2026-02-17T16:12:09.633Z" }, - { url = "https://files.pythonhosted.org/packages/5c/73/c9fdf6cb2a529c1a092ce769a12d88c8cca991194dfe641b6af12fa964d2/librt-0.8.1-cp313-cp313-win_amd64.whl", hash = "sha256:e11769a1dbda4da7b00a76cfffa67aa47cfa66921d2724539eee4b9ede780b79", size = 62000, upload-time = "2026-02-17T16:12:10.632Z" }, - { url = "https://files.pythonhosted.org/packages/d3/97/68f80ca3ac4924f250cdfa6e20142a803e5e50fca96ef5148c52ee8c10ea/librt-0.8.1-cp313-cp313-win_arm64.whl", hash = "sha256:924817ab3141aca17893386ee13261f1d100d1ef410d70afe4389f2359fea4f0", size = 52495, upload-time = "2026-02-17T16:12:11.633Z" }, - { url = "https://files.pythonhosted.org/packages/c9/6a/907ef6800f7bca71b525a05f1839b21f708c09043b1c6aa77b6b827b3996/librt-0.8.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6cfa7fe54fd4d1f47130017351a959fe5804bda7a0bc7e07a2cdbc3fdd28d34f", size = 66081, upload-time = "2026-02-17T16:12:12.766Z" }, - { url = "https://files.pythonhosted.org/packages/1b/18/25e991cd5640c9fb0f8d91b18797b29066b792f17bf8493da183bf5caabe/librt-0.8.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:228c2409c079f8c11fb2e5d7b277077f694cb93443eb760e00b3b83cb8b3176c", size = 68309, upload-time = "2026-02-17T16:12:13.756Z" }, - { url = "https://files.pythonhosted.org/packages/a4/36/46820d03f058cfb5a9de5940640ba03165ed8aded69e0733c417bb04df34/librt-0.8.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7aae78ab5e3206181780e56912d1b9bb9f90a7249ce12f0e8bf531d0462dd0fc", size = 196804, upload-time = "2026-02-17T16:12:14.818Z" }, - { url = "https://files.pythonhosted.org/packages/59/18/5dd0d3b87b8ff9c061849fbdb347758d1f724b9a82241aa908e0ec54ccd0/librt-0.8.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:172d57ec04346b047ca6af181e1ea4858086c80bdf455f61994c4aa6fc3f866c", size = 206907, upload-time = "2026-02-17T16:12:16.513Z" }, - { url = "https://files.pythonhosted.org/packages/d1/96/ef04902aad1424fd7299b62d1890e803e6ab4018c3044dca5922319c4b97/librt-0.8.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b1977c4ea97ce5eb7755a78fae68d87e4102e4aaf54985e8b56806849cc06a3", size = 221217, upload-time = "2026-02-17T16:12:17.906Z" }, - { url = "https://files.pythonhosted.org/packages/6d/ff/7e01f2dda84a8f5d280637a2e5827210a8acca9a567a54507ef1c75b342d/librt-0.8.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:10c42e1f6fd06733ef65ae7bebce2872bcafd8d6e6b0a08fe0a05a23b044fb14", size = 214622, upload-time = "2026-02-17T16:12:19.108Z" }, - { url = "https://files.pythonhosted.org/packages/1e/8c/5b093d08a13946034fed57619742f790faf77058558b14ca36a6e331161e/librt-0.8.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4c8dfa264b9193c4ee19113c985c95f876fae5e51f731494fc4e0cf594990ba7", size = 221987, upload-time = "2026-02-17T16:12:20.331Z" }, - { url = "https://files.pythonhosted.org/packages/d3/cc/86b0b3b151d40920ad45a94ce0171dec1aebba8a9d72bb3fa00c73ab25dd/librt-0.8.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:01170b6729a438f0dedc4a26ed342e3dc4f02d1000b4b19f980e1877f0c297e6", size = 215132, upload-time = "2026-02-17T16:12:21.54Z" }, - { url = "https://files.pythonhosted.org/packages/fc/be/8588164a46edf1e69858d952654e216a9a91174688eeefb9efbb38a9c799/librt-0.8.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:7b02679a0d783bdae30d443025b94465d8c3dc512f32f5b5031f93f57ac32071", size = 215195, upload-time = "2026-02-17T16:12:23.073Z" }, - { url = "https://files.pythonhosted.org/packages/f5/f2/0b9279bea735c734d69344ecfe056c1ba211694a72df10f568745c899c76/librt-0.8.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:190b109bb69592a3401fe1ffdea41a2e73370ace2ffdc4a0e8e2b39cdea81b78", size = 237946, upload-time = "2026-02-17T16:12:24.275Z" }, - { url = "https://files.pythonhosted.org/packages/e9/cc/5f2a34fbc8aeb35314a3641f9956fa9051a947424652fad9882be7a97949/librt-0.8.1-cp314-cp314-win32.whl", hash = "sha256:e70a57ecf89a0f64c24e37f38d3fe217a58169d2fe6ed6d70554964042474023", size = 50689, upload-time = "2026-02-17T16:12:25.766Z" }, - { url = "https://files.pythonhosted.org/packages/a0/76/cd4d010ab2147339ca2b93e959c3686e964edc6de66ddacc935c325883d7/librt-0.8.1-cp314-cp314-win_amd64.whl", hash = "sha256:7e2f3edca35664499fbb36e4770650c4bd4a08abc1f4458eab9df4ec56389730", size = 57875, upload-time = "2026-02-17T16:12:27.465Z" }, - { url = "https://files.pythonhosted.org/packages/84/0f/2143cb3c3ca48bd3379dcd11817163ca50781927c4537345d608b5045998/librt-0.8.1-cp314-cp314-win_arm64.whl", hash = "sha256:0d2f82168e55ddefd27c01c654ce52379c0750ddc31ee86b4b266bcf4d65f2a3", size = 48058, upload-time = "2026-02-17T16:12:28.556Z" }, - { url = "https://files.pythonhosted.org/packages/d2/0e/9b23a87e37baf00311c3efe6b48d6b6c168c29902dfc3f04c338372fd7db/librt-0.8.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2c74a2da57a094bd48d03fa5d196da83d2815678385d2978657499063709abe1", size = 68313, upload-time = "2026-02-17T16:12:29.659Z" }, - { url = "https://files.pythonhosted.org/packages/db/9a/859c41e5a4f1c84200a7d2b92f586aa27133c8243b6cac9926f6e54d01b9/librt-0.8.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a355d99c4c0d8e5b770313b8b247411ed40949ca44e33e46a4789b9293a907ee", size = 70994, upload-time = "2026-02-17T16:12:31.516Z" }, - { url = "https://files.pythonhosted.org/packages/4c/28/10605366ee599ed34223ac2bf66404c6fb59399f47108215d16d5ad751a8/librt-0.8.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2eb345e8b33fb748227409c9f1233d4df354d6e54091f0e8fc53acdb2ffedeb7", size = 220770, upload-time = "2026-02-17T16:12:33.294Z" }, - { url = "https://files.pythonhosted.org/packages/af/8d/16ed8fd452dafae9c48d17a6bc1ee3e818fd40ef718d149a8eff2c9f4ea2/librt-0.8.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9be2f15e53ce4e83cc08adc29b26fb5978db62ef2a366fbdf716c8a6c8901040", size = 235409, upload-time = "2026-02-17T16:12:35.443Z" }, - { url = "https://files.pythonhosted.org/packages/89/1b/7bdf3e49349c134b25db816e4a3db6b94a47ac69d7d46b1e682c2c4949be/librt-0.8.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:785ae29c1f5c6e7c2cde2c7c0e148147f4503da3abc5d44d482068da5322fd9e", size = 246473, upload-time = "2026-02-17T16:12:36.656Z" }, - { url = "https://files.pythonhosted.org/packages/4e/8a/91fab8e4fd2a24930a17188c7af5380eb27b203d72101c9cc000dbdfd95a/librt-0.8.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1d3a7da44baf692f0c6aeb5b2a09c5e6fc7a703bca9ffa337ddd2e2da53f7732", size = 238866, upload-time = "2026-02-17T16:12:37.849Z" }, - { url = "https://files.pythonhosted.org/packages/b9/e0/c45a098843fc7c07e18a7f8a24ca8496aecbf7bdcd54980c6ca1aaa79a8e/librt-0.8.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5fc48998000cbc39ec0d5311312dda93ecf92b39aaf184c5e817d5d440b29624", size = 250248, upload-time = "2026-02-17T16:12:39.445Z" }, - { url = "https://files.pythonhosted.org/packages/82/30/07627de23036640c952cce0c1fe78972e77d7d2f8fd54fa5ef4554ff4a56/librt-0.8.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e96baa6820280077a78244b2e06e416480ed859bbd8e5d641cf5742919d8beb4", size = 240629, upload-time = "2026-02-17T16:12:40.889Z" }, - { url = "https://files.pythonhosted.org/packages/fb/c1/55bfe1ee3542eba055616f9098eaf6eddb966efb0ca0f44eaa4aba327307/librt-0.8.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:31362dbfe297b23590530007062c32c6f6176f6099646bb2c95ab1b00a57c382", size = 239615, upload-time = "2026-02-17T16:12:42.446Z" }, - { url = "https://files.pythonhosted.org/packages/2b/39/191d3d28abc26c9099b19852e6c99f7f6d400b82fa5a4e80291bd3803e19/librt-0.8.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cc3656283d11540ab0ea01978378e73e10002145117055e03722417aeab30994", size = 263001, upload-time = "2026-02-17T16:12:43.627Z" }, - { url = "https://files.pythonhosted.org/packages/b9/eb/7697f60fbe7042ab4e88f4ee6af496b7f222fffb0a4e3593ef1f29f81652/librt-0.8.1-cp314-cp314t-win32.whl", hash = "sha256:738f08021b3142c2918c03692608baed43bc51144c29e35807682f8070ee2a3a", size = 51328, upload-time = "2026-02-17T16:12:45.148Z" }, - { url = "https://files.pythonhosted.org/packages/7c/72/34bf2eb7a15414a23e5e70ecb9440c1d3179f393d9349338a91e2781c0fb/librt-0.8.1-cp314-cp314t-win_amd64.whl", hash = "sha256:89815a22daf9c51884fb5dbe4f1ef65ee6a146e0b6a8df05f753e2e4a9359bf4", size = 58722, upload-time = "2026-02-17T16:12:46.85Z" }, - { url = "https://files.pythonhosted.org/packages/b2/c8/d148e041732d631fc76036f8b30fae4e77b027a1e95b7a84bb522481a940/librt-0.8.1-cp314-cp314t-win_arm64.whl", hash = "sha256:bf512a71a23504ed08103a13c941f763db13fb11177beb3d9244c98c29fb4a61", size = 48755, upload-time = "2026-02-17T16:12:47.943Z" }, +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/04/f5/9dc696772d241814bacac7880bac32f2930b5a6ebc1f85317b83161a011c/librt-0.16.0.tar.gz", hash = "sha256:ac38d6d8d66bf3d744148dbbc0b8e193e195a51e364ed55e224631f5721891fc", size = 219839, upload-time = "2026-09-29T00:55:32.891Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/77/900294b3c9a81415323d81b3f3f271a7f5d7ed9d01e824fc38ffa49470b6/librt-0.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:96f576f2711f8519152ec76d0e599243555c1f07679fa73606ca8c8c868c0be6", size = 148668, upload-time = "2026-09-29T00:44:20.282Z" }, + { url = "https://files.pythonhosted.org/packages/55/3b/c301e8cc47758e4518b93e926a0111080155cc79fa03651d202ac2025065/librt-0.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2bec3818c7da7c96ceae0ef5915a3d16c52dd08f3ea913bf1fe8568c447c7978", size = 153562, upload-time = "2026-09-29T00:44:21.672Z" }, + { url = "https://files.pythonhosted.org/packages/62/b1/4d5b98114a58bf17e3832cd33400e40f2582f68c2fb7ce25b4468cb1afd3/librt-0.16.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:64c79520414a3fdfc6aabd7593e6169afa14d5f8d9908d4b498db068868b08dd", size = 494337, upload-time = "2026-09-29T00:44:23.096Z" }, + { url = "https://files.pythonhosted.org/packages/88/36/14223c9b0dc38982eb4f399732c8cb27b19c7e027ae0faef5ca51d08d19f/librt-0.16.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:f81b5b19ce748ef68d4746656b7929762eb2fe99269b266e4be07e2ee4de7144", size = 485440, upload-time = "2026-09-29T00:44:24.555Z" }, + { url = "https://files.pythonhosted.org/packages/ec/9e/d7155e6800d0c33e297e529b217649f7361d706491ebf9d2fc0fc627309e/librt-0.16.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c71d1b76210a36729fedfc5115069b50a3d8619054745f8758fe5d6f19e86671", size = 498363, upload-time = "2026-09-29T00:44:26.03Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ce/d5f1fb9f913ac0979d6fc5db9fb9c0bf28cc3470988528957922f15ed40c/librt-0.16.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:473eebc7866bb0a0c8849a292b5e7157c1aba5d14d0f0f610c52158d6d964262", size = 515453, upload-time = "2026-09-29T00:44:27.566Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d4/ca0fca1a27c26080d1a25b2b31f271e532078a5719878c3daca0c3d4c539/librt-0.16.0-cp310-cp310-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4eb1313a19847089ee81e88742abedf285c60538816640b99742d8534b81d26a", size = 509537, upload-time = "2026-09-29T00:44:29.14Z" }, + { url = "https://files.pythonhosted.org/packages/ee/c0/26807bf2221a53a2c66f2e23a5c4d57f1c0eaa4afed7cb81d841cf3d1903/librt-0.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ebefd60b42e2a82b32d136bb5f7c94eadfcd29f772b547df6f3291d1ed855a1c", size = 532541, upload-time = "2026-09-29T00:44:30.745Z" }, + { url = "https://files.pythonhosted.org/packages/0e/50/c329d509907e1bc061abeec3796f94d255d43ba25d28c3854d2138ed5ab2/librt-0.16.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6c5da27e8056439f927ea896735da60e616c477a8293feaa3233d4e7781a6726", size = 537059, upload-time = "2026-09-29T00:44:32.102Z" }, + { url = "https://files.pythonhosted.org/packages/84/d6/4571b9c9e65d98e5503734166dce2fd3e216f526dc3c59a3773faa8a60e3/librt-0.16.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:67e718c7a43f8db325abbbf1404e2d535f12f8f7a1a82259568385cc5274b82a", size = 536614, upload-time = "2026-09-29T00:44:33.653Z" }, + { url = "https://files.pythonhosted.org/packages/c8/d3/a2ed8a292e4ab7889792a9c3f4ad5d1caf6557afce7f6b452e77f8ed20b7/librt-0.16.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:314e703f0c19320dc8094e7a784b9cf29e1b67402515abf580069a6363c0b4f1", size = 517199, upload-time = "2026-09-29T00:44:35.115Z" }, + { url = "https://files.pythonhosted.org/packages/9e/24/276e5218b4b7adb6258a42b7403cb1b7cef25616238d0c2152288a9d2f53/librt-0.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:943c6bbecbdf7fa575a4f2952fcfd848c88ef95507c3fca411e89d4ac3ff8143", size = 558746, upload-time = "2026-09-29T00:44:36.656Z" }, + { url = "https://files.pythonhosted.org/packages/7c/5c/9156df81a1726e1efc9567379def2b8777a6d56f464d2f1b760bf951b8af/librt-0.16.0-cp310-cp310-win32.whl", hash = "sha256:7cc365f006891afb006b52d5ee5ee74c09306ffa20e2f8705a32a4450af2f3ba", size = 104424, upload-time = "2026-09-29T00:44:38.123Z" }, + { url = "https://files.pythonhosted.org/packages/0b/62/4fd172cb3f49ab2cf5ef17de519a93cfb935202c1270ba9d44c6a64178c3/librt-0.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:0314058469f4d2fd279ce7c62ac274ac82c3918ef7db62ef0697c4c359370155", size = 124267, upload-time = "2026-09-29T00:44:39.455Z" }, + { url = "https://files.pythonhosted.org/packages/ba/0e/b04fd2d76b6a78a02286938251b2c119fb36ddece92c76cb4886ef7d44b8/librt-0.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fe4372c52d4849096c6cc1cda2817d293ec51440c890474ed59ef38d46556f18", size = 148058, upload-time = "2026-09-29T00:44:40.903Z" }, + { url = "https://files.pythonhosted.org/packages/a3/fc/e1ed24aadb32d38603c0c07f579d739eb4d90e64e90d525b024e4a999b4d/librt-0.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c72c5295a84bd249526da9bdca38f2e176d15c31c13bb0063c5053f4ca023421", size = 153073, upload-time = "2026-09-29T00:44:42.165Z" }, + { url = "https://files.pythonhosted.org/packages/be/38/133ab655409420e0c34a9a9836a7f4e5ae75fba758d7fe177099130d58ba/librt-0.16.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be56ba9c884143495b517f23fe794ae367d58cd89ea0fdd6d437e3c024a87f9f", size = 493052, upload-time = "2026-09-29T00:44:44.043Z" }, + { url = "https://files.pythonhosted.org/packages/94/42/aaa663bc9421f5bf7bbbe9d3316d7219749698ec7688ac3b519770a89c04/librt-0.16.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:ef46c1a29ffb8c72e882e22618ec618778eacd0578fb22c6e7cf9c11d15f357b", size = 485506, upload-time = "2026-09-29T00:44:45.479Z" }, + { url = "https://files.pythonhosted.org/packages/7b/59/83a6eb5087ba8b45b083859e2085256963e06d4c2531944cdd962670bfb5/librt-0.16.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d3c94211ee0c4f8d649ec06b7c115c0ec4eadb873a0e3154ca15cef3f814b071", size = 498708, upload-time = "2026-09-29T00:44:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e4/15a8d62b2bc12935080ec7277e2e0b9b233047781eb784a51d3e25af669a/librt-0.16.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94aed6a8308818b91677957d1bd03188869cd7aeb23c5dba7912a6c0402f7602", size = 515981, upload-time = "2026-09-29T00:44:48.316Z" }, + { url = "https://files.pythonhosted.org/packages/46/4f/287cc282ac5dd815204c0779e79401bb0a568c3a1335fb319bf0838fb566/librt-0.16.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:349c0bcb87ebd07481b6ff781e25cdc699723dbe2212e57dabb27f7a13b7b87d", size = 508670, upload-time = "2026-09-29T00:44:49.726Z" }, + { url = "https://files.pythonhosted.org/packages/bf/5b/ab7292add898ade0d2b5b75d32a923aae315861671aa5c39f5491309f7ae/librt-0.16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:001bfd59a7d45b17e3e75f2a8c6405280b35e7b84471792778e718c4f368950e", size = 530393, upload-time = "2026-09-29T00:44:51.356Z" }, + { url = "https://files.pythonhosted.org/packages/7a/9e/8e6bcf027d4bcbc16a4e864b3d158a1d3e5f55ffa53af0238020cad89271/librt-0.16.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:28e038895b998d7a0c7798922ce8a1dc157675df5cf1c9ef0aca809ed804b7a1", size = 534302, upload-time = "2026-09-29T00:44:52.893Z" }, + { url = "https://files.pythonhosted.org/packages/96/a4/8c5ab4f3b3a8e905ff8305d76976a2e666f52fe049edd398aed2402beb36/librt-0.16.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0dbe4096a7ecc00fa835d24510ad8545a4efef738dac96e0e63516783ccde905", size = 536150, upload-time = "2026-09-29T00:44:54.421Z" }, + { url = "https://files.pythonhosted.org/packages/ea/5e/7c4bc267e3cd4b8bd288de9f62d61fff203829c9cc649ea2aa12e9218cf0/librt-0.16.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5cd5b092441053364af968ea12084692cb9d4a22f3ce9524e377880bf028761e", size = 514316, upload-time = "2026-09-29T00:44:55.998Z" }, + { url = "https://files.pythonhosted.org/packages/e0/75/c8bc6b50f43c73819334233f5a3259c81216742cef56d2140c3dd377c3f0/librt-0.16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ddeb3c9dedb461bb457c6c7d9aa7fbf35329da313d1a7543d00c8d0f3473c96", size = 557731, upload-time = "2026-09-29T00:44:57.581Z" }, + { url = "https://files.pythonhosted.org/packages/93/fb/e241f91bc8de6c7ac1c6a20ea6dd381bc52312b44d711ffcd97140db1e57/librt-0.16.0-cp311-cp311-win32.whl", hash = "sha256:e05108e0849966f53a8d2d3112a7af881d0efaa479bc735bba91108f9f2350a7", size = 104922, upload-time = "2026-09-29T00:44:59.078Z" }, + { url = "https://files.pythonhosted.org/packages/d1/38/c892383d2bb1a6a80b2ec8ede84970a265a792c56614a06282bf3008517c/librt-0.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:5f49cff01bd608ef7d97104cb035c75455e79c2d70bf4a506cf773338ac1860d", size = 125093, upload-time = "2026-09-29T00:49:01.621Z" }, + { url = "https://files.pythonhosted.org/packages/e4/56/8bbde1ed0b21480163617648f638fdaec9374cf5e9c846ebcee34ec02a42/librt-0.16.0-cp311-cp311-win_arm64.whl", hash = "sha256:1d28ae980ae2218f9c5b95d191e947296f918c9bf0b400d467a9430275bbe678", size = 115910, upload-time = "2026-09-29T00:52:40.131Z" }, + { url = "https://files.pythonhosted.org/packages/ad/76/bbdaeb87b7c47b5c7343e90222b9bfa4e4a8a83f647e02933ad0129225b1/librt-0.16.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fe52bf4641069e7978a14253b036cb9002def1926317e710f2e249f8a8c47742", size = 151028, upload-time = "2026-09-29T00:52:41.508Z" }, + { url = "https://files.pythonhosted.org/packages/fd/0c/ab8ed3dab0085931aec4a792c7eaac8dc6c5ff4691fda3a5360d9d8a9cd2/librt-0.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5bcc2c4726ced915b00de0c9856a4eeabfb3fddb93e10e0b8f735b7709358b6d", size = 155283, upload-time = "2026-09-29T00:52:42.873Z" }, + { url = "https://files.pythonhosted.org/packages/eb/36/494e79d460c80c1f030661e8287c9eca5e1ad652dc2b2180b6cd42abce0a/librt-0.16.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff7baa55f8e7c69851419e50a666015d02a74198716fd45c0125a2112e0a389f", size = 503185, upload-time = "2026-09-29T00:52:44.638Z" }, + { url = "https://files.pythonhosted.org/packages/9b/34/a8464038dd9db6e4381fa2b6eb73dc9a50888d77102c4c139304ac35cddc/librt-0.16.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:b95d5d92ab83d39e760a52091bb1baba664f3a2351e39b1e16801e5747c2f0e9", size = 496738, upload-time = "2026-09-29T00:52:46.441Z" }, + { url = "https://files.pythonhosted.org/packages/6a/53/e0e5e334ef0c6ed27039d323819368b9ef6712be87d55ee2bf9799398afd/librt-0.16.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b6d085d70bce51d43c5c7c36d63490770180d8779e71c49305c87b4213918de7", size = 513818, upload-time = "2026-09-29T00:52:48.068Z" }, + { url = "https://files.pythonhosted.org/packages/ad/f7/7ce72cbf19d0addd05090b339152fd0548a02562c2866a603e6e3b3da2df/librt-0.16.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:36e53948e99bbe3ffea257124cfcae1cfb01831555c9a9c903c9f9a72db7fd07", size = 531952, upload-time = "2026-09-29T00:52:49.816Z" }, + { url = "https://files.pythonhosted.org/packages/83/22/0b1bcb6a8e723c8b4fd60dfc8ae8ec6461c54073fbc8685efeb8d900d407/librt-0.16.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:54d11f726aae9df5a6ffbbf0a03a52449bbac84a53ef03669cb41cdfd4ae41bf", size = 524465, upload-time = "2026-09-29T00:52:51.354Z" }, + { url = "https://files.pythonhosted.org/packages/64/2e/e9c23b8b9df1813da1be205deca9606beb7ddd033972246cd426d05374a0/librt-0.16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4323193ac0cd025f85af531df8ba91bf24d1973b401697347a6282e8fd3fcf5e", size = 543191, upload-time = "2026-09-29T00:52:53.284Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e5/6a8b21b342c03ed7e230fa3afbfd2edc58e6e87ef1f0d11fa2b9a748c252/librt-0.16.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e42f8e098b9c5396fefa05fb1cc7e33b0e08fc51da106b5de4a45fd22aac6743", size = 546979, upload-time = "2026-09-29T00:52:54.932Z" }, + { url = "https://files.pythonhosted.org/packages/84/9e/b5129023eced1be01e01c22757f53be551d463b1bb7264f787927404c1d6/librt-0.16.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:39ec1d5a14e37baf1450a6cabf03fe552340808bf1ad9d71824ab90117716459", size = 555317, upload-time = "2026-09-29T00:52:56.869Z" }, + { url = "https://files.pythonhosted.org/packages/71/89/28bba5938c725fe91f06bf93f7fa6c6b150229df53a87b454b0d5c2a796e/librt-0.16.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d1aabe3925cbb4a08d15b7b20ba4011b53019da0c4173a25155139b7b1baed65", size = 535846, upload-time = "2026-09-29T00:52:58.475Z" }, + { url = "https://files.pythonhosted.org/packages/22/92/63773026614f888c5d4e370e395ce42ca604b89f70b3acdfedbf94851b80/librt-0.16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:300c3ffdc459f4a779a8411ecb188e3ac0b1ff3a3a7b099642555dedae06c69b", size = 573700, upload-time = "2026-09-29T00:53:00.127Z" }, + { url = "https://files.pythonhosted.org/packages/66/8f/347d4677eefb57cd9f8e01d95a1dcee9a91b4e44e664173c32ff6f3752e5/librt-0.16.0-cp312-cp312-win32.whl", hash = "sha256:c17194318e4c0c0348b36f36c2ec7534436fe0a4c15582403162a4f08c80797a", size = 106158, upload-time = "2026-09-29T00:53:02.031Z" }, + { url = "https://files.pythonhosted.org/packages/f0/2c/5193dc81127cd5ddfad031391b046bf32dda219b38463ab872407ca30646/librt-0.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:25a58a19ea8d83b68209f04912df765e9260635ef77646542ed4b4abe6bc7940", size = 126176, upload-time = "2026-09-29T00:53:03.445Z" }, + { url = "https://files.pythonhosted.org/packages/ff/3d/9668a400c8dd81d162eba38b33fa49fa6205f1a64493570a13fbb815c3ee/librt-0.16.0-cp312-cp312-win_arm64.whl", hash = "sha256:f7be7cf555bc30ec12622e9447299cc4a9b8ff307548b634794353db0c2065dc", size = 116572, upload-time = "2026-09-29T00:53:04.815Z" }, + { url = "https://files.pythonhosted.org/packages/46/cd/ae5e0e9dba45d1399aa04a5395bcc0bead40d9fa06dc903634a7b4d7473d/librt-0.16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c5e6144e68b577f157519f2ba88ca20e3ed61c29b00e5cdfa76cd2d45acf059a", size = 151036, upload-time = "2026-09-29T00:53:06.284Z" }, + { url = "https://files.pythonhosted.org/packages/41/5a/48a16e323c5f9447a94cce7b59babf60fa04e62c3365ecf060c77ed8b320/librt-0.16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:33f41443a1f4e1f099331b3d8120e409fbff84b9760bc1cc9ea496f37ddaa5cc", size = 155211, upload-time = "2026-09-29T00:53:07.72Z" }, + { url = "https://files.pythonhosted.org/packages/3f/29/0f59299eb4251a409b2e690ad4b7d9f8a676db829d7817ec961f32b44f7e/librt-0.16.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e510b7770bee609617a3374a96548eb114cae048023e3f049ee449e7ff2db32", size = 502587, upload-time = "2026-09-29T00:53:09.191Z" }, + { url = "https://files.pythonhosted.org/packages/de/ba/d6fb4ef8d1537c396079d72289f16be7cd35a366e5065c51253fea2760b6/librt-0.16.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:efc49c462d4516b8a58b00b490078fa64689fd1fe66970cc190131d7afb8027e", size = 496146, upload-time = "2026-09-29T00:53:11.016Z" }, + { url = "https://files.pythonhosted.org/packages/52/fc/8c50dd4d7cc97c0ee8f252c8a3104980f234391cf1519b554e8b9de08b60/librt-0.16.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:92caf82ebef5e12d21c72242b70d1e92536f1711cf2a727a4c276de4b4469087", size = 513336, upload-time = "2026-09-29T00:53:12.655Z" }, + { url = "https://files.pythonhosted.org/packages/a9/59/16c409c56f708eda2db9a0553662845d45e3871c77d70a240dae3f3bdc56/librt-0.16.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:17bac7f7a16b328fff77e440287693eb017abde913595b5827ebccbc21ecd8a6", size = 531689, upload-time = "2026-09-29T00:53:14.39Z" }, + { url = "https://files.pythonhosted.org/packages/88/82/d34772a6c29d1446dcca6e64d74062efd508523ab351aa16625a4689d5cc/librt-0.16.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5b976054553670829985ed767feb78fb6bcede0175327c4844dd5c281c1be659", size = 524537, upload-time = "2026-09-29T00:53:16.064Z" }, + { url = "https://files.pythonhosted.org/packages/77/8f/24c5631313746131ccee53bc91fdc8374f9cf25e0082a1fee9c93bb98acc/librt-0.16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0058f9d68721094105917254c72ac0569117bb7b13b9769cf45d26d89f9d21cd", size = 543231, upload-time = "2026-09-29T00:53:17.939Z" }, + { url = "https://files.pythonhosted.org/packages/f2/cb/5f8e0d41dbd8b499c2265e939c31acc9ba59845565bf99539ad1c06aebcf/librt-0.16.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:30b7beaf3f4487b7d8adef1f158b49067cb4d5a19fa7a3bf31a4e7a820e435c5", size = 546499, upload-time = "2026-09-29T00:53:19.666Z" }, + { url = "https://files.pythonhosted.org/packages/be/61/063052de441d1385f59cea4223f184bf9e5d125de1ae3239b490aa1e486e/librt-0.16.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:468df902df016a06eb0e40b0747dc8d14e47d7a38b18b63b1fb167d85cb94d63", size = 555261, upload-time = "2026-09-29T00:53:21.292Z" }, + { url = "https://files.pythonhosted.org/packages/14/11/a2ada0529372268d6401afa9d457a095b68cd7753532b6f7f33049a19b43/librt-0.16.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:aea7b1f2b125dad5de85f049136651bff256c883c65e6b9209b2da0a1ac3cdef", size = 536029, upload-time = "2026-09-29T00:53:23.07Z" }, + { url = "https://files.pythonhosted.org/packages/23/9d/5bb6d38853382986dca702fc7e06c8256d30f5fa0676d882773b744610dc/librt-0.16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a8afb6557920860b7a3a596eb804cf37e09e7cf8a803db2478c202acc72d8c2e", size = 573748, upload-time = "2026-09-29T00:53:24.696Z" }, + { url = "https://files.pythonhosted.org/packages/99/f6/0025cde35ff7f607684dc775a2b2d732cce2561cec050a6ee1fb2e1fc6fe/librt-0.16.0-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:77c7a2b4fe2c1369e0d5aa1cade26740a7b14be32fbc9a5535d617d20065c39d", size = 79861, upload-time = "2026-09-29T00:53:26.089Z" }, + { url = "https://files.pythonhosted.org/packages/93/93/303b8592909bd583f83f02818ffbea3f7647ca1e22b1cd5465d04b8145fe/librt-0.16.0-cp313-cp313-win32.whl", hash = "sha256:02d89c813d5ff74b17df72d3a34819d132cd168e56b81bf755b809bd9e46b8c4", size = 106236, upload-time = "2026-09-29T00:53:27.43Z" }, + { url = "https://files.pythonhosted.org/packages/cf/24/80bbb463c60ed18e29cb26aba386ddb76609580e4e7160710e550587018c/librt-0.16.0-cp313-cp313-win_amd64.whl", hash = "sha256:14ed6ebe3e4f85f326d7920011ad30ff49ed9334e62cf88caef9ba973d9e3a92", size = 126180, upload-time = "2026-09-29T00:53:28.7Z" }, + { url = "https://files.pythonhosted.org/packages/43/80/b1a6fbdd7da825cdd55c71aa81eb6cfa82c513c360774152eacb50b4a771/librt-0.16.0-cp313-cp313-win_arm64.whl", hash = "sha256:83d4041a3d9b2fd053a8a4e1f22878b3e5833e2712956382d5c048d791454e91", size = 116557, upload-time = "2026-09-29T00:53:30.012Z" }, + { url = "https://files.pythonhosted.org/packages/1e/93/9e0cf7da129a93c3dc7f45bc3cd4a660f2aaa995aa8a6f95c2583ef41239/librt-0.16.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:931a0bb0fcac88f263e269e46eb30ba8e21402cd3c62ca40cb97034c0693fab1", size = 149844, upload-time = "2026-09-29T00:53:31.391Z" }, + { url = "https://files.pythonhosted.org/packages/8f/26/8a90d2a8f2b2e471bb486b7aec117b8ae622715ed6c39853aec48ea20073/librt-0.16.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1bc17e54e5305f8d40b7ca203671ff5a9e59c1d0f8ea0f625dcca53a3984de11", size = 154111, upload-time = "2026-09-29T00:53:32.718Z" }, + { url = "https://files.pythonhosted.org/packages/35/ce/67abb46258da4d3e42ff5b141db6f38c59357bef84c7979f183b22f924f1/librt-0.16.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:877698bf6bca5721d8be345f2fe09778e40ecadea8b58c73075f2b1a53666bf2", size = 494234, upload-time = "2026-09-29T00:53:34.466Z" }, + { url = "https://files.pythonhosted.org/packages/12/f9/ea7162414a16f8f1bbd3b493ad6d22b926c5471916e078350bdbca8c4e5f/librt-0.16.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:5981c011b306781ce561e18e14230a14524a3d8109b97553666c942c18f31a96", size = 491173, upload-time = "2026-09-29T00:53:36.124Z" }, + { url = "https://files.pythonhosted.org/packages/b1/09/9b3e869060dd33f9989b80ba4fea306f6db8cecefcdfe6d7346ef0603f65/librt-0.16.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:afced3dfc17cd805ecf7a3d77996a71cf5f2c75aa66eb0c21a9930f4fc992f86", size = 505547, upload-time = "2026-09-29T00:53:37.686Z" }, + { url = "https://files.pythonhosted.org/packages/50/07/79007d2165f649ea93e08c0962d1d62c70af9cde77965255095bf9d96f9a/librt-0.16.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ca8052401c55d7511dda6760719fda7618067e83535d7d0010096d216c34b667", size = 523057, upload-time = "2026-09-29T00:53:39.301Z" }, + { url = "https://files.pythonhosted.org/packages/61/0c/8fbaff66d0ba376d8864653f5acce1569bae27e89648671f26f7eca67ab8/librt-0.16.0-cp314-cp314-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1e511762a074005bb0aa569166779834e75e438370226930d0ce1866d4b6a33b", size = 515158, upload-time = "2026-09-29T00:53:41.012Z" }, + { url = "https://files.pythonhosted.org/packages/df/2e/23ff0dece76f07a4124413a57682efa0bbeb5765ac0122bc0955513f82ca/librt-0.16.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f1e8591bd8a5a628cd7f07954c6a1592359a878bf032957a8e9057a41d644311", size = 534183, upload-time = "2026-09-29T00:53:42.451Z" }, + { url = "https://files.pythonhosted.org/packages/26/c4/e11dea21d9a29486eba78887380374189d472734fa32cc50cb37ca44d3d0/librt-0.16.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a4aaefb4ba6c07e1aeebb2795c8958148f1d6f9af3b555b53d23d766edb6d67a", size = 540663, upload-time = "2026-09-29T00:53:44.272Z" }, + { url = "https://files.pythonhosted.org/packages/44/75/e873ae158a8b7f5359be33e7fd6c1fbe02d9a78a3e89a77de6b0e837f476/librt-0.16.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:d92db7a0f6aee44f1baee94750457e8d2d1c6ccea41842de6268d34e8dc7eddd", size = 545908, upload-time = "2026-09-29T00:53:45.812Z" }, + { url = "https://files.pythonhosted.org/packages/ba/36/8939d3f6a93e11bd9592e6fe28d2b44f1c2dc4bed6e22e72359a91e18ffb/librt-0.16.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:378dfaffb38e59c24a87cde5713cd865d51ff7383fa12947f3907f306ea1ca55", size = 523302, upload-time = "2026-09-29T00:53:47.596Z" }, + { url = "https://files.pythonhosted.org/packages/71/14/35309f44a077f0f42ade0e2e7cd88c0cea760c661af205c01ea90d3c0e1f/librt-0.16.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3e0c39bdc85370422e8b637be76eb1fd07d30967551b03e62267dd156f553152", size = 565911, upload-time = "2026-09-29T00:53:49.278Z" }, + { url = "https://files.pythonhosted.org/packages/78/0c/df6255b94967f3159ebc46f08d8e783c12da6ee269ddb74b2efed63c640c/librt-0.16.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:1b384b90ab79a7bc30b566895809a636e0666f21f3cf12b54823d025b7e83839", size = 79119, upload-time = "2026-09-29T00:53:50.938Z" }, + { url = "https://files.pythonhosted.org/packages/6b/44/d30d5a5461378c9d33f36736c6791c3b4c4ba4b1ffe0da7350aedcb2c9a0/librt-0.16.0-cp314-cp314-win32.whl", hash = "sha256:52327da75a94012e7f932f913d20d3876bed3c102be00e6c3e8600ff7bdd58a7", size = 100140, upload-time = "2026-09-29T00:53:52.205Z" }, + { url = "https://files.pythonhosted.org/packages/c2/98/769712f356a1e897df3581bb0c3100375d054a000de26099360ea65b5111/librt-0.16.0-cp314-cp314-win_amd64.whl", hash = "sha256:3f0b8114c44b2ac06ff5dacd08e07e8e807ff4f46083f2a1602685122559be41", size = 120464, upload-time = "2026-09-29T00:53:53.495Z" }, + { url = "https://files.pythonhosted.org/packages/bf/d3/ae2abccc8bdc8b063c1613a77686e17b74e9d3d60cfe6f12c63fa2821b9f/librt-0.16.0-cp314-cp314-win_arm64.whl", hash = "sha256:8caf96a4ef8fb27d0ac0d1ad8337d26a240acd4a02fe4345d0a8f264753e8f99", size = 110889, upload-time = "2026-09-29T00:53:54.817Z" }, + { url = "https://files.pythonhosted.org/packages/e4/26/0737d4be058dd6376eade7dd8b380d4b869b6394cee929393a5a431c45bb/librt-0.16.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:953107e2f68d0f3512c48f898b0dbf0ce5cc52bba0f318d847c985dc555ee4cc", size = 159838, upload-time = "2026-09-29T00:53:56.22Z" }, + { url = "https://files.pythonhosted.org/packages/01/96/9bc96531d7c620e9949af904470f02e3fa8f35129ab8e8f281c51eaa3788/librt-0.16.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ad37d5b9abd49c9a655dcda7ea52a8a752884062ef1ee71ae17c2f2a0f81fe6a", size = 162018, upload-time = "2026-09-29T00:53:57.532Z" }, + { url = "https://files.pythonhosted.org/packages/0e/fa/b0289dcb186eb3f97221ba00da5f4bd3ba7fa5e99752d48aa8d336615334/librt-0.16.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c4aa329c17bd1aaea4f6e89335d8ccd494b3a5830b6654462273e50e11023f0", size = 703983, upload-time = "2026-09-29T00:53:59.024Z" }, + { url = "https://files.pythonhosted.org/packages/d9/ab/05ebbbde7530fc5eeb58fbd1581522a9f64f132fa703c4c595eed6e14760/librt-0.16.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:0ead24d2562a49473dddd9efef8581f020007eb0054389c3ee3ffad38b1ca4c9", size = 683847, upload-time = "2026-09-29T00:54:00.671Z" }, + { url = "https://files.pythonhosted.org/packages/a3/75/f52aeecd4dbadbddf80725ba7de126d8bd5d0eb66247eae17a81ed90dd4d/librt-0.16.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:02118f56a9c36ddd07dfd9b919d9ecc117ba20a90987d56aa4c429fa34509188", size = 698045, upload-time = "2026-09-29T00:54:02.247Z" }, + { url = "https://files.pythonhosted.org/packages/e6/55/fa277a835cd6eb42380591ceb85f48c5b4d2b2d7e2cb9869e1e17d24d237/librt-0.16.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4e29522c62e28595ff7e324c6834ade51127707f0e255b18d1c1cf03d39c1048", size = 724640, upload-time = "2026-09-29T00:54:04.078Z" }, + { url = "https://files.pythonhosted.org/packages/25/e4/2cf64354f3fde8ebd591b3b48f96510bee24ac5f7d1e567adbbe210abdbd/librt-0.16.0-cp314-cp314t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3ff4b2367926b69c6215635902cccb04048e73094e9862900d27cb2c6bbff143", size = 731748, upload-time = "2026-09-29T00:54:05.741Z" }, + { url = "https://files.pythonhosted.org/packages/f8/c9/c180af3e94e01aa529fa93d7733fec2abc47f222345400cf21d5481d5f8a/librt-0.16.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c6f1b27bf1632a7e016af9f145f82be95e1edd7721a646505c21059257cb5a04", size = 754960, upload-time = "2026-09-29T00:54:07.38Z" }, + { url = "https://files.pythonhosted.org/packages/95/d6/01073aa78c58f356b10d9c57b3fe9abb143df338142bcd316df417b89db0/librt-0.16.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:5696d7f52e7b37217cb3a8f92c744fe835942602fdd4c1a8bc4741d3bfdce15e", size = 747000, upload-time = "2026-09-29T00:54:09.06Z" }, + { url = "https://files.pythonhosted.org/packages/f7/d8/1de3783908658d697a8cfc00582f61299ffba7796d7260c112e4700b1109/librt-0.16.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:6072e92dd876ff6ceeb6cf371e35e51f479349837391341f479b08df4564242b", size = 749569, upload-time = "2026-09-29T00:54:10.702Z" }, + { url = "https://files.pythonhosted.org/packages/b7/32/e817f66c96d6caa8bb8435ff93c4c220624d59efc506be59ab98fcd01d0c/librt-0.16.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:39ca4f2f2fe05de8e63493da592d84311adabe5bef52b193851981da9816b302", size = 729483, upload-time = "2026-09-29T00:54:12.25Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c9/23992ccd2b9d22798fdd0f61353183a47414e651da782ad83eb680f50833/librt-0.16.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f9807485a908f00355820f18e91e045ffdcdc5adb68aaec40a1e2b88c5f7bba1", size = 776584, upload-time = "2026-09-29T00:54:13.837Z" }, + { url = "https://files.pythonhosted.org/packages/67/3b/e8af957f08e6e2e8e566b099e43d2748418aa565df6ee1d9d3331209fdfe/librt-0.16.0-cp314-cp314t-win32.whl", hash = "sha256:94be5cb7bca4df6201f4183e9e4fa2086c655283d20b38cd84500a69057575a7", size = 104402, upload-time = "2026-09-29T00:54:15.568Z" }, + { url = "https://files.pythonhosted.org/packages/ca/1c/946e6443d7cd32347a086043395e421e52fd603c9163d2ec970ceab8eed6/librt-0.16.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d46ca272b251d033dd4527b0dec5f261a28a52bd5fa0f99c117b0a1f8588cc2d", size = 126227, upload-time = "2026-09-29T00:54:17.165Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a3/bc4f9959d3c62bcbf9e5fd3470a8bbd8bf33224ed4c25d7fba173201b8ac/librt-0.16.0-cp314-cp314t-win_arm64.whl", hash = "sha256:b9d6d4b14e92d876f8026b54c20c445f36425214c1081dc76f74e40db386b82b", size = 116493, upload-time = "2026-09-29T00:54:18.567Z" }, + { url = "https://files.pythonhosted.org/packages/b6/4b/10fdb42dfab4c1533e1570e686b18e86ff4328b406361b39fb3016667638/librt-0.16.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:6fe436af2eaf630474f491af5d032cbe45f93fcff5c3b9fe4ab194a7255b20ff", size = 149829, upload-time = "2026-09-29T00:54:19.933Z" }, + { url = "https://files.pythonhosted.org/packages/8e/30/a90ca13f1d3d91af1680000a4038536907018fbd51764767287a05d28b8b/librt-0.16.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:8ff5d26c529336be9bd7ae04483235d77778ee7d6444a95353102b542601ce81", size = 154522, upload-time = "2026-09-29T00:54:21.306Z" }, + { url = "https://files.pythonhosted.org/packages/5c/dd/bcf364eacfa070bb1fc88d503111ae7177914197ba1fa717c748926e7930/librt-0.16.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:909d8e3c1faee44cb762b1c519ff8613dcc5ceae5c99987a00917b5a31fd1d6a", size = 497593, upload-time = "2026-09-29T00:54:22.798Z" }, + { url = "https://files.pythonhosted.org/packages/18/c1/2c4e81e347bdabfe8346bfc6dc37ae5e154d61c88e30848ec0606025a5e0/librt-0.16.0-cp315-cp315-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:6d4a64283ee61824b5790de882bc68e2d9d7a5143537cb7a966f7354f71646d4", size = 480459, upload-time = "2026-09-29T00:54:24.364Z" }, + { url = "https://files.pythonhosted.org/packages/ab/d7/fef2a3cb8400701be496f6e459876f650b3451f407e30cb243de571ae615/librt-0.16.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5810ba811297fdf37a1531a57667cb8ace0842013ca8606bf9eb7c24cf4be154", size = 507814, upload-time = "2026-09-29T00:54:25.997Z" }, + { url = "https://files.pythonhosted.org/packages/e1/6f/53762927a32e9dc9eb1d1c1f3528da281290c86d96929a8af652f671266e/librt-0.16.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e56aaf8c167548dc8e5d6f3bd0f48dcdd299a23c73be3f744aab79d99e9c7f5d", size = 525114, upload-time = "2026-09-29T00:54:27.747Z" }, + { url = "https://files.pythonhosted.org/packages/6c/67/0b9d031f303c4e8c691a9a8ef9d272f13b530c11cc563b819df621b6a348/librt-0.16.0-cp315-cp315-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8f36c58e33b304b525c6c9c5076399c6ebf1109e17b9051a05a407b091b9215b", size = 520465, upload-time = "2026-09-29T00:54:29.331Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d5/2056a3a85864e882eb17a203a10ddb26fa748bc9718ec67e79059ab46cae/librt-0.16.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:242e00b3d4fa37c3d3c1ca5f5c9adb7d909ddb1eac9c41f2787320d00caa0af2", size = 537257, upload-time = "2026-09-29T00:54:30.915Z" }, + { url = "https://files.pythonhosted.org/packages/54/57/e0d79790c163cbc0909e209a6f62e30bb713b647f905a176cdc64848fd4d/librt-0.16.0-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:0253721561787b8df8443eb347b7a6461015354e5bdd37ee38a41fef220d2bb0", size = 527442, upload-time = "2026-09-29T00:54:32.478Z" }, + { url = "https://files.pythonhosted.org/packages/aa/50/1c0c95aba7af51f4752ea34fbf2eb79b36e7cae3a72536248e8c735de735/librt-0.16.0-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:3e483a8d69ede8067db70c0e83007423b6925de6fd53afed01d66160f2e9398c", size = 548139, upload-time = "2026-09-29T00:54:34.183Z" }, + { url = "https://files.pythonhosted.org/packages/98/91/a8a43dd5138d4f55f88846b8f0c85454a4fad69952cebfcff9948f831290/librt-0.16.0-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:69ba927445cfaaffb4081003ef5224c55a5c2ab67ef956f416ef744916e44121", size = 529708, upload-time = "2026-09-29T00:54:35.761Z" }, + { url = "https://files.pythonhosted.org/packages/2d/41/d5226881ab2b7c20d9d587b37bdd4a0ec8775a96d00ca87ac9f385587db4/librt-0.16.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:d6a365f2ab45a984d0e00eee0dd17f599ceab8cadab6ea07b6111c8132fc0e42", size = 567781, upload-time = "2026-09-29T00:54:37.409Z" }, + { url = "https://files.pythonhosted.org/packages/bb/bf/2345ba57a626e8c78c4ddcc724636a8df5a593fe46c1ee76bbf477e32b0d/librt-0.16.0-cp315-cp315-pyemscripten_2026_5_wasm32.whl", hash = "sha256:f01f3805f2dae4781c0c34b440e31740d082950bdaf89a6f601ad589a28af57a", size = 79177, upload-time = "2026-09-29T00:54:38.792Z" }, + { url = "https://files.pythonhosted.org/packages/1e/40/99e77936cc9207f629b077bf7cbc5e2f0827cddd7c29792f04ef881bd2c3/librt-0.16.0-cp315-cp315-win32.whl", hash = "sha256:b0e3e721c75d2e79a76d4422c79d7ba705fe1bbafec907037fe7a657a480a0e3", size = 100127, upload-time = "2026-09-29T00:54:40.251Z" }, + { url = "https://files.pythonhosted.org/packages/56/1e/801fe26bc622061b9dfd010e166d94142cb774b733217e6d98d1c0cf2638/librt-0.16.0-cp315-cp315-win_amd64.whl", hash = "sha256:bc02954b1295de798bbdb0b4e2d8a28c2117de8b5c73dcbeb27dc32572dfb971", size = 120480, upload-time = "2026-09-29T00:54:41.722Z" }, + { url = "https://files.pythonhosted.org/packages/bb/a9/d533983055bd36e112627384c2c038845d1df882540b8bcefb566475640b/librt-0.16.0-cp315-cp315-win_arm64.whl", hash = "sha256:c5db585d43449a5f54303d4b2774e45e1babd975cfe1630a3d708c0b80c3e560", size = 110915, upload-time = "2026-09-29T00:54:43.052Z" }, + { url = "https://files.pythonhosted.org/packages/55/fe/d62238fa9c653b0e0613290349467cb65711b5800e8e474f45e942a0ad95/librt-0.16.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f06c689cb14afd9b612727553a5ec5a40febf113ca41c4413a2b0b334285884b", size = 159714, upload-time = "2026-09-29T00:54:44.497Z" }, + { url = "https://files.pythonhosted.org/packages/f3/ac/f31efe7818700be72ba4f9af8a80fa67c39808c8d26dacc55dc1f6f35172/librt-0.16.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:13b4e8aba90b0b1c82474e9844aa9ffe7ad3faa484350e1da64cb8188d903134", size = 162086, upload-time = "2026-09-29T00:54:45.968Z" }, + { url = "https://files.pythonhosted.org/packages/d9/16/4d7487bf86a9d7e8e18f37ba5538789233ea693637379b75701bd35ec9de/librt-0.16.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a269c46ae327d8e6f8c1f85f7516cb52c0fa48127565a1105a4f4a05ff2a0b4", size = 712727, upload-time = "2026-09-29T00:54:47.486Z" }, + { url = "https://files.pythonhosted.org/packages/77/74/50cd550ccc1a517b9ed62347625c01ddf8c4afad66490312677c011458f6/librt-0.16.0-cp315-cp315t-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:a33e0dae1f8592146a4764d54ce842b278732d21a84e17c3bbe6b1bc158a2248", size = 681106, upload-time = "2026-09-29T00:54:49.126Z" }, + { url = "https://files.pythonhosted.org/packages/df/5d/7293f712975ee6fdd2251411fd9ef1c62bc99c7b83ecbe62dbc999b1fab7/librt-0.16.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:47ada6ea32636492c61aa8ad27ae3b9404bfe7a97e3ba946d1984236cc741da0", size = 705921, upload-time = "2026-09-29T00:54:50.905Z" }, + { url = "https://files.pythonhosted.org/packages/67/f7/8aab946f11d59d1bece9ffc65d994b200c789a8ca5a95c17e17e609f912a/librt-0.16.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43bd6e642d8a248c114327f98dd25ac5a7cb5aa168ef02f0559b91874df16b8", size = 731786, upload-time = "2026-09-29T00:54:52.584Z" }, + { url = "https://files.pythonhosted.org/packages/43/76/1c42ab31e7cb8384ebf6d3af607213c495222474f4940443ae7639ab7685/librt-0.16.0-cp315-cp315t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c3d1bb7841a816ace6449bb26d3f9560dbfa20e71c568d23f0f62bf1e68f50b1", size = 744964, upload-time = "2026-09-29T00:54:54.217Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2e/4b19982d933d2dfced671e840b219e4c1cd3f507df6e6dabb51bbd4e3850/librt-0.16.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:3931f7a3db322e7f44e02a280e3949326ce9579ad388ee8d691dc7c76da9fb70", size = 765305, upload-time = "2026-09-29T00:54:55.815Z" }, + { url = "https://files.pythonhosted.org/packages/b8/1b/e872583de2dcb3ac7746e7a2321aeeb168274f3952a87dc66e05ddb29faf/librt-0.16.0-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:f4462528b6000afe8f16907b5c7c2553abf1df005ba5140e6eb394541c3624c3", size = 744959, upload-time = "2026-09-29T00:54:57.532Z" }, + { url = "https://files.pythonhosted.org/packages/10/de/a18c6bcfb297af2674233e90b3c3661c3a0af0f1434a0c966d2ef708a835/librt-0.16.0-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:80039ba9b6a7d5f1a0175a4cca6bbefead87bd854c80abad1cb30afe47a830db", size = 758138, upload-time = "2026-09-29T00:54:59.484Z" }, + { url = "https://files.pythonhosted.org/packages/22/1c/0df1d732539c297bb1a093e1fe3204d2faf76a9022cf4e1d1c2fce059790/librt-0.16.0-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:7a1d272724b581bb6bc769dfdafed6da2ecc9886ba2450311de55a4ac2e1e9cd", size = 744268, upload-time = "2026-09-29T00:55:01.179Z" }, + { url = "https://files.pythonhosted.org/packages/a2/f7/ccaf31331f20c91a5bd9bd48ffc3f743f9c81bb5720cc7b2a720ca204f0a/librt-0.16.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:fbe4fb8c5445f7496d7f7f6bb0807875d09d47e6771ffa175fb2df2895fb86ba", size = 785783, upload-time = "2026-09-29T00:55:02.938Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ea/7421d9e6db894cd6cd788b604b3394a163ded6b942052b6f96c23ccf08e1/librt-0.16.0-cp315-cp315t-win32.whl", hash = "sha256:375bfe6b572a8f6cfc398709356046173bf27e64c4c5edaf5f7062f051fb4bf9", size = 104355, upload-time = "2026-09-29T00:55:04.533Z" }, + { url = "https://files.pythonhosted.org/packages/85/6d/7c31a506eb847bc58aeb2402d58e17605e821f68ab5df5e66fe274a6df41/librt-0.16.0-cp315-cp315t-win_amd64.whl", hash = "sha256:bd3150023d3dc2bc70f3784e59ffa1140d56ddba3d8125b3d6f9f85221279bfc", size = 126134, upload-time = "2026-09-29T00:55:06.017Z" }, + { url = "https://files.pythonhosted.org/packages/36/69/7a5d10ac409c4da0355e054a14371871da9b5557fcc42772cd00181c6cce/librt-0.16.0-cp315-cp315t-win_arm64.whl", hash = "sha256:8ceafb70f2a4f0826f11031942e59c0728fd98da112dc346d4352bde1e486866", size = 116391, upload-time = "2026-09-29T00:55:07.484Z" }, ] [[package]] @@ -1708,11 +1806,9 @@ wheels = [ [[package]] name = "mike" -version = "2.1.3" +version = "2.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata" }, - { name = "importlib-resources" }, { name = "jinja2" }, { name = "mkdocs" }, { name = "pyparsing" }, @@ -1720,9 +1816,9 @@ dependencies = [ { name = "pyyaml-env-tag" }, { name = "verspec" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ab/f7/2933f1a1fb0e0f077d5d6a92c6c7f8a54e6128241f116dff4df8b6050bbf/mike-2.1.3.tar.gz", hash = "sha256:abd79b8ea483fb0275b7972825d3082e5ae67a41820f8d8a0dc7a3f49944e810", size = 38119, upload-time = "2024-08-13T05:02:14.167Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b4/47/fa87e9d56bef16cdfe34b059a437e8c6f7ec6f1b9c378871c3cf95ebea9c/mike-2.2.0.tar.gz", hash = "sha256:1e3858e32c0f125aac14432fc7848434358f9ae0962c5c5cde387ad47f6ad25e", size = 38450, upload-time = "2026-04-14T04:59:03.944Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-py3-none-any.whl", hash = "sha256:d90c64077e84f06272437b464735130d380703a76a5738b152932884c60c062a", size = 33754, upload-time = "2024-08-13T05:02:12.515Z" }, + { url = "https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl", hash = "sha256:e1f4981c1152eec7c2490a3401142292cc47d686194188416db2648fdfe1d040", size = 34026, upload-time = "2026-04-14T04:59:02.602Z" }, ] [[package]] @@ -1779,17 +1875,18 @@ wheels = [ [[package]] name = "mkdocs-git-revision-date-localized-plugin" -version = "1.5.1" +version = "1.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "babel" }, { name = "gitpython" }, { name = "mkdocs" }, + { name = "packaging" }, { name = "tzdata", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/aa/16/25d7b1b930a802bf8b0c6ee64a9b34ea6e7d0a34c6bc69adbbb59b9d2f4b/mkdocs_git_revision_date_localized_plugin-1.5.1.tar.gz", hash = "sha256:2b0239455cd84784dd87ac8dfc9253fe4b2dd35e102696f21b5d34e2175981c6", size = 449557, upload-time = "2026-01-26T13:34:30.912Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/a7/ded2f0e2321213862225f9f657a51493af8f92626e3dd0a02ce9ef9b1131/mkdocs_git_revision_date_localized_plugin-1.6.0.tar.gz", hash = "sha256:469af4b344a4d493a6402aa92eec87a6138e1dac444e9551c1af06991453954b", size = 36957, upload-time = "2026-09-14T12:57:04.84Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4b/3f/4f663fb7e889fbb2fabef7a67ddd96f8355edca917aa724c6c6cda352d01/mkdocs_git_revision_date_localized_plugin-1.5.1-py3-none-any.whl", hash = "sha256:b00fd36ed0f9b2326b1488fd8fa31bf2ce64e68c4aa60a9ce857f10719571903", size = 26150, upload-time = "2026-01-26T13:34:28.768Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f7/d4aeef9f48150900634e7f864b076038e69014fb3ae4e515035803bca561/mkdocs_git_revision_date_localized_plugin-1.6.0-py3-none-any.whl", hash = "sha256:88b2d524d24c49a05cd6c9b1456f7dc0c8fa5e233b09ecf8a1dd12aebc127990", size = 27966, upload-time = "2026-09-14T12:57:03.607Z" }, ] [[package]] @@ -1806,14 +1903,15 @@ wheels = [ [[package]] name = "mkdocs-literate-nav" -version = "0.6.2" +version = "0.6.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mkdocs" }, + { name = "properdocs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f6/5f/99aa379b305cd1c2084d42db3d26f6de0ea9bf2cc1d10ed17f61aff35b9a/mkdocs_literate_nav-0.6.2.tar.gz", hash = "sha256:760e1708aa4be86af81a2b56e82c739d5a8388a0eab1517ecfd8e5aa40810a75", size = 17419, upload-time = "2025-03-18T21:53:09.711Z" } +sdist = { url = "https://files.pythonhosted.org/packages/01/af/dd3776a7a713f798f79bec7eb9c661d5cfb83ddc17d9a3667595e53e1559/mkdocs_literate_nav-0.6.3.tar.gz", hash = "sha256:edbaca22343f861fe4e34aac47d55a0c9955c640dbf02eea99fe631e914cf9ee", size = 17526, upload-time = "2026-03-16T23:26:50.688Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/84/b5b14d2745e4dd1a90115186284e9ee1b4d0863104011ab46abb7355a1c3/mkdocs_literate_nav-0.6.2-py3-none-any.whl", hash = "sha256:0a6489a26ec7598477b56fa112056a5e3a6c15729f0214bea8a4dbc55bd5f630", size = 13261, upload-time = "2025-03-18T21:53:08.1Z" }, + { url = "https://files.pythonhosted.org/packages/4e/2c/bcf1ae903975ad6f169abb05c1eb0f94395478364deb89270cf034081b29/mkdocs_literate_nav-0.6.3-py3-none-any.whl", hash = "sha256:2c421561280fa9184f88cbf399bebbd4cc17ee507e978a31ce11fd6f3aabf233", size = 13355, upload-time = "2026-03-16T23:26:49.562Z" }, ] [[package]] @@ -1839,7 +1937,7 @@ wheels = [ [[package]] name = "mkdocs-material" -version = "9.7.7" +version = "9.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "babel" }, @@ -1854,9 +1952,9 @@ dependencies = [ { name = "pymdown-extensions" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f1/cd/c05d3a530ba7934f144fb45f7203cd236adc25c7bdcc34673d202f4b0278/mkdocs_material-9.7.7.tar.gz", hash = "sha256:c0649c065b1b0512d60aad8c10f947f8e455284475239b364b610f2deb4d0855", size = 4097923, upload-time = "2026-07-17T16:21:33.156Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/02/3c0df248819286810d8479b3a72d9531db0cc36c042fe1ab3985f137c664/mkdocs_material-9.8.0.tar.gz", hash = "sha256:1ed4c5edaf405a3fb62e55288b8fdff592971729361548b1ffa757bf9849fb81", size = 4094495, upload-time = "2026-10-24T09:50:16.181Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/21/17c1bc9e6f47c972ad66fb2ac2568f99f90f1207eeb6fc3b34d094dba7b5/mkdocs_material-9.7.7-py3-none-any.whl", hash = "sha256:8ea9bb1737a5b524a5f9dcf2e1b4ebda8274ae3008aa7845720a97083bef708f", size = 9305438, upload-time = "2026-07-17T16:21:30.017Z" }, + { url = "https://files.pythonhosted.org/packages/c8/16/360f44c7702f27ff4670a647a16c72432291e311371d72b4c34a57e990e0/mkdocs_material-9.8.0-py3-none-any.whl", hash = "sha256:19304a7263c5700428227122b3b2699aa73f432c9de8816876adaec7d7293ce3", size = 9302245, upload-time = "2026-10-24T09:50:12.636Z" }, ] [[package]] @@ -2158,9 +2256,10 @@ wheels = [ [[package]] name = "mypy" -version = "1.19.1" +version = "2.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "ast-serialize" }, { name = "librt", marker = "platform_python_implementation != 'PyPy'" }, { name = "mypy-extensions" }, { name = "pathspec" }, @@ -2168,39 +2267,59 @@ dependencies = [ { name = "typing-extensions", version = "4.15.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, { name = "typing-extensions", version = "4.16.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f5/db/4efed9504bc01309ab9c2da7e352cc223569f05478012b5d9ece38fd44d2/mypy-1.19.1.tar.gz", hash = "sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba", size = 3582404, upload-time = "2025-12-15T05:03:48.42Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/63/e499890d8e39b1ff2df4c0c6ce5d371b6844ee22b8250687a99fd2f657a8/mypy-1.19.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5f05aa3d375b385734388e844bc01733bd33c644ab48e9684faa54e5389775ec", size = 13101333, upload-time = "2025-12-15T05:03:03.28Z" }, - { url = "https://files.pythonhosted.org/packages/72/4b/095626fc136fba96effc4fd4a82b41d688ab92124f8c4f7564bffe5cf1b0/mypy-1.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:022ea7279374af1a5d78dfcab853fe6a536eebfda4b59deab53cd21f6cd9f00b", size = 12164102, upload-time = "2025-12-15T05:02:33.611Z" }, - { url = "https://files.pythonhosted.org/packages/0c/5b/952928dd081bf88a83a5ccd49aaecfcd18fd0d2710c7ff07b8fb6f7032b9/mypy-1.19.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee4c11e460685c3e0c64a4c5de82ae143622410950d6be863303a1c4ba0e36d6", size = 12765799, upload-time = "2025-12-15T05:03:28.44Z" }, - { url = "https://files.pythonhosted.org/packages/2a/0d/93c2e4a287f74ef11a66fb6d49c7a9f05e47b0a4399040e6719b57f500d2/mypy-1.19.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de759aafbae8763283b2ee5869c7255391fbc4de3ff171f8f030b5ec48381b74", size = 13522149, upload-time = "2025-12-15T05:02:36.011Z" }, - { url = "https://files.pythonhosted.org/packages/7b/0e/33a294b56aaad2b338d203e3a1d8b453637ac36cb278b45005e0901cf148/mypy-1.19.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ab43590f9cd5108f41aacf9fca31841142c786827a74ab7cc8a2eacb634e09a1", size = 13810105, upload-time = "2025-12-15T05:02:40.327Z" }, - { url = "https://files.pythonhosted.org/packages/0e/fd/3e82603a0cb66b67c5e7abababce6bf1a929ddf67bf445e652684af5c5a0/mypy-1.19.1-cp310-cp310-win_amd64.whl", hash = "sha256:2899753e2f61e571b3971747e302d5f420c3fd09650e1951e99f823bc3089dac", size = 10057200, upload-time = "2025-12-15T05:02:51.012Z" }, - { url = "https://files.pythonhosted.org/packages/ef/47/6b3ebabd5474d9cdc170d1342fbf9dddc1b0ec13ec90bf9004ee6f391c31/mypy-1.19.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288", size = 13028539, upload-time = "2025-12-15T05:03:44.129Z" }, - { url = "https://files.pythonhosted.org/packages/5c/a6/ac7c7a88a3c9c54334f53a941b765e6ec6c4ebd65d3fe8cdcfbe0d0fd7db/mypy-1.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab", size = 12083163, upload-time = "2025-12-15T05:03:37.679Z" }, - { url = "https://files.pythonhosted.org/packages/67/af/3afa9cf880aa4a2c803798ac24f1d11ef72a0c8079689fac5cfd815e2830/mypy-1.19.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6", size = 12687629, upload-time = "2025-12-15T05:02:31.526Z" }, - { url = "https://files.pythonhosted.org/packages/2d/46/20f8a7114a56484ab268b0ab372461cb3a8f7deed31ea96b83a4e4cfcfca/mypy-1.19.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331", size = 13436933, upload-time = "2025-12-15T05:03:15.606Z" }, - { url = "https://files.pythonhosted.org/packages/5b/f8/33b291ea85050a21f15da910002460f1f445f8007adb29230f0adea279cb/mypy-1.19.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925", size = 13661754, upload-time = "2025-12-15T05:02:26.731Z" }, - { url = "https://files.pythonhosted.org/packages/fd/a3/47cbd4e85bec4335a9cd80cf67dbc02be21b5d4c9c23ad6b95d6c5196bac/mypy-1.19.1-cp311-cp311-win_amd64.whl", hash = "sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042", size = 10055772, upload-time = "2025-12-15T05:03:26.179Z" }, - { url = "https://files.pythonhosted.org/packages/06/8a/19bfae96f6615aa8a0604915512e0289b1fad33d5909bf7244f02935d33a/mypy-1.19.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1", size = 13206053, upload-time = "2025-12-15T05:03:46.622Z" }, - { url = "https://files.pythonhosted.org/packages/a5/34/3e63879ab041602154ba2a9f99817bb0c85c4df19a23a1443c8986e4d565/mypy-1.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e", size = 12219134, upload-time = "2025-12-15T05:03:24.367Z" }, - { url = "https://files.pythonhosted.org/packages/89/cc/2db6f0e95366b630364e09845672dbee0cbf0bbe753a204b29a944967cd9/mypy-1.19.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2", size = 12731616, upload-time = "2025-12-15T05:02:44.725Z" }, - { url = "https://files.pythonhosted.org/packages/00/be/dd56c1fd4807bc1eba1cf18b2a850d0de7bacb55e158755eb79f77c41f8e/mypy-1.19.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8", size = 13620847, upload-time = "2025-12-15T05:03:39.633Z" }, - { url = "https://files.pythonhosted.org/packages/6d/42/332951aae42b79329f743bf1da088cd75d8d4d9acc18fbcbd84f26c1af4e/mypy-1.19.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a", size = 13834976, upload-time = "2025-12-15T05:03:08.786Z" }, - { url = "https://files.pythonhosted.org/packages/6f/63/e7493e5f90e1e085c562bb06e2eb32cae27c5057b9653348d38b47daaecc/mypy-1.19.1-cp312-cp312-win_amd64.whl", hash = "sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13", size = 10118104, upload-time = "2025-12-15T05:03:10.834Z" }, - { url = "https://files.pythonhosted.org/packages/de/9f/a6abae693f7a0c697dbb435aac52e958dc8da44e92e08ba88d2e42326176/mypy-1.19.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250", size = 13201927, upload-time = "2025-12-15T05:02:29.138Z" }, - { url = "https://files.pythonhosted.org/packages/9a/a4/45c35ccf6e1c65afc23a069f50e2c66f46bd3798cbe0d680c12d12935caa/mypy-1.19.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b", size = 12206730, upload-time = "2025-12-15T05:03:01.325Z" }, - { url = "https://files.pythonhosted.org/packages/05/bb/cdcf89678e26b187650512620eec8368fded4cfd99cfcb431e4cdfd19dec/mypy-1.19.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e", size = 12724581, upload-time = "2025-12-15T05:03:20.087Z" }, - { url = "https://files.pythonhosted.org/packages/d1/32/dd260d52babf67bad8e6770f8e1102021877ce0edea106e72df5626bb0ec/mypy-1.19.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef", size = 13616252, upload-time = "2025-12-15T05:02:49.036Z" }, - { url = "https://files.pythonhosted.org/packages/71/d0/5e60a9d2e3bd48432ae2b454b7ef2b62a960ab51292b1eda2a95edd78198/mypy-1.19.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75", size = 13840848, upload-time = "2025-12-15T05:02:55.95Z" }, - { url = "https://files.pythonhosted.org/packages/98/76/d32051fa65ecf6cc8c6610956473abdc9b4c43301107476ac03559507843/mypy-1.19.1-cp313-cp313-win_amd64.whl", hash = "sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd", size = 10135510, upload-time = "2025-12-15T05:02:58.438Z" }, - { url = "https://files.pythonhosted.org/packages/de/eb/b83e75f4c820c4247a58580ef86fcd35165028f191e7e1ba57128c52782d/mypy-1.19.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1", size = 13199744, upload-time = "2025-12-15T05:03:30.823Z" }, - { url = "https://files.pythonhosted.org/packages/94/28/52785ab7bfa165f87fcbb61547a93f98bb20e7f82f90f165a1f69bce7b3d/mypy-1.19.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718", size = 12215815, upload-time = "2025-12-15T05:02:42.323Z" }, - { url = "https://files.pythonhosted.org/packages/0a/c6/bdd60774a0dbfb05122e3e925f2e9e846c009e479dcec4821dad881f5b52/mypy-1.19.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b", size = 12740047, upload-time = "2025-12-15T05:03:33.168Z" }, - { url = "https://files.pythonhosted.org/packages/32/2a/66ba933fe6c76bd40d1fe916a83f04fed253152f451a877520b3c4a5e41e/mypy-1.19.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045", size = 13601998, upload-time = "2025-12-15T05:03:13.056Z" }, - { url = "https://files.pythonhosted.org/packages/e3/da/5055c63e377c5c2418760411fd6a63ee2b96cf95397259038756c042574f/mypy-1.19.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957", size = 13807476, upload-time = "2025-12-15T05:03:17.977Z" }, - { url = "https://files.pythonhosted.org/packages/cd/09/4ebd873390a063176f06b0dbf1f7783dd87bd120eae7727fa4ae4179b685/mypy-1.19.1-cp314-cp314-win_amd64.whl", hash = "sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f", size = 10281872, upload-time = "2025-12-15T05:03:05.549Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f4/4ce9a05ce5ded1de3ec1c1d96cf9f9504a04e54ce0ed55cfa38619a32b8d/mypy-1.19.1-py3-none-any.whl", hash = "sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247", size = 2471239, upload-time = "2025-12-15T05:03:07.248Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/34/4e/64300736cf0a0373a27b94a91b664ee7382e36f77b0621bae6381da3e180/mypy-2.4.0.tar.gz", hash = "sha256:77bdaebd452f43fcfc4cc3ba94352a3ea537cd01e3f2d0879f48673d2ec00d6e", size = 4064425, upload-time = "2026-10-01T20:40:39.229Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/0a/78c9ac93933e2ecd51d807021f78c03ffe98640f33951a8be159f5fd55bc/mypy-2.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ffda5244fd1ad71a1e54405e35f50d09b80c3978efa120f58bd1252ae32c62d2", size = 14408618, upload-time = "2026-10-01T20:39:46.766Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4f/5f5f4429fd5a4218ce6268164a66afeed75c7e2ce5522a4d163faaa5fe85/mypy-2.4.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:615b03922d40e186fd1df73156473db0ba525c639bb4fd1cf28e1694879c9b23", size = 14552749, upload-time = "2026-10-01T20:40:08.325Z" }, + { url = "https://files.pythonhosted.org/packages/54/78/fa1c319cd51db7a6027b46117460d5a361c6bba0c0f0f0670a2dab8ce2a5/mypy-2.4.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13fa24f439c0e48a290a3922fa14ccd22f2762bae99d2142931b3e40a9055080", size = 15505846, upload-time = "2026-10-01T20:39:15.475Z" }, + { url = "https://files.pythonhosted.org/packages/e2/5a/14c02690776fb04e9fa60b81173cb9ae6315e0745fad3813b303737f2f0c/mypy-2.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3adef556a19eb3b630bf86a79c29d7da3d61e541472d0d897ca01b171c0abf8f", size = 15823059, upload-time = "2026-10-01T20:39:35.429Z" }, + { url = "https://files.pythonhosted.org/packages/76/d8/d29afa819f8cb765018d6e2773e390a41ea4592f75abe417135969646857/mypy-2.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:1dc0f64b0a92ae27a49d2175f0bacfa56e15bdc5b420cf92e0c1f79292219cbb", size = 11312927, upload-time = "2026-10-01T20:39:28.509Z" }, + { url = "https://files.pythonhosted.org/packages/bc/c8/966dec4d80303855d824e6bf67fe1da812d88adfe4d75e24d8545dab4826/mypy-2.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:4a378fc15fb33e321f04652c166ce73eeb8833a97c3d218132844e938cd93220", size = 10879252, upload-time = "2026-10-01T20:38:41.545Z" }, + { url = "https://files.pythonhosted.org/packages/26/67/e53965e67d23d48e78dd603aa7525a8d77e7818c23954cc217ccde5cd5c0/mypy-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d20e6c7c35fcbf2a0ebdd0eaeacfbc243009dfd33ab7822d54e213912e6dbbd", size = 14315745, upload-time = "2026-10-01T20:39:25.03Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5d/a588ccd57625822d8484d7aff4e9c70f88d042a91c2ec84324a2bc14b3f3/mypy-2.4.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3011537be6cf1de4511c0255a324362a812b58184bbe61e15f59c8b31033bd74", size = 14465652, upload-time = "2026-10-01T20:38:57.19Z" }, + { url = "https://files.pythonhosted.org/packages/05/af/b4978a5566cb829ca563dc08e3ad8d944f116078786ad54ba3dff2bcb64d/mypy-2.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a96b07a49b7b1d025ce59c1b3acbcf24bead9a83da4523c4a6bde1bb94e7a0e1", size = 15419180, upload-time = "2026-10-01T20:40:27.808Z" }, + { url = "https://files.pythonhosted.org/packages/b2/8c/52c71f31c54d0a749d832cc73b933c6e38c52d9b270d5503e031c73723dc/mypy-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7c4f8f8d1d1c0e2832d8ee7113dd08f6df6c7aad9e863fcbed9f25832be0b8c4", size = 15669212, upload-time = "2026-10-01T20:39:20.443Z" }, + { url = "https://files.pythonhosted.org/packages/e8/55/ba63121494404fd7d3787ec176ccd02820d6ec125ac4e7c4c0b79f2cc6c7/mypy-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba05652540bf12828e52abae807b024b09ca144ff4f75e2450a81d69c376425b", size = 11299572, upload-time = "2026-10-01T20:40:03.627Z" }, + { url = "https://files.pythonhosted.org/packages/9c/9c/385c81b5c0d3a2917f077c4da660d0493f9521ccfd4b058e33b860f72d02/mypy-2.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:6306086b87cf7f8a29aa618d9fd9bffb56c59247166b9660fdb54d86d7714ecd", size = 10869751, upload-time = "2026-10-01T20:40:25.483Z" }, + { url = "https://files.pythonhosted.org/packages/68/ed/e5d7cf4017e74a1c1e1c4058ce8f614fc1e3e7606564f47166e22bfc9f95/mypy-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e05ff2925d8b37ad26c80c1b9dc43ae5d455da2df1e23c24c095a6425917c57e", size = 14378593, upload-time = "2026-10-01T20:38:48.222Z" }, + { url = "https://files.pythonhosted.org/packages/30/7d/12d994886a922f0f1997becc9c6625198d61eeb5962558a886af7dd38d54/mypy-2.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29243242cf72582b65f9582ad9e56e8cb281566ed3519f4cd70bb8b9f2977e90", size = 14464697, upload-time = "2026-10-01T20:39:11.059Z" }, + { url = "https://files.pythonhosted.org/packages/f3/9e/bcc9af755425ad17790bf11d73c2ea7592914cf309ee1340997670f9d57a/mypy-2.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29eb0b9427a6b11b992e452f6cceb8af724f4dceb47e779d0b35e405e996ea5e", size = 15552257, upload-time = "2026-10-01T20:39:56.269Z" }, + { url = "https://files.pythonhosted.org/packages/af/0c/3343fc4525d6f00d75ad17a93a9f052d5163641cb8911840d4a12cb59ff2/mypy-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e3ebe2f72a2a1156065a9851570ffbf50c0a93cdccadef9c6e05c508a4fd10b1", size = 15800443, upload-time = "2026-10-01T20:38:54.815Z" }, + { url = "https://files.pythonhosted.org/packages/8f/0e/69aac6b8159da7c53e6115a2be1bf48e85503402cadbf506dd708e8b2ad7/mypy-2.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:236e0d68f6941992b0811128e652590f590db444ab29ad8f1324765b9298b946", size = 11381574, upload-time = "2026-10-01T20:39:49.406Z" }, + { url = "https://files.pythonhosted.org/packages/6e/d3/d32ce4feb5993eec09d2024bef16cedc9b93701b1446b86092f08b24491b/mypy-2.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:82d0f94c8587ccb472622ee7795280aaa38a06640d5f45b3f16909d6dd86a989", size = 10944729, upload-time = "2026-10-01T20:40:15.203Z" }, + { url = "https://files.pythonhosted.org/packages/44/f2/eb15183c97c69d7cbfac990a6efd33a19ecfd97dab9e714c742fa78a784f/mypy-2.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7da85fbcff6dac1abcc636707bed38b45598131fb7a605d9719c70b5cc733af8", size = 14213395, upload-time = "2026-10-01T20:40:21.178Z" }, + { url = "https://files.pythonhosted.org/packages/8c/b5/ba91b6ff65e4d6b6ff53b2b3b3ac5f1babf0c7c27d0b43a0196b1c967926/mypy-2.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4209da39d85cf240f762af622d8180fcdfcb4727d021f44ade62d613a1a43324", size = 14373009, upload-time = "2026-10-01T20:39:58.86Z" }, + { url = "https://files.pythonhosted.org/packages/d5/c4/484275efc935c0003e55e4e8a33e4b8e99528ee956c12256ece4708f903f/mypy-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6be721bd4bd57576193653b75b4af3461c9d0bf7dd8b528f782e9be210dc75bb", size = 15465557, upload-time = "2026-10-01T20:39:01.794Z" }, + { url = "https://files.pythonhosted.org/packages/50/30/66eb6fdd0875e3c9025a02f0bb0ea2e524b74274b658c37fde0068c4939d/mypy-2.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e1fde197ae65be856a034a91b70ed747a16562ca69577785f06c661548424bf1", size = 15728673, upload-time = "2026-10-01T20:38:43.724Z" }, + { url = "https://files.pythonhosted.org/packages/58/bc/2aa98fd7f49c42dba8e9c065886fadffdd00f3c654cff3f2a7103a797ac8/mypy-2.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:295ecf2e57542cd836ca537486951289678c8c7d1ee6ad74ebe29b2168a003cf", size = 11389803, upload-time = "2026-10-01T20:39:37.547Z" }, + { url = "https://files.pythonhosted.org/packages/49/41/17b60df2d946792ef6af43b89351f5c9ddabc69053206b2304945572a744/mypy-2.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:bc378bdad4e9f12b5bd96466083d1e71acf00594ec9c7b2bdb5e02816f77f303", size = 10951060, upload-time = "2026-10-01T20:39:04.015Z" }, + { url = "https://files.pythonhosted.org/packages/e0/66/924be0b653372ed31ad5c48e26044cc00840e591943a56e61621cf05b60e/mypy-2.4.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:058165f564ccf559c68c70fec2091fca5891110480210c22594635e3f6683437", size = 14234230, upload-time = "2026-10-01T20:39:44.535Z" }, + { url = "https://files.pythonhosted.org/packages/56/39/c4f176880a4177123576de6cec6309feea8f42fca2bf2f6584e88054f656/mypy-2.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9fa247e02b505a45a2775f69df38d360d197e3790bc60f717595db9eda358b6e", size = 14392944, upload-time = "2026-10-01T20:40:05.78Z" }, + { url = "https://files.pythonhosted.org/packages/bc/1c/26e16977e25ef2494a74f8ffc872a76ec2c3aa43c3156057cbdf88f352c5/mypy-2.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20e9a5cd875837520c43db98dea0b6d0c2197833d95c30127d8f570fb9b1f00b", size = 15441463, upload-time = "2026-10-01T20:40:32.412Z" }, + { url = "https://files.pythonhosted.org/packages/31/9c/9e4b049f0ecefbfd6817ca2a16eea55dd74a07950268edc6cffd29ccfe98/mypy-2.4.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9f03a7828cca2b0adcd6662aee8f2711ff8830e1027641fdea3ab0b787483566", size = 15705406, upload-time = "2026-10-01T20:40:34.844Z" }, + { url = "https://files.pythonhosted.org/packages/4a/5e/e861b5f6c5ef9ee6cd24683aed1edecf82a26dbd536049f9b7850b586267/mypy-2.4.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:9279488933040b638c0ab739084c0ca100efeea6db581bf5d7628d8e89de53fe", size = 7897523, upload-time = "2026-10-01T20:39:39.861Z" }, + { url = "https://files.pythonhosted.org/packages/3a/87/61ffee58b25a956532a6006fae84918a2de849ed25f397492b2e815fe7b3/mypy-2.4.0-cp314-cp314-win_amd64.whl", hash = "sha256:2106b55105ba5ea9be4f53a24517fc5fa927ff1585edc9bc1a975abb72caef89", size = 11576345, upload-time = "2026-10-01T20:39:41.553Z" }, + { url = "https://files.pythonhosted.org/packages/a1/88/a331c20698971c2ce8d1c30f317fd61b5be13a85b1f053e12dfa22ac6568/mypy-2.4.0-cp314-cp314-win_arm64.whl", hash = "sha256:528c8744b8b5e3ecb8774f86af38d2376216816e9908317ad055f3c9c2d74799", size = 11172062, upload-time = "2026-10-01T20:38:59.534Z" }, + { url = "https://files.pythonhosted.org/packages/47/c0/4f7daa73270dced8e86c6f4a911c68082d03a84e6c1ec9bd916028d66131/mypy-2.4.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0bb95cf34899e4619c61ab0a8667804e139e580b30d5df12af2102dfe44d0c97", size = 15711208, upload-time = "2026-10-01T20:39:30.597Z" }, + { url = "https://files.pythonhosted.org/packages/2f/05/f1afa303c678be24cf7a266d38fb24b3de4599a024c2f9ba0d5905a3efa3/mypy-2.4.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:86d616fe84c6eab8026f8c50ab5bcb90db780d2ccd233d971e34e92bede9b359", size = 15935442, upload-time = "2026-10-01T20:39:22.781Z" }, + { url = "https://files.pythonhosted.org/packages/9d/d6/6a1a45459b63716e0d035f4892a926d3054f0a8cbfa02551d228a9946083/mypy-2.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3f86fd1313dd69d013e265f1fdcd12ea7a9d606f9875b2a3db946cd334555f3", size = 17240044, upload-time = "2026-10-01T20:39:32.95Z" }, + { url = "https://files.pythonhosted.org/packages/87/85/ae33bee66c13f98d421964d87bf0888be941063bc75c1204a4cf142cf1cc/mypy-2.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:720434d48542ecfe84d32d287b727569d3fc8f5769acd39051130e490a5c295c", size = 17545856, upload-time = "2026-10-01T20:39:08.827Z" }, + { url = "https://files.pythonhosted.org/packages/df/de/eeff209b65c3e267818d79333bb9f058da6e4e73761461bd94748a2eb628/mypy-2.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:a6e851b82c0661f69f1630fc16172c68787a6a9cf0991e7c6437d60976cdcd76", size = 12369342, upload-time = "2026-10-01T20:40:10.516Z" }, + { url = "https://files.pythonhosted.org/packages/2b/43/e62d8d5c1dd737aa248968302ff7d6eabf997c3301773ed8bcb64932ca77/mypy-2.4.0-cp314-cp314t-win_arm64.whl", hash = "sha256:3bd0e340f0ebe65c548210f53be3fd8192e83964760caf0c28bef368e68b0d37", size = 11849099, upload-time = "2026-10-01T20:39:51.834Z" }, + { url = "https://files.pythonhosted.org/packages/2e/5f/335b8980055118dc131355155883fb676bb2161a0d97e08658e479c776fb/mypy-2.4.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:afa89837d9be67e0cadfa33bca3bb7efdda98c3b07e74dc3b635ebfb1c8a926a", size = 14241302, upload-time = "2026-10-01T20:39:13.227Z" }, + { url = "https://files.pythonhosted.org/packages/18/37/1482fdc49332b145828912b15f16eee0c4ca70a8bce0f6514ece79b14680/mypy-2.4.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb443e81057896132d3642d6be219e6efd158691ac7883e3ba8fcb469865f05d", size = 14408200, upload-time = "2026-10-01T20:38:52.576Z" }, + { url = "https://files.pythonhosted.org/packages/04/09/dce2e8f6c1b31053c430ef6963f6f7a38ccb49b90c5e01e37ed0129b7d5a/mypy-2.4.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7f38f57d344f8b6accb40e01c3d83cfc590498231724d16c07ffb7940f157818", size = 15444409, upload-time = "2026-10-01T20:39:18.1Z" }, + { url = "https://files.pythonhosted.org/packages/43/c5/91b68306da4cd280cb15be35dbb5ffc343cabd67c4b121b6625bf2d13177/mypy-2.4.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e76172710bd4e5eeae061abfd68347e5264632e02778be61784671ae3a2132f5", size = 15731186, upload-time = "2026-10-01T20:40:23.426Z" }, + { url = "https://files.pythonhosted.org/packages/64/71/2d0340182a8f27352fb1e25531355951108b506097c433937e9eec452ffd/mypy-2.4.0-cp315-cp315-pyemscripten_2026_5_wasm32.whl", hash = "sha256:f83353e47ab520bf6fd4df8f5897d9fe081211f2fbc4b7d37736a3e3c166cbcf", size = 7897838, upload-time = "2026-10-01T20:38:50.779Z" }, + { url = "https://files.pythonhosted.org/packages/3e/08/32703c117e134c02efa2a82705bb40cee91eaedea10b6530e20eba651b1f/mypy-2.4.0-cp315-cp315-win_amd64.whl", hash = "sha256:970b221ed5842213d98e3c480c08f795ace4b1f81fb21e1b126bd0476bce1c34", size = 11575700, upload-time = "2026-10-01T20:39:53.982Z" }, + { url = "https://files.pythonhosted.org/packages/ab/08/08bb269feafdaad031046ee2d771528a64467e6a180f962afc28c4a3ccd8/mypy-2.4.0-cp315-cp315-win_arm64.whl", hash = "sha256:502b94b0b331f7dafe32fd6b151797ddbb4f32385b362e722c783a025e5954a3", size = 11172908, upload-time = "2026-10-01T20:40:12.91Z" }, + { url = "https://files.pythonhosted.org/packages/fb/3f/c5c92626006ca92c7686adfbece47fc6a0daa0e54753952a9ad13ce0561c/mypy-2.4.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:c9de622fd397495695d0598ddc789222bfcfec9d7c9ec3a1e385c855e3bc5e01", size = 15705970, upload-time = "2026-10-01T20:40:17.79Z" }, + { url = "https://files.pythonhosted.org/packages/10/f3/863365f7997a76a5a1dd42d7902ab05afa4124e8419089cbca1ce2554db1/mypy-2.4.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9f459f0b4f0596d9d51fe7716b404b35287b99e77da98a7af90a65dd5fd61141", size = 15942234, upload-time = "2026-10-01T20:40:37.243Z" }, + { url = "https://files.pythonhosted.org/packages/f6/30/2f45b1f425a2c95dbe1a3f4d076bfd42b76e9615dba5906230703b14e4eb/mypy-2.4.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f9b028548b3af480e2b1ed8df14ccaac86f99c9f600d1580770ab7ba3dcd40f0", size = 17218364, upload-time = "2026-10-01T20:39:06.497Z" }, + { url = "https://files.pythonhosted.org/packages/43/8b/5b2bbfc69e84800b78fa2dba16d995b003f93b573558e412c5490d6e6c37/mypy-2.4.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:cb734b2668c1f40d07ce093bbeb4407e9527c67901627b0e1679825be3f09975", size = 17557934, upload-time = "2026-10-01T20:38:46.077Z" }, + { url = "https://files.pythonhosted.org/packages/df/c0/1a5dc601c22041a7bbfe1ff71cf097fbbd4fb49930867c6789baf5102106/mypy-2.4.0-cp315-cp315t-win_amd64.whl", hash = "sha256:172e30b8fea631fe310f0c665477f52d9ea40bb4e99e0c81dc30118563b13710", size = 12350955, upload-time = "2026-10-01T20:40:01.52Z" }, + { url = "https://files.pythonhosted.org/packages/1c/bc/697e9e26fc2a86c094ad67ee1e419971b7f01ded66ee66231b09e9f3e12e/mypy-2.4.0-cp315-cp315t-win_arm64.whl", hash = "sha256:5786ef987b3767e51aaa53f20aec104c0252b42ecda7aef8e8b4cbae279b05c5", size = 11842738, upload-time = "2026-10-01T20:40:30.026Z" }, + { url = "https://files.pythonhosted.org/packages/81/12/46ae8670c98a3cd0286ca5645c2f918f8f6be65edfed81b916010619f668/mypy-2.4.0-py3-none-any.whl", hash = "sha256:d01c5d26a352acc6d5cf3128225477e1e8465e8d3029d4c345807fbf7f3cf093", size = 2800734, upload-time = "2026-10-01T20:39:26.837Z" }, ] [[package]] @@ -2431,7 +2550,7 @@ wheels = [ [[package]] name = "pre-commit" -version = "4.5.1" +version = "4.6.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cfgv" }, @@ -2440,18 +2559,18 @@ dependencies = [ { name = "pyyaml" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/40/f1/6d86a29246dfd2e9b6237f0b5823717f60cad94d47ddc26afa916d21f525/pre_commit-4.5.1.tar.gz", hash = "sha256:eb545fcff725875197837263e977ea257a402056661f09dae08e4b149b030a61", size = 198232, upload-time = "2025-12-16T21:14:33.552Z" } +sdist = { url = "https://files.pythonhosted.org/packages/74/89/1f3e8e1fc3e97de0fa963495832f581f025f29471602a309e48808244292/pre_commit-4.6.2.tar.gz", hash = "sha256:8f5d7bfb021ecdbcd9d49d89847082dd24172ccde534390081a679ad046e2441", size = 198670, upload-time = "2026-08-10T22:07:18.421Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl", hash = "sha256:3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77", size = 226437, upload-time = "2025-12-16T21:14:32.409Z" }, + { url = "https://files.pythonhosted.org/packages/45/e2/bbb7129c9e7999a6b8ee9cca3b66486c25c423ab5a75f34071798b74ce94/pre_commit-4.6.2-py2.py3-none-any.whl", hash = "sha256:e2dde9a75d3bce11bd3831c26d134df00a2803c1d818be6a0383c3dcda25dc4e", size = 226202, upload-time = "2026-08-10T22:07:16.942Z" }, ] [[package]] name = "prometheus-client" -version = "0.24.1" +version = "0.26.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f0/58/a794d23feb6b00fc0c72787d7e87d872a6730dd9ed7c7b3e954637d8f280/prometheus_client-0.24.1.tar.gz", hash = "sha256:7e0ced7fbbd40f7b84962d5d2ab6f17ef88a72504dcf7c0b40737b43b2a461f9", size = 85616, upload-time = "2026-01-14T15:26:26.965Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/73/f1334c29c2af4cd9dba6c7817e61b611bd0215e2eb5565c6064a4de18802/prometheus_client-0.26.0.tar.gz", hash = "sha256:04a91bcf94e2cf74a44a1a874d651a2e853ed354b6e822f3b7487751465d5c2b", size = 92910, upload-time = "2026-07-24T19:36:41.893Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl", hash = "sha256:150db128af71a5c2482b36e588fc8a6b95e498750da4b17065947c16070f4055", size = 64057, upload-time = "2026-01-14T15:26:24.42Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a3/b69efbf4143b5b9859b977770bbbabcc2796b702fa69dc40271e45cd5a56/prometheus_client-0.26.0-py3-none-any.whl", hash = "sha256:fa93d06737aa02bacd05794768508bb97d2fbee28cb3bca04eaae92f0ca953d6", size = 64494, upload-time = "2026-07-24T19:36:40.854Z" }, ] [[package]] @@ -2568,6 +2687,29 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" }, ] +[[package]] +name = "properdocs" +version = "1.6.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "ghp-import" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "markupsafe" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "platformdirs" }, + { name = "pyyaml" }, + { name = "pyyaml-env-tag" }, + { name = "watchdog" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ec/29/f27a4e1eddf72ed3db6e47818fbafe6debbf09fd7051f9c1a007239b46ef/properdocs-1.6.7.tar.gz", hash = "sha256:adc7b16e562890af0e098a7e5b02e3a81c20894a87d6a28d345c9300de73c26e", size = 276141, upload-time = "2026-03-20T20:07:48.167Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/4d/fc923f5c85318ee8cc903566dc4e0ebe41b2dfc1d2ecf5546db232397ed6/properdocs-1.6.7-py3-none-any.whl", hash = "sha256:6fa0cfa2e01bf338f684892c8a506cf70ea88ae7f3479c933b6fa20168101cbd", size = 225406, upload-time = "2026-03-20T20:07:46.875Z" }, +] + [[package]] name = "psutil" version = "7.2.2" @@ -2822,40 +2964,40 @@ wheels = [ [[package]] name = "pyrefly" -version = "1.3.1" +version = "1.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4c/7e/082cc1b392318bacfbc087732524f3e089e9e7fe45b7645c4649b6f1f1e9/pyrefly-1.3.1.tar.gz", hash = "sha256:b774f1dfac82867fc16fe2175d80a630e2a72a6835d5b7e492568d6bfb6b05e7", size = 6679145, upload-time = "2026-09-15T05:09:34.49Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/3e/ea6893be167fa14307d7f9a924bed9ecbbbd91b01953890b9b3c58ed5359/pyrefly-1.4.0.tar.gz", hash = "sha256:bb57c004a4842cfe93f93aebb5203ca6209a5f0c8bda47e8bc289e70940fd910", size = 6962062, upload-time = "2026-10-15T16:54:11.819Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/bc/f09b5bd7eed796349bd93627aa2c3086df7ed0a114dafc3d2b2841599ee7/pyrefly-1.3.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0a2a7dfed824fb066aa8a7c8d856c152b98e998fb84b954d5f892fb9834c0bd1", size = 15090117, upload-time = "2026-09-15T05:08:58.477Z" }, - { url = "https://files.pythonhosted.org/packages/78/24/a31e7de8e0f310c9f0753826d0df8b6a8ff86793941a6bd88ba24b735633/pyrefly-1.3.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:37a1a1fb41e7190fe3964a877875dd809d6ee2887809e2c3d6e5f25a69805bfd", size = 14430773, upload-time = "2026-09-15T05:09:01.67Z" }, - { url = "https://files.pythonhosted.org/packages/75/e1/022352beb186f36d6213a95a975c42676ee418ff5e730629378d25564c5e/pyrefly-1.3.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45b7650bc651a5a784701f2fb4f579da9a421c4d1b5fd91f9048f4529e46093c", size = 14877762, upload-time = "2026-09-15T05:09:04.767Z" }, - { url = "https://files.pythonhosted.org/packages/19/2c/d62a1b445aad1fd46375b83393b8a67da53883aeeba73d269ce71b3e8fd1/pyrefly-1.3.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad57f38bc73679c14a5f62995a2bd3bc43649b7270c858487e2eab78a6f95362", size = 16118225, upload-time = "2026-09-15T05:09:07.828Z" }, - { url = "https://files.pythonhosted.org/packages/32/67/3c3fa8a13e3ce8d8322ffb3627255a41a52261f17793e1a24e9214f10857/pyrefly-1.3.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3506b1252e9f5d755d0693c5a46d46b85579d36534f6e22a41eb8e098d0dde90", size = 16051197, upload-time = "2026-09-15T05:09:10.81Z" }, - { url = "https://files.pythonhosted.org/packages/19/d1/84f81b9e32288b5d11c75e006f67e0f6b78b85da575673bd1a21524c8172/pyrefly-1.3.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39d5a17c1ad655e5f93a6e8e0be90b8db28c6015fe07d6ed4e054891c9e14ef8", size = 15440062, upload-time = "2026-09-15T05:09:14.641Z" }, - { url = "https://files.pythonhosted.org/packages/46/3c/2aa0c5ad6a2957a728bb38cfab70d1e9cafad21b0b1c1d92df74a3cf22bd/pyrefly-1.3.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c61e9dcf888beb81ca0e0c60ea4442640fdcf2f1f65bfe3d9f5d89b85516eb03", size = 14898534, upload-time = "2026-09-15T05:09:17.823Z" }, - { url = "https://files.pythonhosted.org/packages/03/5d/2974f249fb2e285f966485719d977c5a2248cc4866403af94d935775ff15/pyrefly-1.3.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a78eed1c53f37807f0e2997be8edbe833b91eb9915f2cb553a1bdcd599e7105c", size = 15477758, upload-time = "2026-09-15T05:09:20.964Z" }, - { url = "https://files.pythonhosted.org/packages/68/79/d31f8f0abf5b0610ec24183286ee8a1ee5b76c9aaaa91091399d7e1aaf60/pyrefly-1.3.1-py3-none-win32.whl", hash = "sha256:ea0d0349f1bc80fe8e00a7b3640e40db7486398b685f87b9bd5d2207063668f0", size = 14133005, upload-time = "2026-09-15T05:09:25.03Z" }, - { url = "https://files.pythonhosted.org/packages/3f/23/1859f47f536314755d80c4ec2a76d2698435ae8b73604bcd1dfa57ecb39b/pyrefly-1.3.1-py3-none-win_amd64.whl", hash = "sha256:4c24e7d99df9237916c33be23714219a7c8eaf22bad2ac0c3e1d45adcf7df8fb", size = 15066557, upload-time = "2026-09-15T05:09:28.265Z" }, - { url = "https://files.pythonhosted.org/packages/92/2a/73e3721921c2bb2c950a9f8c362ee5e2367556b5d4416eb4f8f88503e66f/pyrefly-1.3.1-py3-none-win_arm64.whl", hash = "sha256:1ed85e2b957a78e93353125d890ce3668ce450e49b74025a15c87b6e8ec7f3d1", size = 14348209, upload-time = "2026-09-15T05:09:31.422Z" }, + { url = "https://files.pythonhosted.org/packages/6a/17/dfce6611acc00cb26667e5e1011438cc510f3067f961e0f07f7a0c68f416/pyrefly-1.4.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:460cec39bc8743915e9c2c8c10ba926ad0b29b099d89c1859fb97e0059f42fa7", size = 15705624, upload-time = "2026-10-15T16:53:43.412Z" }, + { url = "https://files.pythonhosted.org/packages/a6/78/a7b96442123fa6ed733de0d1ea933e35d6fc6b7c9cf16e05279abb493493/pyrefly-1.4.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5a6370d686b6cbbac8869832f09a52012888371956fbc68d446a349bc85ccd43", size = 14978669, upload-time = "2026-10-15T16:53:46.546Z" }, + { url = "https://files.pythonhosted.org/packages/23/97/dfcfec6a9d8948ab4b2746f7e87558a82bffabb7a54c22e7d3ce4bdc1932/pyrefly-1.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f1b16923a6583a6764e8aec07787e2ef4df644c7030294cba71339783a9451c", size = 15438858, upload-time = "2026-10-15T16:53:48.904Z" }, + { url = "https://files.pythonhosted.org/packages/31/12/6fa414aa87e398d6ddc7145a5d993b0975fc3511198dbb72c47873653ab6/pyrefly-1.4.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:688ad4cb4d6e711d67026fdcfb37b599f86061efe11ba5704287330e7041a69e", size = 16852241, upload-time = "2026-10-15T16:53:51.496Z" }, + { url = "https://files.pythonhosted.org/packages/a8/73/2d7312262cf6481d6ad46eed55b8f2592c3cff60f95cc2f30a114cd1484e/pyrefly-1.4.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5f3c9dddb6f3128beb49cf4e0f5cb88d4d17f039008d8e0c2be653966acd234", size = 16751917, upload-time = "2026-10-15T16:53:54.39Z" }, + { url = "https://files.pythonhosted.org/packages/2c/65/b44a1cb23667bcbcdc88558cbef79fa9e07a1152c2a1da148036b1a2e0d1/pyrefly-1.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6951f51687304caebfedf13dd1a943aeafdbc95abcc4e24a683b97467a77007", size = 16066345, upload-time = "2026-10-15T16:53:57.436Z" }, + { url = "https://files.pythonhosted.org/packages/a6/07/7ca6ff0c53e3a90ecdab05790d33f430fca5c48687613a0b182744166d98/pyrefly-1.4.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:838de4d4a8b9b8ed39bedd0b8b55629c69661d73a6fa3a3a4adff24b9dbeb399", size = 15461223, upload-time = "2026-10-15T16:54:00.364Z" }, + { url = "https://files.pythonhosted.org/packages/61/be/ec7b2f38a898ce5b2219dda730e87d31fc8cfb2108a3d5844f9d590f1281/pyrefly-1.4.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:afb9ce2e0ae3e6106fb45f6d47536ac92b6423e601e08401cdefa850066444f5", size = 16119099, upload-time = "2026-10-15T16:54:02.664Z" }, + { url = "https://files.pythonhosted.org/packages/6e/16/1b9549168b38a575d9c168e17b4b4ee30028d602ec0f7b07c198ef265dbe/pyrefly-1.4.0-py3-none-win32.whl", hash = "sha256:839db536d0ac29f1b23e2d974fb911075c2283e3e623755c45d826aafac175bc", size = 14858880, upload-time = "2026-10-15T16:54:05.114Z" }, + { url = "https://files.pythonhosted.org/packages/03/02/18f075d4de0e255f184f42fc28c1f0ecc9f49dd528678479fc90cf12246c/pyrefly-1.4.0-py3-none-win_amd64.whl", hash = "sha256:7aff37c2b711c8240ed650da0c6148237b327bf7e5dfacee65884f1adea22305", size = 15726220, upload-time = "2026-10-15T16:54:07.452Z" }, + { url = "https://files.pythonhosted.org/packages/92/62/92947076681550904c72a9dd03b24e92694ede9a48548f5e487c849e66ea/pyrefly-1.4.0-py3-none-win_arm64.whl", hash = "sha256:88879f0cb749e5fea81d9ff4c2d5431a70349c458bcdf0b61de72c79214d90a5", size = 14943690, upload-time = "2026-10-15T16:54:09.689Z" }, ] [[package]] name = "pyright" -version = "1.1.407" +version = "1.1.414" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nodeenv" }, { name = "typing-extensions", version = "4.15.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, { name = "typing-extensions", version = "4.16.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a6/1b/0aa08ee42948b61745ac5b5b5ccaec4669e8884b53d31c8ec20b2fcd6b6f/pyright-1.1.407.tar.gz", hash = "sha256:099674dba5c10489832d4a4b2d302636152a9a42d317986c38474c76fe562262", size = 4122872, upload-time = "2025-10-24T23:17:15.145Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/1b/244c7b710031ada80f27e579ec20d28a2285dfc318fed0339866b1047f12/pyright-1.1.414.tar.gz", hash = "sha256:523c0a97c60da6333234955c277730c9cf4f5bd6d5399e7b7d2b0fc5d3599524", size = 4154638, upload-time = "2026-09-10T12:26:53.181Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/93/b69052907d032b00c40cb656d21438ec00b3a471733de137a3f65a49a0a0/pyright-1.1.407-py3-none-any.whl", hash = "sha256:6dd419f54fcc13f03b52285796d65e639786373f433e243f8b94cf93a7444d21", size = 5997008, upload-time = "2025-10-24T23:17:13.159Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ba/18b6e682ead424ad24bcc134339ae5d1b931cd9ae260540592a058a91279/pyright-1.1.414-py3-none-any.whl", hash = "sha256:2a6b4b3298c9eec174c5ed83bd338de6eee82df2992f3e1930e6199d381be36f", size = 6225049, upload-time = "2026-09-10T12:26:51.427Z" }, ] [[package]] name = "pytest" -version = "9.0.3" +version = "9.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -2866,76 +3008,87 @@ dependencies = [ { name = "pygments" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" }, + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, ] [[package]] name = "pytest-asyncio" -version = "1.3.0" +version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "backports-asyncio-runner", marker = "python_full_version < '3.11'" }, { name = "pytest" }, { name = "typing-extensions", version = "4.16.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/90/2c/8af215c0f776415f3590cac4f9086ccefd6fd463befeae41cd4d3f193e5a/pytest_asyncio-1.3.0.tar.gz", hash = "sha256:d7f52f36d231b80ee124cd216ffb19369aa168fc10095013c6b014a34d3ee9e5", size = 50087, upload-time = "2025-11-10T16:07:47.256Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/7c/d36d04db312ecf4298932ef77e6e4a9e8ad017906e24e34f0b0c361a2473/pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42", size = 58514, upload-time = "2026-05-26T09:56:04.083Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl", hash = "sha256:611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5", size = 15075, upload-time = "2025-11-10T16:07:45.537Z" }, + { url = "https://files.pythonhosted.org/packages/03/e2/08a497ef684b88559c9cc5f4ad53a37e7b99e727094a86d6ea32536d5d3c/pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1", size = 16930, upload-time = "2026-05-26T09:56:02.576Z" }, ] [[package]] name = "pytest-codspeed" -version = "4.3.0" +version = "5.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi" }, { name = "pytest" }, { name = "rich" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/ab/eca41967d11c95392829a8b4bfa9220a51cffc4a33ec4653358000356918/pytest_codspeed-4.3.0.tar.gz", hash = "sha256:5230d9d65f39063a313ed1820df775166227ec5c20a1122968f85653d5efee48", size = 124745, upload-time = "2026-02-09T15:23:34.745Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/64/800bdaeabd3eb126aff7e3e22dc45b2826305f61cbfd093284caf8d9ca01/pytest_codspeed-4.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2acecc4126658abebc683b38121adec405a46e18a619d49d6154c6e60c5deb2", size = 347077, upload-time = "2026-02-09T15:23:17.2Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f1/d69707440829adab86d078d5f1c8c070df116b1624f8eae4ff36933ba612/pytest_codspeed-4.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:619120775e92a3f43fb4ff4c256a251b1554c904d95e2154a382484283f0388a", size = 342234, upload-time = "2026-02-09T15:23:18.407Z" }, - { url = "https://files.pythonhosted.org/packages/d9/15/ec0ac1f022173b3134c9638f2a35f21fbb3142c75da066d9e49e5a8bb4bd/pytest_codspeed-4.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dbeff1eb2f2e36df088658b556fa993e6937bf64ffb07406de4db16fd2b26874", size = 347076, upload-time = "2026-02-09T15:23:19.989Z" }, - { url = "https://files.pythonhosted.org/packages/a5/e8/1fe375794ad02b7835f378a7bcfa8fbac9acadefe600a782a7c4a7064db7/pytest_codspeed-4.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:878aad5e4bb7b401ad8d82f3af5186030cd2bd0d0446782e10dabb9db8827466", size = 342215, upload-time = "2026-02-09T15:23:20.954Z" }, - { url = "https://files.pythonhosted.org/packages/09/58/50df94e9a78e1c77818a492c90557eeb1309af025120c9a21e6375950c52/pytest_codspeed-4.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:527a3a02eaa3e4d4583adc4ba2327eef79628f3e1c682a4b959439551a72588e", size = 347395, upload-time = "2026-02-09T15:23:21.986Z" }, - { url = "https://files.pythonhosted.org/packages/e4/56/7dfbd3eefd112a14e6fb65f9ff31dacf2e9c381cb94b27332b81d2b13f8d/pytest_codspeed-4.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9858c2a6e1f391d5696757e7b6e9484749a7376c46f8b4dd9aebf093479a9667", size = 342625, upload-time = "2026-02-09T15:23:23.035Z" }, - { url = "https://files.pythonhosted.org/packages/7f/53/7255f6a25bc56ff1745b254b21545dfe0be2268f5b91ce78f7e8a908f0ad/pytest_codspeed-4.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:34f2fd8497456eefbd325673f677ea80d93bb1bc08a578c1fa43a09cec3d1879", size = 347325, upload-time = "2026-02-09T15:23:23.998Z" }, - { url = "https://files.pythonhosted.org/packages/2e/f8/82ae570d8b9ad30f33c9d4002a7a1b2740de0e090540c69a28e4f711ebe2/pytest_codspeed-4.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df6a36a2a9da1406bc50428437f657f0bd8c842ae54bee5fb3ad30e01d50c0f5", size = 342558, upload-time = "2026-02-09T15:23:25.656Z" }, - { url = "https://files.pythonhosted.org/packages/b3/e1/55cfe9474f91d174c7a4b04d257b5fc6d4d06f3d3680f2da672ee59ccc10/pytest_codspeed-4.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bec30f4fc9c4973143cd80f0d33fa780e9fa3e01e4dbe8cedf229e72f1212c62", size = 347383, upload-time = "2026-02-09T15:23:26.68Z" }, - { url = "https://files.pythonhosted.org/packages/7f/3b/8fd781d959bbe789b3de8ce4c50d5706a684a0df377147dfb27b200c20c1/pytest_codspeed-4.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e6584e641cadf27d894ae90b87c50377232a97cbfd76ee0c7ecd0c056fa3f7f4", size = 342481, upload-time = "2026-02-09T15:23:27.686Z" }, - { url = "https://files.pythonhosted.org/packages/bb/0c/368045133c6effa2c665b1634b7b8a9c88b307f877fa31f1f8df47885b51/pytest_codspeed-4.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df0d1f6ea594f29b745c634d66d5f5f1caa1c3abd2af82fea49d656038e8fc77", size = 353680, upload-time = "2026-02-09T15:23:28.726Z" }, - { url = "https://files.pythonhosted.org/packages/59/21/e543abcd72244294e25ae88ec3a9311ade24d6913f8c8f42569d671700bc/pytest_codspeed-4.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2f5bb6d8898bea7db45e3c8b916ee48e36905b929477bb511b79c5a3ccacda4", size = 347888, upload-time = "2026-02-09T15:23:30.443Z" }, - { url = "https://files.pythonhosted.org/packages/55/d9/b8a53c20cf5b41042c205bb9d36d37da00418d30fd1a94bf9eb147820720/pytest_codspeed-4.3.0-py3-none-any.whl", hash = "sha256:05baff2a61dc9f3e92b92b9c2ab5fb45d9b802438f5373073f5766a91319ed7a", size = 125224, upload-time = "2026-02-09T15:23:33.774Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/e1/b4/cf932fcd1960a2fd6d9b09eb403253a8709aeee975961afa6299239a830e/pytest_codspeed-5.0.3.tar.gz", hash = "sha256:91afef90e6a96b013495e4702ef5d6358614a449e71008cdc194ef668778b92f", size = 324571, upload-time = "2026-05-22T16:20:49.231Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/f5/a8f70147216e4b84046ca406d03ecc8e83e3ea56ba1bdca0bb79cca79fee/pytest_codspeed-5.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:005348ea52ace3ede2e2f595913912ad2564cca7b124211a88dc78a9cb1fca63", size = 366249, upload-time = "2026-05-22T16:20:39.985Z" }, + { url = "https://files.pythonhosted.org/packages/f6/bd/7a4dbcf457fcc3ed788c55d402f3af2671e0e342b6098090fd590aa8712e/pytest_codspeed-5.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dbe6a4a00b449b6ba2771f644cbc38bdf55acf5c812e60e5659110e19dd9f510", size = 932229, upload-time = "2026-05-22T16:20:37.283Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e1/414ea4c66559f24ec06aeb6db62bfc7079582dac1452e648affe1eb5cfb4/pytest_codspeed-5.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ac4344f34bbcdd17f6f8c30dbac3da2f80d223dd112e568fd7f7c2cd4cbc693", size = 934647, upload-time = "2026-05-22T16:20:31.997Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ef/32ce60d42a4aa43e728d988e13eb6568fbc7b10a514517b459bafd3f2b94/pytest_codspeed-5.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f56d0339cd98d26f6e561987be25bdd2761a5d53d8f73493b1ebe02d0d451093", size = 366253, upload-time = "2026-05-22T16:21:10.013Z" }, + { url = "https://files.pythonhosted.org/packages/2a/15/c66ef90a793c5d2c039e63a1726a5e55c678be2618b0f5f1660d0f79e25f/pytest_codspeed-5.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c682f6645d4eb472f3bd95dbda1805e3af4243610572cb7d6bf94a88e8a0b6c", size = 932465, upload-time = "2026-05-22T16:20:34.265Z" }, + { url = "https://files.pythonhosted.org/packages/1a/7b/d231279301967f05b7909160489e85ee3a1b9da76094ea25343faba1abc2/pytest_codspeed-5.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f852bee785a7a124cb1720b1915670c6742af87747dc4d838f3ffdbd365ce9d9", size = 934925, upload-time = "2026-05-22T16:20:47.63Z" }, + { url = "https://files.pythonhosted.org/packages/c2/22/456c48160b761d5028c8afa119f085a9fc42855a783a13d73918078969f0/pytest_codspeed-5.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2eeb25fb1ac3f73c4de50e739e78fea396b89782bdb740bf2a7cd2df21f8d4ee", size = 366255, upload-time = "2026-05-22T16:20:56.214Z" }, + { url = "https://files.pythonhosted.org/packages/74/33/ac7441fa937c9d9f158083a8c46920a5a5c81ed3c5f96240fc8d650db5c2/pytest_codspeed-5.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:73c5c9d98a3372a42611989ccfa437cce3842431ac6d6b9ab42c4f0e59c070f7", size = 932325, upload-time = "2026-05-22T16:21:08.814Z" }, + { url = "https://files.pythonhosted.org/packages/77/bc/8b994adcb9e9016e7d9a808056a3dd9cca21441e432ef456eae2b697d7fe/pytest_codspeed-5.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2e0ab65df73e837666d12357280ca50ff6d6ac03ea5266703be518b68170edf", size = 934885, upload-time = "2026-05-22T16:21:01.444Z" }, + { url = "https://files.pythonhosted.org/packages/dc/8e/e032451e9e0a06b0c4bff53105f62b693d9a54595dd8c024693741ce3380/pytest_codspeed-5.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6524c57fec279a22ffef6112af404036afc71b4704758ae9f0abda429b8478d4", size = 366253, upload-time = "2026-05-22T16:20:46.192Z" }, + { url = "https://files.pythonhosted.org/packages/a9/7b/ae76fd8ac656b9695806a6aafd5f22ec32e6ce20e266a58f9112e01d3cd8/pytest_codspeed-5.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c383c9121deb58a69f174188e9e4488ffc0daced0ed276abf87747182511901", size = 932360, upload-time = "2026-05-22T16:20:30.589Z" }, + { url = "https://files.pythonhosted.org/packages/a6/4a/dfd43d943fdb143be4fd62f34c2793ba349dc27aa188e521d19d629aa7ab/pytest_codspeed-5.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4bcdb4b6522738152885ef067e0c8524d5699828d780fb6f464cdb3db44369c", size = 934928, upload-time = "2026-05-22T16:20:38.62Z" }, + { url = "https://files.pythonhosted.org/packages/04/6a/fdcec19c7f267c195f147c51d3fd2245f6b8d09b80495ed0a90c008e0842/pytest_codspeed-5.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:25464363c7f9b9bd5022e969c0addba616fa40ac9b8f0fc9e030c4538863b32d", size = 366259, upload-time = "2026-05-22T16:21:06.039Z" }, + { url = "https://files.pythonhosted.org/packages/6a/96/c6b03b81dcd21ae3d6b32cca0b3c10149fa378eb21b338d4b63c9eb8050b/pytest_codspeed-5.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:efd43f82ea03ced8488a767ded9473f050791ab7783ea8654107e1e0ac66af40", size = 932395, upload-time = "2026-05-22T16:21:04.804Z" }, + { url = "https://files.pythonhosted.org/packages/96/08/56ad8f1cc7d6962f8a680141b361e93467a2abc53d976cd9d5e1edd740e3/pytest_codspeed-5.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:782f9985b6f6b45b8bc20152d206d3a52b56dd088ba81cb70a71f0b39841be9e", size = 934994, upload-time = "2026-05-22T16:20:28.809Z" }, + { url = "https://files.pythonhosted.org/packages/0b/54/9096c4545f09da94b1b00f3be2fe4952949e86c9bcafca9a29b26aed1a75/pytest_codspeed-5.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9aa0815b90196f3c20d736ea8691381e97f12bbe8c7d87af10a351e434b452cb", size = 366311, upload-time = "2026-05-22T16:20:41.791Z" }, + { url = "https://files.pythonhosted.org/packages/a7/3c/24c53f67a38ad48cb087105ac30a8aa0923223ee274ea9bf2dc705edaa59/pytest_codspeed-5.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:85505c96a3477c346ec2d2b7dced8478f4c651e2b1666ee102d53a832b511853", size = 933169, upload-time = "2026-05-22T16:20:43.178Z" }, + { url = "https://files.pythonhosted.org/packages/d1/de/2213f868fa7694f743f96cccbc07e757f45c920c523cccc2da97bc8652df/pytest_codspeed-5.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20eba63765be9d1b6cacbbfad84b87d49eb04b357a7045a0899880da181f81e3", size = 935522, upload-time = "2026-05-22T16:21:03.398Z" }, + { url = "https://files.pythonhosted.org/packages/df/85/5dfea1c031d6cccc11653464828edf205c30f798caf5b2a85375aacd914a/pytest_codspeed-5.0.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:ec9fa6f0af0a9feb0e0bd517fb59ef28f806fbd50c0c6900ac26cbb4d080eba5", size = 366275, upload-time = "2026-05-22T16:20:59.463Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2b/af4d1b612f03b98a6cf3c7d5f62678917a60110a8bf380d49ab408b31137/pytest_codspeed-5.0.3-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8df77b3409f54f4a268f77f3ff74992fe1d995cdbaf2cecf8ad74d32db217ce7", size = 932537, upload-time = "2026-05-22T16:20:54.945Z" }, + { url = "https://files.pythonhosted.org/packages/f5/a2/c7ec45e36a61b418efb2a3cccaa67a0c2fcf1f21d5880f64c33114f0c249/pytest_codspeed-5.0.3-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5d8695a227ea1c3a41d25db5b3fe720bf1b4808bd38862be811a4efd902c792", size = 934153, upload-time = "2026-05-22T16:21:07.494Z" }, + { url = "https://files.pythonhosted.org/packages/cf/c7/d5bada9618a0af56a5c8065fc61280849cab8e7c1e24025807a51c3157ce/pytest_codspeed-5.0.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:bf4cc4178cbace8f4d2bd240408276bc4da3850ac5fcb5fb5f8a74ab417615bb", size = 366339, upload-time = "2026-05-22T16:20:51.968Z" }, + { url = "https://files.pythonhosted.org/packages/a8/37/fb27aeb40a81320e7349553b877a21333c897b27c8dfe215630452908f36/pytest_codspeed-5.0.3-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:abe793da40f87295d33988673d34f06ea569848b44490b847552cd416816258a", size = 933055, upload-time = "2026-05-22T16:20:44.861Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d9/6f2d69e96deaf0475a695fc9195af59e7a3b5fab50782855e65c63a7bc28/pytest_codspeed-5.0.3-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c3a9ed38dfa776443b86f4b49a982e8443d0953db4974bd2673d63cc904ae1ad", size = 934481, upload-time = "2026-05-22T16:20:58.264Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b2/1d2a993c532146dce9eca5b5942d51898021c3579ce18b2454f932a915f8/pytest_codspeed-5.0.3-py3-none-any.whl", hash = "sha256:fe2ea83c924c2250675b75686c3ee456b8cf0208d83d552e182a195fdf467378", size = 74033, upload-time = "2026-05-22T16:20:26.814Z" }, ] [[package]] name = "pytest-cov" -version = "7.1.0" +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/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592, upload-time = "2026-03-21T20:11:16.284Z" } +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/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876, upload-time = "2026-03-21T20:11:14.438Z" }, + { 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]] name = "pytest-rerunfailures" -version = "16.1" +version = "16.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/de/04/71e9520551fc8fe2cf5c1a1842e4e600265b0815f2016b7c27ec85688682/pytest_rerunfailures-16.1.tar.gz", hash = "sha256:c38b266db8a808953ebd71ac25c381cb1981a78ff9340a14bcb9f1b9bff1899e", size = 30889, upload-time = "2025-10-10T07:06:01.238Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/b0/6b5337f9d59b26b0069ea3d5e863c31dc04b69e51bbfb1cf2ea6328fba87/pytest_rerunfailures-16.7.tar.gz", hash = "sha256:6956ddfb65ca1d07e7e3d99e2c5359d82300f4cb062e6049563bd2c106f72d5c", size = 59666, upload-time = "2026-09-17T07:08:48.871Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/54/60eabb34445e3db3d3d874dc1dfa72751bfec3265bd611cb13c8b290adea/pytest_rerunfailures-16.1-py3-none-any.whl", hash = "sha256:5d11b12c0ca9a1665b5054052fcc1084f8deadd9328962745ef6b04e26382e86", size = 14093, upload-time = "2025-10-10T07:06:00.019Z" }, + { url = "https://files.pythonhosted.org/packages/c1/d3/07ea35102cf2020ddaaac368d2a6f0bcc63d6523fb8918805bac3eb8b98f/pytest_rerunfailures-16.7-py3-none-any.whl", hash = "sha256:edf1886209c2b7dafe35b5bf1708d6ec40ccf6c6b357f0f02807efcec0204c99", size = 23952, upload-time = "2026-09-17T07:08:47.635Z" }, ] [[package]] @@ -3123,28 +3276,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.14.14" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2e/06/f71e3a86b2df0dfa2d2f72195941cd09b44f87711cb7fa5193732cb9a5fc/ruff-0.14.14.tar.gz", hash = "sha256:2d0f819c9a90205f3a867dbbd0be083bee9912e170fd7d9704cc8ae45824896b", size = 4515732, upload-time = "2026-01-22T22:30:17.527Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/89/20a12e97bc6b9f9f68343952da08a8099c57237aef953a56b82711d55edd/ruff-0.14.14-py3-none-linux_armv6l.whl", hash = "sha256:7cfe36b56e8489dee8fbc777c61959f60ec0f1f11817e8f2415f429552846aed", size = 10467650, upload-time = "2026-01-22T22:30:08.578Z" }, - { url = "https://files.pythonhosted.org/packages/a3/b1/c5de3fd2d5a831fcae21beda5e3589c0ba67eec8202e992388e4b17a6040/ruff-0.14.14-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6006a0082336e7920b9573ef8a7f52eec837add1265cc74e04ea8a4368cd704c", size = 10883245, upload-time = "2026-01-22T22:30:04.155Z" }, - { url = "https://files.pythonhosted.org/packages/b8/7c/3c1db59a10e7490f8f6f8559d1db8636cbb13dccebf18686f4e3c9d7c772/ruff-0.14.14-py3-none-macosx_11_0_arm64.whl", hash = "sha256:026c1d25996818f0bf498636686199d9bd0d9d6341c9c2c3b62e2a0198b758de", size = 10231273, upload-time = "2026-01-22T22:30:34.642Z" }, - { url = "https://files.pythonhosted.org/packages/a1/6e/5e0e0d9674be0f8581d1f5e0f0a04761203affce3232c1a1189d0e3b4dad/ruff-0.14.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f666445819d31210b71e0a6d1c01e24447a20b85458eea25a25fe8142210ae0e", size = 10585753, upload-time = "2026-01-22T22:30:31.781Z" }, - { url = "https://files.pythonhosted.org/packages/23/09/754ab09f46ff1884d422dc26d59ba18b4e5d355be147721bb2518aa2a014/ruff-0.14.14-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c0f18b922c6d2ff9a5e6c3ee16259adc513ca775bcf82c67ebab7cbd9da5bc8", size = 10286052, upload-time = "2026-01-22T22:30:24.827Z" }, - { url = "https://files.pythonhosted.org/packages/c8/cc/e71f88dd2a12afb5f50733851729d6b571a7c3a35bfdb16c3035132675a0/ruff-0.14.14-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1629e67489c2dea43e8658c3dba659edbfd87361624b4040d1df04c9740ae906", size = 11043637, upload-time = "2026-01-22T22:30:13.239Z" }, - { url = "https://files.pythonhosted.org/packages/67/b2/397245026352494497dac935d7f00f1468c03a23a0c5db6ad8fc49ca3fb2/ruff-0.14.14-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:27493a2131ea0f899057d49d303e4292b2cae2bb57253c1ed1f256fbcd1da480", size = 12194761, upload-time = "2026-01-22T22:30:22.542Z" }, - { url = "https://files.pythonhosted.org/packages/5b/06/06ef271459f778323112c51b7587ce85230785cd64e91772034ddb88f200/ruff-0.14.14-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01ff589aab3f5b539e35db38425da31a57521efd1e4ad1ae08fc34dbe30bd7df", size = 12005701, upload-time = "2026-01-22T22:30:20.499Z" }, - { url = "https://files.pythonhosted.org/packages/41/d6/99364514541cf811ccc5ac44362f88df66373e9fec1b9d1c4cc830593fe7/ruff-0.14.14-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cc12d74eef0f29f51775f5b755913eb523546b88e2d733e1d701fe65144e89b", size = 11282455, upload-time = "2026-01-22T22:29:59.679Z" }, - { url = "https://files.pythonhosted.org/packages/ca/71/37daa46f89475f8582b7762ecd2722492df26421714a33e72ccc9a84d7a5/ruff-0.14.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb8481604b7a9e75eff53772496201690ce2687067e038b3cc31aaf16aa0b974", size = 11215882, upload-time = "2026-01-22T22:29:57.032Z" }, - { url = "https://files.pythonhosted.org/packages/2c/10/a31f86169ec91c0705e618443ee74ede0bdd94da0a57b28e72db68b2dbac/ruff-0.14.14-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:14649acb1cf7b5d2d283ebd2f58d56b75836ed8c6f329664fa91cdea19e76e66", size = 11180549, upload-time = "2026-01-22T22:30:27.175Z" }, - { url = "https://files.pythonhosted.org/packages/fd/1e/c723f20536b5163adf79bdd10c5f093414293cdf567eed9bdb7b83940f3f/ruff-0.14.14-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8058d2145566510790eab4e2fad186002e288dec5e0d343a92fe7b0bc1b3e13", size = 10543416, upload-time = "2026-01-22T22:30:01.964Z" }, - { url = "https://files.pythonhosted.org/packages/3e/34/8a84cea7e42c2d94ba5bde1d7a4fae164d6318f13f933d92da6d7c2041ff/ruff-0.14.14-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e651e977a79e4c758eb807f0481d673a67ffe53cfa92209781dfa3a996cf8412", size = 10285491, upload-time = "2026-01-22T22:30:29.51Z" }, - { url = "https://files.pythonhosted.org/packages/55/ef/b7c5ea0be82518906c978e365e56a77f8de7678c8bb6651ccfbdc178c29f/ruff-0.14.14-py3-none-musllinux_1_2_i686.whl", hash = "sha256:cc8b22da8d9d6fdd844a68ae937e2a0adf9b16514e9a97cc60355e2d4b219fc3", size = 10733525, upload-time = "2026-01-22T22:30:06.499Z" }, - { url = "https://files.pythonhosted.org/packages/6a/5b/aaf1dfbcc53a2811f6cc0a1759de24e4b03e02ba8762daabd9b6bd8c59e3/ruff-0.14.14-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:16bc890fb4cc9781bb05beb5ab4cd51be9e7cb376bf1dd3580512b24eb3fda2b", size = 11315626, upload-time = "2026-01-22T22:30:36.848Z" }, - { url = "https://files.pythonhosted.org/packages/2c/aa/9f89c719c467dfaf8ad799b9bae0df494513fb21d31a6059cb5870e57e74/ruff-0.14.14-py3-none-win32.whl", hash = "sha256:b530c191970b143375b6a68e6f743800b2b786bbcf03a7965b06c4bf04568167", size = 10502442, upload-time = "2026-01-22T22:30:38.93Z" }, - { url = "https://files.pythonhosted.org/packages/87/44/90fa543014c45560cae1fffc63ea059fb3575ee6e1cb654562197e5d16fb/ruff-0.14.14-py3-none-win_amd64.whl", hash = "sha256:3dde1435e6b6fe5b66506c1dff67a421d0b7f6488d466f651c07f4cab3bf20fd", size = 11630486, upload-time = "2026-01-22T22:30:10.852Z" }, - { url = "https://files.pythonhosted.org/packages/9e/6a/40fee331a52339926a92e17ae748827270b288a35ef4a15c9c8f2ec54715/ruff-0.14.14-py3-none-win_arm64.whl", hash = "sha256:56e6981a98b13a32236a72a8da421d7839221fa308b223b9283312312e5ac76c", size = 10920448, upload-time = "2026-01-22T22:30:15.417Z" }, +version = "0.17.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/58/690cf56da80c8f2c8bf12042b6017beac2c34fe961f65420bcb3fb7fac38/ruff-0.17.2.tar.gz", hash = "sha256:84d632402d14c23b488f941db23712d6736a013225162062d34558c3f3c780eb", size = 5333400, upload-time = "2026-10-22T18:38:00.181Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/b8/8b6d69c57e8fe1cc6af1aa7493b72a1a5b5a8afe34694e302025441729d4/ruff-0.17.2-py3-none-linux_armv6l.whl", hash = "sha256:96a65e755d8dba094707fb23ab602111d9a31ec2835b3a6992a1914a8fcb211e", size = 10183857, upload-time = "2026-10-22T18:37:14.956Z" }, + { url = "https://files.pythonhosted.org/packages/e8/61/12cc2ff7b2fa90a268ce1e2162c23aaf76e601d22623f6a31b0eeaa764b0/ruff-0.17.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:39c5b55c960515cdb32be16e69efb5734c589c06a0eb38a22694524a336b889d", size = 10210904, upload-time = "2026-10-22T18:37:17.985Z" }, + { url = "https://files.pythonhosted.org/packages/e8/7c/b8850a8e4ad29f64a827dd6c6902db4a9aa538fb2b9eef4e26084001a3bb/ruff-0.17.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:92a80d2f44584dabb0189b3a6c393e37e525e04942838482010575cb81945be7", size = 9408439, upload-time = "2026-10-22T18:37:20.964Z" }, + { url = "https://files.pythonhosted.org/packages/b7/b6/6a64fae86ca5e5e29d5adc311e5481de726cedf9aee607435a16c31c442a/ruff-0.17.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7d0906677d89bbf3cf73cde64b5bbe2ab35df3ae43e49ee2627301e91265bac", size = 10047078, upload-time = "2026-10-22T18:37:23.717Z" }, + { url = "https://files.pythonhosted.org/packages/10/19/23d376547715175aa1bd46df48df6aacc7c6439d9daf19cac15975180aa5/ruff-0.17.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7cfd783590edf2b77317882631900f6a13ea2e8eacefe6ebf2370d2715299160", size = 9990478, upload-time = "2026-10-22T18:37:26.584Z" }, + { url = "https://files.pythonhosted.org/packages/93/6c/34cda32cbe13adac5c6b291a307a5570d8ebd37c0c86339f0fe628e55632/ruff-0.17.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122258f6ecde0e0dd1bb60b24263c3edde4338caf723fca711cc729f9bfd414a", size = 10673624, upload-time = "2026-10-22T18:37:29.767Z" }, + { url = "https://files.pythonhosted.org/packages/bf/10/5d762a4dbc851d8bb47863cf3a28a61bf31c804d393b70d891fac899f5d1/ruff-0.17.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f8fba429d6ac4128ab29cfb8fa6240d2fa671d04adf7f84d3b22fc7b6b6bea4", size = 11351797, upload-time = "2026-10-22T18:37:32.535Z" }, + { url = "https://files.pythonhosted.org/packages/3f/04/a0e92a81faf5c81c1c98d4374c8401734ccf2b8cca7d0170cb0fec08c6e2/ruff-0.17.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:583bd67bb9e7061dd09bc46a0a884bae2bbd214dbcd48e509813612619683869", size = 10949414, upload-time = "2026-10-22T18:37:35.501Z" }, + { url = "https://files.pythonhosted.org/packages/c3/d8/59894cf630d2d86882457a2a6a0a1533410c5c805bfbac6f6eb4b5aef69d/ruff-0.17.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c60f93fec7142dba5b8f487f94bf2f6231dae24dc11e4c48648347c8b0720004", size = 10528000, upload-time = "2026-10-22T18:37:37.88Z" }, + { url = "https://files.pythonhosted.org/packages/ab/95/d6e30c51e851d37e10762ad91fa1e76ddaad998589b5667962a3cfbc9edd/ruff-0.17.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:c555a877f8f41447e318101cfefea9bf12dfa9f82eedf90c376e57e069f917d0", size = 10571779, upload-time = "2026-10-22T18:37:40.444Z" }, + { url = "https://files.pythonhosted.org/packages/f4/5a/a7e1d74fb464250137d3d4eca645d323536533b672004d04ee0e46e0caf3/ruff-0.17.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ba405cbd5ec7bda1f555d5e52be1fd68d02608d4d95d24591bdac92cfacb579f", size = 10051707, upload-time = "2026-10-22T18:37:42.812Z" }, + { url = "https://files.pythonhosted.org/packages/6e/f2/02fca29ca7999380f0350a7212fe755c11ab9c22d61327356cce8decdbc6/ruff-0.17.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8c21b4ab24485358f17291a4f8dc5399b834e963b8efedd920fe4fdb02081bb4", size = 9998227, upload-time = "2026-10-22T18:37:45.224Z" }, + { url = "https://files.pythonhosted.org/packages/d1/00/55aa604a093dfdc1526e570fae0bb7d37a2221c7b4728d5f080b2add16ba/ruff-0.17.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5875a16b0de70b43cb81eabea5ae5e8f5d1b2fd1b5e6ed07f80cfe5019d0bd5a", size = 10377692, upload-time = "2026-10-22T18:37:47.704Z" }, + { url = "https://files.pythonhosted.org/packages/e4/5a/a7a640f47bb906ec8fa233ea84319d503e6dee02b59e3901bd312ebd1f9b/ruff-0.17.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:2d086be452eed686aa51271ecf2cbe5037956517cc6ee39a17b4489ac12f8bbe", size = 10790587, upload-time = "2026-10-22T18:37:50.191Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d4/c3b74e1b4808438ea7f14bb914478025e2d51261f60774a54a0fa222ec46/ruff-0.17.2-py3-none-win32.whl", hash = "sha256:6bce7d1f5165701ae18f5df85c65afe78cddfa6c5fb4b9bdb0014d60388f3edd", size = 9870537, upload-time = "2026-10-22T18:37:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/1c/9a/c7da96c2c96d20704cf9027f7a5121da272a8c05f1d1531ba949e3b3df04/ruff-0.17.2-py3-none-win_amd64.whl", hash = "sha256:1b59d447f197bef9ef48a22ba1a6016137753c6099e9bac9c36eb566e422424c", size = 10282826, upload-time = "2026-10-22T18:37:55.2Z" }, + { url = "https://files.pythonhosted.org/packages/81/60/a3604c79cb02777b6cb84da894104021986f06c4bc41375102cc95049a32/ruff-0.17.2-py3-none-win_arm64.whl", hash = "sha256:195ad918027f817c119310ca89a42d347887dfc28934aaa869325e9c5dc9d962", size = 9827036, upload-time = "2026-10-22T18:37:58.031Z" }, ] [[package]] @@ -3209,15 +3361,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/61/99/d4de702bdd436e108891df2105adb7c6f44a11833a88c08686b18d4a6693/selectolax-0.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:85e4ada1c4a3a69e503c9866e74bce24e716bd0ada060c7c2b56677d4f073928", size = 1915624, upload-time = "2026-03-06T09:24:59.406Z" }, ] -[[package]] -name = "setuptools" -version = "84.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/73/eb/7e5f628ee2eb168fecbf8026de7856b2543d6d609cc85f086b9a91ac93d6/setuptools-84.1.0.tar.gz", hash = "sha256:23657205b63d4d31395ab917815247f694aafad28cd21316bf5fd45a51048ea0", size = 1171783, upload-time = "2026-10-19T20:11:43.489Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/02/b4bbb90f8f29e334898ff45c6d9b1fffaa6f378017052b3023a06262b5f7/setuptools-84.1.0-py3-none-any.whl", hash = "sha256:5231689c6ac8156cd155cfb98c3fd6fb252c3e7e9bd3d78b64d3c55f132624c9", size = 819380, upload-time = "2026-10-19T20:11:41.684Z" }, -] - [[package]] name = "shellcheck-py" version = "0.11.0.1" @@ -3305,14 +3448,14 @@ wheels = [ [[package]] name = "syrupy" -version = "6.0.0" +version = "6.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d2/a7/3c797c76994dc817582abdda90ee31867a9883567b0add47dbc0ccb12ce4/syrupy-6.0.0.tar.gz", hash = "sha256:bf4f5f662a7b23a9e5711bd5597e301cd09c00f31be5fa4095f79da7b0585f3d", size = 99435, upload-time = "2026-08-22T20:48:39.493Z" } +sdist = { url = "https://files.pythonhosted.org/packages/74/2c/8ffc1414d1951895d0d5b7dc83c0b079ebc48c3bf27ffbb0064646367500/syrupy-6.1.1.tar.gz", hash = "sha256:7e584a8df4ede6dd3c1c44a77f9edc46186b6767a73dea6f0083044946839a59", size = 109705, upload-time = "2026-09-13T20:25:21.599Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/ff/4d8ae6d6070ea73ee9d466701584a75db9586ce09de98f8f1b3276efad5f/syrupy-6.0.0-py3-none-any.whl", hash = "sha256:3efa16d767bd8614413cc20057552e4aec14428c6e5ea788c1f7e03047e8a5e4", size = 58047, upload-time = "2026-08-22T20:48:38.213Z" }, + { url = "https://files.pythonhosted.org/packages/2c/b5/bf2a8a335a6a813869dd482cedbcde252f582b5afbfe50eb78ec09962800/syrupy-6.1.1-py3-none-any.whl", hash = "sha256:6ac9ac6a42d70ae44156f5f157a9563b9bb8cc96dcf9364327f330463bff889a", size = 63436, upload-time = "2026-09-13T20:25:20.294Z" }, ] [[package]] @@ -3469,7 +3612,8 @@ name = "typing-extensions" version = "4.15.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13'", + "python_full_version >= '3.15'", + "python_full_version >= '3.13' and python_full_version < '3.15'", ] sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } wheels = [ @@ -3523,16 +3667,16 @@ wheels = [ [[package]] name = "uvicorn" -version = "0.43.0" +version = "0.54.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "h11" }, { name = "typing-extensions", version = "4.16.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/62/f2/368268300fb8af33743508d738ef7bb4d56afdb46c6d9c0fa3dd515df171/uvicorn-0.43.0.tar.gz", hash = "sha256:ab1652d2fb23abf124f36ccc399828558880def222c3cb3d98d24021520dc6e8", size = 85686, upload-time = "2026-04-03T18:37:48.984Z" } +sdist = { url = "https://files.pythonhosted.org/packages/da/34/30e9280707135d2cfc589dfff3cb796bd07a3aeb1a3e415ba09dd89d7bb4/uvicorn-0.54.0.tar.gz", hash = "sha256:a2e33cbfaa0306f8e6b0c13e0cb89d7d7a2da3e62b90c66e18c33d9807b28620", size = 112283, upload-time = "2026-09-25T06:52:37.601Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/55/df/0cf5b0c451602748fdc7a702d4667f6e209bf96aa6e3160d754234445f2a/uvicorn-0.43.0-py3-none-any.whl", hash = "sha256:46fac64f487fd968cd999e5e49efbbe64bd231b5bd8b4a0b482a23ebce499620", size = 68591, upload-time = "2026-04-03T18:37:47.64Z" }, + { url = "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", hash = "sha256:505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf", size = 87427, upload-time = "2026-09-25T06:52:35.829Z" }, ] [[package]] @@ -3889,15 +4033,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/69/68/c8739671f5699c7dc470580a4f821ef37c32c4cb0b047ce223a7f115757f/yarl-1.23.0-py3-none-any.whl", hash = "sha256:a2df6afe50dea8ae15fa34c9f824a3ee958d785fd5d089063d960bae1daa0a3f", size = 48288, upload-time = "2026-03-01T22:07:51.388Z" }, ] -[[package]] -name = "zipp" -version = "3.23.0" -source = { registry = "https://pypi.org/simple" } -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/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, -] - [[package]] name = "zizmor" version = "1.22.0"