config - Configuration definitions¶
Overview¶
Complex applications (and some library modules like logging
) could be often parametrized
via configuration. This module provides a framework for unified structured configuration
that supports:
configuration options of various data type, including lists and other complex types
validation
direct manipulation of configuration values
reading from (and writing into) configuration in
configparser
formatexchanging configuration (for example between processes) using Google protobuf messages
Architecture¶
The framework is based around two classes:
Config
- Collection of configuration options and sub-collections. Particular configuration is then realized as descendant from this class, that defines configuration options in constructor, and customize the validation when required.Option
- Abstract base class for configuration options, where descendants implement handling of particular data type. This module provides implementation for next data types:str
,int
,float
,bool
,Decimal
,Enum
,Flag
,UUID
,MIME
,ZMQAddress
,list
,dataclass
,PyExpr
,PyCode
andPyCallable
. It also provides special optionsConfigOption
andConfigListOption
.
Additionally, the ApplicationDirectoryScheme
abstract base class defines set of mostly
used application directories. The function get_directory_scheme()
could be then used
to obtain instance that implements platform-specific standards for file-system location
for these directories. Currently, only “Windows”, “Linux” and “MacOS” directory schemes
are supported.
Note
You may use platform.system
call to determine the scheme name suitable for platform
where your application is running.
Usage¶
First, you need to define your own configuration.
from enum import IntEnum
from firebird.base.config import Config, StrOption, IntOption, ListOption
class SampleEnum(IntEnum):
"Enum for testing"
UNKNOWN = 0
READY = 1
RUNNING = 2
WAITING = 3
SUSPENDED = 4
FINISHED = 5
ABORTED = 6
class DbConfig(Config):
"Simple database config"
def __init__(self, name: str):
super().__init__(name)
# options
self.database: StrOption = StrOption('database', 'Database connection string',
required=True)
self.user: StrOption = StrOption('user', 'User name', required=True,
default='SYSDBA')
self.password: StrOption = StrOption('password', 'User password')
class SampleConfig(Config):
"""Sample Config.
Has three options and two sub-configs.
"""
def __init__(self):
super().__init__('sample-config')
# options
self.opt_str: StrOption = StrOption('opt_str', "Sample string option")
self.opt_int: IntOption = StrOption('opt_int', "Sample int option")
self.enum_list: ListOption = ListOption('enum_list', "List of enum values",
item_type=SampleEnum)
# sub configs
self.master_db: DbConfig = DbConfig('master-db')
self.backup_db: DbConfig = DbConfig('backup-db')
Important
Option must be assigned to Config attributes with the same name as option name.
Typically you need only one instance of your configuration class in application.
app_config: SampleConfig = SampleConfig()
Typically, your application is configured using file(s) in configparser
format. You may
create initial one using Config.get_config()
method.
Note
Config.get_config()
works with current configuration values. When called on “empty”
instance it returns “default” configuration. Option values that match the default are
returned as commented out.
>>> print(app_config.get_config())
[sample-config]
;
; Sample Config.
;
; Has three options and two sub-configs.
;
; opt_str
; -------
;
; data type: str
;
; [optional] Sample string option
;
;opt_str = <UNDEFINED>
; opt_int
; -------
;
; data type: str
;
; [optional] Sample int option
;
;opt_int = <UNDEFINED>
; enum_list
; ---------
;
; data type: list
;
; [optional] List of enum values
;
;enum_list = <UNDEFINED>
[master-db]
;
; Simple DB config
;
; database
; --------
;
; data type: str
;
; [REQUIRED] Database connection string
;
;database = <UNDEFINED>
; user
; ----
;
; data type: str
;
; [REQUIRED] User name
;
;user = SYSDBA
; password
; --------
;
; data type: str
;
; [optional] User password
;
;password = <UNDEFINED>
[backup-db]
;
; Simple DB config
;
; database
; --------
;
; data type: str
;
; [REQUIRED] Database connection string
;
;database = <UNDEFINED>
; user
; ----
;
; data type: str
;
; [REQUIRED] User name
;
;user = SYSDBA
; password
; --------
;
; data type: str
;
; [optional] User password
;
;password = <UNDEFINED>
To read the configuration from file, use the ConfigParser
and pass it
to Config.load_config()
method.
Example configuration file:
; myapp.cfg
[DEFAULT]
password = masterkey
[sample-config]
opt_str = Lorem ipsum
enum_list = ready, finished, aborted
[master-db]
database = primary
user = tester
password = lockpick
[backup-db]
database = secondary
from configparser import ConfigParser
cfg = ConfigParser()
cfg.read('myapp.cfg')
app_config.load_config(cfg)
Access to configuration values is through attributes on your Config
instance, and
their value
attribute.
>>> app_config.opt_str.value
Lorem ipsum
>>> app_config.opt_int.value
>>> app_config.enum_list.value
[READY, FINISHED, ABORTED]
>>> app_config.master_db.database.value
primary
>>> app_config.master_db.user.value
tester
>>> app_config.master_db.password.value
lockpick
>>> app_config.backup_db.database.value
secondary
>>> app_config.backup_db.user.value
SYSDBA
>>> app_config.backup_db.password.value
masterkey
ConfigProto¶
You can transfer configuration (state) between instances of your Config
classes using
Google Protocol Buffer message firebird.base.ConfigProto
and methods
save_proto()
and load_proto()
.
The protobuf message is defined in /proto/config.proto
.
syntax = "proto3";
package firebird.base;
import "google/protobuf/any.proto";
message Value {
oneof kind {
string as_string = 2 ;
bytes as_bytes = 3 ;
bool as_bool = 4 ;
double as_double = 5 ;
float as_float = 6 ;
sint32 as_sint32 = 7 ;
sint64 as_sint64 = 8 ;
uint32 as_uint32 = 9 ;
uint64 as_uint64 = 10 ;
google.protobuf.Any as_msg = 11 ;
}
}
message ConfigProto {
map<string, Value> options = 1 ;
map<string, ConfigProto> configs = 2 ;
}
Note
You can use it directly or via protobuf
registry.
# Direct use
from firebird.base.config import ConfigProto
cfg_msg = ConfigProto()
Because the proto file is NOT registered in protobuf
registry, you must register
it manually. The proto file is listed in setup.cfg
under “firebird.base.protobuf”
entrypoint, so use load_registered('firebird.base.protobuf')
for its registration.
from firebird.base.protobuf import load_registered, create_message
load_registered('firebird.base.protobuf')
cfg_msg = create_message('firebird.base.ConfigProto')
Important
Although Option
also provides methods save_proto()
and load_proto()
to transfer option value in/out ConfigProto message, you should always use methods
on Config
instance because option’s serialization may relly on Config
instance that
owns them.
See also
Constants¶
- firebird.base.config.PROTO_CONFIG Fully qualified name for `ConfigProto`_ protobuf.¶
Tip
To address ConfigProto in functions like create_message()
,
use PROTO_CONFIG
constant.
Application Directory Scheme¶
New in version 1.1.0.
Changed in version 1.2.0.
- class firebird.base.config.DirectoryScheme(name: str, version: str | None = None, force_home: bool = False)[source]¶
Bases:
object
Class that provide paths to typically used application directories.
Default scheme uses HOME directory as root for other directories. The HOME is determined as follows:
If environment variable
<app_name>_HOME
exists, its value is used as HOME directory.HOME directory is set to current working directory.
Note
All paths are set when the instance is created and can be changed later.
- has_home_env() bool [source]¶
Returns True if HOME directory is set by “<app_name>_HOME” environment variable.
- Return type:
- property cache: Path¶
Directory for application cache data.
Such data are locally generated as a result of time-consuming I/O or calculation. The application must be able to regenerate or restore the data. The cached files can be deleted without loss of data.
- property data: Path¶
Directory for state information / persistent data modified by application as it runs.
- property home: Path¶
HOME directory. Initial value is path set by
<app_name>_HOME
environment variable, or to current working directory when variable is not defined.Important
When new value is assigned, the general directories (i.e. all except user-specific and TMP) are redefined as subdirectories of new home path ONLY when HOME was initially defined using
<app_name>_HOME
environment variable, or instance was created withforce_home
= True.However, all paths could be still changed individually to any value.
- class firebird.base.config.WindowsDirectoryScheme(name: str, version: str | None = None, force_home: bool = False)[source]¶
Bases:
DirectoryScheme
Directory scheme that conforms to Windows standards.
If HOME is defined using “<app_name>_HOME” environment variable, or
force_home
parameter is True, only user-specific directories and TMP are set according to platform standars, while general directories remain as defined by baseDirectoryScheme
.
- class firebird.base.config.LinuxDirectoryScheme(name: str, version: str | None = None, force_home: bool = False)[source]¶
Bases:
DirectoryScheme
Directory scheme that conforms to Linux standards.
If HOME is defined using “<app_name>_HOME” environment variable, or
force_home
parameter is True, only user-specific directories and TMP are set according to platform standars, while general directories remain as defined by baseDirectoryScheme
.
- class firebird.base.config.MacOSDirectoryScheme(name: str, version: str | None = None, force_home: bool = False)[source]¶
Bases:
DirectoryScheme
Directory scheme that conforms to MacOS standards.
If HOME is defined using “<app_name>_HOME” environment variable, only user-specific directories and TMP are set according to platform standars, while general directories remain as defined by base
DirectoryScheme
.
- firebird.base.config.get_directory_scheme(app_name: str, version: str | None = None, *, force_home: bool = False) DirectoryScheme [source]¶
Returns directory scheme for current platform.
- Parameters:
app_name (str) – Application name
version (str | None) – Application version string
force_home (bool) – When True, the general directies are always set to subdirectories of
DirectoryScheme.home
directory. When False, then home is used ONLY when it’s set by “<app_name>_HOME” environment variable.
- Return type:
Config¶
- class firebird.base.config.Config(name: str, *, optional: bool = False, description: str | None = None)[source]¶
Bases:
object
Collection of configuration options.
Important
Descendants must define individual options and sub configs as instance attributes.
- __init__(name: str, *, optional: bool = False, description: str | None = None)[source]¶
- Parameters:
name (str) – Name associated with Config (default section name).
optional (bool) – Whether config is optional (False) or mandatory (True) for configuration file (see
load_config()
for details).description (str | None) – Optional configuration description. Can span multiple lines.
- clear(*, to_default: bool = True) None [source]¶
Clears all owned options and options in owned sub-configs.
- Parameters:
to_default (bool) – If True, sets the option values to defaults, else to None.
- Return type:
None
- get_config(*, plain: bool = False) str [source]¶
Returns string containing text lines suitable for use in configuration file processed with
ConfigParser
.
- get_description() str [source]¶
Configuration description. Can span multiple lines.
Note: If description is not provided on instance creation, class doc string.
- Return type:
- load_config(config: ConfigParser, section: str | None = None) None [source]¶
Update configuration.
- Parameters:
config (ConfigParser) – ConfigParser instance with configuration values.
section (str | None) – Name of ConfigParser section that should be used to get new configuration values. If not provided, uses
name
.
- Raises:
ValueError – When any option value cannot be loadded.
KeyError – If section does not exists, and config is not
optional
or section is notconfigparser.DEFAULTSECT
.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains option values and sub-configs.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option values and sub-configs should be stored.
- Return type:
None
- validate() None [source]¶
- Checks whether:
all required options have value other than None.
all options are defined as config attribute with the same name as option name
Raises exception when any constraint required by configuration is violated.
- Return type:
None
- property configs: List[Config]¶
List of sub-Configs defined for this Config instance. It includes all instance attributes of
Config
type, andConfig
values of ownedConfigOption
andConfigListOption
instances.
- property optional: bool¶
Whether config is optional (False) or mandatory (True) for configuration file (see
load_config()
for details).
Options¶
- class firebird.base.config.Option(name: str, datatype: T, description: str, required: bool = False, default: T | None = None)[source]¶
-
Generic abstract base class for configuration options.
- __init__(name: str, datatype: T, description: str, required: bool = False, default: T | None = None)[source]¶
- _get_config_lines(plain: bool = False) List[str] [source]¶
Returns list of strings containing text lines suitable for use in configuration file processed with
ConfigParser
.Text lines with configuration start with comment marker
;
and end with newline.- Parameters:
plain (bool) – When True, it outputs only the option value. When False, it includes also option description and other helpful information.
- Return type:
Note
This function is intended for internal use. To get string describing current configuration that is suitable for configuration files, use
get_config
method.
- abstract clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- get_config(*, plain: bool = False) str [source]¶
Returns string containing text lines suitable for use in configuration file processed with
ConfigParser
.
- load_config(config: ConfigParser, section: str) None [source]¶
Update option value from
ConfigParser
instance.- Parameters:
config (ConfigParser) – ConfigParser instance.
section (str) – Name of ConfigParser section that should be used to get new option value.
- Raises:
ValueError – When option value cannot be loadded.
KeyError – If section does not exists, and it’s not
configparser.DEFAULTSECT
.
- Return type:
None
- abstract load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- abstract save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- abstract set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- abstract set_value(value: T) None [source]¶
Set new option value.
- Parameters:
value (T) – New option value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- validate() None [source]¶
Validates option state.
- Raises:
Error – When required option does not have a value.
- Return type:
None
- datatype: T¶
Option datatype.
- default: T¶
Default option value.
- class firebird.base.config.StrOption(name: str, description: str, *, required: bool = False, default: str | None = None)[source]¶
-
Configuration option with string value.
New in version 1.6.1: Support for verticals to preserve leading whitespace.
Important
Multiline string values could contain significant leading whitespace, but ConfigParser multiline string values have leading whitespace removed. To circumvent this, the
StrOption
supports assignment of text values where lines start with|
character. This character is removed, along with any number of subsequent whitespace characters that are between|
and first non-whitespace character on first line starting with|
.- __init__(name: str, description: str, *, required: bool = False, default: str | None = None)[source]¶
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- class firebird.base.config.IntOption(name: str, description: str, *, required: bool = False, default: int | None = None, signed: bool = False)[source]¶
-
Configuration option with integer value.
- __init__(name: str, description: str, *, required: bool = False, default: int | None = None, signed: bool = False)[source]¶
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- class firebird.base.config.FloatOption(name: str, description: str, *, required: bool = False, default: float | None = None)[source]¶
-
Configuration option with float value.
- __init__(name: str, description: str, *, required: bool = False, default: float | None = None)[source]¶
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- class firebird.base.config.DecimalOption(name: str, description: str, *, required: bool = False, default: Decimal | None = None)[source]¶
-
Configuration option with decimal.Decimal value.
- __init__(name: str, description: str, *, required: bool = False, default: Decimal | None = None)[source]¶
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto)[source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- save_proto(proto: ConfigProto)[source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- class firebird.base.config.BoolOption(name: str, description: str, *, required: bool = False, default: bool | None = None)[source]¶
-
Configuration option with boolean value.
- __init__(name: str, description: str, *, required: bool = False, default: bool | None = None)[source]¶
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- class firebird.base.config.ZMQAddressOption(name: str, description: str, *, required: bool = False, default: ZMQAddress | None = None)[source]¶
Bases:
Option
[ZMQAddress
]Configuration option with
ZMQAddress
value.- __init__(name: str, description: str, *, required: bool = False, default: ZMQAddress | None = None)[source]¶
- Parameters:
name (str) – Option name.
description (str) – Option description. Can span multiple lines.
required (bool) – True if option must have a value.
default (ZMQAddress | None) – Default option value.
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- get_value() ZMQAddress [source]¶
Returns current option value.
- Return type:
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- set_value(value: ZMQAddress) None [source]¶
Set new option value.
- Parameters:
value (ZMQAddress) – New option value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- property value: ZMQAddress¶
Current option value
- class firebird.base.config.EnumOption(name: str, enum_class: Enum, description: str, *, required: bool = False, default: Enum | None = None, allowed: List | None = None)[source]¶
-
Configuration option with enum value.
- __init__(name: str, enum_class: Enum, description: str, *, required: bool = False, default: Enum | None = None, allowed: List | None = None)[source]¶
- Parameters:
name (str) – Option name.
description (str) – Option description. Can span multiple lines.
required (bool) – True if option must have a value.
default (Enum | None) – Default option value.
allowed (List | None) – List of allowed Enum members. When not defined, all members of enum type are allowed.
enum_class (Enum) –
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains option value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- class firebird.base.config.FlagOption(name: str, flag_class: Flag, description: str, *, required: bool = False, default: Flag | None = None, allowed: List | None = None)[source]¶
-
Configuration option with flag value.
- __init__(name: str, flag_class: Flag, description: str, *, required: bool = False, default: Flag | None = None, allowed: List | None = None)[source]¶
- Parameters:
name (str) – Option name.
description (str) – Option description. Can span multiple lines.
required (bool) – True if option must have a value.
default (Flag | None) – Default option value.
allowed (List | None) – List of allowed Flag members. When not defined, all members of flag type are allowed.
flag_class (Flag) –
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains option value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- class firebird.base.config.UUIDOption(name: str, description: str, *, required: bool = False, default: UUID | None = None)[source]¶
-
Configuration option with UUID value.
- __init__(name: str, description: str, *, required: bool = False, default: UUID | None = None)[source]¶
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- class firebird.base.config.MIMEOption(name: str, description: str, *, required: bool = False, default: MIME | None = None)[source]¶
-
Configuration option with MIME type specification value.
- __init__(name: str, description: str, *, required: bool = False, default: MIME | None = None)[source]¶
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- class firebird.base.config.ListOption(name: str, item_type: Type | Sequence[Type], description: str, *, required: bool = False, default: List | None = None, separator: str | None = None)[source]¶
-
Configuration option with list of values.
Important
When option is read from
ConfigParser
, empty values are ignored.- __init__(name: str, item_type: Type | Sequence[Type], description: str, *, required: bool = False, default: List | None = None, separator: str | None = None)[source]¶
- Parameters:
name (str) – Option name.
item_type (Type | Sequence[Type]) – Datatype of list items. It could be a type or sequence of types. If multiple types are provided, each value in config file must have format:
type_name:value_as_str
.description (str) – Option description. Can span multiple lines.
required (bool) – True if option must have a value.
default (List | None) – Default option value.
separator (str | None) – String that separates list item values when options value is read from
ConfigParser
. It’s possible to use a line break as separator. If separator isNone
[default] and the value contains line breaks, it uses the line break as separator, otherwise it uses comma as separator.
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- set_value(value: List) None [source]¶
Set new option value.
- Parameters:
value (List) – New option value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- item_types: Sequence[Type]¶
Datatypes of list items. If there is more than one type, each value in config file must have format:
type_name:value_as_str
.
- separator: str | None¶
String that separates list item values when options value is read from
ConfigParser
. Default separator is None. It’s possible to use a line break as separator. If separator isNone
and the value contains line breaks, it uses the line break as separator, otherwise it uses comma as separator.
- class firebird.base.config.DataclassOption(name: str, dataclass: Type, description: str, *, required: bool = False, default: Any | None = None, separator: str | None = None, fields: Dict[str, Type] | None = None)[source]¶
-
Configuration option with a dataclass value.
The
ConfigParser
format for this option is a list of values, where each list items defines value for dataclass field infield_name:value_as_str
format. The configuration must contain values for all fields for the dataclass that does not have default value.Important
This option uses type annotation for dataclass to determine the actual data type for conversion from string. It means that:
If type annotation contains “typing” types, it’s necessary to specify “real” types for all dataclass fields using the
fields
argument.All used data types must have string convertors registered in
strconv
module.
Important
When option is read from
ConfigParser
, empty values are ignored.- __init__(name: str, dataclass: Type, description: str, *, required: bool = False, default: Any | None = None, separator: str | None = None, fields: Dict[str, Type] | None = None)[source]¶
- Parameters:
name (str) – Option name.
dataclass (Type) – Dataclass type.
description (str) – Option description. Can span multiple lines.
required (bool) – True if option must have a value.
default (Any | None) – Default option value.
separator (str | None) – String that separates dataclass field values when options value is read from
ConfigParser
. It’s possible to use a line break as separator. If separator isNone
[default] and the value contains line breaks, it uses the line break as separator, otherwise it uses comma as separator.fields (Dict[str, Type] | None) – Dictionary that maps dataclass field names to data types.
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- set_value(value: Any) None [source]¶
Set new option value.
- Parameters:
value (Any) – New option value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- separator: str | None¶
String that separates dataclass field values when options value is read from
ConfigParser
. Default separator is None. It’s possible to use a line break as separator. If separator isNone
and the value contains line breaks, it uses the line break as separator, otherwise it uses comma as separator.
- class firebird.base.config.PathOption(name: str, description: str, *, required: bool = False, default: Path | None = None)[source]¶
-
Configuration option with
pathlib.Path
value.- __init__(name: str, description: str, *, required: bool = False, default: Path | None = None)[source]¶
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- class firebird.base.config.PyExprOption(name: str, description: str, *, required: bool = False, default: PyExpr | None = None)[source]¶
-
String configuration option with Python expression value.
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- class firebird.base.config.PyCodeOption(name: str, description: str, *, required: bool = False, default: PyCode | None = None)[source]¶
-
String configuration option with Python code value.
Important
Python code must be properly indented, but ConfigParser multiline string values have leading whitespace removed. To circumvent this, the
PyCodeOption
supports assignment of text values where lines start with|
character. This character is removed, along with any number of subsequent whitespace characters that are between|
and first non-whitespace character on first line starting with|
.- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- class firebird.base.config.PyCallableOption(name: str, description: str, signature: Signature | Callable, *, required: bool = False, default: PyCallable | None = None)[source]¶
Bases:
Option
[PyCallable
]String configuration option with Python callable value.
Important
Python code must be properly indented, but
ConfigParser
multiline string values have leading whitespace removed. To circumvent this, thePyCodeOption
supports assignment of text values where lines start with|
character. This character is removed, along with any number of subsequent whitespace characters that are between|
and first non-whitespace character on first line starting with|
.- __init__(name: str, description: str, signature: Signature | Callable, *, required: bool = False, default: PyCallable | None = None)[source]¶
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- get_value() PyCallable [source]¶
Returns current option value.
- Return type:
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- set_value(value: PyCallable) None [source]¶
Set new option value.
- Parameters:
value (PyCallable) – New option value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the callable has wrong signature.
- Return type:
None
- property value: PyCallable¶
Current option value
- class firebird.base.config.ConfigOption(name: str, description: str, config: Config, *, required: bool = False, default: str | None = None)[source]¶
-
Configuration option with
Config
value.Important
This option is intended for sub-configs that should have configurable name (i.e. the section name that holds sub-config values). To create sub-configs with fixed section names, simply assign them to instance attributes of
Config
instance that owns them (preferably in constructor).While the
value
attribute for this option is an instance of any class inherited fromConfig
, in other ways it behaves likeStrOption
that loads/saves only name of itsConfig
value (i.e. the section name). The actual I/O for sub-config’s options is delegated toConfig
instance that owns this option.The “empty” value for this option is not
None
(because theConfig
instance always exists), but an empty string forConfig.name
attribute.- __init__(name: str, description: str, config: Config, *, required: bool = False, default: str | None = None)[source]¶
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
Note
This method calls
clear(to_default)
.- Parameters:
to_default (bool) – If True, sets the
Config.name
to default value, else to empty string.- Return type:
None
- get_as_str() str [source]¶
Return value as string.
Important
Because the actual value is a
Config
instance, the returned string is the section name used to storeConfig
options.- Return type:
- get_formatted() str [source]¶
Return value formatted for use in config file.
The string contains section name that will be used to store the
Config
values.- Return type:
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New
Config.name
value.- Return type:
None
Important
Because the actual value is a
Config
instance, the string must contain theConfig.name
value (which is the section name used to storeConfig
options). Beware that multiple Config instances with the same (section) name may cause collision when configuration is written to protobuf message or configuration file.
- set_value(value: str) None [source]¶
Set new option value.
This option type does not support direct assignment of
Config
value. Because this method is also used to assign default value (which is aConfig.name
), it accepts None or string argument that is interpreted as new Config name.None
value is translated to empty string.- Parameters:
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When None or empty string is passed and option value is required.
- Return type:
None
- class firebird.base.config.ConfigListOption(name: str, description: str, item_type: Type[Config], *, required: bool = False, separator: str | None = None)[source]¶
-
Configuration option with list of
Config
values.Important
This option is intended for configurable set of sub-configs of fixed type.
While the
value
attribute for this option is a list of instances of single class inherited fromConfig
, in other ways it behaves likeListOption
withstr
items that loads/saves only names of itsConfig
items (i.e. the section names). The actual I/O for sub-config options is delegated toConfig
instance that owns this option.Important
When option is read from
ConfigParser
, empty values are ignored.- __init__(name: str, description: str, item_type: Type[Config], *, required: bool = False, separator: str | None = None)[source]¶
- Parameters:
name (str) – Option name.
description (str) – Option description. Can span multiple lines.
item_type (Type[Config]) – Datatype of list items. Must be subclass of
Config
.required (bool) – True if option must have a value.
separator (str | None) – String that separates values when options value is read from
ConfigParser
. It’s possible to use a line break as separator. If separator isNone
[default] and the value contains line breaks, it uses the line break as separator, otherwise it uses comma as separator.
- clear(*, to_default: bool = True) None [source]¶
Clears the option value.
- Parameters:
to_default (bool) – If True, sets the option value to default value, else to None.
- Return type:
None
- load_proto(proto: ConfigProto) None [source]¶
Deserialize value from
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message that may contains options value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- save_proto(proto: ConfigProto) None [source]¶
Serialize value into
ConfigProto
message.- Parameters:
proto (ConfigProto) – Protobuf message where option value should be stored.
- Return type:
None
- set_as_str(value: str) None [source]¶
Set new option value from string.
- Parameters:
value (str) – New option value.
- Raises:
ValueError – When the argument is not a valid option value.
- Return type:
None
- set_value(value: List) None [source]¶
Set new option value.
- Parameters:
value (List) – New option value.
- Raises:
TypeError – When the new value is of the wrong type.
ValueError – When the argument is not a valid option value.
- Return type:
None
- separator: str | None¶
String that separates values when options value is read from
ConfigParser
. Default separator is None. It’s possible to use a line break as separator. If separator isNone
and the value contains line breaks, it uses the line break as separator, otherwise it uses comma as separator.
Functions¶
- firebird.base.config.has_verticals(value: str) bool [source]¶
Returns True if lines in multiline string contains leading ‘|’ character.