From 2ceca4c00604f2a3ffcbd77f0241097ac93c48c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Fern=C3=A1ndez=20Iglesias?= Date: Sat, 22 Nov 2025 13:37:05 +0100 Subject: [PATCH 1/2] [docker-py] Fix `Container.top()` return type --- stubs/docker/docker/api/container.pyi | 4 ++-- stubs/docker/docker/models/containers.pyi | 4 ++-- stubs/docker/docker/types/__init__.pyi | 1 + stubs/docker/docker/types/containers.pyi | 7 ++++++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/stubs/docker/docker/api/container.pyi b/stubs/docker/docker/api/container.pyi index a44bd63fb4ee..5e9f9b19378a 100644 --- a/stubs/docker/docker/api/container.pyi +++ b/stubs/docker/docker/api/container.pyi @@ -6,7 +6,7 @@ from typing_extensions import TypeAlias from docker._types import WaitContainerResponse from docker.types.daemon import CancellableStream -from ..types import ContainerConfig, EndpointConfig, HostConfig, NetworkingConfig +from ..types import ContainerConfig, EndpointConfig, HostConfig, NetworkingConfig, TopResult @type_check_only class _HasId(TypedDict): @@ -145,7 +145,7 @@ class ContainerApiMixin: def start(self, container: _Container) -> None: ... def stats(self, container: _Container, decode: bool | None = None, stream: bool = True, one_shot: bool | None = None): ... def stop(self, container: _Container, timeout: int | None = None) -> None: ... - def top(self, container: _Container, ps_args: str | None = None) -> str: ... + def top(self, container: _Container, ps_args: str | None = None) -> TopResult: ... def unpause(self, container: _Container) -> None: ... def update_container( self, diff --git a/stubs/docker/docker/models/containers.pyi b/stubs/docker/docker/models/containers.pyi index dddbb847c88e..235706c64a24 100644 --- a/stubs/docker/docker/models/containers.pyi +++ b/stubs/docker/docker/models/containers.pyi @@ -6,7 +6,7 @@ from typing_extensions import NotRequired from docker._types import ContainerWeightDevice, WaitContainerResponse from docker.types import EndpointConfig -from docker.types.containers import DeviceRequest, LogConfig, Ulimit +from docker.types.containers import DeviceRequest, LogConfig, TopResult, Ulimit from docker.types.daemon import CancellableStream from docker.types.services import Mount @@ -91,7 +91,7 @@ class Container(Model): def start(self) -> None: ... def stats(self, **kwargs): ... def stop(self, *, timeout: float | None = None) -> None: ... - def top(self, *, ps_args: str | None = None) -> str: ... + def top(self, *, ps_args: str | None = None) -> TopResult: ... def unpause(self): ... def update( self, diff --git a/stubs/docker/docker/types/__init__.pyi b/stubs/docker/docker/types/__init__.pyi index 9404c047fe2b..e642e079677b 100644 --- a/stubs/docker/docker/types/__init__.pyi +++ b/stubs/docker/docker/types/__init__.pyi @@ -3,6 +3,7 @@ from .containers import ( DeviceRequest as DeviceRequest, HostConfig as HostConfig, LogConfig as LogConfig, + TopResult as TopResult, Ulimit as Ulimit, ) from .daemon import CancellableStream as CancellableStream diff --git a/stubs/docker/docker/types/containers.pyi b/stubs/docker/docker/types/containers.pyi index a327c3479141..6bde1f82c160 100644 --- a/stubs/docker/docker/types/containers.pyi +++ b/stubs/docker/docker/types/containers.pyi @@ -1,6 +1,6 @@ from _typeshed import Incomplete from collections.abc import Iterable, Mapping -from typing import Any, Final, Literal +from typing import Any, Final, Literal, TypedDict, type_check_only from docker._types import ContainerWeightDevice @@ -172,3 +172,8 @@ class ContainerConfig(dict[str, Incomplete]): stop_timeout: int | None = None, runtime: str | None = None, ) -> None: ... + +@type_check_only +class TopResult(TypedDict): + Titles: list[str] + Processes: list[list[str]] From 8da2540f9c2f1915c7265ec90aa8400971426d1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Fern=C3=A1ndez=20Iglesias?= Date: Mon, 24 Nov 2025 17:58:47 +0100 Subject: [PATCH 2/2] [docker-py] Make _TopResult typed dict local --- stubs/docker/docker/api/container.pyi | 9 +++++++-- stubs/docker/docker/models/containers.pyi | 9 +++++++-- stubs/docker/docker/types/__init__.pyi | 1 - stubs/docker/docker/types/containers.pyi | 7 +------ 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/stubs/docker/docker/api/container.pyi b/stubs/docker/docker/api/container.pyi index 5e9f9b19378a..f8e225493ee6 100644 --- a/stubs/docker/docker/api/container.pyi +++ b/stubs/docker/docker/api/container.pyi @@ -6,7 +6,7 @@ from typing_extensions import TypeAlias from docker._types import WaitContainerResponse from docker.types.daemon import CancellableStream -from ..types import ContainerConfig, EndpointConfig, HostConfig, NetworkingConfig, TopResult +from ..types import ContainerConfig, EndpointConfig, HostConfig, NetworkingConfig @type_check_only class _HasId(TypedDict): @@ -16,6 +16,11 @@ class _HasId(TypedDict): class _HasID(TypedDict): ID: str +@type_check_only +class _TopResult(TypedDict): + Titles: list[str] + Processes: list[list[str]] + _Container: TypeAlias = _HasId | _HasID | str class ContainerApiMixin: @@ -145,7 +150,7 @@ class ContainerApiMixin: def start(self, container: _Container) -> None: ... def stats(self, container: _Container, decode: bool | None = None, stream: bool = True, one_shot: bool | None = None): ... def stop(self, container: _Container, timeout: int | None = None) -> None: ... - def top(self, container: _Container, ps_args: str | None = None) -> TopResult: ... + def top(self, container: _Container, ps_args: str | None = None) -> _TopResult: ... def unpause(self, container: _Container) -> None: ... def update_container( self, diff --git a/stubs/docker/docker/models/containers.pyi b/stubs/docker/docker/models/containers.pyi index 235706c64a24..7b12e2403bed 100644 --- a/stubs/docker/docker/models/containers.pyi +++ b/stubs/docker/docker/models/containers.pyi @@ -6,7 +6,7 @@ from typing_extensions import NotRequired from docker._types import ContainerWeightDevice, WaitContainerResponse from docker.types import EndpointConfig -from docker.types.containers import DeviceRequest, LogConfig, TopResult, Ulimit +from docker.types.containers import DeviceRequest, LogConfig, Ulimit from docker.types.daemon import CancellableStream from docker.types.services import Mount @@ -18,6 +18,11 @@ class _RestartPolicy(TypedDict): MaximumRetryCount: NotRequired[int] Name: NotRequired[Literal["always", "on-failure"]] +@type_check_only +class _TopResult(TypedDict): + Titles: list[str] + Processes: list[list[str]] + class Container(Model): @property def name(self) -> str | None: ... @@ -91,7 +96,7 @@ class Container(Model): def start(self) -> None: ... def stats(self, **kwargs): ... def stop(self, *, timeout: float | None = None) -> None: ... - def top(self, *, ps_args: str | None = None) -> TopResult: ... + def top(self, *, ps_args: str | None = None) -> _TopResult: ... def unpause(self): ... def update( self, diff --git a/stubs/docker/docker/types/__init__.pyi b/stubs/docker/docker/types/__init__.pyi index e642e079677b..9404c047fe2b 100644 --- a/stubs/docker/docker/types/__init__.pyi +++ b/stubs/docker/docker/types/__init__.pyi @@ -3,7 +3,6 @@ from .containers import ( DeviceRequest as DeviceRequest, HostConfig as HostConfig, LogConfig as LogConfig, - TopResult as TopResult, Ulimit as Ulimit, ) from .daemon import CancellableStream as CancellableStream diff --git a/stubs/docker/docker/types/containers.pyi b/stubs/docker/docker/types/containers.pyi index 6bde1f82c160..a327c3479141 100644 --- a/stubs/docker/docker/types/containers.pyi +++ b/stubs/docker/docker/types/containers.pyi @@ -1,6 +1,6 @@ from _typeshed import Incomplete from collections.abc import Iterable, Mapping -from typing import Any, Final, Literal, TypedDict, type_check_only +from typing import Any, Final, Literal from docker._types import ContainerWeightDevice @@ -172,8 +172,3 @@ class ContainerConfig(dict[str, Incomplete]): stop_timeout: int | None = None, runtime: str | None = None, ) -> None: ... - -@type_check_only -class TopResult(TypedDict): - Titles: list[str] - Processes: list[list[str]]