diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0e096030..87529d8d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -103,7 +103,7 @@ jobs: strategy: fail-fast: false matrix: - k3s: [latest, v1.28, v1.27, v1.26] + k3s: [latest, v1.31, v1.30, v1.29] name: K3s ${{matrix.k3s}} runs-on: ubuntu-22.04 timeout-minutes: 10 # usually 4-5 mins diff --git a/.github/workflows/thorough.yaml b/.github/workflows/thorough.yaml index e85c8a4b..30dc7c3a 100644 --- a/.github/workflows/thorough.yaml +++ b/.github/workflows/thorough.yaml @@ -107,7 +107,7 @@ jobs: strategy: fail-fast: false matrix: - k3s: [latest, v1.28, v1.27, v1.26] + k3s: [latest, v1.31, v1.30, v1.29] name: K3s ${{matrix.k3s}} runs-on: ubuntu-22.04 timeout-minutes: 10 # usually 4-5 mins @@ -127,7 +127,7 @@ jobs: strategy: fail-fast: false matrix: - k8s: [latest, v1.28.5, v1.27.9, v1.26.13] + k8s: [latest, v1.31.2, v1.30.6, v1.29.10] name: K8s ${{matrix.k8s}} runs-on: ubuntu-22.04 timeout-minutes: 10 # usually 4-5 mins diff --git a/docs/requirements.txt b/docs/requirements.txt index 4668eb2a..c3fbdce1 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -5,6 +5,3 @@ sphinx>=2.0.0 sphinx-autobuild sphinx-autodoc-typehints sphinx_rtd_theme>=0.5 - -# Added 2023-05-06. TODO: Remove when resolved: https://github.com/psf/requests/issues/6432 -urllib3<2.0.0 diff --git a/kopf/_core/intents/callbacks.py b/kopf/_core/intents/callbacks.py index bc19992f..1d3f508a 100644 --- a/kopf/_core/intents/callbacks.py +++ b/kopf/_core/intents/callbacks.py @@ -23,7 +23,7 @@ IndexingFn = Callable[..., invocation.SyncOrAsync[Optional[object]]] WatchingFn = Callable[..., invocation.SyncOrAsync[Optional[object]]] ChangingFn = Callable[..., invocation.SyncOrAsync[Optional[object]]] - WebhookFn = Callable[..., invocation.SyncOrAsync[None]] + WebhookFn = Callable[..., invocation.SyncOrAsync[Optional[object]]] DaemonFn = Callable[..., invocation.SyncOrAsync[Optional[object]]] TimerFn = Callable[..., invocation.SyncOrAsync[Optional[object]]] WhenFilterFn = Callable[..., bool] # strictly sync, no async! @@ -145,7 +145,7 @@ DefaultNamedArg(Any, "param"), KwArg(Any), ], - invocation.SyncOrAsync[None] + invocation.SyncOrAsync[Optional[object]] ] DaemonFn = Callable[ diff --git a/kopf/_core/reactor/orchestration.py b/kopf/_core/reactor/orchestration.py index 1931a202..64bfd9e6 100644 --- a/kopf/_core/reactor/orchestration.py +++ b/kopf/_core/reactor/orchestration.py @@ -27,11 +27,12 @@ import functools import itertools import logging -from typing import Any, Collection, Container, Dict, Iterable, MutableMapping, NamedTuple, Optional +from typing import Any, Collection, Container, Dict, Iterable, \ + MutableMapping, NamedTuple, Optional, Protocol from kopf._cogs.aiokits import aiotasks, aiotoggles from kopf._cogs.configs import configuration -from kopf._cogs.structs import references +from kopf._cogs.structs import bodies, references from kopf._core.engines import peering from kopf._core.reactor import queueing @@ -43,6 +44,19 @@ class EnsembleKey(NamedTuple): namespace: references.Namespace +# Differs from queueing.WatchStreamProcessor by the resource=… kwarg. +class ResourceWatchStreamProcessor(Protocol): + async def __call__( + self, + *, + resource: references.Resource, + raw_event: bodies.RawEvent, + stream_pressure: Optional[asyncio.Event] = None, # None for tests + resource_indexed: Optional[aiotoggles.Toggle] = None, # None for tests & observation + operator_indexed: Optional[aiotoggles.ToggleSet] = None, # None for tests & observation + ) -> None: ... + + @dataclasses.dataclass class Ensemble: @@ -89,7 +103,7 @@ def del_keys(self, keys: Container[EnsembleKey]) -> None: async def ochestrator( *, - processor: queueing.WatchStreamProcessor, + processor: ResourceWatchStreamProcessor, settings: configuration.OperatorSettings, identity: peering.Identity, insights: references.Insights, @@ -122,7 +136,7 @@ async def ochestrator( # for a simulation of the insights (inputs) and an assertion of the tasks & toggles (outputs). async def adjust_tasks( *, - processor: queueing.WatchStreamProcessor, + processor: ResourceWatchStreamProcessor, insights: references.Insights, settings: configuration.OperatorSettings, identity: peering.Identity, @@ -213,7 +227,7 @@ async def spawn_missing_peerings( async def spawn_missing_watchers( *, - processor: queueing.WatchStreamProcessor, + processor: ResourceWatchStreamProcessor, settings: configuration.OperatorSettings, indexed_resources: Container[references.Resource], # only "if in", never "for in"! watched_resources: Iterable[references.Resource], diff --git a/requirements.txt b/requirements.txt index 88ee4ebe..00d3f20b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ freezegun import-linter isort lxml -mypy==1.8.0 +mypy==1.13.0 pre-commit pyngrok pytest>=6.0.0