def from_payload(cls, payload: dict, *args, **kwargs) -> 'LocalFileBasedNodeStorage': storage_type = payload[cls._TYPE_LABEL] if not storage_type == cls._name: raise cls.NodeStorageError("Wrong storage type. got {}".format(storage_type)) del payload['storage_type'] payload = cast_paths_from(cls, payload) return cls(*args, **payload, **kwargs)
def deserialize(cls, payload: str, deserializer=json.loads, payload_label: Optional[str] = None) -> dict: """Returns the JSON deserialized content of `payload`""" deserialized_payload = deserializer(payload) version = deserialized_payload.pop('version', UNKNOWN_VERSION) if version != cls.VERSION: label = f"'{payload_label}' " if payload_label else "" raise cls.OldVersion( f"Configuration {label} is the wrong version " f"Expected version {cls.VERSION}; Got version {version}") deserialized_payload = cast_paths_from(cls, deserialized_payload) return deserialized_payload
def assemble(cls, filepath: Optional[Path] = None, **overrides) -> dict: """ Warning: This method allows mutation and may result in an inconsistent configuration. """ payload = cls._read_configuration_file(filepath=filepath) node_storage = cls.load_node_storage( storage_payload=payload['node_storage'], federated_only=payload['federated_only']) max_gas_price = payload.get('max_gas_price') # gwei if max_gas_price: max_gas_price = Decimal(max_gas_price) # Assemble payload.update( dict(node_storage=node_storage, max_gas_price=max_gas_price)) payload = cast_paths_from(cls, payload) # Filter out None values from **overrides to detect, well, overrides... # Acts as a shim for optional CLI flags. overrides = {k: v for k, v in overrides.items() if v is not None} payload = {**payload, **overrides} return payload