diff --git a/setup.py b/setup.py index 5393cb35..dda9a1be 100644 --- a/setup.py +++ b/setup.py @@ -67,7 +67,7 @@ "pytest-cov==2.12.1 ; python_version<'3.8'", "pytest-cov==4.1.0 ; python_version>='3.8'", "pytest-mypy-plugins==1.9.3 ; python_version>='3.6' and python_version<'3.8'", - "pytest-mypy-plugins==1.11.1 ; python_version>='3.8'", + "pytest-mypy-plugins==2.0.0 ; python_version>='3.8'", # Testing utils. "colorama==0.4.5 ; python_version<'3.8'", "colorama==0.4.6 ; python_version>='3.8'", @@ -76,7 +76,7 @@ # Type checking. "mypy==v0.910 ; python_version<'3.6'", "mypy==v0.971 ; python_version>='3.6' and python_version<'3.7'", - "mypy==v0.990 ; python_version>='3.7'", + "mypy==v1.4.1 ; python_version>='3.7'", # Docs. "Sphinx==5.3.0 ; python_version>='3.8'", "sphinx-autobuild==2021.3.14 ; python_version>='3.8'", diff --git a/tests/typesafety/test_logger.yml b/tests/typesafety/test_logger.yml index d87afb11..b80948e4 100644 --- a/tests/typesafety/test_logger.yml +++ b/tests/typesafety/test_logger.yml @@ -194,6 +194,17 @@ main:5: note: Revealed type is "loguru.Contextualizer" - case: level_get + skip: sys.version_info < (3, 7) + main: | + from loguru import logger + import loguru + level = logger.level("INFO") + reveal_type(level) + out: | + main:4: note: Revealed type is "tuple[builtins.str, builtins.int, builtins.str, builtins.str, fallback=loguru.Level]" + +- case: level_get_pre37 + skip: sys.version_info >= (3, 7) main: | from loguru import logger import loguru @@ -202,7 +213,19 @@ out: | main:4: note: Revealed type is "Tuple[builtins.str, builtins.int, builtins.str, builtins.str, fallback=loguru.Level]" + - case: level_set + skip: sys.version_info < (3, 7) + main: | + from loguru import logger + import loguru + level = logger.level("FOO", no=11, icon="!", color="") + reveal_type(level) + out: | + main:4: note: Revealed type is "tuple[builtins.str, builtins.int, builtins.str, builtins.str, fallback=loguru.Level]" + +- case: level_set_pre37 + skip: sys.version_info >= (3, 7) main: | from loguru import logger import loguru @@ -212,6 +235,17 @@ main:4: note: Revealed type is "Tuple[builtins.str, builtins.int, builtins.str, builtins.str, fallback=loguru.Level]" - case: level_update + skip: sys.version_info < (3, 7) + main: | + from loguru import logger + import loguru + level = logger.level("INFO", color="") + reveal_type(level) + out: | + main:4: note: Revealed type is "tuple[builtins.str, builtins.int, builtins.str, builtins.str, fallback=loguru.Level]" + +- case: level_update_pre37 + skip: sys.version_info >= (3, 7) main: | from loguru import logger import loguru @@ -253,6 +287,22 @@ main:6: note: Revealed type is "builtins.dict[builtins.str, Any]" - case: invalid_add_argument + skip: sys.version_info < (3, 10) + main: | + from loguru import logger + logger.add(lambda m: None, foobar=123) + out: | + main:2: error: No overload variant of "add" of "Logger" matches argument types "Callable[[Any], None]", "int" + main:2: note: Possible overload variants: + main:2: note: def add(self, sink: TextIO | Writable | Callable[[Message], None] | Handler, *, level: str | int = ..., format: str | Callable[[Record], str] = ..., filter: str | Callable[[Record], bool] | dict[str | None, str | int | bool] | None = ..., colorize: bool | None = ..., serialize: bool = ..., backtrace: bool = ..., diagnose: bool = ..., enqueue: bool = ..., context: str | BaseContext | None = ..., catch: bool = ...) -> int + main:2: note: def add(self, sink: Callable[[Message], Awaitable[None]], *, level: str | int = ..., format: str | Callable[[Record], str] = ..., filter: str | Callable[[Record], bool] | dict[str | None, str | int | bool] | None = ..., colorize: bool | None = ..., serialize: bool = ..., backtrace: bool = ..., diagnose: bool = ..., enqueue: bool = ..., context: str | BaseContext | None = ..., catch: bool = ..., loop: AbstractEventLoop | None = ...) -> int + main:2: note: def add(self, sink: str | PathLike[str], *, level: str | int = ..., format: str | Callable[[Record], str] = ..., filter: str | Callable[[Record], bool] | dict[str | None, str | int | bool] | None = ..., colorize: bool | None = ..., serialize: bool = ..., backtrace: bool = ..., diagnose: bool = ..., enqueue: bool = ..., context: str | BaseContext | None = ..., catch: bool = ..., rotation: str | int | time | timedelta | Callable[[Message, TextIO], bool] | None = ..., retention: str | int | timedelta | Callable[[list[str]], None] | None = ..., compression: str | Callable[[str], None] | None = ..., delay: bool = ..., watch: bool = ..., mode: str = ..., buffering: int = ..., encoding: str = ..., **kwargs: Any) -> int + mypy_config: | + show_error_codes = false + + +- case: invalid_add_argument_pre310 + skip: sys.version_info >= (3, 10) main: | from loguru import logger logger.add(lambda m: None, foobar=123) @@ -278,8 +328,8 @@ mypy_config: | show_error_codes = false -- case: invalid_logged_object_formatting_py36 - skip: sys.version_info >= (3, 6) +- case: invalid_logged_object_formatting_pre37 + skip: sys.version_info >= (3, 7) main: | from loguru import logger logger.info(123, foo=123) @@ -292,6 +342,27 @@ show_error_codes = false - case: invalid_configuration + skip: sys.version_info < (3, 10) + main: | + from loguru import logger + logger.configure( + handlers=[{"x": "y"}], + levels=[{"baz": 1}], + patcher=123, + activation=[{"foo": "bar"}], + extra=[], + ) + out: | + main:4: error: Extra key "baz" for TypedDict "LevelConfig" + main:5: error: Argument "patcher" to "configure" of "Logger" has incompatible type "int"; expected "Callable[[Record], None] | None" + main:6: error: List item 0 has incompatible type "dict[str, str]"; expected "tuple[str | None, bool]" + main:7: error: Argument "extra" to "configure" of "Logger" has incompatible type "list[]"; expected "dict[Any, Any] | None" + mypy_config: | + show_error_codes = false + + +- case: invalid_configuration_pre310 + skip: sys.version_info >= (3, 10) main: | from loguru import logger logger.configure(