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

1from pathlib import Path 

2from typing import Dict, List, Optional, Union 

3 

4 

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 

8 

9 

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() 

24 

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 

30 

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] = [] 

35 

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) 

54 

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") 

59 

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) 

64 

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 

69 

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"