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 15:32 +0000

1import datetime 1a

2import shutil 1a

3import zipfile 1a

4from pathlib import Path 1a

5from uuid import UUID, uuid4 1a

6 

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

11 

12from .._base_service import BaseService 1a

13from ._abc_exporter import ABCExporter 1a

14 

15 

16class Exporter(BaseService): 1a

17 def __init__(self, group_id: UUID, temp_zip: Path, exporters: list[ABCExporter]) -> None: 1a

18 super().__init__() 

19 

20 self.group_id = group_id 

21 self.temp_path = temp_zip 

22 self.exporters = exporters 

23 

24 def run(self, db: AllRepositories) -> GroupDataExport: 1a

25 # Create Zip File 

26 self.temp_path.touch() 

27 

28 # Open Zip File 

29 with zipfile.ZipFile(self.temp_path, "w") as zip: 

30 for exporter in self.exporters: 

31 exporter.export(zip) 

32 

33 export_id = uuid4() 

34 

35 export_path = GroupInDB.get_export_directory(self.group_id) / f"{export_id}.zip" 

36 

37 shutil.copy(self.temp_path, export_path) 

38 

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 ) 

48 

49 db.group_exports.create(group_data_export) 

50 

51 return group_data_export