Merge branch 'main' into main

This commit is contained in:
Manu Sheel Gupta
2025-06-11 19:39:06 +05:30
committed by GitHub
15 changed files with 52 additions and 25 deletions

View File

@ -90,7 +90,7 @@ validate-newsfragments:
check-docs: build-docs validate-newsfragments
build-docs:
sphinx-apidoc -o docs/ . setup.py "*conftest*" tests/
sphinx-apidoc -o docs/ . "*conftest*" tests/
$(MAKE) -C docs clean
$(MAKE) -C docs html
$(MAKE) -C docs doctest

View File

@ -3,6 +3,51 @@ Release Notes
.. towncrier release notes start
py-libp2p v0.2.8 (2025-06-10)
-----------------------------
Breaking Changes
~~~~~~~~~~~~~~~~
- The `NetStream.state` property is now async and requires `await`. Update any direct state access to use `await stream.state`. (`#300 <https://github.com/libp2p/py-libp2p/issues/300>`__)
Bugfixes
~~~~~~~~
- Added proper state management and resource cleanup to `NetStream`, fixing memory leaks and improved error handling. (`#300 <https://github.com/libp2p/py-libp2p/issues/300>`__)
Improved Documentation
~~~~~~~~~~~~~~~~~~~~~~
- Updated examples to automatically use random port, when `-p` flag is not given (`#661 <https://github.com/libp2p/py-libp2p/issues/661>`__)
Features
~~~~~~~~
- Allow passing `listen_addrs` to `new_swarm` to customize swarm listening behavior. (`#616 <https://github.com/libp2p/py-libp2p/issues/616>`__)
- Feature: Support for sending `ls` command over `multistream-select` to list supported protocols from remote peer.
This allows inspecting which protocol handlers a peer supports at runtime. (`#622 <https://github.com/libp2p/py-libp2p/issues/622>`__)
- implement AsyncContextManager for IMuxedStream to support async with (`#629 <https://github.com/libp2p/py-libp2p/issues/629>`__)
- feat: add method to compute time since last message published by a peer and remove fanout peers based on ttl. (`#636 <https://github.com/libp2p/py-libp2p/issues/636>`__)
- implement blacklist management for `pubsub.Pubsub` with methods to get, add, remove, check, and clear blacklisted peer IDs. (`#641 <https://github.com/libp2p/py-libp2p/issues/641>`__)
- fix: remove expired peers from peerstore based on TTL (`#650 <https://github.com/libp2p/py-libp2p/issues/650>`__)
Internal Changes - for py-libp2p Contributors
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Modernizes several aspects of the project, notably using ``pyproject.toml`` for project info instead of ``setup.py``, using ``ruff`` to replace several separate linting tools, and ``pyrefly`` in addition to ``mypy`` for typing. Also includes changes across the codebase to conform to new linting and typing rules. (`#618 <https://github.com/libp2p/py-libp2p/issues/618>`__)
Removals
~~~~~~~~
- Removes support for python 3.9 and updates some code conventions, notably using ``|`` operator in typing instead of ``Optional`` or ``Union`` (`#618 <https://github.com/libp2p/py-libp2p/issues/618>`__)
py-libp2p v0.2.7 (2025-05-22)
-----------------------------

View File

@ -20,11 +20,12 @@ from libp2p.peer.peerinfo import (
)
PROTOCOL_ID = TProtocol("/echo/1.0.0")
MAX_READ_LEN = 2**32 - 1
async def _echo_stream_handler(stream: INetStream) -> None:
# Wait until EOF
msg = await stream.read()
msg = await stream.read(MAX_READ_LEN)
await stream.write(msg)
await stream.close()
@ -72,10 +73,8 @@ async def run(port: int, destination: str, seed: int | None = None) -> None:
msg = b"hi, there!\n"
await stream.write(msg)
# TODO: check why the stream is closed after the first write ???
# Notify the other side about EOF
await stream.close()
response = await stream.read()
await stream.close()
print(f"Sent: {msg.decode('utf-8')}")
print(f"Got: {response.decode('utf-8')}")

View File

@ -1 +0,0 @@
The `NetStream.state` property is now async and requires `await`. Update any direct state access to use `await stream.state`.

View File

@ -1 +0,0 @@
Added proper state management and resource cleanup to `NetStream`, fixing memory leaks and improved error handling.

View File

@ -1 +0,0 @@
Allow passing `listen_addrs` to `new_swarm` to customize swarm listening behavior.

View File

@ -1 +0,0 @@
Modernizes several aspects of the project, notably using ``pyproject.toml`` for project info instead of ``setup.py``, using ``ruff`` to replace several separate linting tools, and ``pyrefly`` in addition to ``mypy`` for typing. Also includes changes across the codebase to conform to new linting and typing rules.

View File

@ -1 +0,0 @@
Removes support for python 3.9 and updates some code conventions, notably using ``|`` operator in typing instead of ``Optional`` or ``Union``

View File

@ -1,2 +0,0 @@
Feature: Support for sending `ls` command over `multistream-select` to list supported protocols from remote peer.
This allows inspecting which protocol handlers a peer supports at runtime.

View File

@ -1 +0,0 @@
implement AsyncContextManager for IMuxedStream to support async with

View File

@ -1 +0,0 @@
feat: add method to compute time since last message published by a peer and remove fanout peers based on ttl.

View File

@ -1 +0,0 @@
implement blacklist management for `pubsub.Pubsub` with methods to get, add, remove, check, and clear blacklisted peer IDs.

View File

@ -1 +0,0 @@
fix: remove expired peers from peerstore based on TTL

View File

@ -1 +0,0 @@
Updated examples to automatically use random port, when `-p` flag is not given

View File

@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "libp2p"
version = "0.2.7"
version = "0.2.8"
description = "libp2p: The Python implementation of the libp2p networking stack"
readme = "README.md"
requires-python = ">=3.10, <4.0"
@ -187,7 +187,7 @@ name = "Removals"
showcontent = true
[tool.bumpversion]
current_version = "0.2.7"
current_version = "0.2.8"
parse = """
(?P<major>\\d+)
\\.(?P<minor>\\d+)
@ -221,12 +221,7 @@ values = ["alpha", "beta", "stable"]
[tool.bumpversion.part.devnum]
[[tool.bumpversion.files]]
filename = "setup.py"
search = "version=\"{current_version}\""
replace = "version=\"{new_version}\""
[[tool.bumpversion.files]]
filename = "pyproject.toml" # Keep pyproject.toml version in sync
filename = "pyproject.toml"
search = 'version = "{current_version}"'
replace = 'version = "{new_version}"'