import configparser from pathlib import PurePath from typing import Callable from .levels import levels from .models import Algorithm config = configparser.RawConfigParser() config.read( filenames='./config.ini', encoding='utf-8', ) class Main: base_path = PurePath(config.get( section='Main', option='base_path', )) max_threads = config.getint( section='Main', option='max_threads', fallback=4, ) log_level = levels.get( config.get( section='Main', option='log_level', fallback='info', ).upper() ) class Input: path = PurePath(config.get( section='Input', option='path', )) class Output: path = PurePath(config.get( section='Output', option='path', )) dir_mode = int(config.get( section='Output', option='dir_mode', fallback='755', ), 8) file_mode = int(config.get( section='Output', option='file_mode', fallback='644', ), 8) class Wasm: class Source: enabled = config.getboolean( section='Output.Wasm.Source', option='enabled', fallback=True, ) path = PurePath(config.get( section='Output.Wasm.Source', option='path', fallback=PurePath('.', 'wasm', 'src'), )) class Brotli(Algorithm): compress: Callable name = 'Brotli' enabled = config.getboolean( section='Output.Wasm.Brotli', option='enabled', fallback=True, ) path = PurePath(config.get( section='Output.Wasm.Brotli', option='path', fallback=PurePath('.', 'wasm', 'br'), )) level = config.getint( section='Output.Wasm.Brotli', option='level', fallback=11, ) class Zstandard(Algorithm): compress: Callable name = 'Zstandard' enabled = config.getboolean( section='Output.Wasm.Zstandard', option='enabled', fallback=True, ) path = PurePath(config.get( section='Output.Wasm.Zstandard', option='path', fallback=PurePath('.', 'wasm', 'zstd'), )) level = config.getint( section='Output.Wasm.Zstandard', option='level', fallback=22, ) class Gzip(Algorithm): compress: Callable name = 'Gzip' enabled = config.getboolean( section='Output.Wasm.Gzip', option='enabled', fallback=True, ) path = PurePath(config.get( section='Output.Wasm.Gzip', option='path', fallback=PurePath('.', 'wasm', 'gzip'), )) level = config.getint( section='Output.Wasm.Gzip', option='level', fallback=9, ) class Deflate(Algorithm): compress: Callable name = 'Deflate' enabled = config.getboolean( section='Output.Wasm.Deflate', option='enabled', fallback=True, ) path = PurePath(config.get( section='Output.Wasm.Deflate', option='path', fallback=PurePath('.', 'wasm', 'deflate'), )) level = config.getint( section='Output.Wasm.Deflate', option='level', fallback=9, ) class Other: enabled = config.getboolean( section='Output.Other', option='enabled', fallback=True, ) path = PurePath(config.get( section='Output.Other', option='path', fallback=PurePath('.'), )) class Backup: enabled = config.getboolean( section='Backup', option='enabled', fallback=True, ) path = PurePath(config.get( section='Backup', option='path', fallback=PurePath(Main.base_path, 'backup'), )) Input.path = Main.base_path / Input.path Output.path = Main.base_path / Output.path Backup.path = Main.base_path / Backup.path Output.Wasm.Source.path = Output.path / Output.Wasm.Source.path Output.Wasm.Brotli.path = Output.path / Output.Wasm.Brotli.path Output.Wasm.Zstandard.path = Output.path / Output.Wasm.Zstandard.path Output.Wasm.Gzip.path = Output.path / Output.Wasm.Gzip.path Output.Wasm.Deflate.path = Output.path / Output.Wasm.Deflate.path Output.Other.path = Output.path / Output.Other.path