diff --git a/.gitignore b/.gitignore index b89f631..e10442b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ test.php **/__pycache__ database.db* .idea -db_fixtures \ No newline at end of file +db_fixtures +backups \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 6794787..45688e1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "meal-manager" -version = "0.1.0" +version = "0.2.0" description = "Add your description here" readme = "README.md" requires-python = "~=3.13.0" @@ -25,7 +25,7 @@ dev = [ [project.scripts] apply-subscriptions = "meal_manager.scripts:apply_subscriptions_cli" - +meal-manager-nightly = "meal_manager.scripts:run_nightly_tasks" [tool.isort] profile = "black" diff --git a/src/meal_manager/scripts.py b/src/meal_manager/scripts.py index 0e93c1c..309a913 100644 --- a/src/meal_manager/scripts.py +++ b/src/meal_manager/scripts.py @@ -1,13 +1,36 @@ import argparse import datetime +import os +import shutil +from pathlib import Path -from sqlalchemy import Date, cast, func, select +from sqlalchemy import func, select from sqlalchemy.orm import Session -from meal_manager.main import engine +from meal_manager.main import engine, sqlite_file_name from meal_manager.models import Event, Registration, Subscription +def backup_db(): + backup_dir = Path(os.environ.get("MEAL_MANAGER_BACKUP_DIR", None)) + shutil.copy2( + sqlite_file_name, + backup_dir / f"{sqlite_file_name}.{datetime.datetime.now().isoformat()}", + ) + # TODO: Delete old backups + + +def run_nightly_tasks(): + print("Applying Subscriptions") + with Session(engine) as session: + apply_subscriptions(session) + + print("Running db backup") + backup_db() + + print("Done running nightly tasks.") + + def apply_subscriptions(session: Session, event: Event = None, dry_run: bool = False): subscriptions = session.scalars(select(Subscription)).all() diff --git a/uv.lock b/uv.lock index c2d7f59..c73f6c7 100644 --- a/uv.lock +++ b/uv.lock @@ -359,7 +359,7 @@ wheels = [ [[package]] name = "meal-manager" -version = "0.1.0" +version = "0.2.0" source = { editable = "." } dependencies = [ { name = "alembic" },