Coverage for opt/mealie/lib/python3.12/site-packages/mealie/services/scheduler/tasks/purge_group_exports.py: 29%
32 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 15:32 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 15:32 +0000
1import datetime 1a
2from pathlib import Path 1a
4from sqlalchemy import cast, select 1a
6from mealie.core import root_logger 1a
7from mealie.core.config import get_app_dirs 1a
8from mealie.db.db_setup import session_context 1a
9from mealie.db.models._model_utils.datetime import NaiveDateTime 1a
10from mealie.db.models.group.exports import GroupDataExportsModel 1a
12ONE_DAY_AS_MINUTES = 1440 1a
15def purge_group_data_exports(max_minutes_old=ONE_DAY_AS_MINUTES): 1a
16 """Purges all group exports after x days"""
17 logger = root_logger.get_logger()
19 logger.debug("purging group data exports")
20 limit = datetime.datetime.now(datetime.UTC) - datetime.timedelta(minutes=max_minutes_old)
22 with session_context() as session:
23 stmt = select(GroupDataExportsModel).filter(cast(GroupDataExportsModel.expires, NaiveDateTime) <= limit)
24 results = session.execute(stmt).scalars().all()
26 total_removed = 0
27 for result in results:
28 session.delete(result)
29 Path(result.path).unlink(missing_ok=True)
30 total_removed += 1
32 session.commit()
34 logger.info(f"finished purging group data exports. {total_removed} exports removed from group data")
37def purge_excess_files() -> None: 1a
38 """Purges all files in the uploads directory that are older than 2 days"""
39 directories = get_app_dirs()
40 logger = root_logger.get_logger()
42 limit = datetime.datetime.now(datetime.UTC) - datetime.timedelta(minutes=ONE_DAY_AS_MINUTES * 2)
44 for file in directories.GROUPS_DIR.glob("**/export/*.zip"):
45 # TODO: fix comparison types
46 if file.stat().st_mtime < limit: # type: ignore
47 file.unlink()
48 logger.debug(f"excess group file removed '{file}'")
50 logger.info("finished purging excess files")