diff --git a/src/unisync/config.py b/src/unisync/config.py index 357bf7e..3294807 100644 --- a/src/unisync/config.py +++ b/src/unisync/config.py @@ -7,16 +7,18 @@ from pathlib import Path import ipaddress import configparser +from unisync.defaults import * + @dataclass class ServerConfig: """ Dataclass keeping the config for connecting to the server """ user: str - sshargs: str = "" - hostname: str = "" - ip: str = "" - port: int = 22 + sshargs: str + hostname: str + ip: str + port: int def __post_init__(self): """ @@ -44,15 +46,15 @@ class UnisonConfig: """ Dataclass keeping unison specific configurations """ - bools: list = field(default_factory=list) - values: dict = field(default_factory=dict) + bools: list + values: dict @dataclass class OtherConfig: """ Dataclass keeping miscellanous configuration options """ - cache_dir_path: Path = Path("~/.unisync").expanduser() + cache_dir_path: Path @dataclass class Config: @@ -62,7 +64,7 @@ class Config: server: ServerConfig roots: RootsConfig unison: UnisonConfig - other: OtherConfig = field(default_factory=OtherConfig) + other: OtherConfig def load_config(config_path:str) -> Config: @@ -79,18 +81,22 @@ def load_config(config_path:str) -> Config: # Check if sections are provided server_section = "Server" if "Server" in config.sections() else UNNAMED_SECTION roots_section = "Roots" if "Roots" in config.sections() else UNNAMED_SECTION + other_section = "Other" if "Other" in config.sections() else UNNAMED_SECTION server_config = ServerConfig( config.get(server_section, "user"), - config.get(server_section, "sshargs", fallback=""), - config.get(server_section, "hostname", fallback=""), - config.get(server_section, "ip", fallback=""), - config.getint(server_section, "port", fallback=22) + config.get(server_section, "sshargs", fallback=DEFAULT_SERVER_SSHARGS), + config.get(server_section, "hostname", fallback=DEFAULT_SERVER_HOSTNAME), + config.get(server_section, "ip", fallback=DEFAULT_SERVER_IP), + config.getint(server_section, "port", fallback=DEFAULT_SERVER_PORT) ) roots_config = RootsConfig( - config.get(roots_section, "local"), + config.get(roots_section, "local", fallback=DEFAULT_ROOTS_LOCAL), config.get(roots_section, "remote") ) + other_config = OtherConfig( + config.get(other_section, "cache_dir_path", fallback=DEFAULT_MISC_CACHE_DIR_PATH) + ) args_bool = list() args_val = dict() @@ -104,4 +110,4 @@ def load_config(config_path:str) -> Config: args_val[key] = val unison_config = UnisonConfig(args_bool, args_val) - return Config(server_config, roots_config, unison_config) + return Config(server_config, roots_config, unison_config, other_config) diff --git a/src/unisync/defaults.py b/src/unisync/defaults.py new file mode 100644 index 0000000..3afa0d6 --- /dev/null +++ b/src/unisync/defaults.py @@ -0,0 +1,18 @@ +# copyright (c) 2026 paul retourné +# spdx-license-identifier: gpl-3.0-or-later + +from pathlib import Path + +# Commented out values are part of the config but are required so there is no defaults. +# This allows this file to be a list of all the config options. + +# DEFAULT_SERVER_USER: str = "" +DEFAULT_SERVER_SSHARGS: str = "" +DEFAULT_SERVER_HOSTNAME: str = "" +DEFAULT_SERVER_IP: str = "" +DEFAULT_SERVER_PORT: int = 22 + +DEFAULT_ROOTS_LOCAL: str = str(Path("~/files").expanduser()) +# DEFAULT_ROOTS_REMOTE: str = "" + +DEFAULT_MISC_CACHE_DIR_PATH: Path = Path("~/.unisync").expanduser()