diff --git a/Taskfile.yml b/Taskfile.yml index c54c075db..5352a3ca3 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -71,6 +71,7 @@ tasks: desc: run code generators cmds: - poetry run python dev/code-generation/main.py {{ .CLI_ARGS }} + - task: docs:gen - task: py:format dev:services: diff --git a/dev/code-generation/gen_ts_types.py b/dev/code-generation/gen_ts_types.py index 408262f25..8a8932299 100644 --- a/dev/code-generation/gen_ts_types.py +++ b/dev/code-generation/gen_ts_types.py @@ -8,8 +8,8 @@ from utils import log # ============================================================ template = """// This Code is auto generated by gen_ts_types.py -{% for name in global %}import {{ name }} from "@/components/global/{{ name }}.vue"; -{% endfor %}{% for name in layout %}import {{ name }} from "@/components/layout/{{ name }}.vue"; +{% for name in global %}import type {{ name }} from "@/components/global/{{ name }}.vue"; +{% endfor %}{% for name in layout %}import type {{ name }} from "@/components/layout/{{ name }}.vue"; {% endfor %} declare module "vue" { export interface GlobalComponents { diff --git a/docs/docs/overrides/api.html b/docs/docs/overrides/api.html index 64a6e5cf4..0dc543851 100644 --- a/docs/docs/overrides/api.html +++ b/docs/docs/overrides/api.html @@ -14,7 +14,7 @@
diff --git a/frontend/components/Domain/Cookbook/CookbookPage.vue b/frontend/components/Domain/Cookbook/CookbookPage.vue index a8cff6753..2267276cc 100644 --- a/frontend/components/Domain/Cookbook/CookbookPage.vue +++ b/frontend/components/Domain/Cookbook/CookbookPage.vue @@ -70,7 +70,7 @@ import RecipeCardSection from "@/components/Domain/Recipe/RecipeCardSection.vue" import { useCookbookStore } from "~/composables/store/use-cookbook-store"; import { useCookbook } from "~/composables/use-group-cookbooks"; import { useLoggedInState } from "~/composables/use-logged-in-state"; -import type { RecipeCookBook } from "~/lib/api/types/cookbook"; +import type { ReadCookBook } from "~/lib/api/types/cookbook"; import CookbookEditor from "~/components/Domain/Cookbook/CookbookEditor.vue"; const $auth = useMealieAuth(); @@ -100,7 +100,7 @@ const dialogStates = reactive({ edit: false, }); -const editTarget = ref(null); +const editTarget = ref(null); function handleEditCookbook() { dialogStates.edit = true; editTarget.value = book.value; diff --git a/frontend/composables/store/use-cookbook-store.ts b/frontend/composables/store/use-cookbook-store.ts index e3d4a5a81..131187e9e 100644 --- a/frontend/composables/store/use-cookbook-store.ts +++ b/frontend/composables/store/use-cookbook-store.ts @@ -1,18 +1,18 @@ import type { Composer } from "vue-i18n"; import { useReadOnlyStore, useStore } from "../partials/use-store-factory"; -import type { RecipeCookBook } from "~/lib/api/types/cookbook"; +import type { ReadCookBook } from "~/lib/api/types/cookbook"; import { usePublicExploreApi, useUserApi } from "~/composables/api"; -const store: Ref = ref([]); +const store: Ref = ref([]); const loading = ref(false); const publicLoading = ref(false); export const useCookbookStore = function (i18n?: Composer) { const api = useUserApi(i18n); - return useStore(store, loading, api.cookbooks); + return useStore(store, loading, api.cookbooks); }; export const usePublicCookbookStore = function (groupSlug: string, i18n?: Composer) { const api = usePublicExploreApi(groupSlug, i18n).explore; - return useReadOnlyStore(store, publicLoading, api.cookbooks); + return useReadOnlyStore(store, publicLoading, api.cookbooks); }; diff --git a/frontend/lib/api/public/explore/cookbooks.ts b/frontend/lib/api/public/explore/cookbooks.ts index ee7e6230c..3afeb40d4 100644 --- a/frontend/lib/api/public/explore/cookbooks.ts +++ b/frontend/lib/api/public/explore/cookbooks.ts @@ -1,5 +1,5 @@ import { BaseCRUDAPIReadOnly } from "~/lib/api/base/base-clients"; -import { RecipeCookBook } from "~/lib/api/types/cookbook"; +import { ReadCookBook } from "~/lib/api/types/cookbook"; import { ApiRequestInstance } from "~/lib/api/types/non-generated"; const prefix = "/api"; @@ -10,7 +10,7 @@ const routes = { cookbooksGroupSlugCookbookId: (groupSlug: string | number, cookbookId: string | number) => `${exploreGroupSlug(groupSlug)}/cookbooks/${cookbookId}`, }; -export class PublicCookbooksApi extends BaseCRUDAPIReadOnly { +export class PublicCookbooksApi extends BaseCRUDAPIReadOnly { constructor(requests: ApiRequestInstance, groupSlug: string) { super( requests, diff --git a/frontend/lib/api/types/admin.ts b/frontend/lib/api/types/admin.ts index 6f2022f6e..868cb74e6 100644 --- a/frontend/lib/api/types/admin.ts +++ b/frontend/lib/api/types/admin.ts @@ -1,4 +1,5 @@ /* tslint:disable */ +/* eslint-disable */ /** /* This file was automatically generated from pydantic models by running pydantic2ts. /* Do not modify it by hand - just update the pydantic models and then re-run the script diff --git a/frontend/lib/api/types/analytics.ts b/frontend/lib/api/types/analytics.ts index 5bdc7fbcd..f0eb9d489 100644 --- a/frontend/lib/api/types/analytics.ts +++ b/frontend/lib/api/types/analytics.ts @@ -1,4 +1,5 @@ /* tslint:disable */ +/* eslint-disable */ /** /* This file was automatically generated from pydantic models by running pydantic2ts. /* Do not modify it by hand - just update the pydantic models and then re-run the script diff --git a/frontend/lib/api/types/cookbook.ts b/frontend/lib/api/types/cookbook.ts index a35e5cd5f..753b11c6a 100644 --- a/frontend/lib/api/types/cookbook.ts +++ b/frontend/lib/api/types/cookbook.ts @@ -1,4 +1,5 @@ /* tslint:disable */ +/* eslint-disable */ /** /* This file was automatically generated from pydantic models by running pydantic2ts. /* Do not modify it by hand - just update the pydantic models and then re-run the script @@ -38,67 +39,6 @@ export interface QueryFilterJSONPart { attributeName?: string | null; relationalOperator?: RelationalKeyword | RelationalOperator | null; value?: string | string[] | null; -} -export interface RecipeCookBook { - name: string; - description?: string; - slug?: string | null; - position?: number; - public?: boolean; - queryFilterString?: string; - groupId: string; - householdId: string; - id: string; - queryFilter?: QueryFilterJSON; - recipes: RecipeSummary[]; -} -export interface RecipeSummary { - id?: string | null; - userId?: string; - householdId?: string; - groupId?: string; - name?: string | null; - slug?: string; - image?: unknown; - recipeServings?: number; - recipeYieldQuantity?: number; - recipeYield?: string | null; - totalTime?: string | null; - prepTime?: string | null; - cookTime?: string | null; - performTime?: string | null; - description?: string | null; - recipeCategory?: RecipeCategory[] | null; - tags?: RecipeTag[] | null; - tools?: RecipeTool[]; - rating?: number | null; - orgURL?: string | null; - dateAdded?: string | null; - dateUpdated?: string | null; - createdAt?: string | null; - updatedAt?: string | null; - lastMade?: string | null; -} -export interface RecipeCategory { - id?: string | null; - groupId?: string | null; - name: string; - slug: string; - [k: string]: unknown; -} -export interface RecipeTag { - id?: string | null; - groupId?: string | null; - name: string; - slug: string; - [k: string]: unknown; -} -export interface RecipeTool { - id: string; - groupId?: string | null; - name: string; - slug: string; - householdsWithTool?: string[]; [k: string]: unknown; } export interface SaveCookBook { diff --git a/frontend/lib/api/types/group.ts b/frontend/lib/api/types/group.ts index 8ebf2c96c..bc2fbcf62 100644 --- a/frontend/lib/api/types/group.ts +++ b/frontend/lib/api/types/group.ts @@ -1,4 +1,5 @@ /* tslint:disable */ +/* eslint-disable */ /** /* This file was automatically generated from pydantic models by running pydantic2ts. /* Do not modify it by hand - just update the pydantic models and then re-run the script diff --git a/frontend/lib/api/types/household.ts b/frontend/lib/api/types/household.ts index f3400dea4..cfe4ff3f9 100644 --- a/frontend/lib/api/types/household.ts +++ b/frontend/lib/api/types/household.ts @@ -1,4 +1,5 @@ /* tslint:disable */ +/* eslint-disable */ /** /* This file was automatically generated from pydantic models by running pydantic2ts. /* Do not modify it by hand - just update the pydantic models and then re-run the script diff --git a/frontend/lib/api/types/labels.ts b/frontend/lib/api/types/labels.ts index ee9335bb2..a8fc4c046 100644 --- a/frontend/lib/api/types/labels.ts +++ b/frontend/lib/api/types/labels.ts @@ -1,4 +1,5 @@ /* tslint:disable */ +/* eslint-disable */ /** /* This file was automatically generated from pydantic models by running pydantic2ts. /* Do not modify it by hand - just update the pydantic models and then re-run the script diff --git a/frontend/lib/api/types/meal-plan.ts b/frontend/lib/api/types/meal-plan.ts index 85f03de97..b6d1c08e4 100644 --- a/frontend/lib/api/types/meal-plan.ts +++ b/frontend/lib/api/types/meal-plan.ts @@ -1,4 +1,5 @@ /* tslint:disable */ +/* eslint-disable */ /** /* This file was automatically generated from pydantic models by running pydantic2ts. /* Do not modify it by hand - just update the pydantic models and then re-run the script diff --git a/frontend/lib/api/types/reports.ts b/frontend/lib/api/types/reports.ts index 428c39f40..2b763275e 100644 --- a/frontend/lib/api/types/reports.ts +++ b/frontend/lib/api/types/reports.ts @@ -1,4 +1,5 @@ /* tslint:disable */ +/* eslint-disable */ /** /* This file was automatically generated from pydantic models by running pydantic2ts. /* Do not modify it by hand - just update the pydantic models and then re-run the script diff --git a/frontend/lib/api/types/response.ts b/frontend/lib/api/types/response.ts index 9fa568846..dfa8a54f4 100644 --- a/frontend/lib/api/types/response.ts +++ b/frontend/lib/api/types/response.ts @@ -1,4 +1,5 @@ /* tslint:disable */ +/* eslint-disable */ /** /* This file was automatically generated from pydantic models by running pydantic2ts. /* Do not modify it by hand - just update the pydantic models and then re-run the script diff --git a/frontend/lib/api/types/user.ts b/frontend/lib/api/types/user.ts index a5818778b..029e166b6 100644 --- a/frontend/lib/api/types/user.ts +++ b/frontend/lib/api/types/user.ts @@ -1,4 +1,5 @@ /* tslint:disable */ +/* eslint-disable */ /** /* This file was automatically generated from pydantic models by running pydantic2ts. /* Do not modify it by hand - just update the pydantic models and then re-run the script diff --git a/frontend/lib/api/user/group-cookbooks.ts b/frontend/lib/api/user/group-cookbooks.ts index 9d5631558..640a6ef5e 100644 --- a/frontend/lib/api/user/group-cookbooks.ts +++ b/frontend/lib/api/user/group-cookbooks.ts @@ -1,5 +1,5 @@ import { BaseCRUDAPI } from "../base/base-clients"; -import type { CreateCookBook, RecipeCookBook, UpdateCookBook } from "~/lib/api/types/cookbook"; +import type { CreateCookBook, ReadCookBook, UpdateCookBook } from "~/lib/api/types/cookbook"; const prefix = "/api"; @@ -8,7 +8,7 @@ const routes = { cookbooksId: (id: number) => `${prefix}/households/cookbooks/${id}`, }; -export class CookbookAPI extends BaseCRUDAPI { +export class CookbookAPI extends BaseCRUDAPI { baseRoute: string = routes.cookbooks; itemRoute = routes.cookbooksId; diff --git a/frontend/types/components.d.ts b/frontend/types/components.d.ts index 9d0364a59..d074283ee 100644 --- a/frontend/types/components.d.ts +++ b/frontend/types/components.d.ts @@ -81,4 +81,4 @@ declare module "vue" { } } -export { }; +export {}; diff --git a/mealie/routes/explore/controller_public_cookbooks.py b/mealie/routes/explore/controller_public_cookbooks.py index 902b27e12..836f7d953 100644 --- a/mealie/routes/explore/controller_public_cookbooks.py +++ b/mealie/routes/explore/controller_public_cookbooks.py @@ -5,7 +5,7 @@ from pydantic import UUID4 from mealie.routes._base import controller from mealie.routes._base.base_controllers import BasePublicHouseholdExploreController -from mealie.schema.cookbook.cookbook import ReadCookBook, RecipeCookBook +from mealie.schema.cookbook.cookbook import ReadCookBook from mealie.schema.make_dependable import make_dependable from mealie.schema.response.pagination import PaginationBase, PaginationQuery @@ -39,8 +39,8 @@ class PublicCookbooksController(BasePublicHouseholdExploreController): response.set_pagination_guides(self.get_explore_url_path(router.url_path_for("get_all")), q.model_dump()) return response - @router.get("/{item_id}", response_model=RecipeCookBook) - def get_one(self, item_id: UUID4 | str) -> RecipeCookBook: + @router.get("/{item_id}", response_model=ReadCookBook) + def get_one(self, item_id: UUID4 | str) -> ReadCookBook: NOT_FOUND_EXCEPTION = HTTPException(404, "cookbook not found") if isinstance(item_id, UUID): match_attr = "id" @@ -58,13 +58,4 @@ class PublicCookbooksController(BasePublicHouseholdExploreController): if not household or household.preferences.private_household: raise NOT_FOUND_EXCEPTION - cross_household_recipes = self.cross_household_repos.recipes - recipes = cross_household_recipes.page_all( - PaginationQuery( - page=1, - per_page=-1, - query_filter="settings.public = TRUE AND household.preferences.privateHousehold = FALSE", - ), - cookbook=cookbook, - ) - return cookbook.cast(RecipeCookBook, recipes=recipes.items) + return cookbook diff --git a/mealie/routes/households/controller_cookbooks.py b/mealie/routes/households/controller_cookbooks.py index 99f4c97df..2ed385c64 100644 --- a/mealie/routes/households/controller_cookbooks.py +++ b/mealie/routes/households/controller_cookbooks.py @@ -11,7 +11,7 @@ from mealie.routes._base import BaseCrudController, controller from mealie.routes._base.mixins import HttpRepo from mealie.routes._base.routers import MealieCrudRoute from mealie.schema import mapper -from mealie.schema.cookbook import CreateCookBook, ReadCookBook, RecipeCookBook, SaveCookBook, UpdateCookBook +from mealie.schema.cookbook import CreateCookBook, ReadCookBook, SaveCookBook, UpdateCookBook from mealie.schema.cookbook.cookbook import CookBookPagination from mealie.schema.response.pagination import PaginationQuery from mealie.services.event_bus_service.event_types import ( @@ -101,7 +101,7 @@ class GroupCookbookController(BaseCrudController): return all_updated - @router.get("/{item_id}", response_model=RecipeCookBook) + @router.get("/{item_id}", response_model=ReadCookBook) def get_one(self, item_id: UUID4 | str): if isinstance(item_id, UUID): match_attr = "id" @@ -114,12 +114,10 @@ class GroupCookbookController(BaseCrudController): # Allow fetching other households' cookbooks cookbook = self.group_cookbooks.get_one(item_id, match_attr) - if cookbook is None: raise HTTPException(status_code=404) - recipe_pagination = self.repos.recipes.page_all(PaginationQuery(page=1, per_page=-1, cookbook=cookbook)) - return cookbook.cast(RecipeCookBook, recipes=recipe_pagination.items) + return cookbook @router.put("/{item_id}", response_model=ReadCookBook) def update_one(self, item_id: str, data: CreateCookBook): diff --git a/mealie/schema/_mealie/__init__.py b/mealie/schema/_mealie/__init__.py index 7441e747a..628e17908 100644 --- a/mealie/schema/_mealie/__init__.py +++ b/mealie/schema/_mealie/__init__.py @@ -3,11 +3,11 @@ from .datetime_parse import DateError, DateTimeError, DurationError, TimeError from .mealie_model import HasUUID, MealieModel, SearchType __all__ = [ - "HasUUID", - "MealieModel", - "SearchType", "DateError", "DateTimeError", "DurationError", "TimeError", + "HasUUID", + "MealieModel", + "SearchType", ] diff --git a/mealie/schema/admin/__init__.py b/mealie/schema/admin/__init__.py index 92edafd25..367e94739 100644 --- a/mealie/schema/admin/__init__.py +++ b/mealie/schema/admin/__init__.py @@ -18,10 +18,28 @@ from .restore import ( from .settings import CustomPageBase, CustomPageOut __all__ = [ + "MaintenanceLogs", + "MaintenanceStorageDetails", + "MaintenanceSummary", "ChowdownURL", "MigrationFile", "MigrationImport", "Migrations", + "CustomPageBase", + "CustomPageOut", + "CommentImport", + "CustomPageImport", + "GroupImport", + "ImportBase", + "NotificationImport", + "RecipeImport", + "SettingsImport", + "UserImport", + "AllBackups", + "BackupFile", + "BackupOptions", + "CreateBackup", + "ImportJob", "AdminAboutInfo", "AppInfo", "AppStartupInfo", @@ -31,23 +49,5 @@ __all__ = [ "EmailReady", "EmailSuccess", "EmailTest", - "CustomPageBase", - "CustomPageOut", - "AllBackups", - "BackupFile", - "BackupOptions", - "CreateBackup", - "ImportJob", - "MaintenanceLogs", - "MaintenanceStorageDetails", - "MaintenanceSummary", "DebugResponse", - "CommentImport", - "CustomPageImport", - "GroupImport", - "ImportBase", - "NotificationImport", - "RecipeImport", - "SettingsImport", - "UserImport", ] diff --git a/mealie/schema/cookbook/__init__.py b/mealie/schema/cookbook/__init__.py index 9559f84f5..8a358571a 100644 --- a/mealie/schema/cookbook/__init__.py +++ b/mealie/schema/cookbook/__init__.py @@ -1,11 +1,10 @@ # This file is auto-generated by gen_schema_exports.py -from .cookbook import CookBookPagination, CreateCookBook, ReadCookBook, RecipeCookBook, SaveCookBook, UpdateCookBook +from .cookbook import CookBookPagination, CreateCookBook, ReadCookBook, SaveCookBook, UpdateCookBook __all__ = [ "CookBookPagination", "CreateCookBook", "ReadCookBook", - "RecipeCookBook", "SaveCookBook", "UpdateCookBook", ] diff --git a/mealie/schema/cookbook/cookbook.py b/mealie/schema/cookbook/cookbook.py index 509f3dc05..66ba3b668 100644 --- a/mealie/schema/cookbook/cookbook.py +++ b/mealie/schema/cookbook/cookbook.py @@ -7,7 +7,6 @@ from slugify import slugify from mealie.core.root_logger import get_logger from mealie.db.models.recipe import RecipeModel from mealie.schema._mealie import MealieModel -from mealie.schema.recipe.recipe import RecipeSummary from mealie.schema.response.pagination import PaginationBase from mealie.schema.response.query_filter import QueryFilterBuilder, QueryFilterJSON @@ -84,10 +83,3 @@ class ReadCookBook(UpdateCookBook): class CookBookPagination(PaginationBase): items: list[ReadCookBook] - - -class RecipeCookBook(ReadCookBook): - group_id: UUID4 - household_id: UUID4 - recipes: list[RecipeSummary] - model_config = ConfigDict(from_attributes=True) diff --git a/mealie/schema/group/__init__.py b/mealie/schema/group/__init__.py index 3e0fb46fb..a731b4432 100644 --- a/mealie/schema/group/__init__.py +++ b/mealie/schema/group/__init__.py @@ -7,13 +7,13 @@ from .group_seeder import SeederConfig from .group_statistics import GroupStorage __all__ = [ - "GroupAdminUpdate", - "GroupStorage", "GroupDataExport", - "SeederConfig", "CreateGroupPreferences", "ReadGroupPreferences", "UpdateGroupPreferences", + "GroupStorage", "DataMigrationCreate", "SupportedMigrations", + "SeederConfig", + "GroupAdminUpdate", ] diff --git a/mealie/schema/household/__init__.py b/mealie/schema/household/__init__.py index f0e2f88d9..1fcc7bb25 100644 --- a/mealie/schema/household/__init__.py +++ b/mealie/schema/household/__init__.py @@ -70,6 +70,49 @@ from .invite_token import CreateInviteToken, EmailInitationResponse, EmailInvita from .webhook import CreateWebhook, ReadWebhook, SaveWebhook, WebhookPagination, WebhookType __all__ = [ + "GroupEventNotifierCreate", + "GroupEventNotifierOptions", + "GroupEventNotifierOptionsOut", + "GroupEventNotifierOptionsSave", + "GroupEventNotifierOut", + "GroupEventNotifierPrivate", + "GroupEventNotifierSave", + "GroupEventNotifierUpdate", + "GroupEventPagination", + "CreateGroupRecipeAction", + "GroupRecipeActionOut", + "GroupRecipeActionPagination", + "GroupRecipeActionPayload", + "GroupRecipeActionType", + "SaveGroupRecipeAction", + "CreateWebhook", + "ReadWebhook", + "SaveWebhook", + "WebhookPagination", + "WebhookType", + "CreateHouseholdPreferences", + "ReadHouseholdPreferences", + "SaveHouseholdPreferences", + "UpdateHouseholdPreferences", + "HouseholdCreate", + "HouseholdInDB", + "HouseholdPagination", + "HouseholdRecipeBase", + "HouseholdRecipeCreate", + "HouseholdRecipeOut", + "HouseholdRecipeSummary", + "HouseholdRecipeUpdate", + "HouseholdSave", + "HouseholdSummary", + "HouseholdUserSummary", + "UpdateHousehold", + "UpdateHouseholdAdmin", + "HouseholdStatistics", + "CreateInviteToken", + "EmailInitationResponse", + "EmailInvitation", + "ReadInviteToken", + "SaveInviteToken", "ShoppingListAddRecipeParams", "ShoppingListAddRecipeParamsBulk", "ShoppingListCreate", @@ -93,48 +136,5 @@ __all__ = [ "ShoppingListSave", "ShoppingListSummary", "ShoppingListUpdate", - "GroupEventNotifierCreate", - "GroupEventNotifierOptions", - "GroupEventNotifierOptionsOut", - "GroupEventNotifierOptionsSave", - "GroupEventNotifierOut", - "GroupEventNotifierPrivate", - "GroupEventNotifierSave", - "GroupEventNotifierUpdate", - "GroupEventPagination", - "CreateGroupRecipeAction", - "GroupRecipeActionOut", - "GroupRecipeActionPagination", - "GroupRecipeActionPayload", - "GroupRecipeActionType", - "SaveGroupRecipeAction", - "CreateHouseholdPreferences", - "ReadHouseholdPreferences", - "SaveHouseholdPreferences", - "UpdateHouseholdPreferences", "SetPermissions", - "CreateInviteToken", - "EmailInitationResponse", - "EmailInvitation", - "ReadInviteToken", - "SaveInviteToken", - "HouseholdStatistics", - "CreateWebhook", - "ReadWebhook", - "SaveWebhook", - "WebhookPagination", - "WebhookType", - "HouseholdCreate", - "HouseholdInDB", - "HouseholdPagination", - "HouseholdRecipeBase", - "HouseholdRecipeCreate", - "HouseholdRecipeOut", - "HouseholdRecipeSummary", - "HouseholdRecipeUpdate", - "HouseholdSave", - "HouseholdSummary", - "HouseholdUserSummary", - "UpdateHousehold", - "UpdateHouseholdAdmin", ] diff --git a/mealie/schema/meal_plan/__init__.py b/mealie/schema/meal_plan/__init__.py index 5f3b9b033..639c61ee6 100644 --- a/mealie/schema/meal_plan/__init__.py +++ b/mealie/schema/meal_plan/__init__.py @@ -12,6 +12,9 @@ from .plan_rules import PlanRulesCreate, PlanRulesDay, PlanRulesOut, PlanRulesPa from .shopping_list import ListItem, ShoppingListIn, ShoppingListOut __all__ = [ + "ListItem", + "ShoppingListIn", + "ShoppingListOut", "CreatePlanEntry", "CreateRandomEntry", "PlanEntryPagination", @@ -19,9 +22,6 @@ __all__ = [ "ReadPlanEntry", "SavePlanEntry", "UpdatePlanEntry", - "ListItem", - "ShoppingListIn", - "ShoppingListOut", "PlanRulesCreate", "PlanRulesDay", "PlanRulesOut", diff --git a/mealie/schema/recipe/__init__.py b/mealie/schema/recipe/__init__.py index d105db300..2304c8a5e 100644 --- a/mealie/schema/recipe/__init__.py +++ b/mealie/schema/recipe/__init__.py @@ -89,6 +89,35 @@ from .recipe_tool import RecipeToolCreate, RecipeToolOut, RecipeToolResponse, Re from .request_helpers import RecipeDuplicate, RecipeSlug, RecipeZipTokenResponse, SlugResponse, UpdateImageResponse __all__ = [ + "IngredientReferences", + "RecipeStep", + "RecipeNote", + "CategoryBase", + "CategoryIn", + "CategoryOut", + "CategorySave", + "RecipeCategoryResponse", + "RecipeTagResponse", + "TagBase", + "TagIn", + "TagOut", + "TagSave", + "RecipeAsset", + "RecipeTimelineEventCreate", + "RecipeTimelineEventIn", + "RecipeTimelineEventOut", + "RecipeTimelineEventPagination", + "RecipeTimelineEventUpdate", + "TimelineEventImage", + "TimelineEventType", + "RecipeSuggestionQuery", + "RecipeSuggestionResponse", + "RecipeSuggestionResponseItem", + "Nutrition", + "RecipeShareToken", + "RecipeShareTokenCreate", + "RecipeShareTokenSave", + "RecipeShareTokenSummary", "CreateIngredientFood", "CreateIngredientFoodAlias", "CreateIngredientUnit", @@ -111,27 +140,13 @@ __all__ = [ "SaveIngredientFood", "SaveIngredientUnit", "UnitFoodBase", - "RecipeTimelineEventCreate", - "RecipeTimelineEventIn", - "RecipeTimelineEventOut", - "RecipeTimelineEventPagination", - "RecipeTimelineEventUpdate", - "TimelineEventImage", - "TimelineEventType", - "Nutrition", - "AssignCategories", - "AssignSettings", - "AssignTags", - "DeleteRecipes", - "ExportBase", - "ExportRecipes", - "ExportTypes", "RecipeCommentCreate", "RecipeCommentOut", "RecipeCommentPagination", "RecipeCommentSave", "RecipeCommentUpdate", "UserBase", + "RecipeSettings", "CreateRecipe", "CreateRecipeBulk", "CreateRecipeByUrlBulk", @@ -145,40 +160,25 @@ __all__ = [ "RecipeTagPagination", "RecipeTool", "RecipeToolPagination", - "IngredientReferences", - "RecipeStep", - "RecipeNote", - "RecipeSuggestionQuery", - "RecipeSuggestionResponse", - "RecipeSuggestionResponseItem", - "RecipeSettings", - "RecipeShareToken", - "RecipeShareTokenCreate", - "RecipeShareTokenSave", - "RecipeShareTokenSummary", - "RecipeAsset", + "ScrapeRecipe", + "ScrapeRecipeBase", + "ScrapeRecipeData", + "ScrapeRecipeTest", + "AssignCategories", + "AssignSettings", + "AssignTags", + "DeleteRecipes", + "ExportBase", + "ExportRecipes", + "ExportTypes", + "RecipeToolCreate", + "RecipeToolOut", + "RecipeToolResponse", + "RecipeToolSave", + "RecipeImageTypes", "RecipeDuplicate", "RecipeSlug", "RecipeZipTokenResponse", "SlugResponse", "UpdateImageResponse", - "RecipeToolCreate", - "RecipeToolOut", - "RecipeToolResponse", - "RecipeToolSave", - "CategoryBase", - "CategoryIn", - "CategoryOut", - "CategorySave", - "RecipeCategoryResponse", - "RecipeTagResponse", - "TagBase", - "TagIn", - "TagOut", - "TagSave", - "ScrapeRecipe", - "ScrapeRecipeBase", - "ScrapeRecipeData", - "ScrapeRecipeTest", - "RecipeImageTypes", ] diff --git a/mealie/schema/response/__init__.py b/mealie/schema/response/__init__.py index fad4f840f..c513794c5 100644 --- a/mealie/schema/response/__init__.py +++ b/mealie/schema/response/__init__.py @@ -28,14 +28,14 @@ __all__ = [ "QueryFilterJSONPart", "RelationalKeyword", "RelationalOperator", - "SearchFilter", + "ValidationResponse", "OrderByNullPosition", "OrderDirection", "PaginationBase", "PaginationQuery", "RecipeSearchQuery", "RequestQuery", - "ValidationResponse", + "SearchFilter", "ErrorResponse", "FileTokenResponse", "SuccessResponse", diff --git a/mealie/schema/user/__init__.py b/mealie/schema/user/__init__.py index 65e7e00a6..76db2ec95 100644 --- a/mealie/schema/user/__init__.py +++ b/mealie/schema/user/__init__.py @@ -38,6 +38,12 @@ from .user_passwords import ( ) __all__ = [ + "ForgotPassword", + "PasswordResetToken", + "PrivatePasswordResetToken", + "ResetPassword", + "SavePasswordResetToken", + "ValidateResetToken", "CredentialsRequest", "CredentialsRequestForm", "Token", @@ -69,10 +75,4 @@ __all__ = [ "UserRatings", "UserSummary", "UserSummaryPagination", - "ForgotPassword", - "PasswordResetToken", - "PrivatePasswordResetToken", - "ResetPassword", - "SavePasswordResetToken", - "ValidateResetToken", ] diff --git a/tests/integration_tests/public_explorer_tests/test_public_cookbooks.py b/tests/integration_tests/public_explorer_tests/test_public_cookbooks.py index 1385aebf5..c3902a6d4 100644 --- a/tests/integration_tests/public_explorer_tests/test_public_cookbooks.py +++ b/tests/integration_tests/public_explorer_tests/test_public_cookbooks.py @@ -217,13 +217,14 @@ def test_get_cookbooks_with_recipes(api_client: TestClient, unique_user: TestUse ) ) - # Get the cookbook and make sure we only get the public recipes from each household - response = api_client.get(api_routes.explore_groups_group_slug_cookbooks_item_id(unique_user.group_id, cookbook.id)) + # Get the cookbook recipes and make sure we only get the public recipes from each household + response = api_client.get( + api_routes.explore_groups_group_slug_recipes(unique_user.group_id), params={"cookbook": cookbook.slug} + ) assert response.status_code == 200 - cookbook_data = response.json() - assert cookbook_data["id"] == str(cookbook.id) + recipe_data = response.json() - cookbook_recipe_ids: set[str] = {recipe["id"] for recipe in cookbook_data["recipes"]} + cookbook_recipe_ids: set[str] = {recipe["id"] for recipe in recipe_data["items"]} assert len(cookbook_recipe_ids) == 2 assert str(public_recipe.id) in cookbook_recipe_ids assert str(private_recipe.id) not in cookbook_recipe_ids @@ -297,13 +298,14 @@ def test_get_cookbooks_private_household(api_client: TestClient, unique_user: Te ) ) - # Get the cookbook and make sure we only get the public recipes from each household - response = api_client.get(api_routes.explore_groups_group_slug_cookbooks_item_id(unique_user.group_id, cookbook.id)) + # Get the cookbook recipes and make sure we only get the public recipes from each household + response = api_client.get( + api_routes.explore_groups_group_slug_recipes(unique_user.group_id), params={"cookbook": cookbook.slug} + ) assert response.status_code == 200 - cookbook_data = response.json() - assert cookbook_data["id"] == str(cookbook.id) + recipe_data = response.json() - cookbook_recipe_ids: set[str] = {recipe["id"] for recipe in cookbook_data["recipes"]} + cookbook_recipe_ids: set[str] = {recipe["id"] for recipe in recipe_data["items"]} assert len(cookbook_recipe_ids) == 1 assert str(public_recipe.id) in cookbook_recipe_ids assert str(other_household_private_recipe.id) not in cookbook_recipe_ids