Config

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 ini standard

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)

Functions