You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

155 lines
3.9 KiB
Python

"""Trio - A friendly Python library for async concurrency and I/O
"""
# General layout:
#
# trio/_core/... is the self-contained core library. It does various
# shenanigans to export a consistent "core API", but parts of the core API are
# too low-level to be recommended for regular use.
#
# trio/*.py define a set of more usable tools on top of this. They import from
# trio._core and from each other.
#
# This file pulls together the friendly public API, by re-exporting the more
# innocuous bits of the _core API + the higher-level tools from trio/*.py.
from ._version import __version__
from ._core import (
TrioInternalError,
RunFinishedError,
WouldBlock,
Cancelled,
BusyResourceError,
ClosedResourceError,
run,
open_nursery,
CancelScope,
current_effective_deadline,
TASK_STATUS_IGNORED,
current_time,
BrokenResourceError,
EndOfChannel,
Nursery,
)
from ._timeouts import (
move_on_at,
move_on_after,
sleep_forever,
sleep_until,
sleep,
fail_at,
fail_after,
TooSlowError,
)
from ._sync import (
Event,
CapacityLimiter,
Semaphore,
Lock,
StrictFIFOLock,
Condition,
)
from ._highlevel_generic import aclose_forcefully, StapledStream
from ._channel import (
open_memory_channel,
MemorySendChannel,
MemoryReceiveChannel,
)
from ._signals import open_signal_receiver
from ._highlevel_socket import SocketStream, SocketListener
from ._file_io import open_file, wrap_file
from ._path import Path
from ._subprocess import Process, run_process
from ._ssl import SSLStream, SSLListener, NeedHandshakeError
from ._dtls import DTLSEndpoint, DTLSChannel
from ._highlevel_serve_listeners import serve_listeners
from ._highlevel_open_tcp_stream import open_tcp_stream
from ._highlevel_open_tcp_listeners import open_tcp_listeners, serve_tcp
from ._highlevel_open_unix_stream import open_unix_socket
from ._highlevel_ssl_helpers import (
open_ssl_over_tcp_stream,
open_ssl_over_tcp_listeners,
serve_ssl_over_tcp,
)
from ._core._multierror import MultiError as _MultiError
from ._core._multierror import NonBaseMultiError as _NonBaseMultiError
from ._deprecate import TrioDeprecationWarning
# Submodules imported by default
from . import lowlevel
from . import socket
from . import abc
from . import from_thread
from . import to_thread
# Not imported by default, but mentioned here so static analysis tools like
# pylint will know that it exists.
if False:
from . import testing
from . import _deprecate
_deprecate.enable_attribute_deprecations(__name__)
__deprecated_attributes__ = {
"open_process": _deprecate.DeprecatedAttribute(
value=lowlevel.open_process,
version="0.20.0",
issue=1104,
instead="trio.lowlevel.open_process",
),
"MultiError": _deprecate.DeprecatedAttribute(
value=_MultiError,
version="0.22.0",
issue=2211,
instead=(
"BaseExceptionGroup (on Python 3.11 and later) or "
"exceptiongroup.BaseExceptionGroup (earlier versions)"
),
),
"NonBaseMultiError": _deprecate.DeprecatedAttribute(
value=_NonBaseMultiError,
version="0.22.0",
issue=2211,
instead=(
"ExceptionGroup (on Python 3.11 and later) or "
"exceptiongroup.ExceptionGroup (earlier versions)"
),
),
}
# Having the public path in .__module__ attributes is important for:
# - exception names in printed tracebacks
# - sphinx :show-inheritance:
# - deprecation warnings
# - pickle
# - probably other stuff
from ._util import fixup_module_metadata
fixup_module_metadata(__name__, globals())
fixup_module_metadata(lowlevel.__name__, lowlevel.__dict__)
fixup_module_metadata(socket.__name__, socket.__dict__)
fixup_module_metadata(abc.__name__, abc.__dict__)
fixup_module_metadata(from_thread.__name__, from_thread.__dict__)
fixup_module_metadata(to_thread.__name__, to_thread.__dict__)
del fixup_module_metadata