AliceConfiguration file I/O and character production with policy defaults

pull/984/head
Kieran Prasch 2019-06-04 18:37:43 +03:00
parent c527158e4a
commit ad8bb56cff
No known key found for this signature in database
GPG Key ID: 199AB839D4125A62
1 changed files with 19 additions and 54 deletions

View File

@ -109,71 +109,36 @@ class AliceConfiguration(NodeConfiguration):
DEFAULT_CONFIG_FILE_LOCATION = os.path.join(DEFAULT_CONFIG_ROOT, CONFIG_FILENAME)
DEFAULT_REST_PORT = 8151
# TODO: Best (Sane) Defaults
DEFAULT_M = 2
DEFAULT_N = 3
DEFAULT_RATE = int(1e14) # wei # TODO: Best Sane Default
DEFAULT_FIRST_PERIOD_RATE = DEFAULT_RATE * 0.25 # TODO:
DEFAULT_EXPIRATION = datetime.timedelta(days=3) # TODO:
DEFAULT_RATE = int(1e14) # wei
DEFAULT_FIRST_PERIOD_RATE = 0.25 # of rate
DEFAULT_DURATION = 3 # periods
def __init__(self,
m: int = None,
n: int = None,
rate: int = None,
first_period_rate: float = None,
policy_duration = None,
*args, **kwargs):
super().__init__(*args, **kwargs)
self.m = m
self.n = n
self.rate = rate
self.first_period_rate = first_period_rate
self.m = m or self.DEFAULT_M
self.n = n or self.DEFAULT_N
self.rate = rate or self.DEFAULT_RATE
self.first_period_rate = first_period_rate or self.DEFAULT_FIRST_PERIOD_RATE
self.policy_duration = policy_duration or self.DEFAULT_DURATION
@classmethod
def from_configuration_file(cls,
filepath: str = None,
provider_process=None,
**overrides) -> 'NodeConfiguration':
"""Initialize a NodeConfiguration from a JSON file."""
payload = cls.get_configuration_payload(filepath=filepath, **overrides)
# Instantiate from merged params
node_configuration = cls(config_file_location=filepath,
provider_process=provider_process,
**payload)
return node_configuration
def to_configuration_file(self, filepath: str = None) -> str:
"""Write the static_payload to a JSON file."""
if not filepath:
filename = f'{self._NAME.lower()}{self._NAME.lower(), }' # FIXME: Support multiple Alice configs
filepath = os.path.join(self.config_root, filename)
if os.path.isfile(filepath):
# Avoid overriding an existing default configuration
filename = f'{self._NAME.lower()}-{self.checksum_public_address[:6]}{self.__CONFIG_FILE_EXT}'
filepath = os.path.join(self.config_root, filename)
payload = self.static_payload
del payload['is_me']
# Serialize domains
domains = list(str(domain) for domain in self.domains)
# Save node connection data
payload.update(dict(
node_storage=self.node_storage.payload(),
domains=domains,
m=self.m,
@property
def static_payload(self) -> dict:
payload = dict(m=self.m,
n=self.n,
rate=self.rate,
first_period_rate=self.first_period_rate
))
with open(filepath, 'w') as config_file:
config_file.write(json.dumps(payload, indent=4))
return filepath
first_period_rate=self.first_period_rate,
duration=self.policy_duration)
return {**super().static_payload, **payload}
def write_keyring(self, password: str, **generation_kwargs) -> NucypherKeyring: