Source code for twindb_backup.configuration.compression
"""Compression configuration"""
from twindb_backup.configuration.exceptions import ConfigurationError
from twindb_backup.modifiers import COMPRESSION_MODIFIERS
[docs]class CompressionConfig:
"""Compression configuration
:param program: compression program
:type program: str
:param threads: number of threads
:type threads: int
:param level: compression level
:type level: int
"""
def __init__(self, **kwargs):
self._program = kwargs.get("program", list(COMPRESSION_MODIFIERS.keys())[0])
if self.program not in COMPRESSION_MODIFIERS:
raise ConfigurationError(f"Unsupported compression tool {self.program}")
self._threads = int(kwargs.get("threads")) if "threads" in kwargs else None
self._level = int(kwargs.get("level")) if "level" in kwargs else None
@property
def program(self):
"""Compression program."""
return self._program
@property
def threads(self):
"""Number of threads to use."""
return self._threads
@property
def level(self):
"""Compression level."""
return self._level
[docs] def get_modifier(self, stream):
"""
Build a compression modifier based on the given configuration
:param stream: stream to compress
:return: compression modifier
:rtype: Modifier
"""
kwargs = {
key: getattr(self, key)
for key in COMPRESSION_MODIFIERS[self.program]["kwargs"]
if getattr(self, key) is not None
}
return COMPRESSION_MODIFIERS[self.program]["class"](stream, **kwargs)