mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-04 06:53:12 -05:00
* update naming * refactor tests to use shared structure * shorten names * add tools test case * refactor to support multi-tenant * set group_id on creation * initial refactor for multitenant tags/cats * spelling * additional test case for same valued resources * fix recipe update tests * apply indexes to foreign keys * fix performance regressions * handle unknown exception * utility decorator for function debugging * migrate recipe_id to UUID * GUID for recipes * remove unused import * move image functions into package * move utilities to packages dir * update import * linter * image image and asset routes * update assets and images to use UUIDs * fix migration base * image asset test coverage * use ids for categories and tag crud functions * refactor recipe organizer test suite to reduce duplication * add uuid serlization utility * organizer base router * slug routes testing and fixes * fix postgres error * adopt UUIDs * move tags, categories, and tools under "organizers" umbrella * update composite label * generate ts types * fix import error * update frontend types * fix type errors * fix postgres errors * fix #978 * add null check for title validation * add note in docs on multi-tenancy
91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
import json
|
|
from pathlib import Path
|
|
|
|
import yaml
|
|
from pydantic import UUID4
|
|
|
|
from mealie.services.recipe.recipe_data_service import RecipeDataService
|
|
|
|
|
|
class MigrationReaders:
|
|
@staticmethod
|
|
def json(json_file: Path) -> dict:
|
|
with open(json_file, "r") as f:
|
|
return json.loads(f.read())
|
|
|
|
@staticmethod
|
|
def yaml(yaml_file: Path) -> dict:
|
|
"""A helper function to read in a yaml file from a Path. This assumes that the
|
|
first yaml document is the recipe data and the second, if exists, is the description.
|
|
|
|
Args:
|
|
yaml_file (Path): Path to yaml file
|
|
|
|
Returns:
|
|
dict: representing the yaml file as a dictionary
|
|
"""
|
|
with open(yaml_file, "r") as f:
|
|
contents = f.read().split("---")
|
|
recipe_data = {}
|
|
for document in contents:
|
|
# Check if None or Empty String
|
|
if document is None or document == "":
|
|
continue
|
|
|
|
# Check if 'title:' present
|
|
elif "title:" in document:
|
|
recipe_data.update(yaml.safe_load(document))
|
|
|
|
else:
|
|
recipe_data["description"] = document
|
|
|
|
return recipe_data
|
|
|
|
|
|
def split_by_comma(tag_string: str):
|
|
"""Splits a single string by ',' performs a line strip and then title cases the resulting string
|
|
|
|
Args:
|
|
tag_string (str): [description]
|
|
|
|
Returns:
|
|
[type]: [description]
|
|
"""
|
|
if not isinstance(tag_string, str):
|
|
return None
|
|
return [x.title().lstrip() for x in tag_string.split(",") if x != ""]
|
|
|
|
|
|
def glob_walker(directory: Path, glob_str: str, return_parent=True) -> list[Path]: # TODO:
|
|
"""A Helper function that will return the glob matches for the temporary directotry
|
|
that was unpacked and passed in as the `directory` parameter. If `return_parent` is
|
|
True the return Paths will be the parent directory for the file that was matched. If
|
|
false the file itself will be returned.
|
|
|
|
Args:
|
|
directory (Path): Path to search directory
|
|
glob_str ([type]): glob style match string
|
|
return_parent (bool, optional): To return parent directory of match. Defaults to True.
|
|
|
|
Returns:
|
|
list[Path]:
|
|
"""
|
|
directory = directory if isinstance(directory, Path) else Path(directory)
|
|
matches = []
|
|
for match in directory.glob(glob_str):
|
|
if return_parent:
|
|
matches.append(match.parent)
|
|
else:
|
|
matches.append(match)
|
|
|
|
return matches
|
|
|
|
|
|
def import_image(src: Path, recipe_id: UUID4):
|
|
"""Read the successful migrations attribute and for each import the image
|
|
appropriately into the image directory. Minification is done in mass
|
|
after the migration occurs.
|
|
"""
|
|
data_service = RecipeDataService(recipe_id=recipe_id)
|
|
data_service.write_image(src, src.suffix)
|