# Path: src/pubsub/core/callables.py
# class AUTO_TOPIC: pass
# class ListenerMismatchError(ValueError):
# class CallArgsInfo:
# def getModule(obj: Any) -> ModuleType:
# def getID(callable_obj: UserListener) -> Tuple[str, ModuleType]:
# def getRawFunction(callable_obj: UserListener) -> Tuple[Callable]:
#     def __init__(self, msg: str, listener: UserListener, *args):
#     def __str__(self):
#     def __init__(self, func: UserListener, ignoreArgs: Sequence[str] = ()):
#     def getAllArgs(self) -> Tuple[str]:
#     def getOptionalArgs(self) -> Tuple[str]:
#     def getRequiredArgs(self) -> Tuple[str]:
# def getArgs(callable_obj: UserListener, ignoreArgs: Sequence[str] = ()) -> CallArgsInfo:
# 
# Path: src/pubsub/core/weakmethod.py
# def getWeakRef(obj, notifyDead: DeadRefObserver = None):
# 
# Path: src/pubsub/core/annotations.py
# def annotationType(sig_obj: Any):
#     """
#     Use to forward declare an annotation type, i.e. a type that will be fully defined later but is not available
#     at the annotation location in the source code. The following example shows a MyType class with a method that
#     accepts a MyType instance; annotating this cannot be done in Python::
# 
#         class MyType:
#             def copy_from(other: MyType):  # interpreter will croak
#                 ...
# 
#     The recommended approach is to use a string annotation, but this is rather unnatural in Python code::
# 
#         class MyType:
#             def copy_from(other: 'MyType'):
#                 ...
# 
#     The annotationType function allows a more pythonic syntax:
# 
#         @annotationType
#         class MyType:
#             pass
# 
#         class MyType:
#             def copy_from(other: MyType):
#                 ...
# 
#     This decorator doesn't actually do anything to its argument.
#     """
#     return sig_obj


from types import ModuleType
from typing import Callable, Mapping, Any, Sequence
from .callables import (
    getID,
    getArgs,
    ListenerMismatchError,
    CallArgsInfo,
    AUTO_TOPIC as _AUTO_ARG,
    UserListener,
)
from .weakmethod import getWeakRef, WeakRef
from .annotations import annotationType
"""
Top-level functionality related to message listeners.

:copyright: Copyright since 2006 by Oliver Schoenborn, all rights reserved.
:license: BSD, see LICENSE_BSD_Simple.txt for details.
"""



__all__ = [
    'Listener',
    'IListenerExcHandler',
    'ListenerValidator'
]


@annotationType
class Topic:
    pass



# Path: src/pubsub/core/callables.py
# class AUTO_TOPIC: pass
# class ListenerMismatchError(ValueError):
# class CallArgsInfo:
# def getModule(obj: Any) -> ModuleType:
# def getID(callable_obj: UserListener) -> Tuple[str, ModuleType]:
# def getRawFunction(callable_obj: UserListener) -> Tuple[Callable]:
#     def __init__(self, msg: str, listener: UserListener, *args):
#     def __str__(self):
#     def __init__(self, func: UserListener, ignoreArgs: Sequence[str] = ()):
#     def getAllArgs(self) -> Tuple[str]:
#     def getOptionalArgs(self) -> Tuple[str]:
#     def getRequiredArgs(self) -> Tuple[str]:
# def getArgs(callable_obj: UserListener, ignoreArgs: Sequence[str] = ()) -> CallArgsInfo:
# 
# Path: src/pubsub/core/weakmethod.py
# def getWeakRef(obj, notifyDead: DeadRefObserver = None):
# 
# Path: src/pubsub/core/annotations.py
# def annotationType(sig_obj: Any):
#     """
#     Use to forward declare an annotation type, i.e. a type that will be fully defined later but is not available
#     at the annotation location in the source code. The following example shows a MyType class with a method that
#     accepts a MyType instance; annotating this cannot be done in Python::
# 
#         class MyType:
#             def copy_from(other: MyType):  # interpreter will croak
#                 ...
# 
#     The recommended approach is to use a string annotation, but this is rather unnatural in Python code::
# 
#         class MyType:
#             def copy_from(other: 'MyType'):
#                 ...
# 
#     The annotationType function allows a more pythonic syntax:
# 
#         @annotationType
#         class MyType:
#             pass
# 
#         class MyType:
#             def copy_from(other: MyType):
#                 ...
# 
#     This decorator doesn't actually do anything to its argument.
#     """
#     return sig_obj


# Path: src/pubsub/core/listener.py
from types import ModuleType
from typing import Callable, Mapping, Any, Sequence
from .callables import (
    getID,
    getArgs,
    ListenerMismatchError,
    CallArgsInfo,
    AUTO_TOPIC as _AUTO_ARG,
    UserListener,
)
from .weakmethod import getWeakRef, WeakRef
from .annotations import annotationType

"""
Top-level functionality related to message listeners.

:copyright: Copyright since 2006 by Oliver Schoenborn, all rights reserved.
:license: BSD, see LICENSE_BSD_Simple.txt for details.
"""



__all__ = [
    'Listener',
    'IListenerExcHandler',
    'ListenerValidator'
]


@annotationType
class Topic:
    pass



@annotationType