Refactor from_seed_and_stake_info to accept a checksum_address inclusive in the URI.

pull/1242/head
Kieran Prasch 2019-08-07 16:20:43 -07:00 committed by David Núñez
parent f8db89d1a8
commit 9408463dec
4 changed files with 11 additions and 14 deletions

View File

@ -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,

View File

@ -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,

View File

@ -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:

View File

@ -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,