Coverage for src/rsnapshot_docker_compose_backup/config/container_config.py: 24%
55 statements
« prev ^ index » next coverage.py v7.5.4, created at 2024-07-07 01:03 +0200
« prev ^ index » next coverage.py v7.5.4, created at 2024-07-07 01:03 +0200
1from pathlib import Path
2from typing import Dict, List, Optional, Union
5from rsnapshot_docker_compose_backup.structure.volume import Volume
6from rsnapshot_docker_compose_backup.config.abstract_config import AbstractConfig
7from rsnapshot_docker_compose_backup.config.default_config import DefaultConfig
10class ContainerConfig(AbstractConfig):
11 def __init__(
12 self,
13 container_vars: Dict[str, Union[str, list[Volume]]],
14 is_running: bool,
15 config_file: Path,
16 service_name: str,
17 ):
18 self.default_config: DefaultConfig = DefaultConfig.get_instance()
19 super().__init__(config_file, service_name)
20 for name, value in container_vars.items():
21 self.vars[name] = value
22 self._is_running = is_running
23 self.add_action_content()
25 def _all_vars(self) -> Dict[str, Union[str, List[Volume]]]:
26 variables: Dict[str, Union[str, List[Volume]]] = {}
27 variables.update(self.default_config.vars)
28 variables.update(self.vars)
29 return variables
31 def output(self) -> Optional[str]:
32 if self.default_config.settings["onlyRunning"] and not self._is_running:
33 return None
34 result: List[str] = []
36 for step in self.backupOrder:
37 backup_action = self.get_step(step)
38 if backup_action:
39 result.append("#{}".format(step))
40 for line in backup_action.splitlines():
41 script_command = self._resolve_vars(line, self._all_vars()).strip(
42 "\n"
43 )
44 single_commands: List[str] = []
45 if "\n" in script_command:
46 single_commands = script_command.split("\n")
47 else:
48 single_commands.append(script_command)
49 for command in single_commands:
50 self._log_time(result)
51 result.append(command)
52 self._log_time(result)
53 return "\n".join(result)
55 def _log_time(self, result: List[str]) -> None:
56 log_time = self.default_config.settings["logTime"]
57 if log_time:
58 result.append("backup_exec\t/bin/date +%s")
60 def get_step(self, step: str) -> str:
61 if self.backup_steps.get(step, ""):
62 return self.backup_steps.get(step, "")
63 return self.default_config.get_step(step)
65 def get_enabled_actions(self) -> Dict[str, bool]:
66 merged_dict = self.default_config.enabled_actions.copy()
67 merged_dict.update(self.enabled_actions)
68 return merged_dict
70 def add_action_content(self) -> None:
71 for action, enabled in sorted(self.get_enabled_actions().items()):
72 if enabled:
73 commands = self.default_config.get_action(action)
74 for step in commands:
75 self.backup_steps[step] += commands[step].strip() + "\n"