Add some missing type hints (MR 2338)

Functions with no explicit return type are considered to return `Any`.
This commit is contained in:
Hugo Osvaldo Barrera 2024-06-27 02:43:00 +02:00
parent e6eb0d8795
commit 84c512ea6a
No known key found for this signature in database
GPG key ID: 5AE7F5513E0885CB
8 changed files with 67 additions and 57 deletions

View file

@ -76,7 +76,8 @@ def main() -> int:
# Initialize or require config # Initialize or require config
if args.action == "init": if args.action == "init":
return config_init.frontend(args) config_init.frontend(args)
return 0
elif not os.path.exists(args.config): elif not os.path.exists(args.config):
if args.config != config.defaults["config"]: if args.config != config.defaults["config"]:
raise NonBugError(f"Couldn't find file passed with --config: {args.config}") raise NonBugError(f"Couldn't find file passed with --config: {args.config}")

View file

@ -11,7 +11,7 @@ from pmb.core import Chroot
from pmb.core.context import get_context from pmb.core.context import get_context
def generate(pkgname: str): def generate(pkgname: str) -> None:
arch = pkgname.split("-")[2] arch = pkgname.split("-")[2]
context = get_context() context = get_context()

View file

@ -9,7 +9,7 @@ import pmb.install
from pmb.core import Chroot from pmb.core import Chroot
def kernel_flavor_installed(chroot: Chroot, autoinstall=True): def kernel_flavor_installed(chroot: Chroot, autoinstall=True) -> str | None:
""" """
Get installed kernel flavor. Optionally install the device's kernel Get installed kernel flavor. Optionally install the device's kernel
beforehand. beforehand.
@ -34,7 +34,7 @@ def kernel_flavor_installed(chroot: Chroot, autoinstall=True):
return glob_result[0].name if glob_result else None return glob_result[0].name if glob_result else None
def copy_xauthority(args: PmbArgs): def copy_xauthority(args: PmbArgs) -> None:
""" """
Copy the host system's Xauthority file to the pmos user inside the chroot, Copy the host system's Xauthority file to the pmos user inside the chroot,
so we can start X11 applications from there. so we can start X11 applications from there.

View file

