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
« prev ^ index » next coverage.py v7.5.4, created at 2024-07-07 01:03 +0200
1from pathlib import Path
2from typing import List
4import os
6from rsnapshot_docker_compose_backup.config.container_config import ContainerConfig
7from rsnapshot_docker_compose_backup.structure.volume import Volume
10class Container:
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
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)
70 def __str__(self) -> str:
71 return "Container {} in folder {}".format(self.service_name, self.folder)
73 def __repr__(self) -> str:
74 return "Container {} in folder {}".format(self.service_name, self.folder)
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