mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-11-04 03:28:28 -05:00 
			
		
		
		
	fix: Missing Paprika and Nextcloud Migration Data (#2434)
* fixed paprika url key * fixed paprika total and prep time aliases * added nextcloud time parsing * mapped paprika categories to tags * cleaned up netcloud parsetime
This commit is contained in:
		
							parent
							
								
									c783d86a2a
								
							
						
					
					
						commit
						c25b58e404
					
				@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					import re
 | 
				
			||||||
import tempfile
 | 
					import tempfile
 | 
				
			||||||
import zipfile
 | 
					import zipfile
 | 
				
			||||||
from dataclasses import dataclass
 | 
					from dataclasses import dataclass
 | 
				
			||||||
@ -43,7 +44,10 @@ class NextcloudMigrator(BaseMigrator):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        self.key_aliases = [
 | 
					        self.key_aliases = [
 | 
				
			||||||
            MigrationAlias(key="tags", alias="keywords", func=split_by_comma),
 | 
					            MigrationAlias(key="tags", alias="keywords", func=split_by_comma),
 | 
				
			||||||
            MigrationAlias(key="org_url", alias="url", func=None),
 | 
					            MigrationAlias(key="orgURL", alias="url", func=None),
 | 
				
			||||||
 | 
					            MigrationAlias(key="totalTime", alias="totalTime", func=parse_time),
 | 
				
			||||||
 | 
					            MigrationAlias(key="prepTime", alias="prepTime", func=parse_time),
 | 
				
			||||||
 | 
					            MigrationAlias(key="performTime", alias="cookTime", func=parse_time),
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _migrate(self) -> None:
 | 
					    def _migrate(self) -> None:
 | 
				
			||||||
@ -69,3 +73,24 @@ class NextcloudMigrator(BaseMigrator):
 | 
				
			|||||||
                    nc_dir = nextcloud_dirs[slug]
 | 
					                    nc_dir = nextcloud_dirs[slug]
 | 
				
			||||||
                    if nc_dir.image:
 | 
					                    if nc_dir.image:
 | 
				
			||||||
                        import_image(nc_dir.image, recipe_id)
 | 
					                        import_image(nc_dir.image, recipe_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def parse_time(time: str) -> str:
 | 
				
			||||||
 | 
					    """Parses a Nextcloud time string in the format 'PT{hours}H{minutes}M{seconds}S'"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # TODO: make singular and plural translatable
 | 
				
			||||||
 | 
					    hours = {"singular": "hour", "plural": "hours", "exp": r"\d+(?=H)"}
 | 
				
			||||||
 | 
					    minutes = {"singular": "minute", "plural": "minutes", "exp": r"\d+(?=M)"}
 | 
				
			||||||
 | 
					    seconds = {"singular": "second", "plural": "seconds", "exp": r"\d+(?=S)"}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return_strings: list[str] = []
 | 
				
			||||||
 | 
					    for time_part in [hours, minutes, seconds]:
 | 
				
			||||||
 | 
					        val_search = re.search(time_part["exp"], time)
 | 
				
			||||||
 | 
					        if not val_search:
 | 
				
			||||||
 | 
					            continue
 | 
				
			||||||
 | 
					        val = val_search.group()
 | 
				
			||||||
 | 
					        if val == "0":
 | 
				
			||||||
 | 
					            continue
 | 
				
			||||||
 | 
					        return_strings.append(f'{val} {time_part["singular"] if val == "1" else time_part["plural"]}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return " ".join(return_strings) if return_strings else time
 | 
				
			||||||
 | 
				
			|||||||
@ -39,9 +39,14 @@ class PaprikaMigrator(BaseMigrator):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        self.key_aliases = [
 | 
					        self.key_aliases = [
 | 
				
			||||||
            MigrationAlias(key="recipeIngredient", alias="ingredients", func=lambda x: x.split("\n")),
 | 
					            MigrationAlias(key="recipeIngredient", alias="ingredients", func=lambda x: x.split("\n")),
 | 
				
			||||||
            MigrationAlias(key="orgUrl", alias="source_url", func=None),
 | 
					            MigrationAlias(key="orgURL", alias="source_url", func=None),
 | 
				
			||||||
 | 
					            MigrationAlias(key="totalTime", alias="total_time", func=None),
 | 
				
			||||||
 | 
					            MigrationAlias(key="prepTime", alias="prep_time", func=None),
 | 
				
			||||||
            MigrationAlias(key="performTime", alias="cook_time", func=None),
 | 
					            MigrationAlias(key="performTime", alias="cook_time", func=None),
 | 
				
			||||||
            MigrationAlias(key="recipeYield", alias="servings", func=None),
 | 
					            MigrationAlias(key="recipeYield", alias="servings", func=None),
 | 
				
			||||||
 | 
					            MigrationAlias(
 | 
				
			||||||
 | 
					                key="tags", alias="categories", func=None
 | 
				
			||||||
 | 
					            ),  # Paprika doesn't support tags, and instead puts tags in categories
 | 
				
			||||||
            MigrationAlias(key="image", alias="image_url", func=None),
 | 
					            MigrationAlias(key="image", alias="image_url", func=None),
 | 
				
			||||||
            MigrationAlias(key="dateAdded", alias="created", func=lambda x: x[: x.find(" ")]),
 | 
					            MigrationAlias(key="dateAdded", alias="created", func=lambda x: x[: x.find(" ")]),
 | 
				
			||||||
            MigrationAlias(
 | 
					            MigrationAlias(
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user