|
171 | 171 | _CACHE_KEY = "_register_typer"
|
172 | 172 |
|
173 | 173 |
|
| 174 | +if sys.version_info < (3, 10): |
| 175 | + # todo - remove this when support for <=3.9 is dropped |
| 176 | + class static_factory(type): |
| 177 | + def __call__(self, *args, **kwargs): |
| 178 | + assert args |
| 179 | + if type(args[0]).__name__ == "staticmethod": |
| 180 | + return args[0] |
| 181 | + return super().__call__(*args, **kwargs) |
| 182 | + |
| 183 | + class staticmethod(t.Generic[P, R], metaclass=static_factory): |
| 184 | + __func__: t.Callable[P, R] |
| 185 | + |
| 186 | + def __init__(self, func: t.Callable[P, R]): |
| 187 | + self.__func__ = func |
| 188 | + |
| 189 | + def __getattr__(self, name): |
| 190 | + return getattr(self.__func__, name) |
| 191 | + |
| 192 | + def __call__(self, *args: P.args, **kwargs: P.kwargs) -> R: |
| 193 | + return self.__func__(*args, **kwargs) |
| 194 | + |
| 195 | + |
174 | 196 | def model_parser_completer(
|
175 | 197 | model_cls: t.Type[Model],
|
176 | 198 | lookup_field: t.Optional[str] = None,
|
@@ -789,6 +811,11 @@ class Command(
|
789 | 811 | else:
|
790 | 812 | return Typer(**kwargs)
|
791 | 813 |
|
| 814 | + if sys.version_info < (3, 9): |
| 815 | + # this is a workaround for a bug in python 3.8 that causes multiple |
| 816 | + # values for cls error. 3.8 support is sunsetting soon so we just punt |
| 817 | + # on this one - REMOVE in next version |
| 818 | + kwargs.pop("cls", None) |
792 | 819 | return super().__call__(*args, **kwargs)
|
793 | 820 |
|
794 | 821 |
|
|
0 commit comments