Adds unison config and test code

This adds the possiblity to pass configuration options directly to
unison via the configuration file.
Also adds some test code to main.py
This commit is contained in:
2025-07-11 00:30:05 +02:00
parent c980dc352a
commit 14eb531e4a
2 changed files with 44 additions and 3 deletions

View File

@@ -1,10 +1,10 @@
# Copyright (C) 2025 Paul Retourné # Copyright (C) 2025 Paul Retourné
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from configparser import UNNAMED_SECTION
from dataclasses import dataclass, field from dataclasses import dataclass, field
import ipaddress import ipaddress
import configparser import configparser
from configparser import UNNAMED_SECTION
@dataclass @dataclass
class ServerConfig: class ServerConfig:
@@ -29,10 +29,16 @@ class RootsConfig:
local: str local: str
remote: str remote: str
@dataclass
class UnisonConfig:
bools: list = field(default_factory=list)
values: dict = field(default_factory=dict)
@dataclass @dataclass
class Config: class Config:
server: ServerConfig server: ServerConfig
roots: RootsConfig roots: RootsConfig
unison: UnisonConfig
def load_config(config_path:str) -> Config: def load_config(config_path:str) -> Config:
""" """
@@ -42,7 +48,7 @@ def load_config(config_path:str) -> Config:
Returns: Returns:
Config: A populated Config object containing the loaded config. Config: A populated Config object containing the loaded config.
""" """
config = configparser.ConfigParser(allow_unnamed_section=True) config = configparser.ConfigParser(allow_unnamed_section=True, allow_no_value=True)
config.read(config_path) config.read(config_path)
# Check if sections are provided # Check if sections are provided
@@ -60,4 +66,17 @@ def load_config(config_path:str) -> Config:
config.get(roots_section, "local"), config.get(roots_section, "local"),
config.get(roots_section, "remote") config.get(roots_section, "remote")
) )
return Config(server_config, roots_config)
args_bool = list()
args_val = dict()
if "Unison" in config.sections():
for key, val in config.items("Unison"):
if key in config["DEFAULT"].keys():
continue
elif val == "" or val == None:
args_bool.append(key)
else:
args_val[key] = val
unison_config = UnisonConfig(args_bool, args_val)
return Config(server_config, roots_config, unison_config)

View File

@@ -4,6 +4,7 @@
import os import os
from argparser import create_argparser from argparser import create_argparser
from config import RootsConfig, ServerConfig, Config, load_config from config import RootsConfig, ServerConfig, Config, load_config
from synchroniser import Synchroniser
def main(): def main():
parser = create_argparser() parser = create_argparser()
@@ -18,5 +19,26 @@ def main():
# TODO make the command line arguments work and override the config options # TODO make the command line arguments work and override the config options
pass pass
synchroniser = Synchroniser(
config.roots.remote,
config.roots.local,
config.server.user,
config.server.ip if config.server.ip != "" else config.server.hostname,
config.server.port,
config.unison.bools,
config.unison.values
)
if synchroniser.create_ssh_master_connection() != 0:
print("Connection failed quitting")
return 1
print("Connected to the remote.")
synchroniser.sync_files(["salut"])
synchroniser.close_ssh_master_connection()
if __name__ == "__main__": if __name__ == "__main__":
main() main()