diff --git a/docs/docs/site-administration/backups-and-exports.md b/docs/docs/site-administration/backups-and-exports.md index 24f9762f2c5c..d09ea18e0c0e 100644 --- a/docs/docs/site-administration/backups-and-exports.md +++ b/docs/docs/site-administration/backups-and-exports.md @@ -38,16 +38,24 @@ curl -X 'POST' \ "settings": true, "themes": true }, - "template": [ + "templates": [ "recipes.md" ] }' ``` ### wget Example -Download a backup with `wget` +First request a file token with curl: ```bash -wget http://localhost:9000/api/backups/{file_name}/download +curl -X 'GET' \ + 'http://localhost:9000/api/backups/{file_name}/download' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' +``` + +Then download the file with wget: +```bash +wget http://localhost:9000/api/utils/download?token={fileToken} ``` diff --git a/mealie/routes/utility_routes.py b/mealie/routes/utility_routes.py index 6f30128ab75e..b339f6a14596 100644 --- a/mealie/routes/utility_routes.py +++ b/mealie/routes/utility_routes.py @@ -9,7 +9,7 @@ from fastapi import HTTPException, status router = APIRouter(prefix="/api/utils", tags=["Utils"], include_in_schema=True) -@router.get("/download") +@router.get("/download/{token}") async def download_file(file_path: Optional[Path] = Depends(validate_file_token)): """Uses a file token obtained by an active user to retrieve a file from the operating system.""" diff --git a/mealie/services/backups/exports.py b/mealie/services/backups/exports.py index f2feaca58459..28563464e171 100644 --- a/mealie/services/backups/exports.py +++ b/mealie/services/backups/exports.py @@ -52,21 +52,22 @@ class ExportDatabase: dir.mkdir(parents=True, exist_ok=True) def export_templates(self, recipe_list: list[BaseModel]): - for template_path in self.templates: - out_dir = self.templates_dir.joinpath(template_path.name) - out_dir.mkdir(parents=True, exist_ok=True) + if self.templates: + for template_path in self.templates: + out_dir = self.templates_dir.joinpath(template_path.name) + out_dir.mkdir(parents=True, exist_ok=True) - with open(template_path, "r") as f: - template = Template(f.read()) + with open(template_path, "r") as f: + template = Template(f.read()) - for recipe in recipe_list: - filename = recipe.slug + template_path.suffix - out_file = out_dir.joinpath(filename) + for recipe in recipe_list: + filename = recipe.slug + template_path.suffix + out_file = out_dir.joinpath(filename) - content = template.render(recipe=recipe) + content = template.render(recipe=recipe) - with open(out_file, "w") as f: - f.write(content) + with open(out_file, "w") as f: + f.write(content) def export_recipe_dirs(self): shutil.copytree(app_dirs.RECIPE_DATA_DIR, self.recipes, dirs_exist_ok=True)