Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions constraints.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
anyio>=4.11.0
2 changes: 1 addition & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -347,4 +347,4 @@

# Allow duplicate object descriptions
nitpicky = False
nitpick_ignore = [("py:class", "type")]
nitpick_ignore = [("py:class", "type")]
6 changes: 3 additions & 3 deletions docs/examples.circuit_relay.rst
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Create a file named ``relay_node.py`` with the following content:
from libp2p.relay.circuit_v2.protocol import CircuitV2Protocol
from libp2p.relay.circuit_v2.transport import CircuitV2Transport
from libp2p.relay.circuit_v2.config import RelayConfig
from libp2p.tools.async_service import background_trio_service
from libp2p.tools.anyio_service import background_trio_service
from libp2p.utils import get_wildcard_address

logging.basicConfig(level=logging.DEBUG)
Expand Down Expand Up @@ -108,7 +108,7 @@ Create a file named ``destination_node.py`` with the following content:
from libp2p.relay.circuit_v2.transport import CircuitV2Transport
from libp2p.relay.circuit_v2.config import RelayConfig
from libp2p.peer.peerinfo import info_from_p2p_addr
from libp2p.tools.async_service import background_trio_service
from libp2p.tools.anyio_service import background_trio_service
from libp2p.utils import get_wildcard_address

logging.basicConfig(level=logging.DEBUG)
Expand Down Expand Up @@ -254,7 +254,7 @@ Create a file named ``source_node.py`` with the following content:
from libp2p.relay.circuit_v2.transport import CircuitV2Transport
from libp2p.relay.circuit_v2.config import RelayConfig
from libp2p.peer.peerinfo import info_from_p2p_addr
from libp2p.tools.async_service import background_trio_service
from libp2p.tools.anyio_service import background_trio_service
from libp2p.relay.circuit_v2.discovery import RelayInfo
from libp2p.utils import get_wildcard_address

Expand Down
69 changes: 69 additions & 0 deletions docs/libp2p.tools.anyio_service.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
libp2p.tools.anyio\_service package
====================================

Submodules
----------

libp2p.tools.anyio\_service.api module
---------------------------------------

.. automodule:: libp2p.tools.anyio_service.api
:members:
:undoc-members:
:show-inheritance:

libp2p.tools.anyio\_service.context module
-------------------------------------------

.. automodule:: libp2p.tools.anyio_service.context
:members:
:undoc-members:
:show-inheritance:

libp2p.tools.anyio\_service.exceptions module
----------------------------------------------

.. automodule:: libp2p.tools.anyio_service.exceptions
:members:
:undoc-members:
:show-inheritance:

libp2p.tools.anyio\_service.manager module
-------------------------------------------

.. automodule:: libp2p.tools.anyio_service.manager
:members:
:undoc-members:
:show-inheritance:

libp2p.tools.anyio\_service.stats module
-----------------------------------------

.. automodule:: libp2p.tools.anyio_service.stats
:members:
:undoc-members:
:show-inheritance:

libp2p.tools.anyio\_service.tasks module
-----------------------------------------

.. automodule:: libp2p.tools.anyio_service.tasks
:members:
:undoc-members:
:show-inheritance:

libp2p.tools.anyio\_service.utils module
-----------------------------------------

.. automodule:: libp2p.tools.anyio_service.utils
:members:
:undoc-members:
:show-inheritance:

Module contents
---------------

.. automodule:: libp2p.tools.anyio_service
:members:
:undoc-members:
:show-inheritance:
61 changes: 0 additions & 61 deletions docs/libp2p.tools.async_service.rst

This file was deleted.

2 changes: 1 addition & 1 deletion docs/libp2p.tools.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Subpackages
.. toctree::
:maxdepth: 4

libp2p.tools.async_service
libp2p.tools.anyio_service
libp2p.tools.timed_cache

