diff --git a/django-stubs/utils/encoding.pyi b/django-stubs/utils/encoding.pyi index 5e44ae0..b1d0eab 100644 --- a/django-stubs/utils/encoding.pyi +++ b/django-stubs/utils/encoding.pyi @@ -1,4 +1,6 @@ -from typing import Any, Optional +from typing import Any, Optional, TypeVar, Union, Literal, overload +from decimal import Decimal +import datetime class DjangoUnicodeDecodeError(UnicodeDecodeError): obj: bytes = ... @@ -8,7 +10,18 @@ python_2_unicode_compatible: Any def smart_text(s: Any, encoding: str = ..., strings_only: bool = ..., errors: str = ...) -> str: ... def is_protected_type(obj: Any) -> bool: ... -def force_text(s: Any, encoding: str = ..., strings_only: bool = ..., errors: str = ...) -> Optional[str]: ... + +_ProtectedType = TypeVar( + "_ProtectedType", Union[None, int, float, Decimal, datetime.datetime, datetime.date, datetime.time] +) +@overload +def force_text(s: str, encoding: str = ..., strings_only: bool = ..., errors: str = ...) -> str: ... +@overload +def force_text( + s: _ProtectedType, encoding: str = ..., strings_only: Literal[True] = ..., errors: str = ..., +) -> _ProtectedType: ... +@overload +def force_text(s: Any, encoding: str = ..., strings_only: bool = ..., errors: str = ...) -> str: ... def smart_bytes(s: Any, encoding: str = ..., strings_only: bool = ..., errors: str = ...) -> bytes: ... def force_bytes(s: Any, encoding: str = ..., strings_only: bool = ..., errors: str = ...) -> bytes: ...