diff --git a/adafruit_logging.py b/adafruit_logging.py index cabcdff..db4b699 100644 --- a/adafruit_logging.py +++ b/adafruit_logging.py @@ -62,12 +62,8 @@ from collections import namedtuple try: - from typing import Optional - - try: - from typing import Protocol - except ImportError: - from typing_extensions import Protocol + from typing import Optional, Hashable + from typing_extensions import Protocol class WriteableStream(Protocol): """Any stream that can ``write`` strings""" @@ -245,7 +241,7 @@ def emit(self, record: LogRecord) -> None: logger_cache = {} -def _addLogger(logger_name: str) -> None: +def _addLogger(logger_name: Hashable) -> None: """Adds the logger if it doesn't already exist""" if logger_name not in logger_cache: new_logger = Logger(logger_name) @@ -253,12 +249,15 @@ def _addLogger(logger_name: str) -> None: logger_cache[logger_name] = new_logger -def getLogger(logger_name: str) -> "Logger": +def getLogger(logger_name: Hashable = "") -> "Logger": """Create or retrieve a logger by name; only retrieves loggers made using this function; if a Logger with this name does not exist it is created - :param str logger_name: The name of the `Logger` to create/retrieve. + :param Hashable logger_name: The name of the `Logger` to create/retrieve, this + is typically a ``str``. If none is provided, the single root logger will + be created/retrieved. Note that unlike CPython, a blank string will also + access the root logger. """ _addLogger(logger_name) return logger_cache[logger_name] @@ -267,12 +266,12 @@ def getLogger(logger_name: str) -> "Logger": class Logger: """The actual logger that will provide the logging API. - :param str name: The name of the logger, typically assigned by the - value from `getLogger` + :param Hashable name: The name of the logger, typically assigned by the + value from `getLogger`; this is typically a ``str`` :param int level: (optional) The log level, default is ``NOTSET`` """ - def __init__(self, name: str, level: int = NOTSET) -> None: + def __init__(self, name: Hashable, level: int = NOTSET) -> None: """Create an instance.""" self._level = level self.name = name