Coverage for opt/mealie/lib/python3.12/site-packages/mealie/services/exporter/exporter.py: 100%
28 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 17:29 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 17:29 +0000
1import datetime 1a
2import shutil 1a
3import zipfile 1a
4from pathlib import Path 1a
5from uuid import UUID, uuid4 1a
7from mealie.pkgs.stats.fs_stats import pretty_size 1a
8from mealie.repos.all_repositories import AllRepositories 1a
9from mealie.schema.group.group_exports import GroupDataExport 1a
10from mealie.schema.user import GroupInDB 1a
12from .._base_service import BaseService 1a
13from ._abc_exporter import ABCExporter 1a
16class Exporter(BaseService): 1a
17 def __init__(self, group_id: UUID, temp_zip: Path, exporters: list[ABCExporter]) -> None: 1a
18 super().__init__()
20 self.group_id = group_id
21 self.temp_path = temp_zip
22 self.exporters = exporters
24 def run(self, db: AllRepositories) -> GroupDataExport: 1a
25 # Create Zip File
26 self.temp_path.touch()
28 # Open Zip File
29 with zipfile.ZipFile(self.temp_path, "w") as zip:
30 for exporter in self.exporters:
31 exporter.export(zip)
33 export_id = uuid4()
35 export_path = GroupInDB.get_export_directory(self.group_id) / f"{export_id}.zip"
37 shutil.copy(self.temp_path, export_path)
39 group_data_export = GroupDataExport(
40 id=export_id,
41 group_id=self.group_id,
42 path=str(export_path),
43 name="Data Export",
44 size=pretty_size(export_path.stat().st_size),
45 filename=export_path.name,
46 expires=datetime.datetime.now(datetime.UTC) + datetime.timedelta(days=1),
47 )
49 db.group_exports.create(group_data_export)
51 return group_data_export