diff --git a/installer/lib/installer.py b/installer/lib/installer.py index a501b21cd0..62e4b4a504 100644 --- a/installer/lib/installer.py +++ b/installer/lib/installer.py @@ -36,7 +36,7 @@ class Installer: self.bootstrap() self.available_releases = get_github_releases() - def mktemp_venv(self) -> TemporaryDirectory: + def mktemp_venv(self) -> TemporaryDirectory[str]: """ Creates a temporary virtual environment for the installer itself @@ -58,7 +58,7 @@ class Installer: return venv_dir - def bootstrap(self, verbose: bool = False) -> TemporaryDirectory | None: + def bootstrap(self, verbose: bool = False) -> TemporaryDirectory[str] | None: """ Bootstrap the installer venv with packages required at install time """ @@ -87,7 +87,7 @@ class Installer: except subprocess.CalledProcessError as e: print(e) - def app_venv(self, venv_parent) -> Path: + def app_venv(self, venv_parent: Path) -> Path: """ Create a virtualenv for the InvokeAI installation """ @@ -106,7 +106,11 @@ class Installer: return venv_dir def install( - self, version=None, root: str = "~/invokeai", yes_to_all=False, find_links: Optional[Path] = None + self, + root: str = "~/invokeai", + yes_to_all: bool = False, + version: Optional[str] = None, + find_links: Optional[str] = None, ) -> None: """ Install the InvokeAI application into the given runtime path @@ -118,7 +122,7 @@ class Installer: :param yes: Accept defaults to all questions :type yes: bool :param find_links: A local directory to search for requirement wheels before going to remote indexes - :type find_links: Path + :type find_links: str """ import messages @@ -178,7 +182,12 @@ class InvokeAiInstance: return (self.runtime, self.venv) - def install(self, extra_index_url=None, optional_modules=None, find_links=None): + def install( + self, + extra_index_url: Optional[str] = None, + optional_modules: Optional[str] = None, + find_links: Optional[str] = None, + ): """ Install the package from PyPi. @@ -213,7 +222,7 @@ class InvokeAiInstance: messages.simple_banner("Installing the InvokeAI Application :art:") - from plumbum import FG, ProcessExecutionError, local # type: ignore + from plumbum import FG, ProcessExecutionError, local pip = local[self.pip] @@ -320,7 +329,7 @@ def set_sys_path(venv_path: Path) -> None: sys.path.append(str(Path(venv_path, lib, "site-packages").expanduser().resolve())) -def get_github_releases() -> tuple[list, list] | None: +def get_github_releases() -> tuple[list[str], list[str]] | None: """ Query Github for published (pre-)release versions. Return a tuple where the first element is a list of stable releases and the second element is a list of pre-releases. @@ -331,7 +340,8 @@ def get_github_releases() -> tuple[list, list] | None: ## get latest releases using github api url = "https://api.github.com/repos/invoke-ai/InvokeAI/releases" - releases, pre_releases = [], [] + releases: list[str] = [] + pre_releases: list[str] = [] try: res = requests.get(url) res.raise_for_status() diff --git a/installer/lib/messages.py b/installer/lib/messages.py index 88baa3e067..f7734de5ef 100644 --- a/installer/lib/messages.py +++ b/installer/lib/messages.py @@ -7,6 +7,7 @@ import os import platform from enum import Enum from pathlib import Path +from typing import Optional from prompt_toolkit import prompt from prompt_toolkit.completion import FuzzyWordCompleter, PathCompleter @@ -36,7 +37,7 @@ else: console = Console(style=Style(color="grey74", bgcolor="grey19")) -def welcome(available_releases: tuple | None = None) -> None: +def welcome(available_releases: tuple[list[str], list[str]] | None = None) -> None: @group() def text(): if (platform_specific := _platform_specific_help()) is not None: @@ -72,7 +73,7 @@ def welcome(available_releases: tuple | None = None) -> None: console.line() -def choose_version(available_releases: tuple | None = None) -> str: +def choose_version(available_releases: tuple[list[str], list[str]] | None = None) -> str: """ Prompt the user to choose an Invoke version to install """ @@ -114,7 +115,7 @@ def confirm_install(dest: Path) -> bool: return dest_confirmed -def dest_path(dest=None) -> Path | None: +def dest_path(dest: Optional[str | Path] = None) -> Path | None: """ Prompt the user for the destination path and create the path