Submodules
Expand Down
2 changes: 1 addition & 1 deletion examples/kademlia/kademlia.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
from libp2p.kad_dht.utils import (
create_key_from_binary,
)
from libp2p.tools.async_service import (
from libp2p.tools.anyio_service import (
background_trio_service,
)
from libp2p.tools.utils import (
Expand Down
2 changes: 1 addition & 1 deletion examples/pubsub/pubsub.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
MPLEX_PROTOCOL_ID,
Mplex,
)
from libp2p.tools.async_service.trio_service import (
from libp2p.tools.anyio_service import (
background_trio_service,
)
from libp2p.utils.address_validation import (
Expand Down
2 changes: 1 addition & 1 deletion examples/random_walk/random_walk.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from libp2p.abc import IHost
from libp2p.crypto.secp256k1 import create_new_key_pair
from libp2p.kad_dht.kad_dht import DHTMode, KadDHT
from libp2p.tools.async_service import background_trio_service
from libp2p.tools.anyio_service import background_trio_service


# Simple logging configuration
Expand Down
4 changes: 1 addition & 3 deletions libp2p/abc.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,7 @@
from libp2p.pubsub.pb import (
rpc_pb2,
)
from libp2p.tools.async_service import (
ServiceAPI,
)
from libp2p.tools.anyio_service.api import ServiceAPI

# -------------------------- raw_connection interface.py --------------------------

Expand Down
2 changes: 1 addition & 1 deletion libp2p/host/basic_host.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
from libp2p.protocol_muxer.multiselect_communicator import (
MultiselectCommunicator,
)
from libp2p.tools.async_service import (
from libp2p.tools.anyio_service import (
background_trio_service,
)

Expand Down
2 changes: 1 addition & 1 deletion libp2p/kad_dht/kad_dht.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
PeerInfo,
)
from libp2p.peer.peerstore import env_to_send_in_RPC
from libp2p.tools.async_service import (
from libp2p.tools.anyio_service import (
Service,
)

Expand Down
2 changes: 1 addition & 1 deletion libp2p/network/swarm.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
from libp2p.peer.peerstore import (
PeerStoreError,
)
from libp2p.tools.async_service import (
from libp2p.tools.anyio_service import (
Service,
)
from libp2p.transport.exceptions import (
Expand Down
2 changes: 1 addition & 1 deletion libp2p/pubsub/gossipsub.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
floodsub,
)
from libp2p.pubsub.utils import maybe_consume_signed_record
from libp2p.tools.async_service import (
from libp2p.tools.anyio_service import (
Service,
)

Expand Down
2 changes: 1 addition & 1 deletion libp2p/pubsub/pubsub.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
)
from libp2p.peer.peerstore import env_to_send_in_RPC
from libp2p.pubsub.utils import maybe_consume_signed_record
from libp2p.tools.async_service import (
from libp2p.tools.anyio_service import (
Service,
)
from libp2p.tools.timed_cache.last_seen_cache import (
Expand Down
2 changes: 1 addition & 1 deletion libp2p/relay/circuit_v2/dcutr.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
from libp2p.relay.circuit_v2.pb.dcutr_pb2 import (
HolePunch,
)
from libp2p.tools.async_service import (
from libp2p.tools.anyio_service import (
Service,
)

Expand Down
2 changes: 1 addition & 1 deletion libp2p/relay/circuit_v2/discovery.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
from libp2p.peer.id import (
ID,
)
from libp2p.tools.async_service import (
from libp2p.tools.anyio_service import (
Service,
)

Expand Down
2 changes: 1 addition & 1 deletion libp2p/relay/circuit_v2/protocol.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
MplexStreamEOF,
MplexStreamReset,
)
from libp2p.tools.async_service import (
from libp2p.tools.anyio_service import (
Service,
)

Expand Down
2 changes: 1 addition & 1 deletion libp2p/relay/circuit_v2/transport.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
from libp2p.peer.peerinfo import (
PeerInfo,
)
from libp2p.tools.async_service import (
from libp2p.tools.anyio_service import (
Service,
)

Expand Down
56 changes: 56 additions & 0 deletions libp2p/tools/anyio_service/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
"""AnyIO-based service framework (modularized).

This package provides a production-ready service implementation using AnyIO for
structured concurrency and cross-platform async compatibility (asyncio + trio).

The implementation is split across multiple modules for clarity:
- exceptions: Service-specific exception types
- stats: Lightweight statistics dataclasses
- utils: Helper functions
- tasks: Task abstractions and implementations
- manager: AnyIOManager with full lifecycle management
- api: Service APIs, decorators, and base classes
- context: Context managers for running services
"""
from .api import Service, as_service, external_api
from .context import (
background_anyio_service,
background_trio_service,
)
from .exceptions import (
DaemonTaskExit,
LifecycleError,
ServiceException,
TooManyChildrenException,
)
from .manager import AnyIOManager
from .trio_manager import TrioManager
from .stats import Stats, TaskStats
from .tasks import MAX_CHILDREN_TASKS, TaskType
from .utils import get_task_name, is_verbose_logging_enabled

__all__ = [
# Core service classes (concrete implementations only)
"Service",
"AnyIOManager",
"TrioManager",
"as_service",
"background_anyio_service",
"background_trio_service",
# Exceptions
"ServiceException",
"DaemonTaskExit",
"LifecycleError",
"TooManyChildrenException",
# Stats
"Stats",
"TaskStats",
# Constants
"MAX_CHILDREN_TASKS",
"TaskType",
# Decorators
"external_api",
# Utilities
"get_task_name",
"is_verbose_logging_enabled",
]
Loading