Skip to content

Commit 8a5d91c

Browse files
authored
Relax signature of logging.config.loadConfig (#6577)
I did a a cursory investigation using GitHub search and also looked at a big internal codebase, and a significant fraction of callsites used a dict type instead of a TypedDict or a dict literal. It seems that it's a common use case to store the config within an attribute. For example, something like this: ``` CONFIG = { ... } ... logging.config.dictConfig(CONFIG) ``` Another use case that was not properly supported is reading the config from a file, and the config is given `dict[str, Any]` as the type. Mypy can still do some type checking of the argument if called with a dict literal, so I feel this is a reasonable compromise between type checking strictness and usability.
1 parent 0f2e87e commit 8a5d91c

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

stdlib/logging/config.pyi

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,12 @@ class _OptionalDictConfigArgs(TypedDict, total=False):
4343
class _DictConfigArgs(_OptionalDictConfigArgs, TypedDict):
4444
version: Literal[1]
4545

46-
def dictConfig(config: _DictConfigArgs) -> None: ...
46+
# Accept dict[str, Any] to avoid false positives if called with a dict
47+
# type, since dict types are not compatible with TypedDicts.
48+
#
49+
# Also accept a TypedDict type, to allow callers to use TypedDict
50+
# types, and for somewhat stricter type checking of dict literals.
51+
def dictConfig(config: _DictConfigArgs | dict[str, Any]) -> None: ...
4752

4853
if sys.version_info >= (3, 10):
4954
def fileConfig(

0 commit comments

Comments
 (0)