@ -32,7 +32,7 @@ from pmb.parse.deviceinfo import Deviceinfo
import pmb.parse._apkbuild import pmb.parse._apkbuild
def require_programs(): def require_programs() -> None:
missing = [] missing = []
for program in pmb.config.required_programs: for program in pmb.config.required_programs:
if not shutil.which(program): if not shutil.which(program):
@ -273,7 +273,7 @@ def ask_for_timezone():
return "GMT" return "GMT"
def ask_for_provider_select(apkbuild, providers_cfg): def ask_for_provider_select(apkbuild, providers_cfg) -> None:
"""Ask for selectable providers that are specified using "_pmb_select" in a APKBUILD. """Ask for selectable providers that are specified using "_pmb_select" in a APKBUILD.
:param apkbuild: the APKBUILD with the _pmb_select :param apkbuild: the APKBUILD with the _pmb_select
@ -331,7 +331,7 @@ def ask_for_provider_select(apkbuild, providers_cfg):
) )
def ask_for_provider_select_pkg(pkgname, providers_cfg): def ask_for_provider_select_pkg(pkgname, providers_cfg) -> None:
"""Look up the APKBUILD for the specified pkgname and ask for selectable """Look up the APKBUILD for the specified pkgname and ask for selectable
providers that are specified using "_pmb_select". providers that are specified using "_pmb_select".
@ -466,7 +466,7 @@ def ask_for_device(context: Context):
return (device, device_path is not None, kernel) return (device, device_path is not None, kernel)
def ask_for_additional_options(config): def ask_for_additional_options(config) -> None:
context = pmb.core.context.get_context() context = pmb.core.context.get_context()
# Allow to skip additional options # Allow to skip additional options
logging.info( logging.info(
@ -646,7 +646,7 @@ def get_locales():
return ret return ret
def ask_for_locale(current_locale: str): def ask_for_locale(current_locale: str) -> str:
locales = get_locales() locales = get_locales()
logging.info( logging.info(
"Choose your preferred locale, like e.g. en_US. Only UTF-8" "Choose your preferred locale, like e.g. en_US. Only UTF-8"
@ -672,7 +672,7 @@ def ask_for_locale(current_locale: str):
return f"{ret}.UTF-8" return f"{ret}.UTF-8"
def frontend(args: PmbArgs): def frontend(args: PmbArgs) -> None:
require_programs() require_programs()
# Work folder (needs to be first, so we can create chroots early) # Work folder (needs to be first, so we can create chroots early)

View file

@ -1,5 +1,7 @@
# Copyright 2023 Oliver Smith # Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from __future__ import annotations
from pmb.core.context import get_context from pmb.core.context import get_context
from pmb.helpers import logging from pmb.helpers import logging
@ -17,7 +19,12 @@ import pmb.parse.kconfig
from pmb.core import Chroot, ChrootType from pmb.core import Chroot, ChrootType
def kernel(deviceinfo: Deviceinfo, method: str, boot: bool = False, autoinstall: bool = False): def kernel(
deviceinfo: Deviceinfo,
method: str,
boot: bool = False,
autoinstall: bool = False,
) -> None:
# Rebuild the initramfs, just to make sure (see #69) # Rebuild the initramfs, just to make sure (see #69)
flavor = pmb.helpers.frontend._parse_flavor(deviceinfo.codename, autoinstall) flavor = pmb.helpers.frontend._parse_flavor(deviceinfo.codename, autoinstall)
if autoinstall: if autoinstall:
@ -43,13 +50,13 @@ def kernel(deviceinfo: Deviceinfo, method: str, boot: bool = False, autoinstall:
) )
def list_flavors(device: str): def list_flavors(device: str) -> None:
chroot = Chroot(ChrootType.ROOTFS, device) chroot = Chroot(ChrootType.ROOTFS, device)
logging.info(f"({chroot}) installed kernel flavors:") logging.info(f"({chroot}) installed kernel flavors:")
logging.info("* " + pmb.chroot.other.kernel_flavor_installed(chroot)) logging.info("* " + str(pmb.chroot.other.kernel_flavor_installed(chroot)))
def rootfs(deviceinfo: Deviceinfo, method: str): def rootfs(deviceinfo: Deviceinfo, method: str) -> None:
# Generate rootfs, install flasher # Generate rootfs, install flasher
suffix = ".img" suffix = ".img"
if pmb.config.flashers.get(method, {}).get("split", False): if pmb.config.flashers.get(method, {}).get("split", False):
@ -73,11 +80,11 @@ def rootfs(deviceinfo: Deviceinfo, method: str):
pmb.flasher.run(deviceinfo, method, "flash_rootfs") pmb.flasher.run(deviceinfo, method, "flash_rootfs")
def list_devices(deviceinfo: Deviceinfo, method: str): def list_devices(deviceinfo: Deviceinfo, method: str) -> None:
pmb.flasher.run(deviceinfo, method, "list_devices") pmb.flasher.run(deviceinfo, method, "list_devices")
def sideload(deviceinfo: Deviceinfo, method: str): def sideload(deviceinfo: Deviceinfo, method: str) -> None:
# Install depends # Install depends
pmb.flasher.install_depends(method) pmb.flasher.install_depends(method)
@ -102,7 +109,7 @@ def sideload(deviceinfo: Deviceinfo, method: str):
pmb.flasher.run(deviceinfo, method, "sideload") pmb.flasher.run(deviceinfo, method, "sideload")
def flash_lk2nd(deviceinfo: Deviceinfo, method: str): def flash_lk2nd(deviceinfo: Deviceinfo, method: str) -> None:
if method == "fastboot": if method == "fastboot":
# In the future this could be expanded to use "fastboot flash lk2nd $img" # In the future this could be expanded to use "fastboot flash lk2nd $img"
# which reflashes/updates lk2nd from itself. For now let the user handle this # which reflashes/updates lk2nd from itself. For now let the user handle this
@ -141,7 +148,7 @@ def flash_lk2nd(deviceinfo: Deviceinfo, method: str):
pmb.flasher.run(deviceinfo, method, "flash_lk2nd") pmb.flasher.run(deviceinfo, method, "flash_lk2nd")
def frontend(args: PmbArgs): def frontend(args: PmbArgs) -> None:
context = get_context() context = get_context()
action = args.action_flasher action = args.action_flasher
device = context.config.device device = context.config.device

View file

@ -7,7 +7,7 @@ from pmb.helpers import logging
import os import os
from pathlib import Path from pathlib import Path
import sys import sys
from typing import Any from typing import Any, NoReturn
import pmb.aportgen import pmb.aportgen
import pmb.build import pmb.build
@ -43,7 +43,7 @@ from pmb.core import ChrootType, Chroot
from pmb.core.context import get_context from pmb.core.context import get_context
def _parse_flavor(device: str, autoinstall=True): def _parse_flavor(device: str, autoinstall=True) -> str:
"""Verify the flavor argument if specified, or return a default value. """Verify the flavor argument if specified, or return a default value.
:param autoinstall: make sure that at least one kernel flavor is installed :param autoinstall: make sure that at least one kernel flavor is installed
@ -83,7 +83,7 @@ def _parse_suffix(args: PmbArgs) -> Chroot:
return Chroot(ChrootType.NATIVE) return Chroot(ChrootType.NATIVE)
def _install_ondev_verify_no_rootfs(device: str, ondev_cp: list[tuple[str, str]]): def _install_ondev_verify_no_rootfs(device: str, ondev_cp: list[tuple[str, str]]) -> None:
chroot_dest = "/var/lib/rootfs.img" chroot_dest = "/var/lib/rootfs.img"
dest = Chroot(ChrootType.INSTALLER, device) / chroot_dest dest = Chroot(ChrootType.INSTALLER, device) / chroot_dest
if dest.exists(): if dest.exists():
@ -103,13 +103,13 @@ def _install_ondev_verify_no_rootfs(device: str, ondev_cp: list[tuple[str, str]]
) )
def aportgen(args: PmbArgs): def aportgen(args: PmbArgs) -> None:
for package in args.packages: for package in args.packages:
logging.info("Generate aport: " + package) logging.info("Generate aport: " + package)
pmb.aportgen.generate(package, args.fork_alpine) pmb.aportgen.generate(package, args.fork_alpine)
def build(args: PmbArgs): def build(args: PmbArgs) -> None:
# Strict mode: zap everything # Strict mode: zap everything
if args.strict: if args.strict:
pmb.chroot.zap(False) pmb.chroot.zap(False)
@ -144,12 +144,12 @@ def build(args: PmbArgs):
) )
def build_init(args: PmbArgs): def build_init(args: PmbArgs) -> None:
chroot = _parse_suffix(args) chroot = _parse_suffix(args)
pmb.build.init(chroot) pmb.build.init(chroot)
def checksum(args: PmbArgs): def checksum(args: PmbArgs) -> None:
pmb.chroot.init(Chroot.native()) pmb.chroot.init(Chroot.native())
for package in args.packages: for package in args.packages:
if args.verify: if args.verify:
@ -158,20 +158,20 @@ def checksum(args: PmbArgs):
pmb.build.checksum.update(package) pmb.build.checksum.update(package)
def sideload(args: PmbArgs): def sideload(args: PmbArgs) -> None:
arch = args.arch arch = args.arch
user = get_context().config.user user = get_context().config.user
host = args.host host = args.host
pmb.sideload.sideload(args, user, host, args.port, arch, args.install_key, args.packages) pmb.sideload.sideload(args, user, host, args.port, arch, args.install_key, args.packages)
def netboot(args: PmbArgs): def netboot(args: PmbArgs) -> None:
if args.action_netboot == "serve": if args.action_netboot == "serve":
device = get_context().config.device device = get_context().config.device
pmb.netboot.start_nbd_server(device, args.replace) pmb.netboot.start_nbd_server(device, args.replace)
def chroot(args: PmbArgs): def chroot(args: PmbArgs) -> None:
# Suffix # Suffix
chroot = _parse_suffix(args) chroot = _parse_suffix(args)
user = args.user user = args.user
@ -225,7 +225,7 @@ def chroot(args: PmbArgs):
pmb.chroot.root(args.command, chroot, output=args.output, env=env) pmb.chroot.root(args.command, chroot, output=args.output, env=env)
def config(args: PmbArgs): def config(args: PmbArgs) -> None:
keys = Config.keys() keys = Config.keys()
if args.name and args.name not in keys: if args.name and args.name not in keys:
logging.info("NOTE: Valid config keys: " + ", ".join(keys)) logging.info("NOTE: Valid config keys: " + ", ".join(keys))
@ -284,16 +284,16 @@ def config(args: PmbArgs):
pmb.helpers.logging.disable() pmb.helpers.logging.disable()
def repo_missing(args: PmbArgs): def repo_missing(args: PmbArgs) -> None:
missing = pmb.helpers.repo_missing.generate(args.arch, args.overview, args.package, args.built) missing = pmb.helpers.repo_missing.generate(args.arch, args.overview, args.package, args.built)
print(json.dumps(missing, indent=4)) print(json.dumps(missing, indent=4))
def initfs(args: PmbArgs): def initfs(args: PmbArgs) -> None:
pmb.chroot.initfs.frontend(args) pmb.chroot.initfs.frontend(args)
def install(args: PmbArgs): def install(args: PmbArgs) -> None:
config = get_context().config config = get_context().config
device = config.device device = config.device
deviceinfo = pmb.parse.deviceinfo(device) deviceinfo = pmb.parse.deviceinfo(device)
@ -409,15 +409,15 @@ def install(args: PmbArgs):
pmb.install.install(args) pmb.install.install(args)
def flasher(args: PmbArgs): def flasher(args: PmbArgs) -> None:
pmb.flasher.frontend(args) pmb.flasher.frontend(args)
def export(args: PmbArgs): def export(args: PmbArgs) -> None:
pmb.export.frontend(args) pmb.export.frontend(args)
def update(args: PmbArgs): def update(args: PmbArgs) -> None:
existing_only = not args.non_existing existing_only = not args.non_existing
if not pmb.helpers.repo.update(args.arch, True, existing_only): if not pmb.helpers.repo.update(args.arch, True, existing_only):
logging.info( logging.info(
@ -432,7 +432,7 @@ def update(args: PmbArgs):
) )
def newapkbuild(args: PmbArgs): def newapkbuild(args: PmbArgs) -> None:
# Check for SRCURL usage # Check for SRCURL usage
is_url = False is_url = False
for prefix in ["http://", "https://", "ftp://"]: for prefix in ["http://", "https://", "ftp://"]:
@ -466,7 +466,7 @@ def newapkbuild(args: PmbArgs):
pmb.build.newapkbuild(args.folder, pass_through, args.force) pmb.build.newapkbuild(args.folder, pass_through, args.force)
def deviceinfo_parse(args: PmbArgs): def deviceinfo_parse(args: PmbArgs) -> None:
# Default to all devices # Default to all devices
devices = args.devices devices = args.devices
if not devices: if not devices:
@ -479,7 +479,7 @@ def deviceinfo_parse(args: PmbArgs):
print(json.dumps(pmb.parse.deviceinfo(device, kernel), indent=4, sort_keys=True)) print(json.dumps(pmb.parse.deviceinfo(device, kernel), indent=4, sort_keys=True))
def apkbuild_parse(args: PmbArgs): def apkbuild_parse(args: PmbArgs) -> None:
# Default to all packages # Default to all packages
packages: Sequence[str] = args.packages packages: Sequence[str] = args.packages
if not packages: if not packages:
@ -492,7 +492,7 @@ def apkbuild_parse(args: PmbArgs):
print(json.dumps(pmb.parse.apkbuild(aport), indent=4, sort_keys=True)) print(json.dumps(pmb.parse.apkbuild(aport), indent=4, sort_keys=True))
def apkindex_parse(args: PmbArgs): def apkindex_parse(args: PmbArgs) -> None:
result = pmb.parse.apkindex.parse(args.apkindex_path) result = pmb.parse.apkindex.parse(args.apkindex_path)
if args.package: if args.package:
if args.package not in result: if args.package not in result:
@ -501,10 +501,10 @@ def apkindex_parse(args: PmbArgs):
print(json.dumps(result, indent=4)) print(json.dumps(result, indent=4))
def pkgrel_bump(args: PmbArgs): def pkgrel_bump(args: PmbArgs) -> None:
would_bump = True would_bump = True
if args.auto: if args.auto:
would_bump = pmb.helpers.pkgrel_bump.auto(args, args.dry) would_bump = bool(pmb.helpers.pkgrel_bump.auto(args, args.dry))
else: else:
# Each package must exist # Each package must exist
for package in args.packages: for package in args.packages:
@ -519,7 +519,7 @@ def pkgrel_bump(args: PmbArgs):
sys.exit(1) sys.exit(1)
def aportupgrade(args: PmbArgs): def aportupgrade(args: PmbArgs) -> None:
if args.all or args.all_stable or args.all_git: if args.all or args.all_stable or args.all_git:
pmb.helpers.aportupgrade.upgrade_all(args) pmb.helpers.aportupgrade.upgrade_all(args)
else: else:
@ -532,11 +532,11 @@ def aportupgrade(args: PmbArgs):
pmb.helpers.aportupgrade.upgrade(args, package) pmb.helpers.aportupgrade.upgrade(args, package)
def qemu(args: PmbArgs): def qemu(args: PmbArgs) -> None:
pmb.qemu.run(args) pmb.qemu.run(args)
def stats(args: PmbArgs): def stats(args: PmbArgs) -> None:
# Chroot suffix # Chroot suffix
chroot = Chroot.buildroot(args.arch or Arch.native()) chroot = Chroot.buildroot(args.arch or Arch.native())
@ -546,12 +546,12 @@ def stats(args: PmbArgs):
pmb.chroot.user(["ccache", "-s"], chroot, output="stdout") pmb.chroot.user(["ccache", "-s"], chroot, output="stdout")
def work_migrate(args: PmbArgs): def work_migrate(args: PmbArgs) -> None:
# do nothing (pmb/__init__.py already did the migration) # do nothing (pmb/__init__.py already did the migration)
pmb.helpers.logging.disable() pmb.helpers.logging.disable()
def zap(args: PmbArgs): def zap(args: PmbArgs) -> None:
pmb.chroot.zap( pmb.chroot.zap(
dry=args.dry, dry=args.dry,
http=args.http, http=args.http,
@ -567,7 +567,7 @@ def zap(args: PmbArgs):
pmb.helpers.logging.disable() pmb.helpers.logging.disable()
def bootimg_analyze(args: PmbArgs): def bootimg_analyze(args: PmbArgs) -> None:
bootimg = pmb.parse.bootimg(args.path) bootimg = pmb.parse.bootimg(args.path)
tmp_output = "Put these variables in the deviceinfo file of your device:\n" tmp_output = "Put these variables in the deviceinfo file of your device:\n"
for line in pmb.aportgen.device.generate_deviceinfo_fastboot_content(bootimg).split("\n"): for line in pmb.aportgen.device.generate_deviceinfo_fastboot_content(bootimg).split("\n"):
@ -575,7 +575,7 @@ def bootimg_analyze(args: PmbArgs):
logging.info(tmp_output) logging.info(tmp_output)
def lint(args: PmbArgs): def lint(args: PmbArgs) -> None:
packages: Sequence[str] = args.packages packages: Sequence[str] = args.packages
if not packages: if not packages:
packages = pmb.helpers.pmaports.get_list() packages = pmb.helpers.pmaports.get_list()
@ -583,14 +583,14 @@ def lint(args: PmbArgs):
pmb.helpers.lint.check(packages) pmb.helpers.lint.check(packages)
def status(args: PmbArgs) -> None: def status(args: PmbArgs) -> NoReturn:
pmb.helpers.status.print_status(args) pmb.helpers.status.print_status(args)
# Do not print the DONE! line # Do not print the DONE! line
sys.exit(0) sys.exit(0)
def ci(args: PmbArgs): def ci(args: PmbArgs) -> None:
topdir = pmb.helpers.git.get_topdir(Path.cwd()) topdir = pmb.helpers.git.get_topdir(Path.cwd())
if not os.path.exists(topdir): if not os.path.exists(topdir):
logging.error( logging.error(

View file

@ -11,7 +11,7 @@ import pmb.parse
import pmb.parse.apkindex import pmb.parse.apkindex
def package(args: PmbArgs, pkgname, reason="", dry=False): def package(args: PmbArgs, pkgname: str, reason="", dry: bool = False) -> None:
"""Increase the pkgrel in the APKBUILD of a specific package. """Increase the pkgrel in the APKBUILD of a specific package.
:param pkgname: name of the package :param pkgname: name of the package
@ -54,7 +54,7 @@ def package(args: PmbArgs, pkgname, reason="", dry=False):
) )
def auto_apkindex_package(args: PmbArgs, arch, aport, apk, dry=False): def auto_apkindex_package(args: PmbArgs, arch, aport, apk, dry: bool = False) -> bool:
"""Bump the pkgrel of a specific package if it is outdated in the given APKINDEX. """Bump the pkgrel of a specific package if it is outdated in the given APKINDEX.
:param arch: the architecture, e.g. "armhf" :param arch: the architecture, e.g. "armhf"
@ -76,13 +76,13 @@ def auto_apkindex_package(args: PmbArgs, arch, aport, apk, dry=False):
f"{pkgname}: skipping, because the aport version {version_aport} is lower" f"{pkgname}: skipping, because the aport version {version_aport} is lower"
f" than the binary version {version_apk}" f" than the binary version {version_apk}"
) )
return return False
if compare == 1: if compare == 1:
logging.verbose( logging.verbose(
f"{pkgname}: skipping, because the aport version {version_aport} is higher" f"{pkgname}: skipping, because the aport version {version_aport} is higher"
f" than the binary version {version_apk}" f" than the binary version {version_apk}"
) )
return return False
# Find missing depends # Find missing depends
depends = apk["depends"] depends = apk["depends"]
@ -106,8 +106,10 @@ def auto_apkindex_package(args: PmbArgs, arch, aport, apk, dry=False):
package(args, pkgname, reason=", missing depend(s): " + ", ".join(missing), dry=dry) package(args, pkgname, reason=", missing depend(s): " + ", ".join(missing), dry=dry)
return True return True
return False
def auto(args: PmbArgs, dry=False):
def auto(args: PmbArgs, dry=False) -> list[str]:
""":returns: list of aport names, where the pkgrel needed to be changed""" """:returns: list of aport names, where the pkgrel needed to be changed"""
ret = [] ret = []
for arch in Arch.supported(): for arch in Arch.supported():

View file

@ -64,13 +64,13 @@ def ssh_find_arch(args: PmbArgs, user: str, host: str, port: str) -> Arch:
return alpine_architecture return alpine_architecture
def ssh_install_apks(args: PmbArgs, user, host, port, paths) -> None: def ssh_install_apks(args: PmbArgs, user, host, port, paths: list) -> None:
"""Copy binary packages via SCP and install them via SSH. """Copy binary packages via SCP and install them via SSH.
:param user: target device ssh username :param user: target device ssh username
:param host: target device ssh hostname :param host: target device ssh hostname
:param port: target device ssh port :param port: target device ssh port
:param paths: list of absolute paths to locally stored apks :param paths: list of absolute paths to locally stored apks
:type paths: list""" """
remote_paths = [] remote_paths = []
for path in paths: for path in paths: