Source code for nervos.utils.parameters
"""
This module defines the `Parameters` class, which serves as a flexible container for various configuration parameters.
The class provides methods for loading parameters from a URL, dictionary, or file, listing all parameters,
and saving them to a JSON file.
"""
import os
import json
import requests
from . import common
[docs]
class Parameters:
"""
A dynamic configuration manager for storing, updating, and persisting parameters.
This class allows parameters to be loaded from different sources (URL, dictionary, file),
listed in a readable format, or saved to a JSON file.
"""
def __init__(self) -> None:
"""Initialize an empty Parameters instance."""
pass
[docs]
def from_url(self, url: str) -> None:
"""
Load parameters from a JSON response at the specified URL.
Args:
url (str): The URL from which to fetch the JSON parameters.
"""
parameters = requests.get(url).json()
for k, v in parameters.items():
setattr(self, k, v)
[docs]
def from_dict(self, parameters: dict) -> None:
"""
Load parameters from a dictionary.
Args:
parameters (dict): A dictionary of parameters to set.
"""
for k, v in parameters.items():
setattr(self, k, v)
[docs]
def from_file(self, path: str) -> None:
"""
Load parameters from a JSON file.
Args:
path (str): The path to the JSON file containing parameters.
"""
with open(path, "r") as f:
parameters = json.load(f)
for k, v in parameters.items():
setattr(self, k, v)
[docs]
def list_parameters(self) -> None:
"""
Print all parameters and their values in a formatted table.
"""
for k, v in self.__dict__.items():
print(f"{k}:{' '*(30-len(k))}{v}")
[docs]
def save(
self, identifier: str, directory: str = None
) -> None:
"""
Save the parameters to a JSON file.
Args:
identifier (str): A unique identifier for the saved file.
directory (str, optional): The directory in which to save the file. Defaults to 'parameters' in the current working directory.
"""
if directory is None:
directory = os.path.join(common.cwd, "parameters")
common.mkdir(directory)
file_path = os.path.join(directory, f"parameters_{identifier}.json")
with open(file_path, "w") as f:
f.write(json.dumps(self.__dict__, indent=4))