Attributes
Classes
Config
Config(root=None, name=None, auto_generate=True)
Base Config class
Source code in fedbiomed/common/config.py
def __init__(
self,
root = None,
name: Optional[str] = None,
auto_generate: bool = True
) -> None:
"""Initializes config"""
# First try to get component specific config file name, then CONFIG_FILE
default_config = os.getenv(
f'{self._COMPONENT_TYPE}_CONFIG_FILE',
os.getenv('CONFIG_FILE', self._DEFAULT_CONFIG_FILE_NAME))
self.root = root
self._cfg = configparser.ConfigParser()
self.name = name if name else default_config
if self.root:
self.path = os.path.join(self.root, CONFIG_FOLDER_NAME, self.name)
self.root = self.root
else:
self.path = os.path.join(CONFIG_DIR, self.name)
self.root = ROOT_DIR
# Creates setup folders if not existing
create_fedbiomed_setup_folders(self.root)
if auto_generate:
self.generate()
Attributes
name instance-attribute
name = name if name else default_config
path instance-attribute
path = join(root, CONFIG_FOLDER_NAME, name)
root instance-attribute
root = root
Functions
add_parameters abstractmethod
add_parameters()
"Component specific argument creation
Source code in fedbiomed/common/config.py
@abstractmethod
def add_parameters(self):
""""Component specific argument creation"""
generate
generate(force=False, id=None)
"Generate configuration file
Parameters:
Name | Type | Description | Default |
---|---|---|---|
force | bool | Overwrites existing configration file | False |
id | Optional[str] | Component ID | None |
Source code in fedbiomed/common/config.py
def generate(
self,
force: bool = False,
id: Optional[str] = None
) -> bool:
""""Generate configuration file
Args:
force: Overwrites existing configration file
id: Component ID
"""
# Check if configuration is already existing
if self.is_config_existing() and not force:
return self.read()
# Create default section
component_id = id if id else f"{self._COMPONENT_TYPE}_{uuid.uuid4()}"
self._cfg['default'] = {
'id': component_id,
'component': self._COMPONENT_TYPE,
'version': str(self._CONFIG_VERSION)
}
db_path = os.path.join(self.root, VAR_FOLDER_NAME, f"{DB_PREFIX}{component_id}.json")
self._cfg['default']['db'] = os.path.relpath(db_path, os.path.join(self.root, CONFIG_FOLDER_NAME))
ip, port = retrieve_ip_and_port(self.root)
allow_default_biprimes = os.getenv('ALLOW_DEFAULT_BIPRIMES', True)
# Generate self-signed certificates
key_file, pem_file = generate_certificate(
root=self.root,
component_id=component_id,
prefix=MPSPDZ_certificate_prefix)
self._cfg['mpspdz'] = {
'private_key': os.path.relpath(key_file, os.path.join(self.root, 'etc')),
'public_key': os.path.relpath(pem_file, os.path.join(self.root, 'etc')),
'mpspdz_ip': ip,
'mpspdz_port': port,
'allow_default_biprimes': allow_default_biprimes,
'default_biprimes_dir': os.path.relpath(
os.path.join(self.root, 'envs', 'common', 'default_biprimes'),
os.path.join(self.root, 'etc')
)
}
# Register default biprime
self._register_default_biprime(db_path)
# Calls child class add_parameterss
self.add_parameters()
# Write configuration file
return self.write()
get
get(section, key, **kwargs)
Returns value for given key and section
Source code in fedbiomed/common/config.py
def get(self, section, key, **kwargs) -> str:
"""Returns value for given key and section"""
return self._cfg.get(section, key, **kwargs)
is_config_existing
is_config_existing()
Checks if config file exists
Returns:
Type | Description |
---|---|
bool | True if config file is already existing |
Source code in fedbiomed/common/config.py
def is_config_existing(self) -> bool:
"""Checks if config file exists
Returns:
True if config file is already existing
"""
return os.path.isfile(self.path)
read
read()
Reads configuration file that is already existing in given path
Raises verision compatibility error
Source code in fedbiomed/common/config.py
def read(self) -> bool:
"""Reads configuration file that is already existing in given path
Raises verision compatibility error
"""
self._cfg.read(self.path)
# Validate config version
raise_for_version_compatibility(
self._cfg["default"]["version"],
self._CONFIG_VERSION,
f"Configuration file {self.path}: found version %s expected version %s")
return True
refresh
refresh()
Refreshes config file by recreating all the fields without chaning component ID.
Source code in fedbiomed/common/config.py
def refresh(self):
"""Refreshes config file by recreating all the fields without
chaning component ID.
"""
if not self.is_config_existing():
raise FedbiomedError("Can not refresh config file that is not existing")
# Read the config
self._cfg.read(self.path)
id = self._cfg["default"]['id']
# Generate by keeping the component ID
self.generate(force=True, id=id)
sections
sections()
Returns sections of the config
Source code in fedbiomed/common/config.py
def sections(self) -> list:
"""Returns sections of the config"""
return self._cfg.sections()
set
set(section, key, value)
Sets config section values
Parameters:
Name | Type | Description | Default |
---|---|---|---|
section | the name of the config file section as defined by the | required | |
key | the name of the attribute to be set | required | |
value | the value of the attribute to be set | required |
Returns:
Name | Type | Description |
---|---|---|
value | None | the value of the attribute that was just set |
Source code in fedbiomed/common/config.py
def set(self, section, key, value) -> None:
"""Sets config section values
Args:
section: the name of the config file section as defined by the `ini` standard
key: the name of the attribute to be set
value: the value of the attribute to be set
Returns:
value: the value of the attribute that was just set
"""
self._cfg.set(section, key, value)
write
write()
Writes config file
Source code in fedbiomed/common/config.py
def write(self):
"""Writes config file"""
try:
with open(self.path, 'w') as f:
self._cfg.write(f)
except configparser.Error:
raise IOError(ErrorNumbers.FB600.value + ": cannot save config file: " + self.path)