From e1e5c83795af3313216c937a39a3dd7091b3d6d1 Mon Sep 17 00:00:00 2001 From: Martijn Pieters Date: Mon, 1 Jul 2019 15:47:30 +0100 Subject: [PATCH] QueueHandler / QueueListener accept SimpleQueue too (#3098) The implementation of `logging.adapters.QueueHandler` and `logging.adapters.QueueListener` works great with `queue.SimpleQueue` too, so update the stub to reflect this. The new queue.SimpleQueue class (introduced in 3.7) is faster but is not a Queue subclass as it doesn't implement task handling (`handle_task()` / `join()`) or queue bounds (raising `queue.Full` / `full()`). The logging handler / listener implementations do not make use of those features however. Related Python bug, asking for an explicit documentation mention: https://bugs.python.org/issue37469 --- stdlib/2and3/logging/handlers.pyi | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/stdlib/2and3/logging/handlers.pyi b/stdlib/2and3/logging/handlers.pyi index c18ddccf5..00a27c923 100644 --- a/stdlib/2and3/logging/handlers.pyi +++ b/stdlib/2and3/logging/handlers.pyi @@ -6,7 +6,9 @@ from socket import SocketType import ssl import sys from typing import Any, Callable, Dict, List, Optional, Tuple, Union, overload -if sys.version_info >= (3,): +if sys.version_info >= (3, 7): + from queue import SimpleQueue, Queue +elif sys.version_info >= (3,): from queue import Queue else: from Queue import Queue @@ -195,12 +197,19 @@ class HTTPHandler(Handler): if sys.version_info >= (3,): class QueueHandler(Handler): - def __init__(self, queue: Queue) -> None: ... + if sys.version_info >= (3, 7): + def __init__(self, queue: Union[SimpleQueue, Queue]) -> None: ... + else: + def __init__(self, queue: Queue) -> None: ... def prepare(self, record: LogRecord) -> Any: ... def enqueue(self, record: LogRecord) -> None: ... class QueueListener: - if sys.version_info >= (3, 5): + if sys.version_info >= (3, 7): + def __init__(self, queue: Union[SimpleQueue, Queue], + *handlers: Handler, + respect_handler_level: bool = ...) -> None: ... + elif sys.version_info >= (3, 5): def __init__(self, queue: Queue, *handlers: Handler, respect_handler_level: bool = ...) -> None: ... else: