Python Toolbox
Python toolbox that provides a timer and a configuration parser.
Installation
To install this module run:
pip install teklia-toolbox
Timer
Wrapper that calculates the execution time of instructions. This information is stored in the delta
attribute which is of type datetime.timedelta.
from teklia_toolbox.time import Timer
with Timer() as t:
# Some code
pass
print(f'These instructions took {t.delta}')
Configuration parser
ConfigParser
The ConfigParser
class allows to instantiate a parser. It takes as argument:
- a boolean
allow_extra_keys
to specify if the parser should ignore extra unspecified keys instead of causing errors (default toTrue
)
Add option
The add_option
function allows to add parameter to the parser. It takes as argument:
- a parameter
name
- a parameter
type
(which must be callable) (default tostr
) - a
many
boolean to specify if the parameter can have a list of values (default toFalse
) - a
default
value (default toobject()
)
Add subparser
The add_subparser
function adds a parser as a new option to the initial parser, to allow finer control over nested configuration options. It takes the same arguments as the ConfigParser
class and the add_option
function.
Parse data
The parse_data
function parses configuration data from a dict. It will raise ConfigurationError
if any error is detected. Otherwise it returns a dictionary. It takes as argument:
-
data
of type Mapping
Parse
The parse
function parses configuration data from a yaml file. It will raise ConfigurationError
if any error is detected. Otherwise it returns a dictionary. It takes as argument:
- a
path
to the yaml file - a boolean
exist_ok
to specify if the parser should ignore a non-existing file (default toFalse
)
from teklia_toolbox.config import ConfigParser
parser = ConfigParser()
parser.add_option('names', type=str, many=True, default=[])
parser.add_option('pseudo', type=str) # Required
parser.add_option('age', type=int, default=21)
parents_parser = parser.add_subparser('parents', default={})
mother_parser = parents_parser.add_subparser('mother', default={})
mother_parser.add_option('name', type=str, default=None)
mother_parser.add_option('age', type=int, default=None)
father_parser = parents_parser.add_subparser('father', default={})
father_parser.add_option('name', type=str, default=None)
father_parser.add_option('age', type=int, default=None)
# This will return
# {
# 'names': ['Pierre', 'Dupont'],
# 'pseudo': 'BoumBoum',
# 'age': 21,
# 'parents': {
# 'mother': {
# 'name': 'Marie',
# 'age': None
# },
# 'father': {
# 'name': None,
# 'age': None
# }
# }
# }
parser.parse_data({
'names': ['Pierre', 'Dupont'],
'pseudo': 'BoumBoum',
'parents': {
'mother': {
'name' : 'Marie'
}
}
})
ConfigurationError
The ConfigurationError
class inherits from the ValueError class. This type of error is raised if the parser finds errors during parsing.
from teklia_toolbox.config import ConfigurationError
raise ConfigurationError("Oops..")
dir_path and file_path
The dir_path
and file_path
functions allow you to easily add path or file parameters to the parser.
from teklia_toolbox.config import ConfigParser
from teklia_toolbox.config import dir_path, file_path
parser = ConfigParser()
parser.add_option('root_path', type=dir_path, default=None)
parser.add_option('csv_file', type=file_path, default=None)
# This will return
# {
# 'root_path': PosixPath('/sweet/home'),
# 'csv_file': PosixPath('/coucou.csv')
# }
parser.parse_data({
'root_path': '/sweet/home/',
'csv_file': './coucou.csv'
})