58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
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) |