Coverage for src/rsnapshot_docker_compose_backup/structure/container.py: 31%

36 statements  

« prev     ^ index     » next       coverage.py v7.5.4, created at 2024-07-07 01:03 +0200

1from pathlib import Path 

2from typing import List 

3 

4import os 

5 

6from rsnapshot_docker_compose_backup.config.container_config import ContainerConfig 

7from rsnapshot_docker_compose_backup.structure.volume import Volume 

8 

9 

10class Container: 

11 

12 def __init__( 

13 self, 

14 *, 

15 folder: Path, 

16 service_name: str, 

17 container_name: str, 

18 container_id: str, 

19 running: bool, 

20 volumes: List[Volume], 

21 image: str, 

22 docker_compose_file: Path, 

23 ): 

24 self.folder: Path = folder 

25 self.service_name = service_name 

26 self.container_name = container_name 

27 self.container_id = container_id 

28 self.project_name = os.path.basename(folder) 

29 self.image = image 

30 self.backup_config: Path = self.folder / "backup.ini" 

31 self.volumes = volumes 

32 self.is_running = running 

33 self.docker_compose_file: Path = docker_compose_file 

34 

35 def backup(self) -> str: 

36 result: List[str] = [] 

37 config = ContainerConfig( 

38 { 

39 "$serviceName": self.service_name, 

40 "$containerID": self.container_id, 

41 "$containerName": self.container_name, 

42 "$projectFolder": str(self.folder), 

43 "$volumes": self.volumes, 

44 "$image": self.image, 

45 "$projectName": self.project_name, 

46 "$dockerComposeFile": str(self.docker_compose_file), 

47 }, 

48 is_running=self.is_running, 

49 service_name=self.service_name, 

50 config_file=self.backup_config, 

51 ) 

52 output = config.output() 

53 if output is None: 

54 # print("output is none") 

55 return "" 

56 result.append( 

57 "##Start backup for compose project {} - service {}".format( 

58 self.project_name, self.service_name 

59 ) 

60 ) 

61 result.append(output) 

62 result.append( 

63 "##End backup for compose project {} - service {}".format( 

64 self.project_name, self.service_name 

65 ) 

66 ) 

67 result.append("") 

68 return "\n".join(result) 

69 

70 def __str__(self) -> str: 

71 return "Container {} in folder {}".format(self.service_name, self.folder) 

72 

73 def __repr__(self) -> str: 

74 return "Container {} in folder {}".format(self.service_name, self.folder) 

75 

76 def __lt__(self, other: "Container") -> bool: 

77 if self.project_name != other.project_name: 

78 return self.project_name < other.project_name 

79 return self.service_name < other.service_name