diff mbox series

[libgpiod,v2,05/23] bindings: python: add type stub for the _ext module

Message ID 20241114145116.2123714-6-vfazio@xes-inc.com
State New
Headers show
Series bindings: python: conform to mypy and ruff linter recommendations | expand

Commit Message

Vincent Fazio Nov. 14, 2024, 2:50 p.m. UTC
Add a type stub for the compiled external module so that types and
methods used from the module are accurately type checked.

Signed-off-by: Vincent Fazio <vfazio@xes-inc.com>
---
 bindings/python/gpiod/_ext.pyi | 93 ++++++++++++++++++++++++++++++++++
 bindings/python/setup.py       |  2 +-
 2 files changed, 94 insertions(+), 1 deletion(-)
 create mode 100644 bindings/python/gpiod/_ext.pyi

Comments

Bartosz Golaszewski Nov. 19, 2024, 9:24 a.m. UTC | #1
On Thu, Nov 14, 2024 at 3:51 PM Vincent Fazio <vfazio@xes-inc.com> wrote:
>
> Add a type stub for the compiled external module so that types and
> methods used from the module are accurately type checked.
>
> Signed-off-by: Vincent Fazio <vfazio@xes-inc.com>
> ---

Nice, I honestly had no idea this was possible.

Bart
diff mbox series

Patch

diff --git a/bindings/python/gpiod/_ext.pyi b/bindings/python/gpiod/_ext.pyi
new file mode 100644
index 0000000..1beb80d
--- /dev/null
+++ b/bindings/python/gpiod/_ext.pyi
@@ -0,0 +1,93 @@ 
+# SPDX-License-Identifier: LGPL-2.1-or-later
+# SPDX-FileCopyrightText: 2024 Vincent Fazio <vfazio@gmail.com>
+
+from typing import Optional
+
+from .chip_info import ChipInfo
+from .edge_event import EdgeEvent
+from .info_event import InfoEvent
+from .line import Value
+from .line_info import LineInfo
+
+class LineSettings:
+    def __init__(
+        self,
+        direction: int,
+        edge_detection: int,
+        bias: int,
+        drive: int,
+        active_low: bool,
+        debounce_period: int,
+        event_clock: int,
+        output_value: int,
+    ) -> None: ...
+
+class LineConfig:
+    def __init__(self) -> None: ...
+    def add_line_settings(self, offsets: list[int], settings: LineSettings) -> None: ...
+    def set_output_values(self, global_output_values: list[Value]) -> None: ...
+
+class Request:
+    def release(self) -> None: ...
+    def get_values(self, offsets: list[int], values: list[Value]) -> None: ...
+    def set_values(self, values: dict[int, Value]) -> None: ...
+    def reconfigure_lines(self, line_cfg: LineConfig) -> None: ...
+    def read_edge_events(self, max_events: Optional[int]) -> list[EdgeEvent]: ...
+    @property
+    def chip_name(self) -> str: ...
+    @property
+    def num_lines(self) -> int: ...
+    @property
+    def offsets(self) -> list[int]: ...
+    @property
+    def fd(self) -> int: ...
+
+class Chip:
+    def __init__(self, path: str) -> None: ...
+    def get_info(self) -> ChipInfo: ...
+    def line_offset_from_id(self, id: str) -> int: ...
+    def get_line_info(self, offset: int, watch: bool) -> LineInfo: ...
+    def request_lines(
+        self,
+        line_cfg: LineConfig,
+        consumer: Optional[str],
+        event_buffer_size: Optional[int],
+    ) -> Request: ...
+    def read_info_event(self) -> InfoEvent: ...
+    def close(self) -> None: ...
+    def unwatch_line_info(self, line: int) -> None: ...
+    @property
+    def path(self) -> str: ...
+    @property
+    def fd(self) -> int: ...
+
+def is_gpiochip_device(path: str) -> bool: ...
+
+api_version: str
+
+# enum constants
+BIAS_AS_IS: int
+BIAS_DISABLED: int
+BIAS_PULL_DOWN: int
+BIAS_PULL_UP: int
+BIAS_UNKNOWN: int
+CLOCK_HTE: int
+CLOCK_MONOTONIC: int
+CLOCK_REALTIME: int
+DIRECTION_AS_IS: int
+DIRECTION_INPUT: int
+DIRECTION_OUTPUT: int
+DRIVE_OPEN_DRAIN: int
+DRIVE_OPEN_SOURCE: int
+DRIVE_PUSH_PULL: int
+EDGE_BOTH: int
+EDGE_EVENT_TYPE_FALLING: int
+EDGE_EVENT_TYPE_RISING: int
+EDGE_FALLING: int
+EDGE_NONE: int
+EDGE_RISING: int
+INFO_EVENT_TYPE_LINE_CONFIG_CHANGED: int
+INFO_EVENT_TYPE_LINE_RELEASED: int
+INFO_EVENT_TYPE_LINE_REQUESTED: int
+VALUE_ACTIVE: int
+VALUE_INACTIVE: int
diff --git a/bindings/python/setup.py b/bindings/python/setup.py
index 7ab783f..0d518af 100644
--- a/bindings/python/setup.py
+++ b/bindings/python/setup.py
@@ -228,7 +228,7 @@  setup(
     name="gpiod",
     url="https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git",
     packages=find_packages(exclude=["tests", "tests.*"]),
-    package_data={"gpiod": ["py.typed"]},
+    package_data={"gpiod": ["py.typed", "_ext.pyi"]},
     python_requires=">=3.9.0",
     ext_modules=[gpiod_ext],
     cmdclass={"build_ext": build_ext, "sdist": sdist},