# Stubs for logbook.queues (Python 3)
#
# NOTE: This dynamically typed stub was automatically generated by stubgen.

from logbook.handlers import Handler, WrapperHandler
from typing import Any, Optional

class RedisHandler(Handler):
    redis: Any = ...
    key: Any = ...
    extra_fields: Any = ...
    flush_threshold: Any = ...
    queue: Any = ...
    lock: Any = ...
    push_method: Any = ...
    def __init__(self, host: str = ..., port: int = ..., key: str = ..., extra_fields: Optional[Any] = ..., flush_threshold: int = ..., flush_time: int = ..., level: Any = ..., filter: Optional[Any] = ..., password: bool = ..., bubble: bool = ..., context: Optional[Any] = ..., push_method: str = ...) -> None: ...
    def disable_buffering(self) -> None: ...
    def emit(self, record: Any) -> None: ...
    def close(self) -> None: ...

class MessageQueueHandler(Handler):
    queue: Any = ...
    def __init__(self, uri: Optional[Any] = ..., queue: str = ..., level: Any = ..., filter: Optional[Any] = ..., bubble: bool = ...) -> None: ...
    def export_record(self, record: Any): ...
    def emit(self, record: Any) -> None: ...
    def close(self) -> None: ...
RabbitMQHandler = MessageQueueHandler

class ZeroMQHandler(Handler):
    context: Any = ...
    socket: Any = ...
    def __init__(self, uri: Optional[Any] = ..., level: Any = ..., filter: Optional[Any] = ..., bubble: bool = ..., context: Optional[Any] = ..., multi: bool = ...) -> None: ...
    def export_record(self, record: Any): ...
    def emit(self, record: Any) -> None: ...
    def close(self, linger: int = ...) -> None: ...
    def __del__(self) -> None: ...

class ThreadController:
    setup: Any = ...
    subscriber: Any = ...
    running: bool = ...
    def __init__(self, subscriber: Any, setup: Optional[Any] = ...) -> None: ...
    def start(self) -> None: ...
    def stop(self) -> None: ...

class SubscriberBase:
    def recv(self, timeout: Optional[Any] = ...) -> Any: ...
    def dispatch_once(self, timeout: Optional[Any] = ...): ...
    def dispatch_forever(self) -> None: ...
    def dispatch_in_background(self, setup: Optional[Any] = ...): ...

class MessageQueueSubscriber(SubscriberBase):
    queue: Any = ...
    def __init__(self, uri: Optional[Any] = ..., queue: str = ...) -> None: ...
    def __del__(self) -> None: ...
    def close(self) -> None: ...
    def recv(self, timeout: Optional[Any] = ...): ...
RabbitMQSubscriber = MessageQueueSubscriber

class ZeroMQSubscriber(SubscriberBase):
    context: Any = ...
    socket: Any = ...
    def __init__(self, uri: Optional[Any] = ..., context: Optional[Any] = ..., multi: bool = ...) -> None: ...
    def __del__(self) -> None: ...
    def close(self) -> None: ...
    def recv(self, timeout: Optional[Any] = ...): ...

class MultiProcessingHandler(Handler):
    queue: Any = ...
    def __init__(self, queue: Any, level: Any = ..., filter: Optional[Any] = ..., bubble: bool = ...) -> None: ...
    def emit(self, record: Any) -> None: ...

class MultiProcessingSubscriber(SubscriberBase):
    queue: Any = ...
    def __init__(self, queue: Optional[Any] = ...) -> None: ...
    def recv(self, timeout: Optional[Any] = ...): ...

class ExecnetChannelHandler(Handler):
    channel: Any = ...
    def __init__(self, channel: Any, level: Any = ..., filter: Optional[Any] = ..., bubble: bool = ...) -> None: ...
    def emit(self, record: Any) -> None: ...

class ExecnetChannelSubscriber(SubscriberBase):
    channel: Any = ...
    def __init__(self, channel: Any) -> None: ...
    def recv(self, timeout: Optional[Any] = ...): ...

class TWHThreadController:
    class Command:
        stop: Any = ...
        emit: Any = ...
        emit_batch: Any = ...
    wrapper_handler: Any = ...
    running: bool = ...
    def __init__(self, wrapper_handler: Any) -> None: ...
    def start(self) -> None: ...
    def stop(self) -> None: ...

class ThreadedWrapperHandler(WrapperHandler):
    queue: Any = ...
    controller: Any = ...
    def __init__(self, handler: Any, maxsize: int = ...) -> None: ...
    def close(self) -> None: ...
    def emit(self, record: Any) -> None: ...
    def emit_batch(self, records: Any, reason: Any) -> None: ...

class GroupMember(ThreadController):
    queue: Any = ...
    def __init__(self, subscriber: Any, queue: Any) -> None: ...

class SubscriberGroup(SubscriberBase):
    members: Any = ...
    queue: Any = ...
    def __init__(self, subscribers: Optional[Any] = ..., queue_limit: int = ...) -> None: ...
    def add(self, subscriber: Any) -> None: ...
    def recv(self, timeout: Optional[Any] = ...): ...
    def stop(self) -> None: ...
