public inbox for linux-gpio@vger.kernel.org
 help / color / mirror / Atom feed
From: Vincent Fazio <vfazio@gmail.com>
To: linux-gpio@vger.kernel.org
Cc: Vincent Fazio <vfazio@gmail.com>
Subject: [libgpiod][PATCH 3/9] bindings: python: setup: add type annotations
Date: Tue, 31 Mar 2026 19:14:52 -0500	[thread overview]
Message-ID: <20260401001459.19159-3-vfazio@gmail.com> (raw)
In-Reply-To: <20260401001459.19159-1-vfazio@gmail.com>

Add type annotations to help with lint checks.

Signed-off-by: Vincent Fazio <vfazio@gmail.com>
---
 bindings/python/setup.py | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/bindings/python/setup.py b/bindings/python/setup.py
index 7bf9246..4061328 100644
--- a/bindings/python/setup.py
+++ b/bindings/python/setup.py
@@ -1,8 +1,10 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 # SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
 
+from collections.abc import Callable
 from os import getenv, path, unlink
 from shutil import copy, copytree, rmtree
+from typing import TypeVar
 
 from setuptools import Extension, setup
 from setuptools.command.build_ext import build_ext as orig_build_ext
@@ -10,6 +12,8 @@ from setuptools.command.sdist import log
 from setuptools.command.sdist import sdist as orig_sdist
 from setuptools.errors import BaseError
 
+T = TypeVar("T", "sdist", "build_ext")
+
 LINK_SYSTEM_LIBGPIOD = getenv("LINK_SYSTEM_LIBGPIOD") == "1"
 LIBGPIOD_MINIMUM_VERSION = "2.1"
 LIBGPIOD_VERSION = getenv("LIBGPIOD_VERSION")
@@ -20,7 +24,7 @@ SHA256_CHUNK_SIZE = 2048
 LICENSE_FILE = "LICENSE"
 
 
-def sha256(filename):
+def sha256(filename: str) -> str:
     """
     Return a sha256sum for a specific filename, loading the file in chunks
     to avoid potentially excessive memory use.
@@ -35,7 +39,7 @@ def sha256(filename):
     return sha256sum.hexdigest()
 
 
-def find_sha256sum(asc_file, tar_filename):
+def find_sha256sum(asc_file: str, tar_filename: str) -> str:
     """
     Search through a local copy of sha256sums.asc for a specific filename
     and return the associated sha256 sum.
@@ -49,7 +53,7 @@ def find_sha256sum(asc_file, tar_filename):
     raise BaseError(f"no signature found for {tar_filename}")
 
 
-def fetch_tarball(command):
+def fetch_tarball(func: Callable[[T], None]) -> Callable[[T], None]:
     """
     Verify the requested LIBGPIOD_VERSION tarball exists in sha256sums.asc,
     fetch it from https://mirrors.edge.kernel.org/pub/software/libs/libgpiod/
@@ -61,10 +65,10 @@ def fetch_tarball(command):
 
     # If no LIBGPIOD_VERSION is specified in env, just run the command
     if LIBGPIOD_VERSION is None:
-        return command
+        return func
 
     # If LIBGPIOD_VERSION is specified, apply the tarball wrapper
-    def wrapper(self):
+    def wrapper(cmd: T) -> None:
         # Just-in-time import of tarfile and urllib.request so these are
         # not required for Yocto to build a vendored or linked package
         import sys
@@ -83,7 +87,7 @@ def fetch_tarball(command):
         try:
             if open("libgpiod-version.txt", "r").read() == LIBGPIOD_VERSION:
                 log.info(f"skipping tarball fetch")
-                command(self)
+                func(cmd)
                 return
         except OSError:
             pass
@@ -175,13 +179,13 @@ def fetch_tarball(command):
                     # For further details, see `egg_info.find_sources` and
                     # `manifest_maker.add_license_files`
                     copy(_path, LICENSE_FILE)
-                    self.distribution.metadata.license_files = [LICENSE_FILE]
+                    cmd.distribution.metadata.license_files = [LICENSE_FILE]  # type: ignore[attr-defined]
 
         # Save the libgpiod version for sdist
         open("libgpiod-version.txt", "w").write(LIBGPIOD_VERSION)
 
         # Run the command
-        command(self)
+        func(cmd)
 
         # Clean up the build directory
         if path.exists(LICENSE_FILE):
@@ -206,8 +210,9 @@ class build_ext(orig_build_ext):
     """
 
     @fetch_tarball
-    def run(self):
+    def run(self) -> None:
         # Try to get the gpiod version from the .txt file included in sdist
+        libgpiod_version: str | None
         try:
             libgpiod_version = open("libgpiod-version.txt", "r").read()
         except OSError:
@@ -251,7 +256,7 @@ class sdist(orig_sdist):
     """
 
     @fetch_tarball
-    def run(self):
+    def run(self) -> None:
         super().run()
 
 
-- 
2.43.0


  parent reply	other threads:[~2026-04-01  0:18 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-01  0:14 [libgpiod][PATCH 1/9] bindings: python: build_tests: do not fallback to distutils Vincent Fazio
2026-04-01  0:14 ` [libgpiod][PATCH 2/9] bindings: python: build_tests: simplify the Distribution Vincent Fazio
2026-04-01  0:14 ` Vincent Fazio [this message]
2026-04-01  0:14 ` [libgpiod][PATCH 4/9] bindings: python: setup: apply linter recommendations Vincent Fazio
2026-04-01  0:14 ` [libgpiod][PATCH 5/9] bindings: python: setup: use logging module Vincent Fazio
2026-04-01  0:14 ` [libgpiod][PATCH 6/9] bindings: python: examples: add type annotations Vincent Fazio
2026-04-01  0:14 ` [libgpiod][PATCH 7/9] bindings: python: examples: apply linter recommendations Vincent Fazio
2026-04-01  0:14 ` [libgpiod][PATCH 8/9] bindings: python: add a lint dependency group Vincent Fazio
2026-04-01  0:14 ` [libgpiod][PATCH 9/9] bindings: python: update linter configuration Vincent Fazio
2026-04-02 14:37   ` Bartosz Golaszewski
2026-04-02 15:55     ` Vincent Fazio
2026-04-02 16:42       ` Bartosz Golaszewski
2026-04-02 17:01         ` Vincent Fazio
2026-04-03  9:02           ` Bartosz Golaszewski
2026-04-03 13:09             ` Vincent Fazio
2026-04-03  9:01 ` [libgpiod][PATCH 1/9] bindings: python: build_tests: do not fallback to distutils Bartosz Golaszewski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260401001459.19159-3-vfazio@gmail.com \
    --to=vfazio@gmail.com \
    --cc=linux-gpio@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox