mirror of https://github.com/nucypher/nucypher.git
Refactor from_seed_and_stake_info to accept a checksum_address inclusive in the URI.
parent
f8db89d1a8
commit
9408463dec
|
@ -1058,19 +1058,15 @@ class Ursula(Teacher, Character, Worker):
|
|||
return stranger_ursula_from_public_keys
|
||||
|
||||
@classmethod
|
||||
def from_seednode_metadata(cls,
|
||||
seednode_metadata,
|
||||
*args,
|
||||
**kwargs):
|
||||
def from_seednode_metadata(cls, seednode_metadata, *args, **kwargs):
|
||||
"""
|
||||
Essentially another deserialization method, but this one doesn't reconstruct a complete
|
||||
node from bytes; instead it's just enough to connect to and verify a node.
|
||||
"""
|
||||
|
||||
return cls.from_seed_and_stake_info(checksum_address=seednode_metadata.checksum_address,
|
||||
seed_uri='{}:{}'.format(seednode_metadata.rest_host,
|
||||
seednode_metadata.rest_port),
|
||||
*args, **kwargs)
|
||||
NOTE: This is a federated only method.
|
||||
"""
|
||||
seed_uri = f'{seednode_metadata.checksum_address}@{seednode_metadata.rest_host}:{seednode_metadata.rest_port}'
|
||||
return cls.from_seed_and_stake_info(seed_uri=seed_uri, *args, **kwargs)
|
||||
|
||||
@classmethod
|
||||
def from_teacher_uri(cls,
|
||||
|
@ -1086,9 +1082,8 @@ class Ursula(Teacher, Character, Worker):
|
|||
raise ConnectionRefusedError("Host {} Refused Connection".format(teacher_uri))
|
||||
|
||||
try:
|
||||
teacher = cls.from_seed_and_stake_info(seed_uri='{host}:{port}'.format(host=hostname, port=port),
|
||||
teacher = cls.from_seed_and_stake_info(seed_uri=teacher_uri,
|
||||
federated_only=federated_only,
|
||||
checksum_address=checksum_address,
|
||||
minimum_stake=min_stake,
|
||||
network_middleware=network_middleware,
|
||||
blockchain=blockchain)
|
||||
|
@ -1104,7 +1099,6 @@ class Ursula(Teacher, Character, Worker):
|
|||
return __attempt()
|
||||
|
||||
@classmethod
|
||||
@validate_checksum_address
|
||||
def from_seed_and_stake_info(cls,
|
||||
seed_uri: str,
|
||||
federated_only: bool,
|
||||
|
|
|
@ -127,7 +127,7 @@ def load_seednodes(emitter,
|
|||
emitter.message(f"No default teacher nodes exist for the specified network: {domain}")
|
||||
else:
|
||||
# Prefer the injected teacher URI, then use the hardcoded seednodes.
|
||||
teacher_uris.append(seednode_uris)
|
||||
teacher_uris.extend(seednode_uris)
|
||||
|
||||
for uri in teacher_uris:
|
||||
teacher_node = Ursula.from_teacher_uri(teacher_uri=uri,
|
||||
|
|
|
@ -32,6 +32,8 @@ def parse_node_uri(uri: str):
|
|||
|
||||
if '@' in uri:
|
||||
checksum_address, uri = uri.split("@")
|
||||
if checksum_address is None:
|
||||
raise ValueError(f"{uri} is not a valid Teacher URI.")
|
||||
if not is_checksum_address(checksum_address):
|
||||
raise ValueError("{} is not a valid checksum address.".format(checksum_address))
|
||||
else:
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
from functools import partial
|
||||
|
||||
from nucypher.utilities.sandbox.ursula import make_federated_ursulas
|
||||
import pytest
|
||||
|
||||
from nucypher.utilities.sandbox.ursula import make_federated_ursulas
|
||||
|
||||
def test_learner_learns_about_domains_separately(ursula_federated_test_config, caplog):
|
||||
lonely_ursula_maker = partial(make_federated_ursulas,
|
||||
|
|
Loading…
Reference in New Issue