mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-14 11:53:11 -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:
41
mealie/services/exporter/recipe_exporter.py
Normal file
41
mealie/services/exporter/recipe_exporter.py
Normal file
@@ -0,0 +1,41 @@
|
||||
from typing import Iterator
|
||||
from uuid import UUID
|
||||
|
||||
from mealie.db.database import Database
|
||||
from mealie.schema.recipe import Recipe
|
||||
|
||||
from ._abc_exporter import ABCExporter, ExportedItem
|
||||
|
||||
|
||||
class RecipeExporter(ABCExporter):
|
||||
def __init__(self, db: Database, group_id: UUID, recipes: list[str]) -> None:
|
||||
"""
|
||||
RecipeExporter is used to export a list of recipes to a zip file. The zip
|
||||
file is then saved to a temporary directory and then available for a one-time
|
||||
download.
|
||||
|
||||
Args:
|
||||
db (Database):
|
||||
group_id (int):
|
||||
recipes (list[str]): Recipe Slugs
|
||||
"""
|
||||
super().__init__(db, group_id)
|
||||
self.recipes = recipes
|
||||
|
||||
@property
|
||||
def destination_dir(self) -> str:
|
||||
return "recipes"
|
||||
|
||||
def items(self) -> Iterator[ExportedItem]:
|
||||
for slug in self.recipes:
|
||||
yield ExportedItem(
|
||||
name=slug,
|
||||
model=self.db.recipes.multi_query({"slug": slug, "group_id": self.group_id}, limit=1)[0],
|
||||
)
|
||||
|
||||
def _post_export_hook(self, item: Recipe) -> None:
|
||||
"""Copy recipe directory contents into the zip folder"""
|
||||
recipe_dir = item.directory
|
||||
|
||||
if recipe_dir.exists():
|
||||
self.write_dir_to_zip(recipe_dir, f"{self.destination_dir}/{item.slug}", {".json"})
|
||||
Reference in New Issue
Block a user