From f27f4ddd85d363e6bb12f347b9476971e5561f01 Mon Sep 17 00:00:00 2001 From: Paul Robinson <5199899+pacrob@users.noreply.github.com> Date: Tue, 10 Jun 2025 11:24:34 -0600 Subject: [PATCH 1/4] remove references to removed setup.py (#674) --- Makefile | 2 +- pyproject.toml | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 010121f3..e99b3ac9 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/pyproject.toml b/pyproject.toml index 04f2449a..c5adfb11 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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}"' From 0197b515c1bed2e124f0bfecf3a653159dc4a232 Mon Sep 17 00:00:00 2001 From: pacrob <5199899+pacrob@users.noreply.github.com> Date: Tue, 10 Jun 2025 11:31:25 -0600 Subject: [PATCH 2/4] Compile release notes for v0.2.8 --- docs/release_notes.rst | 45 ++++++++++++++++++++++++++++++++++ newsfragments/300.breaking.rst | 1 - newsfragments/300.bugfix.rst | 1 - newsfragments/616.feature.rst | 1 - newsfragments/618.internal.rst | 1 - newsfragments/618.removal.rst | 1 - newsfragments/622.feature.rst | 2 -- newsfragments/629.feature.rst | 1 - newsfragments/636.feature.rst | 1 - newsfragments/641.feature.rst | 1 - newsfragments/650.feature.rst | 1 - newsfragments/661.docs.rst | 1 - 12 files changed, 45 insertions(+), 12 deletions(-) delete mode 100644 newsfragments/300.breaking.rst delete mode 100644 newsfragments/300.bugfix.rst delete mode 100644 newsfragments/616.feature.rst delete mode 100644 newsfragments/618.internal.rst delete mode 100644 newsfragments/618.removal.rst delete mode 100644 newsfragments/622.feature.rst delete mode 100644 newsfragments/629.feature.rst delete mode 100644 newsfragments/636.feature.rst delete mode 100644 newsfragments/641.feature.rst delete mode 100644 newsfragments/650.feature.rst delete mode 100644 newsfragments/661.docs.rst diff --git a/docs/release_notes.rst b/docs/release_notes.rst index a6c2d37c..03e1c469 100644 --- a/docs/release_notes.rst +++ b/docs/release_notes.rst @@ -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 `__) + + +Bugfixes +~~~~~~~~ + +- Added proper state management and resource cleanup to `NetStream`, fixing memory leaks and improved error handling. (`#300 `__) + + +Improved Documentation +~~~~~~~~~~~~~~~~~~~~~~ + +- Updated examples to automatically use random port, when `-p` flag is not given (`#661 `__) + + +Features +~~~~~~~~ + +- Allow passing `listen_addrs` to `new_swarm` to customize swarm listening behavior. (`#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 `__) +- implement AsyncContextManager for IMuxedStream to support async with (`#629 `__) +- feat: add method to compute time since last message published by a peer and remove fanout peers based on ttl. (`#636 `__) +- implement blacklist management for `pubsub.Pubsub` with methods to get, add, remove, check, and clear blacklisted peer IDs. (`#641 `__) +- fix: remove expired peers from peerstore based on TTL (`#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 `__) + + +Removals +~~~~~~~~ + +- Removes support for python 3.9 and updates some code conventions, notably using ``|`` operator in typing instead of ``Optional`` or ``Union`` (`#618 `__) + + py-libp2p v0.2.7 (2025-05-22) ----------------------------- diff --git a/newsfragments/300.breaking.rst b/newsfragments/300.breaking.rst deleted file mode 100644 index b1d1cfe3..00000000 --- a/newsfragments/300.breaking.rst +++ /dev/null @@ -1 +0,0 @@ -The `NetStream.state` property is now async and requires `await`. Update any direct state access to use `await stream.state`. diff --git a/newsfragments/300.bugfix.rst b/newsfragments/300.bugfix.rst deleted file mode 100644 index 9f947490..00000000 --- a/newsfragments/300.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Added proper state management and resource cleanup to `NetStream`, fixing memory leaks and improved error handling. diff --git a/newsfragments/616.feature.rst b/newsfragments/616.feature.rst deleted file mode 100644 index d5ea2fb6..00000000 --- a/newsfragments/616.feature.rst +++ /dev/null @@ -1 +0,0 @@ -Allow passing `listen_addrs` to `new_swarm` to customize swarm listening behavior. diff --git a/newsfragments/618.internal.rst b/newsfragments/618.internal.rst deleted file mode 100644 index 3db303dc..00000000 --- a/newsfragments/618.internal.rst +++ /dev/null @@ -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. diff --git a/newsfragments/618.removal.rst b/newsfragments/618.removal.rst deleted file mode 100644 index 64fc5134..00000000 --- a/newsfragments/618.removal.rst +++ /dev/null @@ -1 +0,0 @@ -Removes support for python 3.9 and updates some code conventions, notably using ``|`` operator in typing instead of ``Optional`` or ``Union`` diff --git a/newsfragments/622.feature.rst b/newsfragments/622.feature.rst deleted file mode 100644 index c9a83bb5..00000000 --- a/newsfragments/622.feature.rst +++ /dev/null @@ -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. diff --git a/newsfragments/629.feature.rst b/newsfragments/629.feature.rst deleted file mode 100644 index 939ba6a4..00000000 --- a/newsfragments/629.feature.rst +++ /dev/null @@ -1 +0,0 @@ -implement AsyncContextManager for IMuxedStream to support async with diff --git a/newsfragments/636.feature.rst b/newsfragments/636.feature.rst deleted file mode 100644 index 7ec489be..00000000 --- a/newsfragments/636.feature.rst +++ /dev/null @@ -1 +0,0 @@ -feat: add method to compute time since last message published by a peer and remove fanout peers based on ttl. diff --git a/newsfragments/641.feature.rst b/newsfragments/641.feature.rst deleted file mode 100644 index 80e75a09..00000000 --- a/newsfragments/641.feature.rst +++ /dev/null @@ -1 +0,0 @@ -implement blacklist management for `pubsub.Pubsub` with methods to get, add, remove, check, and clear blacklisted peer IDs. diff --git a/newsfragments/650.feature.rst b/newsfragments/650.feature.rst deleted file mode 100644 index 80a84675..00000000 --- a/newsfragments/650.feature.rst +++ /dev/null @@ -1 +0,0 @@ -fix: remove expired peers from peerstore based on TTL diff --git a/newsfragments/661.docs.rst b/newsfragments/661.docs.rst deleted file mode 100644 index 917efa5d..00000000 --- a/newsfragments/661.docs.rst +++ /dev/null @@ -1 +0,0 @@ -Updated examples to automatically use random port, when `-p` flag is not given From 0f483dd7444feae36d2f76592dbfc2b8f97905bf Mon Sep 17 00:00:00 2001 From: pacrob <5199899+pacrob@users.noreply.github.com> Date: Tue, 10 Jun 2025 11:31:46 -0600 Subject: [PATCH 3/4] =?UTF-8?q?Bump=20version:=200.2.7=20=E2=86=92=200.2.8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c5adfb11..91803ada 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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\\d+) \\.(?P\\d+) From d2825af045dfecc69b6041d1a6b3a1469f0f6890 Mon Sep 17 00:00:00 2001 From: varunrmallya <100590632+varun-r-mallya@users.noreply.github.com> Date: Tue, 10 Jun 2025 23:14:07 +0530 Subject: [PATCH 4/4] fix(examples/echo/echo.py): Add max message length to stream.read (#671) Signed-off-by: varun-r-mallya --- examples/echo/echo.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/examples/echo/echo.py b/examples/echo/echo.py index 535133fa..9f1722b2 100644 --- a/examples/echo/echo.py +++ b/examples/echo/echo.py @@ -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')}")