mirror of
https://github.com/hay-kot/mealie.git
synced 2025-08-22 14:33:33 -07:00
Merge branch 'mealie-next' into fix-nutrition-visuals
This commit is contained in:
commit
78fe5ebb81
22 changed files with 1072 additions and 1026 deletions
|
@ -12,7 +12,7 @@ repos:
|
|||
exclude: ^tests/data/
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.12.1
|
||||
rev: v0.12.2
|
||||
hooks:
|
||||
- id: ruff
|
||||
- id: ruff-format
|
||||
|
|
|
@ -76,7 +76,7 @@ export const LOCALES = [{% for locale in locales %}
|
|||
progress: {{ locale.progress }},
|
||||
dir: "{{ locale.dir }}",
|
||||
},{% endfor %}
|
||||
]
|
||||
];
|
||||
|
||||
"""
|
||||
|
||||
|
|
|
@ -138,14 +138,48 @@ export default defineNuxtComponent({
|
|||
const groupSlug = computed(() => route.params.groupSlug as string || $auth.user.value?.groupSlug || "");
|
||||
|
||||
const cookbookPreferences = useCookbookPreferences();
|
||||
const { store: cookbooks, actions: cookbooksActions } = isOwnGroup.value ? useCookbookStore() : usePublicCookbookStore(groupSlug.value || "");
|
||||
onMounted(() => {
|
||||
if (!cookbooks.value.length) {
|
||||
cookbooksActions.refresh();
|
||||
|
||||
const ownCookbookStore = useCookbookStore(i18n);
|
||||
const ownHouseholdStore = useHouseholdStore(i18n);
|
||||
|
||||
const publicCookbookStoreCache = ref<Record<string, ReturnType<typeof usePublicCookbookStore>>>({});
|
||||
const publicHouseholdStoreCache = ref<Record<string, ReturnType<typeof usePublicHouseholdStore>>>({});
|
||||
|
||||
function getPublicCookbookStore(slug: string) {
|
||||
if (!publicCookbookStoreCache.value[slug]) {
|
||||
publicCookbookStoreCache.value[slug] = usePublicCookbookStore(slug, i18n);
|
||||
}
|
||||
return publicCookbookStoreCache.value[slug];
|
||||
}
|
||||
|
||||
function getPublicHouseholdStore(slug: string) {
|
||||
if (!publicHouseholdStoreCache.value[slug]) {
|
||||
publicHouseholdStoreCache.value[slug] = usePublicHouseholdStore(slug, i18n);
|
||||
}
|
||||
return publicHouseholdStoreCache.value[slug];
|
||||
}
|
||||
|
||||
const cookbooks = computed(() => {
|
||||
if (isOwnGroup.value) {
|
||||
return ownCookbookStore.store.value;
|
||||
}
|
||||
else if (groupSlug.value) {
|
||||
const publicStore = getPublicCookbookStore(groupSlug.value);
|
||||
return unref(publicStore.store);
|
||||
}
|
||||
return [];
|
||||
});
|
||||
|
||||
const { store: households } = isOwnGroup.value ? useHouseholdStore() : usePublicHouseholdStore(groupSlug.value || "");
|
||||
const households = computed(() => {
|
||||
if (isOwnGroup.value) {
|
||||
return ownHouseholdStore.store.value;
|
||||
}
|
||||
else if (groupSlug.value) {
|
||||
const publicStore = getPublicHouseholdStore(groupSlug.value);
|
||||
return unref(publicStore.store);
|
||||
}
|
||||
return [];
|
||||
});
|
||||
|
||||
const householdsById = computed(() => {
|
||||
return households.value.reduce((acc, household) => {
|
||||
|
@ -178,6 +212,10 @@ export default defineNuxtComponent({
|
|||
|
||||
const currentUserHouseholdId = computed(() => $auth.user.value?.householdId);
|
||||
const cookbookLinks = computed<SideBarLink[]>(() => {
|
||||
if (!cookbooks.value?.length) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const sortedCookbooks = [...cookbooks.value].sort((a, b) => (a.position || 0) - (b.position || 0));
|
||||
|
||||
const ownLinks: SideBarLink[] = [];
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
<v-tooltip
|
||||
ref="copyToolTip"
|
||||
v-model="show"
|
||||
:color="copied? 'success-lighten-1' : 'red-lighten-1'"
|
||||
top
|
||||
:open-on-hover="false"
|
||||
:open-on-click="true"
|
||||
|
@ -24,15 +23,12 @@
|
|||
{{ icon ? "" : $t("general.copy") }}
|
||||
</v-btn>
|
||||
</template>
|
||||
<span>
|
||||
<v-icon
|
||||
start
|
||||
dark
|
||||
>
|
||||
<span v-if="!isSupported || copiedSuccess !== null">
|
||||
<v-icon start>
|
||||
{{ $globals.icons.clipboardCheck }}
|
||||
</v-icon>
|
||||
<slot v-if="!isSupported"> {{ $t("general.your-browser-does-not-support-clipboard") }} </slot>
|
||||
<slot v-else> {{ copied ? $t("general.copied_message") : $t("general.clipboard-copy-failure") }} </slot>
|
||||
<slot v-else> {{ copiedSuccess ? $t("general.copied_message") : $t("general.clipboard-copy-failure") }} </slot>
|
||||
</span>
|
||||
</v-tooltip>
|
||||
</template>
|
||||
|
@ -63,19 +59,18 @@ export default defineNuxtComponent({
|
|||
const { copy, copied, isSupported } = useClipboard();
|
||||
const show = ref(false);
|
||||
const copyToolTip = ref<VTooltip | null>(null);
|
||||
|
||||
function toggleBlur() {
|
||||
copyToolTip.value?.deactivate();
|
||||
}
|
||||
const copiedSuccess = ref<boolean | null>(null);
|
||||
|
||||
async function textToClipboard() {
|
||||
if (isSupported.value) {
|
||||
await copy(props.copyText);
|
||||
if (copied.value) {
|
||||
console.log(`Copied\n${props.copyText}`);
|
||||
copiedSuccess.value = true;
|
||||
console.info(`Copied\n${props.copyText}`);
|
||||
}
|
||||
else {
|
||||
console.warn("Copy failed: ", copied.value);
|
||||
copiedSuccess.value = false;
|
||||
console.error("Copy failed: ", copied.value);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -84,8 +79,8 @@ export default defineNuxtComponent({
|
|||
|
||||
show.value = true;
|
||||
setTimeout(() => {
|
||||
toggleBlur();
|
||||
}, 500);
|
||||
show.value = false;
|
||||
}, 3000);
|
||||
}
|
||||
|
||||
return {
|
||||
|
@ -94,6 +89,7 @@ export default defineNuxtComponent({
|
|||
textToClipboard,
|
||||
copied,
|
||||
isSupported,
|
||||
copiedSuccess,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import type { AxiosInstance, AxiosResponse, AxiosRequestConfig } from "axios";
|
||||
import type { Composer } from "vue-i18n";
|
||||
import type { ApiRequestInstance, RequestResponse } from "~/lib/api/types/non-generated";
|
||||
import { AdminAPI, PublicApi, UserApi } from "~/lib/api";
|
||||
import { PublicExploreApi } from "~/lib/api/client-public";
|
||||
|
@ -52,31 +53,34 @@ function getRequests(axiosInstance: AxiosInstance): ApiRequestInstance {
|
|||
};
|
||||
}
|
||||
|
||||
export const useRequests = function (): ApiRequestInstance {
|
||||
const i18n = useI18n();
|
||||
export const useRequests = function (i18n?: Composer): ApiRequestInstance {
|
||||
const { $axios } = useNuxtApp();
|
||||
if (!i18n) {
|
||||
// Only works in a setup block
|
||||
i18n = useI18n();
|
||||
}
|
||||
|
||||
$axios.defaults.headers.common["Accept-Language"] = i18n.locale.value;
|
||||
|
||||
return getRequests($axios);
|
||||
};
|
||||
|
||||
export const useAdminApi = function (): AdminAPI {
|
||||
const requests = useRequests();
|
||||
export const useAdminApi = function (i18n?: Composer): AdminAPI {
|
||||
const requests = useRequests(i18n);
|
||||
return new AdminAPI(requests);
|
||||
};
|
||||
|
||||
export const useUserApi = function (): UserApi {
|
||||
const requests = useRequests();
|
||||
export const useUserApi = function (i18n?: Composer): UserApi {
|
||||
const requests = useRequests(i18n);
|
||||
return new UserApi(requests);
|
||||
};
|
||||
|
||||
export const usePublicApi = function (): PublicApi {
|
||||
const requests = useRequests();
|
||||
export const usePublicApi = function (i18n?: Composer): PublicApi {
|
||||
const requests = useRequests(i18n);
|
||||
return new PublicApi(requests);
|
||||
};
|
||||
|
||||
export const usePublicExploreApi = function (groupSlug: string): PublicExploreApi {
|
||||
const requests = useRequests();
|
||||
export const usePublicExploreApi = function (groupSlug: string, i18n?: Composer): PublicExploreApi {
|
||||
const requests = useRequests(i18n);
|
||||
return new PublicExploreApi(requests, groupSlug);
|
||||
};
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import type { Composer } from "vue-i18n";
|
||||
import { useData, useReadOnlyStore, useStore } from "../partials/use-store-factory";
|
||||
import type { RecipeCategory } from "~/lib/api/types/recipe";
|
||||
import { usePublicExploreApi, useUserApi } from "~/composables/api";
|
||||
|
@ -14,12 +15,12 @@ export const useCategoryData = function () {
|
|||
});
|
||||
};
|
||||
|
||||
export const useCategoryStore = function () {
|
||||
const api = useUserApi();
|
||||
export const useCategoryStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
return useStore<RecipeCategory>(store, loading, api.categories);
|
||||
};
|
||||
|
||||
export const usePublicCategoryStore = function (groupSlug: string) {
|
||||
const api = usePublicExploreApi(groupSlug).explore;
|
||||
export const usePublicCategoryStore = function (groupSlug: string, i18n?: Composer) {
|
||||
const api = usePublicExploreApi(groupSlug, i18n).explore;
|
||||
return useReadOnlyStore<RecipeCategory>(store, publicLoading, api.categories);
|
||||
};
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import type { Composer } from "vue-i18n";
|
||||
import { useReadOnlyStore, useStore } from "../partials/use-store-factory";
|
||||
import type { RecipeCookBook } from "~/lib/api/types/cookbook";
|
||||
import { usePublicExploreApi, useUserApi } from "~/composables/api";
|
||||
|
@ -6,12 +7,12 @@ const store: Ref<RecipeCookBook[]> = ref([]);
|
|||
const loading = ref(false);
|
||||
const publicLoading = ref(false);
|
||||
|
||||
export const useCookbookStore = function () {
|
||||
const api = useUserApi();
|
||||
export const useCookbookStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
return useStore<RecipeCookBook>(store, loading, api.cookbooks);
|
||||
};
|
||||
|
||||
export const usePublicCookbookStore = function (groupSlug: string) {
|
||||
const api = usePublicExploreApi(groupSlug).explore;
|
||||
export const usePublicCookbookStore = function (groupSlug: string, i18n?: Composer) {
|
||||
const api = usePublicExploreApi(groupSlug, i18n).explore;
|
||||
return useReadOnlyStore<RecipeCookBook>(store, publicLoading, api.cookbooks);
|
||||
};
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import type { Composer } from "vue-i18n";
|
||||
import { useData, useReadOnlyStore, useStore } from "../partials/use-store-factory";
|
||||
import type { IngredientFood } from "~/lib/api/types/recipe";
|
||||
import { usePublicExploreApi, useUserApi } from "~/composables/api";
|
||||
|
@ -15,12 +16,12 @@ export const useFoodData = function () {
|
|||
});
|
||||
};
|
||||
|
||||
export const useFoodStore = function () {
|
||||
const api = useUserApi();
|
||||
export const useFoodStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
return useStore<IngredientFood>(store, loading, api.foods);
|
||||
};
|
||||
|
||||
export const usePublicFoodStore = function (groupSlug: string) {
|
||||
const api = usePublicExploreApi(groupSlug).explore;
|
||||
export const usePublicFoodStore = function (groupSlug: string, i18n?: Composer) {
|
||||
const api = usePublicExploreApi(groupSlug, i18n).explore;
|
||||
return useReadOnlyStore<IngredientFood>(store, publicLoading, api.foods);
|
||||
};
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import type { Composer } from "vue-i18n";
|
||||
import { useReadOnlyStore } from "../partials/use-store-factory";
|
||||
import type { HouseholdSummary } from "~/lib/api/types/household";
|
||||
import { usePublicExploreApi, useUserApi } from "~/composables/api";
|
||||
|
@ -6,12 +7,12 @@ const store: Ref<HouseholdSummary[]> = ref([]);
|
|||
const loading = ref(false);
|
||||
const publicLoading = ref(false);
|
||||
|
||||
export const useHouseholdStore = function () {
|
||||
const api = useUserApi();
|
||||
export const useHouseholdStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
return useReadOnlyStore<HouseholdSummary>(store, loading, api.households);
|
||||
};
|
||||
|
||||
export const usePublicHouseholdStore = function (groupSlug: string) {
|
||||
const api = usePublicExploreApi(groupSlug).explore;
|
||||
export const usePublicHouseholdStore = function (groupSlug: string, i18n?: Composer) {
|
||||
const api = usePublicExploreApi(groupSlug, i18n).explore;
|
||||
return useReadOnlyStore<HouseholdSummary>(store, publicLoading, api.households);
|
||||
};
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import type { Composer } from "vue-i18n";
|
||||
import { useData, useStore } from "../partials/use-store-factory";
|
||||
import type { MultiPurposeLabelOut } from "~/lib/api/types/labels";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
|
@ -14,7 +15,7 @@ export const useLabelData = function () {
|
|||
});
|
||||
};
|
||||
|
||||
export const useLabelStore = function () {
|
||||
const api = useUserApi();
|
||||
export const useLabelStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
return useStore<MultiPurposeLabelOut>(store, loading, api.multiPurposeLabels);
|
||||
};
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import type { Composer } from "vue-i18n";
|
||||
import { useData, useReadOnlyStore, useStore } from "../partials/use-store-factory";
|
||||
import type { RecipeTag } from "~/lib/api/types/recipe";
|
||||
import { usePublicExploreApi, useUserApi } from "~/composables/api";
|
||||
|
@ -14,12 +15,12 @@ export const useTagData = function () {
|
|||
});
|
||||
};
|
||||
|
||||
export const useTagStore = function () {
|
||||
const api = useUserApi();
|
||||
export const useTagStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
return useStore<RecipeTag>(store, loading, api.tags);
|
||||
};
|
||||
|
||||
export const usePublicTagStore = function (groupSlug: string) {
|
||||
const api = usePublicExploreApi(groupSlug).explore;
|
||||
export const usePublicTagStore = function (groupSlug: string, i18n?: Composer) {
|
||||
const api = usePublicExploreApi(groupSlug, i18n).explore;
|
||||
return useReadOnlyStore<RecipeTag>(store, publicLoading, api.tags);
|
||||
};
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import type { Composer } from "vue-i18n";
|
||||
import { useData, useReadOnlyStore, useStore } from "../partials/use-store-factory";
|
||||
import type { RecipeTool } from "~/lib/api/types/recipe";
|
||||
import { usePublicExploreApi, useUserApi } from "~/composables/api";
|
||||
|
@ -20,12 +21,12 @@ export const useToolData = function () {
|
|||
});
|
||||
};
|
||||
|
||||
export const useToolStore = function () {
|
||||
const api = useUserApi();
|
||||
export const useToolStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
return useStore<RecipeTool>(store, loading, api.tools);
|
||||
};
|
||||
|
||||
export const usePublicToolStore = function (groupSlug: string) {
|
||||
const api = usePublicExploreApi(groupSlug).explore;
|
||||
export const usePublicToolStore = function (groupSlug: string, i18n?: Composer) {
|
||||
const api = usePublicExploreApi(groupSlug, i18n).explore;
|
||||
return useReadOnlyStore<RecipeTool>(store, publicLoading, api.tools);
|
||||
};
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import type { Composer } from "vue-i18n";
|
||||
import { useData, useStore } from "../partials/use-store-factory";
|
||||
import type { IngredientUnit } from "~/lib/api/types/recipe";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
|
@ -15,7 +16,7 @@ export const useUnitData = function () {
|
|||
});
|
||||
};
|
||||
|
||||
export const useUnitStore = function () {
|
||||
const api = useUserApi();
|
||||
export const useUnitStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
return useStore<IngredientUnit>(store, loading, api.units);
|
||||
};
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import type { Composer } from "vue-i18n";
|
||||
import { useReadOnlyStore } from "../partials/use-store-factory";
|
||||
import { useRequests } from "../api/api-client";
|
||||
import type { UserSummary } from "~/lib/api/types/user";
|
||||
|
@ -11,8 +12,8 @@ class GroupUserAPIReadOnly extends BaseCRUDAPIReadOnly<UserSummary> {
|
|||
itemRoute = (idOrUsername: string | number) => `/groups/members/${idOrUsername}`;
|
||||
}
|
||||
|
||||
export const useUserStore = function () {
|
||||
const requests = useRequests();
|
||||
export const useUserStore = function (i18n?: Composer) {
|
||||
const requests = useRequests(i18n);
|
||||
const api = new GroupUserAPIReadOnly(requests);
|
||||
|
||||
return useReadOnlyStore<UserSummary>(store, loading, api, { orderBy: "full_name" });
|
||||
|
|
|
@ -45,7 +45,7 @@ export const LOCALES = [
|
|||
{
|
||||
name: "Slovenščina (Slovenian)",
|
||||
value: "sl-SI",
|
||||
progress: 37,
|
||||
progress: 39,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
|
@ -93,7 +93,7 @@ export const LOCALES = [
|
|||
{
|
||||
name: "Nederlands (Dutch)",
|
||||
value: "nl-NL",
|
||||
progress: 37,
|
||||
progress: 39,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
|
@ -213,7 +213,7 @@ export const LOCALES = [
|
|||
{
|
||||
name: "Deutsch (German)",
|
||||
value: "de-DE",
|
||||
progress: 37,
|
||||
progress: 39,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
|
@ -252,4 +252,4 @@ export const LOCALES = [
|
|||
progress: 26,
|
||||
dir: "ltr",
|
||||
},
|
||||
]
|
||||
];
|
||||
|
|
|
@ -599,7 +599,7 @@
|
|||
"create-recipe-from-an-image": "Rezept von einem Bild erstellen",
|
||||
"create-recipe-from-an-image-description": "Erstelle ein Rezept, indem du ein Bild hochlädst. Mealie wird versuchen, den Text aus dem Bild mit Hilfe von KI zu extrahieren und ein Rezept daraus zu erstellen.",
|
||||
"crop-and-rotate-the-image": "Beschneide und drehe das Bild so, dass nur der Text zu sehen ist und die Ausrichtung stimmt.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-images": "Aus Bildern erstellen",
|
||||
"should-translate-description": "Übersetze das Rezept in meine Sprache",
|
||||
"please-wait-image-procesing": "Warte bitte, das Bild wird gerade bearbeitet. Dies kann einige Zeit dauern.",
|
||||
"please-wait-images-processing": "Bitte warten, die Bilder werden verarbeitet. Dies kann einige Zeit dauern.",
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
"category-filter": "סינון קטגוריות",
|
||||
"category-update-failed": "עדכון קטגוריה נכשל",
|
||||
"category-updated": "קטגוריה עודכנה",
|
||||
"uncategorized-count": "{count} לא קוטלגו",
|
||||
"uncategorized-count": "{count} לא קיבלו קטגוריה",
|
||||
"create-a-category": "יצירת קטגוריה",
|
||||
"category-name": "שם קטגוריה",
|
||||
"category": "קטגוריה"
|
||||
|
@ -60,17 +60,17 @@
|
|||
"new-notification-form-description": "Mקשךןק עושה שימוש בספריה בשם Apprise לשליחת התראות. Apprise מציעה אפשרויות רבות עבור התראות לבעלי שירותים. פנה לאתר הWiki של Apprise להסבר מלא על יצירת לינקים לשירות שלך.",
|
||||
"new-version": "גרסה חדשה זמינה!",
|
||||
"notification": "התראה",
|
||||
"refresh": "רענן",
|
||||
"refresh": "רענון",
|
||||
"scheduled": "מתוזמן",
|
||||
"something-went-wrong": "משהו השתבש!",
|
||||
"subscribed-events": "אירועים שנרשמת אליהם",
|
||||
"test-message-sent": "הודעת בדיקה נשלחה",
|
||||
"message-sent": "ההודעה נשלחה",
|
||||
"new-notification": "התראה חדשה",
|
||||
"event-notifiers": "אירועי נוטיפיקציות",
|
||||
"event-notifiers": "מנגנוני התרעה על אירועים",
|
||||
"apprise-url-skipped-if-blank": "כתובת Apprise (דלג אם ריק)",
|
||||
"enable-notifier": "אישור נוטיפיקציות",
|
||||
"what-events": "לאילו אירועים להרשם בערוץ התראות זה?",
|
||||
"enable-notifier": "הפעלת מתריע",
|
||||
"what-events": "לאילו אירועים לרשום את מתריע זה?",
|
||||
"user-events": "אירועי משתמש",
|
||||
"mealplan-events": "אירועי תכנון ארוחות",
|
||||
"when-a-user-in-your-group-creates-a-new-mealplan": "כאשר משתמש בקבוצה שלך יוצר תכנון ארוחות חדש",
|
||||
|
@ -599,10 +599,10 @@
|
|||
"create-recipe-from-an-image": "יצירת מתכון מתמונה",
|
||||
"create-recipe-from-an-image-description": "יצירת מתכון ע\"י העלאת תמונה שלו. Mealie תנסה לחלץ את הטקסט מהתמונה באמצעות AI ותייצר ממנו מתכון.",
|
||||
"crop-and-rotate-the-image": "נא לחתוך ולסובב את התמונה כך שרואים רק את הטקסט, והוא בכיוון הנכון.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-images": "יצירה מתמונה",
|
||||
"should-translate-description": "תרגום המתכון לשפה שלי",
|
||||
"please-wait-image-procesing": "נה להמתין, התמונה עוברת עיבוץ. זה יכול לקחת זמן.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"please-wait-images-processing": "נא להמתין, מנתח את התמונות. זה יכול לקחת זמן מה.",
|
||||
"bulk-url-import": "ייבוא מספר לינקים",
|
||||
"debug-scraper": "סורק לניפוי שגיאות",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "יצירת מתכון באמצעות שם. כל שמות המתכונים צריכים להיות שונים.",
|
||||
|
@ -662,9 +662,9 @@
|
|||
},
|
||||
"reset-servings-count": "איפוס מספר המנות",
|
||||
"not-linked-ingredients": "מרכיבים נוספים",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"upload-another-image": "העלאת תמונה נוספת",
|
||||
"upload-images": "העלאת תמונות",
|
||||
"upload-more-images": "העלאת תמונות נוספות"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "מצא מתכון",
|
||||
|
@ -1342,7 +1342,7 @@
|
|||
"manage-cookbooks": "ניהול ספרי בישול",
|
||||
"manage-members": "ניהול משתמשים",
|
||||
"manage-webhooks": "ניהול Webhooks",
|
||||
"manage-notifiers": "ניהול ערוצי התראות",
|
||||
"manage-notifiers": "ניהול מתריעים",
|
||||
"manage-data-migrations": "ניהול מיגרציות מידע"
|
||||
},
|
||||
"cookbook": {
|
||||
|
|
|
@ -4,10 +4,9 @@ from logging import Logger
|
|||
from pathlib import Path
|
||||
|
||||
from PIL import Image, ImageOps
|
||||
from pillow_heif import register_avif_opener, register_heif_opener
|
||||
from pillow_heif import register_heif_opener
|
||||
|
||||
register_heif_opener()
|
||||
register_avif_opener()
|
||||
|
||||
|
||||
@dataclass
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -94,153 +94,153 @@
|
|||
"spinach": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "spinach",
|
||||
"plural_name": "spinaches"
|
||||
"name": "spinazie",
|
||||
"plural_name": "spinazie"
|
||||
},
|
||||
"sweet corn": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sweet corn",
|
||||
"plural_name": "sweet corns"
|
||||
"name": "zoete maïs",
|
||||
"plural_name": "zoete maïs"
|
||||
},
|
||||
"chile pepper": {
|
||||
"aliases": [
|
||||
"capsicum"
|
||||
"paprika"
|
||||
],
|
||||
"description": "",
|
||||
"name": "chile pepper",
|
||||
"plural_name": "chile peppers"
|
||||
"name": "chili peper",
|
||||
"plural_name": "chilipepers"
|
||||
},
|
||||
"sweet potato": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sweet potato",
|
||||
"plural_name": "sweet potatoes"
|
||||
"name": "zoete aardappel",
|
||||
"plural_name": "zoete aardappelen"
|
||||
},
|
||||
"broccoli": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "broccoli",
|
||||
"plural_name": "broccolis"
|
||||
"plural_name": "broccoli"
|
||||
},
|
||||
"heart of palm": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "heart of palm",
|
||||
"plural_name": "heart of palms"
|
||||
"name": "palmhart",
|
||||
"plural_name": "palmharten"
|
||||
},
|
||||
"baby green": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "baby green",
|
||||
"plural_name": "baby greens"
|
||||
"name": "baby groen",
|
||||
"plural_name": "baby groen"
|
||||
},
|
||||
"pumpkin": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "pumpkin",
|
||||
"plural_name": "pumpkins"
|
||||
"name": "pompoen",
|
||||
"plural_name": "pompoenen"
|
||||
},
|
||||
"cauliflower": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "cauliflower",
|
||||
"plural_name": "cauliflowers"
|
||||
"name": "bloemkool",
|
||||
"plural_name": "bloemkolen"
|
||||
},
|
||||
"cabbage": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "cabbage",
|
||||
"plural_name": "cabbages"
|
||||
"name": "kool",
|
||||
"plural_name": "kolen"
|
||||
},
|
||||
"asparagu": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "asparagu",
|
||||
"plural_name": "asparagus"
|
||||
"name": "asperges",
|
||||
"plural_name": "asperges"
|
||||
},
|
||||
"kale": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "kale",
|
||||
"plural_name": "kales"
|
||||
"name": "boerenkool",
|
||||
"plural_name": "boerenkool"
|
||||
},
|
||||
"arugula": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "arugula",
|
||||
"plural_name": "arugulas"
|
||||
"name": "rucola",
|
||||
"plural_name": "rucola"
|
||||
},
|
||||
"leek": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "leek",
|
||||
"plural_name": "leeks"
|
||||
"name": "prei",
|
||||
"plural_name": "preien"
|
||||
},
|
||||
"eggplant": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "eggplant",
|
||||
"plural_name": "eggplants"
|
||||
"name": "aubergine",
|
||||
"plural_name": "aubergines"
|
||||
},
|
||||
"lettuce": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "lettuce",
|
||||
"plural_name": "lettuces"
|
||||
"name": "sla",
|
||||
"plural_name": "sla"
|
||||
},
|
||||
"butternut squash": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "butternut squash",
|
||||
"plural_name": "butternut squashes"
|
||||
"name": "flespompoen",
|
||||
"plural_name": "flespompoenen"
|
||||
},
|
||||
"romaine": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "romaine",
|
||||
"plural_name": "romaines"
|
||||
"plural_name": "romaine"
|
||||
},
|
||||
"beetroot": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "beetroot",
|
||||
"plural_name": "beetroots"
|
||||
"name": "rode biet",
|
||||
"plural_name": "rode bieten"
|
||||
},
|
||||
"brussels sprout": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "brussels sprout",
|
||||
"plural_name": "brussels sprouts"
|
||||
"name": "spruit",
|
||||
"plural_name": "spruiten"
|
||||
},
|
||||
"fennel": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "fennel",
|
||||
"plural_name": "fennels"
|
||||
"name": "venkel",
|
||||
"plural_name": "venkels"
|
||||
},
|
||||
"sun dried tomato": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sun dried tomato",
|
||||
"plural_name": "sun dried tomatoes"
|
||||
"name": "zon gedroogde tomaat",
|
||||
"plural_name": "zon gedroogde tomaten"
|
||||
},
|
||||
"radish": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "radish",
|
||||
"plural_name": "radishes"
|
||||
"name": "radijs",
|
||||
"plural_name": "radijsjes"
|
||||
},
|
||||
"red cabbage": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "red cabbage",
|
||||
"plural_name": "red cabbages"
|
||||
"name": "rode kool",
|
||||
"plural_name": "rode kolen"
|
||||
},
|
||||
"artichoke": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "artichoke",
|
||||
"name": "artisjok",
|
||||
"plural_name": "artichokes"
|
||||
},
|
||||
"new potato": {
|
||||
|
@ -389,20 +389,20 @@
|
|||
"turnip": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "turnip",
|
||||
"plural_name": "turnips"
|
||||
"name": "raap",
|
||||
"plural_name": "rapen"
|
||||
},
|
||||
"thai chile pepper": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "thai chile pepper",
|
||||
"plural_name": "thai chile peppers"
|
||||
"name": "thaise chili peper",
|
||||
"plural_name": "chilipepers"
|
||||
},
|
||||
"bok choy": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "bok choy",
|
||||
"plural_name": "bok choy"
|
||||
"name": "bokchoi",
|
||||
"plural_name": "bokchois"
|
||||
},
|
||||
"okra": {
|
||||
"aliases": [],
|
||||
|
@ -413,129 +413,129 @@
|
|||
"acorn squash": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "acorn squash",
|
||||
"plural_name": "acorn squashes"
|
||||
"name": "eikelpompoen",
|
||||
"plural_name": "eikelpompoenen"
|
||||
},
|
||||
"corn cob": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "corn cob",
|
||||
"plural_name": "corn cobs"
|
||||
"name": "mais kolf",
|
||||
"plural_name": "mais kolven"
|
||||
},
|
||||
"radicchio": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "radicchio",
|
||||
"name": "radijs",
|
||||
"plural_name": "radicchio"
|
||||
},
|
||||
"pearl onion": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "pearl onion",
|
||||
"plural_name": "pearl onions"
|
||||
"name": "parel uien",
|
||||
"plural_name": "parel uien"
|
||||
},
|
||||
"tenderstem broccoli": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "tenderstem broccoli",
|
||||
"plural_name": "tenderstem broccolis"
|
||||
"name": "broccolini",
|
||||
"plural_name": "broccolinis"
|
||||
},
|
||||
"plantain": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "plantain",
|
||||
"plural_name": "plantains"
|
||||
"name": "bakbanaan",
|
||||
"plural_name": "bakbananen"
|
||||
},
|
||||
"leaf lettuce": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "leaf lettuce",
|
||||
"plural_name": "leaf lettuces"
|
||||
"name": "blad sla",
|
||||
"plural_name": "blad sla"
|
||||
},
|
||||
"pepperoncini": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "pepperoncini",
|
||||
"plural_name": "pepperoncinis"
|
||||
"name": "peperoncini",
|
||||
"plural_name": "peperoncinis"
|
||||
},
|
||||
"baby bok choy": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "baby bok choy",
|
||||
"plural_name": "baby bok choys"
|
||||
"name": "baby boksoi",
|
||||
"plural_name": "baby bokchois"
|
||||
},
|
||||
"jicama": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "jicama",
|
||||
"plural_name": "jicamas"
|
||||
"name": "yamboon",
|
||||
"plural_name": "yambonen"
|
||||
},
|
||||
"endive": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "endive",
|
||||
"plural_name": "endives"
|
||||
"name": "andijvie",
|
||||
"plural_name": "andijvie"
|
||||
},
|
||||
"habanero pepper": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "habanero pepper",
|
||||
"plural_name": "habanero peppers"
|
||||
"name": "habanero peper",
|
||||
"plural_name": "habanero pepers"
|
||||
},
|
||||
"corn husk": {
|
||||
"aliases": [
|
||||
"maize"
|
||||
"maïs"
|
||||
],
|
||||
"description": "",
|
||||
"name": "corn husk",
|
||||
"plural_name": "corn husks"
|
||||
"name": "maisblad",
|
||||
"plural_name": "maisbladeren"
|
||||
},
|
||||
"collard green": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "collard green",
|
||||
"plural_name": "collard greens"
|
||||
"name": "galicische kool",
|
||||
"plural_name": "galicische kolen"
|
||||
},
|
||||
"french-fried onion": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "french-fried onion",
|
||||
"plural_name": "french-fried onions"
|
||||
"name": "gebakken uien",
|
||||
"plural_name": "gebakken uien"
|
||||
},
|
||||
"daikon": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "daikon",
|
||||
"plural_name": "daikons"
|
||||
"name": "witte rammenas",
|
||||
"plural_name": "witte rammenassen"
|
||||
},
|
||||
"baby corn": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "baby corn",
|
||||
"plural_name": "baby corns"
|
||||
"name": "baby maïs",
|
||||
"plural_name": "baby maïs"
|
||||
},
|
||||
"broccoli rabe": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "broccoli rabe",
|
||||
"plural_name": "broccoli rabes"
|
||||
"name": "broccoli",
|
||||
"plural_name": "broccoli"
|
||||
},
|
||||
"rutabaga": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "rutabaga",
|
||||
"plural_name": "rutabagas"
|
||||
"plural_name": "rutabaga"
|
||||
},
|
||||
"belgian endive": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "belgian endive",
|
||||
"plural_name": "belgian endives"
|
||||
"name": "andijvie",
|
||||
"plural_name": "andijvie"
|
||||
},
|
||||
"yam": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "yam",
|
||||
"name": "yamswortel",
|
||||
"plural_name": "yams"
|
||||
},
|
||||
"ancho chile pepper": {
|
||||
|
@ -689,14 +689,14 @@
|
|||
"date": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "date",
|
||||
"plural_name": "dates"
|
||||
"name": "dadel",
|
||||
"plural_name": "dadels"
|
||||
},
|
||||
"coconut": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "coconut",
|
||||
"plural_name": "coconuts"
|
||||
"name": "kokosnoot",
|
||||
"plural_name": "kokosnoten"
|
||||
},
|
||||
"craisin": {
|
||||
"aliases": [],
|
||||
|
@ -707,38 +707,38 @@
|
|||
"pear": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "pear",
|
||||
"plural_name": "pears"
|
||||
"name": "peer",
|
||||
"plural_name": "peren"
|
||||
},
|
||||
"grape": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "grape",
|
||||
"plural_name": "grapes"
|
||||
"name": "druif",
|
||||
"plural_name": "druiven"
|
||||
},
|
||||
"pomegranate": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "pomegranate",
|
||||
"plural_name": "pomegranates"
|
||||
"name": "granaatappel",
|
||||
"plural_name": "granaatappels"
|
||||
},
|
||||
"watermelon": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "watermelon",
|
||||
"plural_name": "watermelons"
|
||||
"name": "watermeloen",
|
||||
"plural_name": "watermeloenen"
|
||||
},
|
||||
"rhubarb": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "rhubarb",
|
||||
"plural_name": "rhubarbs"
|
||||
"name": "rabarber",
|
||||
"plural_name": "rabarbers"
|
||||
},
|
||||
"dried apricot": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "dried apricot",
|
||||
"plural_name": "dried apricots"
|
||||
"name": "droge abrikoos",
|
||||
"plural_name": "droge abrikoos"
|
||||
},
|
||||
"kiwi": {
|
||||
"aliases": [],
|
||||
|
@ -755,68 +755,68 @@
|
|||
"plum": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "plum",
|
||||
"plural_name": "plums"
|
||||
"name": "pruim",
|
||||
"plural_name": "pruimen"
|
||||
},
|
||||
"fig": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "fig",
|
||||
"plural_name": "figs"
|
||||
"name": "vijg",
|
||||
"plural_name": "vijgen"
|
||||
},
|
||||
"apricot": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "apricot",
|
||||
"plural_name": "apricots"
|
||||
"name": "abrikoos",
|
||||
"plural_name": "abrikozen"
|
||||
},
|
||||
"currant": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "currant",
|
||||
"plural_name": "currants"
|
||||
"name": "zwarte bes",
|
||||
"plural_name": "rode bessen"
|
||||
},
|
||||
"mandarin": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "mandarin",
|
||||
"plural_name": "mandarins"
|
||||
"name": "mandarijn",
|
||||
"plural_name": "mandarijnen"
|
||||
},
|
||||
"prune": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "prune",
|
||||
"plural_name": "prunes"
|
||||
"name": "pruim",
|
||||
"plural_name": "pruimen"
|
||||
},
|
||||
"cantaloupe": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "cantaloupe",
|
||||
"plural_name": "cantaloupes"
|
||||
"name": "cantaloep",
|
||||
"plural_name": "cantaloepen"
|
||||
},
|
||||
"sultana": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sultana",
|
||||
"plural_name": "sultanas"
|
||||
"name": "krent",
|
||||
"plural_name": "krenten"
|
||||
},
|
||||
"passion fruit": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "passion fruit",
|
||||
"plural_name": "passion fruits"
|
||||
"name": "passievrucht",
|
||||
"plural_name": "passievruchten"
|
||||
},
|
||||
"papaya": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "papaya",
|
||||
"plural_name": "papayas"
|
||||
"name": "papaja",
|
||||
"plural_name": "papajas"
|
||||
},
|
||||
"tamarind": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "tamarind",
|
||||
"plural_name": "tamarinds"
|
||||
"plural_name": "tamarindes"
|
||||
},
|
||||
"nectarine": {
|
||||
"aliases": [],
|
||||
|
@ -827,14 +827,14 @@
|
|||
"dried fig": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "dried fig",
|
||||
"plural_name": "dried figs"
|
||||
"name": "gedroogde vijg",
|
||||
"plural_name": "gedroogde vijgen"
|
||||
},
|
||||
"chestnut": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "chestnut",
|
||||
"plural_name": "chestnuts"
|
||||
"name": "kastanje",
|
||||
"plural_name": "kastanjes"
|
||||
},
|
||||
"meyer lemon": {
|
||||
"aliases": [],
|
||||
|
@ -990,7 +990,7 @@
|
|||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "calamansi",
|
||||
"plural_name": "calamansis"
|
||||
"plural_name": "calamansi"
|
||||
},
|
||||
"yuzu": {
|
||||
"aliases": [],
|
||||
|
@ -1002,37 +1002,37 @@
|
|||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "granadilla",
|
||||
"plural_name": "granadillas"
|
||||
"plural_name": "granadilla"
|
||||
},
|
||||
"apple chip": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "apple chip",
|
||||
"plural_name": "apple chips"
|
||||
"name": "appel snipper",
|
||||
"plural_name": "appel snippers"
|
||||
},
|
||||
"mixed peel": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "mixed peel",
|
||||
"plural_name": "mixed peels"
|
||||
"name": "gemengde schil",
|
||||
"plural_name": "gemengde schillen"
|
||||
},
|
||||
"kokum": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "kokum",
|
||||
"plural_name": "kokums"
|
||||
"plural_name": "kokum"
|
||||
},
|
||||
"tangelo": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "tangelo",
|
||||
"plural_name": "tangeloes"
|
||||
"plural_name": "tangelo"
|
||||
},
|
||||
"dried lime": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "dried lime",
|
||||
"plural_name": "dried limes"
|
||||
"name": "gedroogde limoen",
|
||||
"plural_name": "gedroogde limoenen"
|
||||
},
|
||||
"jujube": {
|
||||
"aliases": [],
|
||||
|
@ -1043,14 +1043,14 @@
|
|||
"sweet lime": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sweet lime",
|
||||
"plural_name": "sweet limes"
|
||||
"name": "zoete limoen",
|
||||
"plural_name": "zoete limoenen"
|
||||
},
|
||||
"custard-apple": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "custard-apple",
|
||||
"plural_name": "custard-apples"
|
||||
"name": "custard appel",
|
||||
"plural_name": "custard appels"
|
||||
},
|
||||
"dried lemon": {
|
||||
"aliases": [],
|
||||
|
|
110
poetry.lock
generated
110
poetry.lock
generated
|
@ -1816,14 +1816,14 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"]
|
|||
|
||||
[[package]]
|
||||
name = "openai"
|
||||
version = "1.93.0"
|
||||
version = "1.93.1"
|
||||
description = "The official Python library for the openai API"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "openai-1.93.0-py3-none-any.whl", hash = "sha256:3d746fe5498f0dd72e0d9ab706f26c91c0f646bf7459e5629af8ba7c9dbdf090"},
|
||||
{file = "openai-1.93.0.tar.gz", hash = "sha256:988f31ade95e1ff0585af11cc5a64510225e4f5cd392698c675d0a9265b8e337"},
|
||||
{file = "openai-1.93.1-py3-none-any.whl", hash = "sha256:a2c2946c4f21346d4902311a7440381fd8a33466ee7ca688133d1cad29a9357c"},
|
||||
{file = "openai-1.93.1.tar.gz", hash = "sha256:11eb8932965d0f79ecc4cb38a60a0c4cef4bcd5fcf08b99fc9a399fa5f1e50ab"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
@ -2100,62 +2100,62 @@ xmp = ["defusedxml"]
|
|||
|
||||
[[package]]
|
||||
name = "pillow-heif"
|
||||
version = "0.22.0"
|
||||
version = "1.0.0"
|
||||
description = "Python interface for libheif library"
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "pillow_heif-0.22.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:bc78e4eb3198462ad6a79a73b7da0bc83a7d50a24e65429104e491cd3924ec08"},
|
||||
{file = "pillow_heif-0.22.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:e78b48e85c981d03a3307bcf258763d54a2ab3d2426f11b3e6345d63fda038cb"},
|
||||
{file = "pillow_heif-0.22.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7b8b1535df032730d3a1b4050f235b539dddac784dfc58612b072dcab3f85c1"},
|
||||
{file = "pillow_heif-0.22.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d68d5eb3ea132613ed2fc6b20cf30359b886786b5b428554cd951a8aab4cd1e4"},
|
||||
{file = "pillow_heif-0.22.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:27400e7abc476df122d712b44cfe2eac5b2825cbe8761541bfc9a1c64ba2cb56"},
|
||||
{file = "pillow_heif-0.22.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9b7d765b00e7b80245120e0d53259b61f54bba2957f116f5ee07fcc1769be93f"},
|
||||
{file = "pillow_heif-0.22.0-cp310-cp310-win_amd64.whl", hash = "sha256:2345932d4efea71fce7990a8412c37f2e1dd19bf97909f42d96a452ad18a21db"},
|
||||
{file = "pillow_heif-0.22.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:782eef461c836b3947fe253baaa5dcf6c75fba484c4905b4ac6b5b1a0bb04b7c"},
|
||||
{file = "pillow_heif-0.22.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:b3035b4b4304e7624f9559989618ccad8ac614144befd30361ff51941b8c1b44"},
|
||||
{file = "pillow_heif-0.22.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f73b7ce0d47e2dbd4f89de765a0c2d6e75f7dde95c5a5d87c4a6ad11bc9da4a3"},
|
||||
{file = "pillow_heif-0.22.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:550093ee350c8cd404dbba61f7449d4ecc018109ab65f6f89b96a6dc39dde177"},
|
||||
{file = "pillow_heif-0.22.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:646f2d05dd4a84ee1feb3a4aaa092269bf8f3f615c8f36d6e5d15b22a79d7cdd"},
|
||||
{file = "pillow_heif-0.22.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8ccd70ff3c30e93f8153fa08b5533aee54a73574c980784f0b74f5fba7b61e19"},
|
||||
{file = "pillow_heif-0.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf30bcaab9d2c0dbc43bb58d385faa9d3d8a693392beb50287aa6cda7a2f769e"},
|
||||
{file = "pillow_heif-0.22.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:8b6e195b4cb17bf71e374b167f14be434dde54bb68afee6fba5aa1b6f7644bee"},
|
||||
{file = "pillow_heif-0.22.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:6e31596116328d0a3bd5a3be9fbacea56e28d5950c824b12d2486e9989364bc0"},
|
||||
{file = "pillow_heif-0.22.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af08d451689539a2f9c4c6088180548b6146475f34d41a1334bc4ee1eab7a0b"},
|
||||
{file = "pillow_heif-0.22.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8a058d7243779f5b02736b16d5be8f4a13321cb9163dd06a3ea90052dd68cb8"},
|
||||
{file = "pillow_heif-0.22.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ff9f295a89b616e2f1648286752f269d4e3055f54884a7a46c5c74ea4b23c20c"},
|
||||
{file = "pillow_heif-0.22.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1f548d852405a84bdfbc76ec060e94c0b17c9a06da968c104fd6146d874d9f07"},
|
||||
{file = "pillow_heif-0.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:f0e980ac065690a61732dbdc3bac50de4064d09df24fca435178bd63df31a180"},
|
||||
{file = "pillow_heif-0.22.0-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:31a2a4838b3eacec665befbd621a43201c2ece0e35d636e001c4039cca875ba8"},
|
||||
{file = "pillow_heif-0.22.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:c5b25c2c4f147ca57e51ecfdd833c9ae9cbf00c8da34b7892ec0c8f4b57785b9"},
|
||||
{file = "pillow_heif-0.22.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8563f14d76e544f5d1e8915c34dc2b01863351b7f74efbbaf9671d599b4ea5b"},
|
||||
{file = "pillow_heif-0.22.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24b7b5bdc5a3a953cdf1de8aa8ee83b0305ab6be3c7808b1ca67594df0d750e2"},
|
||||
{file = "pillow_heif-0.22.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9dcde90c30e61f1f0da30393bf1983fe8dad3b890f52406e617b7840c682948"},
|
||||
{file = "pillow_heif-0.22.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:29caf663afcf142ac7ffb903fda4e5a01991054a0fe4abd379fef3d42575ca67"},
|
||||
{file = "pillow_heif-0.22.0-cp313-cp313-win_amd64.whl", hash = "sha256:bac5e9a4d85ffc724180eb0fa3aef304aa9b67faea6f86c33e4c2e6a447db098"},
|
||||
{file = "pillow_heif-0.22.0-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:ee1a8d571636dffcc576d0d23a4017fe9c4635e585944fe72af6cfa7a5ed05ff"},
|
||||
{file = "pillow_heif-0.22.0-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:165b7e0d87e233f42be3de1237d7c026916c356de476d4aeaac1febafaab45c3"},
|
||||
{file = "pillow_heif-0.22.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c65291dc4f2f8404720b781580aba00eb3120acd26d829a58140b317d69093d3"},
|
||||
{file = "pillow_heif-0.22.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7903f947db209b39e63e83def9885c2cb8bd3ace9982c5950773470911a6651e"},
|
||||
{file = "pillow_heif-0.22.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d96d73cb237ca55aeff09bd13eb7824f3f279ef8939583a3c57b9e765d5bc7a7"},
|
||||
{file = "pillow_heif-0.22.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1a5c88b34b49731d79deaf4f4ac8726400de9ca44e5b50cae56775ee60c3b85b"},
|
||||
{file = "pillow_heif-0.22.0-cp39-cp39-win_amd64.whl", hash = "sha256:6cb570abd9045f0141fe5053d8d0adf09e2d4c0bf51ae1736140d48a9cfec2d3"},
|
||||
{file = "pillow_heif-0.22.0-pp310-pypy310_pp73-macosx_13_0_x86_64.whl", hash = "sha256:49f2258f08d85cab66408c48fa437accbe9b89f2387a4e847664645c8ce7e669"},
|
||||
{file = "pillow_heif-0.22.0-pp310-pypy310_pp73-macosx_14_0_arm64.whl", hash = "sha256:a15ecf743d14bc772188bf8f25f15f81ddf9a441e8dbe53f6ee10582431ccb01"},
|
||||
{file = "pillow_heif-0.22.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760f910ff90a97f9764be79e55a14c4ad0470322bb60b40789b3a0c38200dd3"},
|
||||
{file = "pillow_heif-0.22.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b91c8a76bafdf776c4251475805ce777c2803e30386e997738a6b5c80efe437"},
|
||||
{file = "pillow_heif-0.22.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a7c70fe0b5b6c232749ac7cbb608f0732a66804598a422cfcfbb1fb77e076f77"},
|
||||
{file = "pillow_heif-0.22.0-pp39-pypy39_pp73-macosx_13_0_x86_64.whl", hash = "sha256:1b46976aa563e031dece0b9eb3611e02622e2a6cea0e3f4146e0dd95b304505d"},
|
||||
{file = "pillow_heif-0.22.0-pp39-pypy39_pp73-macosx_14_0_arm64.whl", hash = "sha256:79010a7c4544d8e2ff2027087003a77e679d35399c6a1d73d6344d88acef0d2c"},
|
||||
{file = "pillow_heif-0.22.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:487543a9d00157132f1aa45eee8099b3359c8626a85ee420dd28abab0d29428b"},
|
||||
{file = "pillow_heif-0.22.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c6f37f7f2ef0a12cfb8498c75ce964a57ca61258058c1bceb6dee4327b5b324"},
|
||||
{file = "pillow_heif-0.22.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:827640bbb58b227a60095911f909d9eead1f7aa31417a80aa86b87f15bfa758b"},
|
||||
{file = "pillow_heif-0.22.0.tar.gz", hash = "sha256:61d473929340d3073722f6316b7fbbdb11132faa6bac0242328e8436cc55b39a"},
|
||||
{file = "pillow_heif-1.0.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:5c1896b96c4b219846435ab859723853a8c42758ad4300d3ed8427b91496762d"},
|
||||
{file = "pillow_heif-1.0.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:7e5ab47004e5c8f891229b051daacb1a90c16cb547a4849825f8be7321145fe3"},
|
||||
{file = "pillow_heif-1.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba94f702f1c5203d98c625567af0a01d87bc7e69c3a451262d4fb76af25d827"},
|
||||
{file = "pillow_heif-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:661fb336e509294b892f1310282829359eaa7f628317e4cd1a42b1c056cb9f2f"},
|
||||
{file = "pillow_heif-1.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5ce8ad2dc09c6100b27ea69ad681941b694878cb307b7058f1a5127b55ff0af9"},
|
||||
{file = "pillow_heif-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:98962fdc791e093749a8393aa02eeaa12593ca08f5064798572bb0553f302f81"},
|
||||
{file = "pillow_heif-1.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:c4258cfca6edf34cb6f804fec9c8494eb6fe8f9029d7dea9fbd46e5648c127a8"},
|
||||
{file = "pillow_heif-1.0.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:812bb192e98a1eb0f037cddccd6c95930e3b6ff00951c67f4623c2ab085d8938"},
|
||||
{file = "pillow_heif-1.0.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0beb5a4d8ebdcc4bfd35c911cf0b2537ef1a6a145f4cf8a5468b1531fea9e89c"},
|
||||
{file = "pillow_heif-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:560b7d6d265dc256ced56c9758de0efe927125d3132cc49e88328116d163823b"},
|
||||
{file = "pillow_heif-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60ce73485154c7334d884f77cd4120b91b3daef4abdfd91970ebddcde955a9bb"},
|
||||
{file = "pillow_heif-1.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:97ea05e4e71f70ec05ebea6a185e0fb3aaf31f081f452e3061f3aa237f52165a"},
|
||||
{file = "pillow_heif-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a9cd71162046488e6f98507436cd8e7f85202a858adfce7b296b461eeb1e5b06"},
|
||||
{file = "pillow_heif-1.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:ffd8307e9fc4ad3cd998ffdf18eb15c1a1ccafffb5ac4d6a213368e4af7a4b39"},
|
||||
{file = "pillow_heif-1.0.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:4217447e61df85d847718ecf4054d4292b691eee74fa565f0b650da1dc357f34"},
|
||||
{file = "pillow_heif-1.0.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:425b1aac012fc59fc703cdce05ac125ffa2970ec9839bb8d763d8645eb59308c"},
|
||||
{file = "pillow_heif-1.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ec85dfc7db7b34944e7a4c885a7d72fb470d532bb696c490445954a50db7241"},
|
||||
{file = "pillow_heif-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71fa395744c53a3b4ceb2fbf29b63e556c64591038472600af9e368940f930c0"},
|
||||
{file = "pillow_heif-1.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9691125b30d352b2817a544d3155f6a5911378d08901ee4b71ba3e4305fa32a0"},
|
||||
{file = "pillow_heif-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ca0e829e6c6986a3acc33efb9e762439b84f0ecc8e583204f04ad8001b192bf"},
|
||||
{file = "pillow_heif-1.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:0f0b8546fe98f0938cb6afd1127f2b7a855f4a657e31dcebedaee97ba5662da9"},
|
||||
{file = "pillow_heif-1.0.0-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:6a7b14de333709ef9fdd4de57bda3103eb3178b6ed267f9e60bfd64bfb7c5c41"},
|
||||
{file = "pillow_heif-1.0.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:07fba7ffbcc7841cc4e5a3bd781628ef6a2359c633d28fcd14ad490b09060bb3"},
|
||||
{file = "pillow_heif-1.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0ab4c56637c2b332e15383a14ee1b493fbbc5dbc756a0b372b7c23df1ed281a"},
|
||||
{file = "pillow_heif-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:809e4fd18bf1f683788d71449ae0ed7522e16c4a892a040ec64cf97377e6efd5"},
|
||||
{file = "pillow_heif-1.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6d928a5e9f1cfa9e300695329bf9db08e01bcb14b14c4e6a48d6c032bf9dfa1c"},
|
||||
{file = "pillow_heif-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f02906fd84688138bcbdbbd75fbef77356043bc6199516a152cc66811d1b7198"},
|
||||
{file = "pillow_heif-1.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:864a01279069fcd1d99ac0c8ad3263c478438eb9adaa084a2f3d2278049b308f"},
|
||||
{file = "pillow_heif-1.0.0-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:e4dd88b416199484aeebd467452293d4c29ab33a6e263eac735f5318b1713ab6"},
|
||||
{file = "pillow_heif-1.0.0-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:6132ce820142c4a79510347dd3f0bf7410ed6e8780202821fb95540bfc8d7484"},
|
||||
{file = "pillow_heif-1.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc76e1c27e80e8799ff476a2a768d65eef7d35db804d2386f8f50c8be47ab4e7"},
|
||||
{file = "pillow_heif-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:061ee478b84899c8491e3370a5f5722952ce6644a64f07c7c82df00cad9324ab"},
|
||||
{file = "pillow_heif-1.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2aa751d305fec59ff6ee86d23309bd06be0166e0b8cb9e1beb3d7498f309ccbf"},
|
||||
{file = "pillow_heif-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e541afa24d19030d0f6582374ed3dd9edefe022bc23ae4dfd0f3c09ab7b839d4"},
|
||||
{file = "pillow_heif-1.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:1b169dd41eed440eb26325d6daa85ede96ca02666966d898e5dcd045dd6ab37b"},
|
||||
{file = "pillow_heif-1.0.0-pp310-pypy310_pp73-macosx_13_0_x86_64.whl", hash = "sha256:c63517df8df208e9f7d54a6160201e9eb437d39e658c5267037213710c071631"},
|
||||
{file = "pillow_heif-1.0.0-pp310-pypy310_pp73-macosx_14_0_arm64.whl", hash = "sha256:97b96897c92f1fcc99ee8b76a1f82fe48b61d03af0b4ce2b3913f49c2c0a74f1"},
|
||||
{file = "pillow_heif-1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9b71197918a02b6e56ff2f087573de77da3057152ad29677f7625345e151b85"},
|
||||
{file = "pillow_heif-1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83355656529029e048ed872d9d8ccae07f4f77625629041207d47b7573d26fbf"},
|
||||
{file = "pillow_heif-1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:431cf83fc16f6760995da83563379233fb32b355309d08c4afabb53fdded5417"},
|
||||
{file = "pillow_heif-1.0.0-pp311-pypy311_pp73-macosx_13_0_x86_64.whl", hash = "sha256:6df834a4fe4f5cb0c2641996f323ac0354a2c1133aee494e649848bbeb093bbb"},
|
||||
{file = "pillow_heif-1.0.0-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:f9c17066adc84820d465ce51ce0e8448e1074886ff765b6c07b81802eba0a0dd"},
|
||||
{file = "pillow_heif-1.0.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10eb674f94f8a7f449c2a0b32530fa34bd6c78a6717be8a0068e591c73b6fb"},
|
||||
{file = "pillow_heif-1.0.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62c6db1706367d6cf7fb04ad6074ab88f3863dde73cc14feeddb7c6a396d0c88"},
|
||||
{file = "pillow_heif-1.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2c6486b9026d776e0dea264db3aa2f9aa6304aa1335f9a96f9b32aca1ce16cbc"},
|
||||
{file = "pillow_heif-1.0.0.tar.gz", hash = "sha256:0df7a1fb29bd55bc77fd286195eeb02604e356a5da3d5e8786129b91263b99e2"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
pillow = ">=10.1.0"
|
||||
pillow = ">=11.1.0"
|
||||
|
||||
[package.extras]
|
||||
dev = ["coverage", "defusedxml", "numpy", "opencv-python (==4.11.0.86)", "packaging", "pre-commit", "pylint", "pympler", "pytest", "setuptools"]
|
||||
|
@ -3543,14 +3543,14 @@ files = [
|
|||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.14.0"
|
||||
version = "4.14.1"
|
||||
description = "Backported and Experimental Type Hints for Python 3.9+"
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
groups = ["main", "dev"]
|
||||
files = [
|
||||
{file = "typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af"},
|
||||
{file = "typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4"},
|
||||
{file = "typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76"},
|
||||
{file = "typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -3871,4 +3871,4 @@ pgsql = ["psycopg2-binary"]
|
|||
[metadata]
|
||||
lock-version = "2.1"
|
||||
python-versions = ">=3.12,<3.13"
|
||||
content-hash = "7c0755d30c7245d3c7f4a86ef90db901a61b3f8d7ed39f59d7eb10f794136e02"
|
||||
content-hash = "df16815f799254568f5e7083c49bb302e77003bcafbd34dfa92ad65d0335efb3"
|
||||
|
|
|
@ -14,7 +14,7 @@ mealie = "mealie.main:main"
|
|||
|
||||
[tool.poetry.dependencies]
|
||||
Jinja2 = "^3.1.2"
|
||||
Pillow = "^11.0.0"
|
||||
Pillow = "^11.3.0"
|
||||
PyYAML = "^6.0.1"
|
||||
SQLAlchemy = "^2"
|
||||
aiofiles = "^24.0.0"
|
||||
|
@ -49,7 +49,7 @@ authlib = "^1.3.0"
|
|||
html2text = "^2025.0.0"
|
||||
paho-mqtt = "^1.6.1"
|
||||
pydantic-settings = "^2.1.0"
|
||||
pillow-heif = "^0.22.0"
|
||||
pillow-heif = "^1.0.0"
|
||||
pyjwt = "^2.8.0"
|
||||
openai = "^1.63.0"
|
||||
typing-extensions = "^4.12.2"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue