mirror of
https://github.com/varun-r-mallya/py-libp2p.git
synced 2026-02-09 14:40:53 +00:00
Merge pull request #179 from mhchia/feature/latest-maddr-and-pin-versions
Use the latest multiaddr and pin deps versions
This commit is contained in:
@ -1,5 +1,4 @@
|
|||||||
import multiaddr
|
import multiaddr
|
||||||
import multiaddr.util
|
|
||||||
|
|
||||||
from .id import id_b58_decode
|
from .id import id_b58_decode
|
||||||
from .peerdata import PeerData
|
from .peerdata import PeerData
|
||||||
@ -12,17 +11,23 @@ class PeerInfo:
|
|||||||
self.addrs = peer_data.get_addrs() if peer_data else None
|
self.addrs = peer_data.get_addrs() if peer_data else None
|
||||||
|
|
||||||
|
|
||||||
def info_from_p2p_addr(addr):
|
def info_from_p2p_addr(addr: multiaddr.Multiaddr) -> PeerInfo:
|
||||||
if not addr:
|
if not addr:
|
||||||
raise InvalidAddrError()
|
raise InvalidAddrError("`addr` should not be `None`")
|
||||||
|
|
||||||
parts = multiaddr.util.split(addr)
|
if not isinstance(addr, multiaddr.Multiaddr):
|
||||||
|
raise InvalidAddrError(f"`addr`={addr} should be of type `Multiaddr`")
|
||||||
|
|
||||||
|
parts = addr.split()
|
||||||
if not parts:
|
if not parts:
|
||||||
raise InvalidAddrError()
|
raise InvalidAddrError(f"`parts`={parts} should at least have a protocol `P_P2P`")
|
||||||
|
|
||||||
p2p_part = parts[-1]
|
p2p_part = parts[-1]
|
||||||
if p2p_part.protocols()[0].code != multiaddr.protocols.P_P2P:
|
last_protocol_code = p2p_part.protocols()[0].code
|
||||||
raise InvalidAddrError()
|
if last_protocol_code != multiaddr.protocols.P_P2P:
|
||||||
|
raise InvalidAddrError(
|
||||||
|
f"The last protocol should be `P_P2P` instead of `{last_protocol_code}`"
|
||||||
|
)
|
||||||
|
|
||||||
# make sure the /p2p value parses as a peer.ID
|
# make sure the /p2p value parses as a peer.ID
|
||||||
peer_id_str = p2p_part.value_for_protocol(multiaddr.protocols.P_P2P)
|
peer_id_str = p2p_part.value_for_protocol(multiaddr.protocols.P_P2P)
|
||||||
@ -30,7 +35,7 @@ def info_from_p2p_addr(addr):
|
|||||||
|
|
||||||
# we might have received just an / p2p part, which means there's no addr.
|
# we might have received just an / p2p part, which means there's no addr.
|
||||||
if len(parts) > 1:
|
if len(parts) > 1:
|
||||||
addr = multiaddr.util.join(parts[:-1])
|
addr = multiaddr.Multiaddr.join(*parts[:-1])
|
||||||
|
|
||||||
peer_data = PeerData()
|
peer_data = PeerData()
|
||||||
peer_data.addrs = [addr]
|
peer_data.addrs = [addr]
|
||||||
|
|||||||
@ -27,13 +27,11 @@ class TCP(ITransport):
|
|||||||
:param maddr: maddr of peer
|
:param maddr: maddr of peer
|
||||||
:return: return True if successful
|
:return: return True if successful
|
||||||
"""
|
"""
|
||||||
_multiaddr = maddr
|
self.server = await asyncio.start_server(
|
||||||
_multiaddr = _multiaddr.decapsulate('/p2p')
|
self.handler,
|
||||||
|
maddr.value_for_protocol('ip4'),
|
||||||
coroutine = asyncio.start_server(self.handler,
|
maddr.value_for_protocol('tcp'),
|
||||||
_multiaddr.value_for_protocol('ip4'),
|
)
|
||||||
_multiaddr.value_for_protocol('tcp'))
|
|
||||||
self.server = await coroutine
|
|
||||||
socket = self.server.sockets[0]
|
socket = self.server.sockets[0]
|
||||||
self.multiaddrs.append(_multiaddr_from_socket(socket))
|
self.multiaddrs.append(_multiaddr_from_socket(socket))
|
||||||
|
|
||||||
|
|||||||
18
setup.py
18
setup.py
@ -15,16 +15,16 @@ setuptools.setup(
|
|||||||
platforms=["unix", "linux", "osx"],
|
platforms=["unix", "linux", "osx"],
|
||||||
classifiers=classifiers,
|
classifiers=classifiers,
|
||||||
install_requires=[
|
install_requires=[
|
||||||
"pycryptodome",
|
"pycryptodome>=3.8.2,<4.0.0",
|
||||||
"click",
|
"click>=7.0,<8.0",
|
||||||
"base58",
|
"base58>=1.0.3,<2.0.0",
|
||||||
"pymultihash",
|
"pymultihash>=0.8.2",
|
||||||
"multiaddr==0.0.4",
|
"multiaddr>=0.0.8,<0.1.0",
|
||||||
"rpcudp",
|
"rpcudp>=3.0.0,<4.0.0",
|
||||||
"grpcio",
|
"grpcio>=1.21.1,<2.0.0",
|
||||||
"grpcio-tools",
|
"grpcio-tools>=1.21.1,<2.0.0",
|
||||||
"lru-dict>=1.1.6",
|
"lru-dict>=1.1.6",
|
||||||
"aio_timers"
|
"aio_timers>=0.0.1,<0.1.0",
|
||||||
],
|
],
|
||||||
packages=setuptools.find_packages(exclude=["tests", "tests.*"]),
|
packages=setuptools.find_packages(exclude=["tests", "tests.*"]),
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
|
|||||||
@ -1,12 +1,17 @@
|
|||||||
import random
|
import random
|
||||||
import multiaddr
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
import multiaddr
|
||||||
|
|
||||||
from libp2p.peer.peerinfo import PeerInfo, info_from_p2p_addr, InvalidAddrError
|
from libp2p.peer.peerinfo import PeerInfo, info_from_p2p_addr, InvalidAddrError
|
||||||
from libp2p.peer.peerdata import PeerData
|
from libp2p.peer.peerdata import PeerData
|
||||||
from libp2p.peer.id import ID
|
from libp2p.peer.id import ID
|
||||||
|
|
||||||
|
|
||||||
ALPHABETS = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
|
ALPHABETS = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
|
||||||
|
|
||||||
|
|
||||||
def test_init_():
|
def test_init_():
|
||||||
peer_data = PeerData()
|
peer_data = PeerData()
|
||||||
random_addrs = [random.randint(0, 255) for r in range(4)]
|
random_addrs = [random.randint(0, 255) for r in range(4)]
|
||||||
@ -20,22 +25,30 @@ def test_init_():
|
|||||||
assert peer_info.peer_id == peer_id
|
assert peer_info.peer_id == peer_id
|
||||||
assert peer_info.addrs == random_addrs
|
assert peer_info.addrs == random_addrs
|
||||||
|
|
||||||
|
|
||||||
def test_init_no_value():
|
def test_init_no_value():
|
||||||
with pytest.raises(Exception) as _:
|
with pytest.raises(Exception) as _:
|
||||||
#pylint: disable=no-value-for-parameter
|
# pylint: disable=no-value-for-parameter
|
||||||
PeerInfo()
|
PeerInfo()
|
||||||
|
|
||||||
def test_invalid_addr_1():
|
|
||||||
with pytest.raises(InvalidAddrError):
|
|
||||||
info_from_p2p_addr(None)
|
|
||||||
|
|
||||||
def test_invalid_addr_2(monkeypatch):
|
@pytest.mark.parametrize(
|
||||||
random_addrs = [random.randint(0, 255) for r in range(4)]
|
'addr',
|
||||||
monkeypatch.setattr("multiaddr.util.split", lambda x: None)
|
(
|
||||||
|
pytest.param(None),
|
||||||
|
pytest.param(random.randint(0, 255), id='random integer'),
|
||||||
|
pytest.param(multiaddr.Multiaddr('/'), id='empty multiaddr'),
|
||||||
|
pytest.param(
|
||||||
|
multiaddr.Multiaddr('/ip4/127.0.0.1'), id='multiaddr without peer_id(p2p protocol)'
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
def test_info_from_p2p_addr_invalid(addr):
|
||||||
with pytest.raises(InvalidAddrError):
|
with pytest.raises(InvalidAddrError):
|
||||||
info_from_p2p_addr(random_addrs)
|
info_from_p2p_addr(addr)
|
||||||
|
|
||||||
def test_info_from_p2p_addr():
|
|
||||||
|
def test_info_from_p2p_addr_valid():
|
||||||
# pylint: disable=line-too-long
|
# pylint: disable=line-too-long
|
||||||
m_addr = multiaddr.Multiaddr('/ip4/127.0.0.1/tcp/8000/p2p/3YgLAeMKSAPcGqZkAt8mREqhQXmJT8SN8VCMN4T6ih4GNX9wvK8mWJnWZ1qA2mLdCQ')
|
m_addr = multiaddr.Multiaddr('/ip4/127.0.0.1/tcp/8000/p2p/3YgLAeMKSAPcGqZkAt8mREqhQXmJT8SN8VCMN4T6ih4GNX9wvK8mWJnWZ1qA2mLdCQ')
|
||||||
info = info_from_p2p_addr(m_addr)
|
info = info_from_p2p_addr(m_addr)
|
||||||
|
|||||||
Reference in New Issue
Block a user