From a8aeb32e188cbcf934dc4820cc6e68e87e227c61 Mon Sep 17 00:00:00 2001 From: Ivan Habunek Date: Tue, 5 Dec 2023 09:15:39 +0100 Subject: [PATCH] Fix typing not to break older python versions --- setup.py | 1 + toot/cli/base.py | 26 ++++++++++++++------------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/setup.py b/setup.py index 133a697..79e4833 100644 --- a/setup.py +++ b/setup.py @@ -59,6 +59,7 @@ setup( "pytest-xdist[psutil]", "setuptools", "vermin", + "typing-extensions", ], }, entry_points={ diff --git a/toot/cli/base.py b/toot/cli/base.py index 2cd86b9..13d7f51 100644 --- a/toot/cli/base.py +++ b/toot/cli/base.py @@ -2,11 +2,18 @@ import click import logging import os import sys +import typing as t from click.testing import Result from functools import wraps from toot import App, User, config, __version__ -from typing import Callable, Concatenate, NamedTuple, Optional, ParamSpec, TypeVar + +if t.TYPE_CHECKING: + import typing_extensions as te + P = te.ParamSpec("P") + +R = t.TypeVar("R") +T = t.TypeVar("T") PRIVACY_CHOICES = ["public", "unlisted", "private"] @@ -17,7 +24,7 @@ seconds" or any combination of above. Shorthand: "1d", "2h30m", "5m30s\"""" # Type alias for run commands -Run = Callable[..., Result] +Run = t.Callable[..., Result] def get_default_visibility() -> str: @@ -39,23 +46,18 @@ CONTEXT = dict( # Data object to add to Click context -class Context(NamedTuple): - app: Optional[App] - user: Optional[User] = None +class Context(t.NamedTuple): + app: t.Optional[App] + user: t.Optional[User] = None color: bool = False debug: bool = False quiet: bool = False -P = ParamSpec("P") -R = TypeVar("R") -T = TypeVar("T") - - -def pass_context(f: Callable[Concatenate[Context, P], R]) -> Callable[P, R]: +def pass_context(f: "t.Callable[te.Concatenate[Context, P], R]") -> "t.Callable[P, R]": """Pass `obj` from click context as first argument.""" @wraps(f) - def wrapped(*args: P.args, **kwargs: P.kwargs) -> R: + def wrapped(*args: "P.args", **kwargs: "P.kwargs") -> R: ctx = click.get_current_context() return f(ctx.obj, *args, **kwargs)