diff --git a/home_backup/user_service/backups.py b/home_backup/user_service/backups.py new file mode 100644 index 0000000..2ffa2f9 --- /dev/null +++ b/home_backup/user_service/backups.py @@ -0,0 +1,58 @@ +from .. import utils + + +class Backup(): + name:str + periode:int + blocked:set + + def __init__(self, name:str, periode:int=None, blocked:list=[]): + # Check args + utils.valid_name_check(name) + if periode is not None and not isinstance(periode, int): + raise TypeError("Periode have to be an integer or null.") + if periode is not None and periode < 0: + raise ValueError("periode can't be negetive.") + blocked = set(blocked) + for i in blocked: + utils.valid_name_check(i) + + # Set values + self.name = name + self.periode = periode + self.blocks = blocked + + def get_next_scedule(self, latest, zero): + if self.periode is not None: + tmp = (latest - zero) // self.periode + return zero + self.periode * (tmp + 1) + else: + raise NotImplementedError("No implemented types.") + + def dump_config(self): + result = {} + if self.blocked: + result["blocked"] = ",".join(self.blocked) + if self.periode is not None: + result["periode"] = str(self.periode) + return result + + @staticmethod + def load_backup(name:str, config): + # Load informations + config = dict(config.items()) + + periode = None + if "periode" in config: + periode = int(config["periode"]) + del config["periode"] + + blocked = [] + if "blocked" in config: + blocked = config["blocked"].split(",") + del config["blocked"] + + # Generate backup + utils.check_empty_data_dict(config) + + return Backup(name=name, periode=periode, blocked=blocked) \ No newline at end of file diff --git a/home_backup/user_service/config.py b/home_backup/user_service/config.py index b7cc671..8179c3b 100644 --- a/home_backup/user_service/config.py +++ b/home_backup/user_service/config.py @@ -4,8 +4,8 @@ import configparser import io import os import time +from .backups import Backup from .remotes import Remote -from .. import utils # Config @@ -17,35 +17,6 @@ else: CONFIG_FILE = os.path.join(CONFIG_FILE, "home-backup.conf") # TODO: Set own config dir -class Backup(): - name:str - periode:int - blocked:set - - def __init__(self, name:str, periode:int=None, blocked:list=[]): - # Check args - utils.valid_name_check(name) - if periode is not None and not isinstance(periode, int): - raise TypeError("Periode have to be an integer or null.") - if periode is not None and periode < 0: - raise ValueError("periode can't be negetive.") - blocked = set(blocked) - for i in blocked: - utils.valid_name_check(i) - - # Set values - self.name = name - self.periode = periode - self.blocks = blocked - - def get_next_scedule(self, latest, zero): - if self.periode is not None: - tmp = (latest - zero) // self.periode - return zero + self.periode * (tmp + 1) - else: - raise NotImplementedError("No implemented types.") - - backups = [] remotes = {} config_lock = asyncio.Lock() @@ -60,13 +31,7 @@ if os.path.exists(CONFIG_FILE): for iID, i in filter(lambda x: x[0] != "DEFAULT", config.items()): if iID.startswith("BACKUP|"): # Parse backup config iID = iID[len("BACKUP|"):] - periode = None - if "periode" in i: - periode = int(i["periode"]) - blocked = [] - if "blocked" in i: - blocked = i["blocked"].split(",") - backups.append(Backup(iID, periode=periode, blocked=blocked)) + backups.append(Backup.load_backup(iID, i)) elif iID.startswith("REMOTE|"): # Parse remote config iID = iID[len("REMOTE|"):] tmp = Remote.load_remote(iID, i) @@ -85,12 +50,7 @@ async def save_config(): for i in backups: if not isinstance(i, Backup): raise ValueError("backups contains a non backup config entry.") - backup_data = { - "blocked": ",".join(i.blocked) - } - if i.periode is not None: - backup_data["periode"] = str(i.periode) - config["BACKUP|%s" % i.name] = backup_data + config["BACKUP|%s" % i.name] = i.dump_config() # Add remotes for i in remotes.values():