mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-09 09:23:12 -05:00
feat: ✨ add user recipe export functionality (#845)
* feat(frontend): ✨ add user recipe export functionality * remove depreciated folders * change/remove depreciated folders * add testing variable in config * add GUID support for group_id * improve testing feedback on 422 errors * remove/cleanup files/folders * initial user export support * delete unused css * update backup page UI * remove depreciated settings * feat: ✨ export download links * fix #813 * remove top level statements * show footer * add export purger to scheduler * update purge glob * fix meal-planner lockout * feat: ✨ add bulk delete/purge exports * style(frontend): 💄 update UI for site settings * feat: ✨ add version checker * update documentation Co-authored-by: hay-kot <hay-kot@pm.me>
This commit is contained in:
@@ -15,7 +15,7 @@ CWD = Path(__file__).parent
|
||||
|
||||
app_dirs = get_app_dirs()
|
||||
TEMP_DATA = app_dirs.DATA_DIR / ".temp"
|
||||
SCHEDULER_DB = TEMP_DATA / "scheduler.db"
|
||||
SCHEDULER_DB = CWD / ".scheduler.db"
|
||||
SCHEDULER_DATABASE = f"sqlite:///{SCHEDULER_DB}"
|
||||
|
||||
MINUTES_DAY = 1440
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from .auto_backup import *
|
||||
from .purge_events import *
|
||||
from .purge_group_exports import *
|
||||
from .purge_password_reset import *
|
||||
from .purge_registration import *
|
||||
from .webhooks import *
|
||||
|
||||
46
mealie/services/scheduler/tasks/purge_group_exports.py
Normal file
46
mealie/services/scheduler/tasks/purge_group_exports.py
Normal file
@@ -0,0 +1,46 @@
|
||||
import datetime
|
||||
from pathlib import Path
|
||||
|
||||
from mealie.core import root_logger
|
||||
from mealie.core.config import get_app_dirs
|
||||
from mealie.db.db_setup import create_session
|
||||
from mealie.db.models.group.exports import GroupDataExportsModel
|
||||
|
||||
ONE_DAY_AS_MINUTES = 1440
|
||||
|
||||
|
||||
def purge_group_data_exports(max_minutes_old=ONE_DAY_AS_MINUTES):
|
||||
"""Purges all group exports after x days"""
|
||||
logger = root_logger.get_logger()
|
||||
|
||||
logger.info("purging group data exports")
|
||||
limit = datetime.datetime.now() - datetime.timedelta(minutes=max_minutes_old)
|
||||
session = create_session()
|
||||
|
||||
results = session.query(GroupDataExportsModel).filter(GroupDataExportsModel.expires <= limit)
|
||||
|
||||
total_removed = 0
|
||||
for result in results:
|
||||
session.delete(result)
|
||||
Path(result.path).unlink(missing_ok=True)
|
||||
total_removed += 1
|
||||
|
||||
session.commit()
|
||||
session.close()
|
||||
|
||||
logger.info(f"finished purging group data exports. {total_removed} exports removed from group data")
|
||||
|
||||
|
||||
def purge_excess_files() -> None:
|
||||
"""Purges all files in the uploads directory that are older than 2 days"""
|
||||
directories = get_app_dirs()
|
||||
logger = root_logger.get_logger()
|
||||
|
||||
limit = datetime.datetime.now() - datetime.timedelta(minutes=ONE_DAY_AS_MINUTES * 2)
|
||||
|
||||
for file in directories.GROUPS_DIR.glob("**/export/*.zip"):
|
||||
if file.stat().st_mtime < limit:
|
||||
file.unlink()
|
||||
logger.info(f"excess group file removed '{file}'")
|
||||
|
||||
logger.info("finished purging excess files")
|
||||
Reference in New Issue
Block a user