mirror of
https://github.com/hay-kot/mealie.git
synced 2025-08-21 22:13:31 -07:00
Merge remote-tracking branch 'upstream/mealie-next' into feat/remove-food-flag
This commit is contained in:
commit
53748ea65f
27 changed files with 840 additions and 770 deletions
|
@ -12,7 +12,7 @@ repos:
|
|||
exclude: ^tests/data/
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.12.4
|
||||
rev: v0.12.5
|
||||
hooks:
|
||||
- id: ruff
|
||||
- id: ruff-format
|
||||
|
|
|
@ -3,7 +3,10 @@
|
|||
<v-expand-transition>
|
||||
<v-card
|
||||
:ripple="false"
|
||||
:class="isFlat ? 'mx-auto flat' : 'mx-auto'"
|
||||
:class="[
|
||||
isFlat ? 'mx-auto flat' : 'mx-auto',
|
||||
{ 'disable-highlight': disableHighlight },
|
||||
]"
|
||||
:style="{ cursor }"
|
||||
hover
|
||||
height="100%"
|
||||
|
@ -181,6 +184,10 @@ export default defineNuxtComponent({
|
|||
type: [Number],
|
||||
default: 150,
|
||||
},
|
||||
disableHighlight: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
emits: ["selected", "delete"],
|
||||
setup(props) {
|
||||
|
@ -241,4 +248,8 @@ export default defineNuxtComponent({
|
|||
box-shadow: none !important;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.disable-highlight :deep(.v-card__overlay) {
|
||||
opacity: 0 !important;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -81,7 +81,7 @@
|
|||
</v-card>
|
||||
<WakelockSwitch />
|
||||
<RecipePageComments
|
||||
v-if="!recipe.settings.disableComments && !isEditForm && !isCookMode"
|
||||
v-if="!recipe.settings?.disableComments && !isEditForm && !isCookMode"
|
||||
v-model="recipe"
|
||||
class="px-1 my-4 d-print-none"
|
||||
/>
|
||||
|
@ -277,7 +277,7 @@ async function deleteRecipe() {
|
|||
* View Preferences
|
||||
*/
|
||||
const landscape = computed(() => {
|
||||
const preferLandscape = recipe.value.settings.landscapeView;
|
||||
const preferLandscape = recipe.value.settings?.landscapeView;
|
||||
const smallScreen = !$vuetify.display.smAndUp.value;
|
||||
|
||||
if (preferLandscape) {
|
||||
|
|
|
@ -29,33 +29,31 @@
|
|||
{{ activeText }}
|
||||
</p>
|
||||
<v-divider class="mb-4" />
|
||||
<v-checkbox
|
||||
<v-checkbox-btn
|
||||
v-for="ing in unusedIngredients"
|
||||
:key="ing.referenceId"
|
||||
v-model="activeRefs"
|
||||
:value="ing.referenceId"
|
||||
class="mb-n2 mt-n2"
|
||||
>
|
||||
<template #label>
|
||||
<RecipeIngredientHtml :markup="parseIngredientText(ing)" />
|
||||
</template>
|
||||
</v-checkbox>
|
||||
</v-checkbox-btn>
|
||||
|
||||
<template v-if="usedIngredients.length > 0">
|
||||
<h4 class="py-3 ml-1">
|
||||
{{ $t("recipe.linked-to-other-step") }}
|
||||
</h4>
|
||||
<v-checkbox
|
||||
<v-checkbox-btn
|
||||
v-for="ing in usedIngredients"
|
||||
:key="ing.referenceId"
|
||||
v-model="activeRefs"
|
||||
:value="ing.referenceId"
|
||||
class="mb-n2 mt-n2"
|
||||
>
|
||||
<template #label>
|
||||
<RecipeIngredientHtml :markup="parseIngredientText(ing)" />
|
||||
</template>
|
||||
</v-checkbox>
|
||||
</v-checkbox-btn>
|
||||
</template>
|
||||
</v-card-text>
|
||||
|
||||
|
|
|
@ -66,12 +66,12 @@
|
|||
<v-card-text class="mt-n5">
|
||||
<div class="mt-4 d-flex align-center">
|
||||
<v-text-field
|
||||
:model-value="yieldQuantityEditorValue"
|
||||
:model-value="yieldQuantity"
|
||||
type="number"
|
||||
:min="0"
|
||||
variant="underlined"
|
||||
hide-spin-buttons
|
||||
@update:model-value="recalculateScale(yieldQuantityEditorValue)"
|
||||
@update:model-value="recalculateScale(parseFloat($event) || 0)"
|
||||
/>
|
||||
<v-tooltip
|
||||
end
|
||||
|
@ -81,6 +81,7 @@
|
|||
<v-btn
|
||||
v-bind="props"
|
||||
icon
|
||||
flat
|
||||
class="mx-1"
|
||||
size="small"
|
||||
@click="scale = 1"
|
||||
|
@ -178,21 +179,8 @@ export default defineNuxtComponent({
|
|||
: "";
|
||||
});
|
||||
|
||||
// only update yield quantity when the menu opens, so we don't override the user's input
|
||||
const yieldQuantityEditorValue = ref(recipeYieldAmount.value.scaledAmount);
|
||||
watch(
|
||||
() => menu.value,
|
||||
() => {
|
||||
if (!menu.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
yieldQuantityEditorValue.value = recipeYieldAmount.value.scaledAmount;
|
||||
},
|
||||
);
|
||||
|
||||
const disableDecrement = computed(() => {
|
||||
return recipeYieldAmount.value.scaledAmount <= 1;
|
||||
return yieldQuantity.value <= 1;
|
||||
});
|
||||
|
||||
return {
|
||||
|
@ -202,7 +190,6 @@ export default defineNuxtComponent({
|
|||
recalculateScale,
|
||||
yieldDisplay,
|
||||
yieldQuantity,
|
||||
yieldQuantityEditorValue,
|
||||
disableDecrement,
|
||||
};
|
||||
},
|
||||
|
|
|
@ -242,28 +242,28 @@ export default defineNuxtComponent({
|
|||
alert.success(i18n.t("events.event-deleted") as string);
|
||||
};
|
||||
|
||||
async function getRecipe(recipeId: string): Promise<Recipe | null> {
|
||||
const { data } = await api.recipes.getOne(recipeId);
|
||||
return data;
|
||||
async function getRecipes(recipeIds: string[]): Promise<Recipe[]> {
|
||||
const qf = "id IN [" + recipeIds.map(id => `"${id}"`).join(", ") + "]";
|
||||
const { data } = await api.recipes.getAll(1, -1, { queryFilter: qf });
|
||||
return data?.items || [];
|
||||
};
|
||||
|
||||
async function updateRecipes(events: RecipeTimelineEventOut[]) {
|
||||
const recipePromises: Promise<Recipe | null>[] = [];
|
||||
const seenRecipeIds: string[] = [];
|
||||
const recipeIds: string[] = [];
|
||||
events.forEach((event) => {
|
||||
if (seenRecipeIds.includes(event.recipeId) || recipes.has(event.recipeId)) {
|
||||
if (recipeIds.includes(event.recipeId) || recipes.has(event.recipeId)) {
|
||||
return;
|
||||
}
|
||||
|
||||
seenRecipeIds.push(event.recipeId);
|
||||
recipePromises.push(getRecipe(event.recipeId));
|
||||
recipeIds.push(event.recipeId);
|
||||
});
|
||||
|
||||
const results = await Promise.all(recipePromises);
|
||||
const results = await getRecipes(recipeIds);
|
||||
results.forEach((result) => {
|
||||
if (result && result.id) {
|
||||
recipes.set(result.id, result);
|
||||
if (!result?.id) {
|
||||
return;
|
||||
}
|
||||
recipes.set(result.id, result);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -53,6 +53,7 @@
|
|||
<v-row :class="useMobileFormat ? 'py-3 mx-0' : 'py-3 mx-0'" style="max-width: 100%">
|
||||
<v-col align-self="center" class="pa-0">
|
||||
<RecipeCardMobile
|
||||
disable-highlight
|
||||
:vertical="useMobileFormat"
|
||||
:name="recipe.name"
|
||||
:slug="recipe.slug"
|
||||
|
|
|
@ -8,21 +8,23 @@
|
|||
class="flex-nowrap align-center"
|
||||
>
|
||||
<v-col :cols="itemLabelCols">
|
||||
<v-checkbox
|
||||
v-model="listItem.checked"
|
||||
class="mt-0"
|
||||
color="null"
|
||||
hide-details
|
||||
density="compact"
|
||||
:label="listItem.note!"
|
||||
@change="$emit('checked', listItem)"
|
||||
>
|
||||
<template #label>
|
||||
<div :class="listItem.checked ? 'strike-through' : ''">
|
||||
<RecipeIngredientListItem :ingredient="listItem" />
|
||||
</div>
|
||||
</template>
|
||||
</v-checkbox>
|
||||
<div class="d-flex align-center flex-nowrap">
|
||||
<v-checkbox
|
||||
v-model="listItem.checked"
|
||||
hide-details
|
||||
density="compact"
|
||||
class="mt-0"
|
||||
color="null"
|
||||
@change="$emit('checked', listItem)"
|
||||
/>
|
||||
<div
|
||||
class="ml-2 text-truncate"
|
||||
:class="listItem.checked ? 'strike-through' : ''"
|
||||
style="min-width: 0;"
|
||||
>
|
||||
<RecipeIngredientListItem :ingredient="listItem" />
|
||||
</div>
|
||||
</div>
|
||||
</v-col>
|
||||
<v-spacer />
|
||||
<v-col
|
||||
|
|
|
@ -22,10 +22,9 @@
|
|||
<v-card>
|
||||
<v-card-text>
|
||||
<v-checkbox
|
||||
v-for="itemValue in headers"
|
||||
v-for="itemValue in localHeaders"
|
||||
:key="itemValue.text + itemValue.show"
|
||||
v-model="filteredHeaders"
|
||||
:value="itemValue.value"
|
||||
v-model="itemValue.show"
|
||||
density="compact"
|
||||
flat
|
||||
inset
|
||||
|
@ -172,12 +171,20 @@ export default defineNuxtComponent({
|
|||
|
||||
// ===========================================================
|
||||
// Reactive Headers
|
||||
// Create a local reactive copy of headers that we can modify
|
||||
const localHeaders = ref([...props.headers]);
|
||||
|
||||
// Watch for changes in props.headers and update local copy
|
||||
watch(() => props.headers, (newHeaders) => {
|
||||
localHeaders.value = [...newHeaders];
|
||||
}, { deep: true });
|
||||
|
||||
const filteredHeaders = computed<string[]>(() => {
|
||||
return props.headers.filter(header => header.show).map(header => header.value);
|
||||
return localHeaders.value.filter(header => header.show).map(header => header.value);
|
||||
});
|
||||
|
||||
const headersWithoutActions = computed(() =>
|
||||
props.headers
|
||||
localHeaders.value
|
||||
.filter(header => filteredHeaders.value.includes(header.value))
|
||||
.map(header => ({
|
||||
...header,
|
||||
|
@ -214,6 +221,7 @@ export default defineNuxtComponent({
|
|||
return {
|
||||
sortBy,
|
||||
selected,
|
||||
localHeaders,
|
||||
filteredHeaders,
|
||||
headersWithoutActions,
|
||||
activeHeaders,
|
||||
|
|
|
@ -26,10 +26,10 @@ export default defineComponent({
|
|||
},
|
||||
},
|
||||
emits: ["update:modelValue"],
|
||||
setup(_, { emit }) {
|
||||
setup(props, { emit }) {
|
||||
function parseEvent(event: any): object {
|
||||
if (!event) {
|
||||
return {};
|
||||
return props.modelValue || {};
|
||||
}
|
||||
try {
|
||||
if (event.json) {
|
||||
|
@ -43,11 +43,14 @@ export default defineComponent({
|
|||
}
|
||||
}
|
||||
catch {
|
||||
return {};
|
||||
return props.modelValue || {};
|
||||
}
|
||||
}
|
||||
function onChange(event: any) {
|
||||
emit("update:modelValue", parseEvent(event));
|
||||
const parsed = parseEvent(event);
|
||||
if (parsed !== props.modelValue) {
|
||||
emit("update:modelValue", parsed);
|
||||
}
|
||||
}
|
||||
return {
|
||||
onChange,
|
||||
|
|
|
@ -38,7 +38,7 @@ export const useGroupWebhooks = function () {
|
|||
loading.value = true;
|
||||
|
||||
const payload = {
|
||||
enabled: false,
|
||||
enabled: true,
|
||||
name: "New Webhook",
|
||||
url: "",
|
||||
scheduledTime: "00:00",
|
||||
|
|
|
@ -3,13 +3,13 @@ export const LOCALES = [
|
|||
{
|
||||
name: "繁體中文 (Chinese traditional)",
|
||||
value: "zh-TW",
|
||||
progress: 8,
|
||||
progress: 9,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "简体中文 (Chinese simplified)",
|
||||
value: "zh-CN",
|
||||
progress: 33,
|
||||
progress: 35,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
|
@ -33,7 +33,7 @@ export const LOCALES = [
|
|||
{
|
||||
name: "Svenska (Swedish)",
|
||||
value: "sv-SE",
|
||||
progress: 47,
|
||||
progress: 50,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
|
@ -87,13 +87,13 @@ export const LOCALES = [
|
|||
{
|
||||
name: "Norsk (Norwegian)",
|
||||
value: "no-NO",
|
||||
progress: 38,
|
||||
progress: 39,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "Nederlands (Dutch)",
|
||||
value: "nl-NL",
|
||||
progress: 44,
|
||||
progress: 45,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
|
@ -147,7 +147,7 @@ export const LOCALES = [
|
|||
{
|
||||
name: "עברית (Hebrew)",
|
||||
value: "he-IL",
|
||||
progress: 45,
|
||||
progress: 67,
|
||||
dir: "rtl",
|
||||
},
|
||||
{
|
||||
|
@ -213,7 +213,7 @@ export const LOCALES = [
|
|||
{
|
||||
name: "Deutsch (German)",
|
||||
value: "de-DE",
|
||||
progress: 63,
|
||||
progress: 64,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
|
@ -225,7 +225,7 @@ export const LOCALES = [
|
|||
{
|
||||
name: "Čeština (Czech)",
|
||||
value: "cs-CZ",
|
||||
progress: 40,
|
||||
progress: 39,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
|
|
|
@ -579,10 +579,10 @@
|
|||
"made-this": "Jag lagade den här",
|
||||
"how-did-it-turn-out": "Hur blev rätten?",
|
||||
"user-made-this": "{user} lagade detta",
|
||||
"added-to-timeline": "Added to timeline",
|
||||
"failed-to-add-to-timeline": "Failed to add to timeline",
|
||||
"failed-to-update-recipe": "Failed to update recipe",
|
||||
"added-to-timeline-but-failed-to-add-image": "Added to timeline, but failed to add image",
|
||||
"added-to-timeline": "Lagt till i tidslinjen",
|
||||
"failed-to-add-to-timeline": "Kunde inte lägga till i tidslinjen",
|
||||
"failed-to-update-recipe": "Kunde inte uppdatera receptet",
|
||||
"added-to-timeline-but-failed-to-add-image": "Lagt till i tidslinjen men kunde inte lägga till bild",
|
||||
"api-extras-description": "Recept API-tillägg är en viktig funktion i Mealie's API. Med hjälp av dem kan du skapa anpassade JSON-nyckel/värdepar i ett recept, som du kan referera till från tredjepartsapplikationer. Du kan använda dessa nycklar för att tillhandahålla information, till exempel för att trigga automatiseringar eller anpassade meddelanden som ska vidarebefordras till önskad enhet.",
|
||||
"message-key": "Meddelandenyckel",
|
||||
"parse": "Läs in",
|
||||
|
|
|
@ -16,7 +16,10 @@
|
|||
{{ $t("recipe.group-global-timeline", { groupName }) }}
|
||||
</template>
|
||||
</BasePageTitle>
|
||||
<v-sheet :class="$vuetify.display.smAndDown ? 'pa-0' : 'px-3 py-0'">
|
||||
<v-sheet
|
||||
:class="$vuetify.display.smAndDown ? 'pa-0' : 'px-3 py-0'"
|
||||
style="background-color: transparent;"
|
||||
>
|
||||
<RecipeTimeline
|
||||
v-if="queryFilter"
|
||||
v-model="ready"
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
:title="$t('general.confirm')"
|
||||
:icon="$globals.icons.alertCircle"
|
||||
color="error"
|
||||
can-confirm
|
||||
@confirm="deleteSelected"
|
||||
>
|
||||
<v-card-text>
|
||||
|
|
|
@ -73,6 +73,7 @@
|
|||
:title="$t('general.confirm')"
|
||||
:icon="$globals.icons.alertCircle"
|
||||
color="error"
|
||||
can-confirm
|
||||
@confirm="deleteSelected"
|
||||
>
|
||||
<v-card-text>
|
||||
|
|
|
@ -4135,8 +4135,8 @@
|
|||
"country style rib": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "country style rib",
|
||||
"plural_name": "country style ribs"
|
||||
"name": "Rippe nach Landhausart",
|
||||
"plural_name": "Rippchen nach Landhausart"
|
||||
},
|
||||
"black forest ham": {
|
||||
"aliases": [],
|
||||
|
@ -4189,8 +4189,8 @@
|
|||
"hard salami": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "hard salami",
|
||||
"plural_name": "hard salamis"
|
||||
"name": "Hartsalami",
|
||||
"plural_name": "Hartsalamis"
|
||||
},
|
||||
"back bacon": {
|
||||
"aliases": [],
|
||||
|
@ -4238,19 +4238,19 @@
|
|||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "Getrocknetes Rindfleisch",
|
||||
"plural_name": "dried beefs"
|
||||
"plural_name": "Trockenfleisch"
|
||||
},
|
||||
"gammon joint": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "gammon joint",
|
||||
"plural_name": "gammon joints"
|
||||
"name": "Geräucherter Schweineschinken",
|
||||
"plural_name": "Geräucherte Schweineschinken"
|
||||
},
|
||||
"boneless beef short rib": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "boneless beef short rib",
|
||||
"plural_name": "boneless beef short ribs"
|
||||
"name": "Ausgelöste Rinderrippe",
|
||||
"plural_name": "Ausgelöste Rinderrippchen"
|
||||
},
|
||||
"country ham": {
|
||||
"aliases": [],
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
"bell pepper": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "bell pepper",
|
||||
"plural_name": "bell peppers"
|
||||
"name": "στρογγυλή πιπεριά",
|
||||
"plural_name": "στρογγυλές πιπεριές"
|
||||
},
|
||||
"carrot": {
|
||||
"aliases": [],
|
||||
|
@ -168,20 +168,20 @@
|
|||
"arugula": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "arugula",
|
||||
"plural_name": "arugulas"
|
||||
"name": "ρόκα",
|
||||
"plural_name": "ρόκα"
|
||||
},
|
||||
"leek": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "leek",
|
||||
"plural_name": "leeks"
|
||||
"name": "πράσο",
|
||||
"plural_name": "πράσα"
|
||||
},
|
||||
"eggplant": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "eggplant",
|
||||
"plural_name": "eggplants"
|
||||
"name": "μελιτζάνα",
|
||||
"plural_name": "μελιτζάνες"
|
||||
},
|
||||
"lettuce": {
|
||||
"aliases": [],
|
||||
|
@ -198,8 +198,8 @@
|
|||
"romaine": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "romaine",
|
||||
"plural_name": "romaines"
|
||||
"name": "μαρούλι",
|
||||
"plural_name": "μαρούλια"
|
||||
},
|
||||
"beetroot": {
|
||||
"aliases": [],
|
||||
|
@ -210,48 +210,48 @@
|
|||
"brussels sprout": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "brussels sprout",
|
||||
"plural_name": "brussels sprouts"
|
||||
"name": "λαχανάκι Βρυξελλών",
|
||||
"plural_name": "λαχανάκια Βρυξελλών"
|
||||
},
|
||||
"fennel": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "fennel",
|
||||
"plural_name": "fennels"
|
||||
"name": "μάραθος",
|
||||
"plural_name": "μάραθος"
|
||||
},
|
||||
"sun dried tomato": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sun dried tomato",
|
||||
"plural_name": "sun dried tomatoes"
|
||||
"name": "αποξηραμένη ντομάτα",
|
||||
"plural_name": "αποξηραμένες ντομάτες"
|
||||
},
|
||||
"radish": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "radish",
|
||||
"plural_name": "radishes"
|
||||
"name": "ραπανάκι",
|
||||
"plural_name": "ραπανάκια"
|
||||
},
|
||||
"red cabbage": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "red cabbage",
|
||||
"plural_name": "red cabbages"
|
||||
"name": "κόκκινο λάχανο",
|
||||
"plural_name": "κόκκινα λάχανα"
|
||||
},
|
||||
"artichoke": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "artichoke",
|
||||
"plural_name": "artichokes"
|
||||
"name": "αγκινάρα",
|
||||
"plural_name": "αγκινάρες"
|
||||
},
|
||||
"new potato": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "new potato",
|
||||
"plural_name": "new potatoes"
|
||||
"name": "φρέσια πατάτα",
|
||||
"plural_name": "φρέσκες πατάτες"
|
||||
},
|
||||
"summer squash": {
|
||||
"aliases": [
|
||||
"courgette",
|
||||
"κολοκυθάκι",
|
||||
"gem squash"
|
||||
],
|
||||
"description": "",
|
||||
|
@ -261,8 +261,8 @@
|
|||
"mixed green": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "mixed green",
|
||||
"plural_name": "mixed greens"
|
||||
"name": "ανάμικτη πρασινάδα",
|
||||
"plural_name": "ανάμικτη πρασινάδα"
|
||||
},
|
||||
"parsnip": {
|
||||
"aliases": [],
|
||||
|
@ -273,14 +273,14 @@
|
|||
"baby carrot": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "baby carrot",
|
||||
"plural_name": "baby carrots"
|
||||
"name": "καρότο μπέιμπι",
|
||||
"plural_name": "καρότα μπέιμπι"
|
||||
},
|
||||
"mixed vegetable": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "mixed vegetable",
|
||||
"plural_name": "mixed vegetables"
|
||||
"name": "μιξ λαχανικού",
|
||||
"plural_name": "μιξ λαχανικών"
|
||||
},
|
||||
"poblano pepper": {
|
||||
"aliases": [],
|
||||
|
@ -291,8 +291,8 @@
|
|||
"sweet pepper": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sweet pepper",
|
||||
"plural_name": "sweet peppers"
|
||||
"name": "γλυκιά πιπεριά",
|
||||
"plural_name": "γλυκές πιπεριές "
|
||||
},
|
||||
"serrano pepper": {
|
||||
"aliases": [],
|
||||
|
@ -628,93 +628,93 @@
|
|||
"foods": {
|
||||
"tomato": {
|
||||
"aliases": [],
|
||||
"description": "Yes they are a fruit",
|
||||
"name": "tomato",
|
||||
"plural_name": "tomatoes"
|
||||
"description": "Σωστά, είναι φρούτο",
|
||||
"name": "ντομάτα",
|
||||
"plural_name": "ντομάτες"
|
||||
},
|
||||
"lemon": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "lemon",
|
||||
"plural_name": "lemons"
|
||||
"name": "λεμόνι",
|
||||
"plural_name": "λεμόνια"
|
||||
},
|
||||
"lime": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "lime",
|
||||
"plural_name": "limes"
|
||||
"name": "λάιμ",
|
||||
"plural_name": "λάιμ"
|
||||
},
|
||||
"apple": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "apple",
|
||||
"name": "μήλο",
|
||||
"plural_name": "μήλα"
|
||||
},
|
||||
"banana": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "banana",
|
||||
"plural_name": "bananas"
|
||||
"name": "μπανάνα",
|
||||
"plural_name": "μπανάνες"
|
||||
},
|
||||
"orange": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "orange",
|
||||
"plural_name": "oranges"
|
||||
"name": "πορτοκάλι",
|
||||
"plural_name": "πορτοκάλια"
|
||||
},
|
||||
"raisin": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "raisin",
|
||||
"plural_name": "raisins"
|
||||
"name": "σταφίδα",
|
||||
"plural_name": "σταφίδες"
|
||||
},
|
||||
"pineapple": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "pineapple",
|
||||
"plural_name": "pineapples"
|
||||
"name": "ανανάς",
|
||||
"plural_name": "ανανάδες"
|
||||
},
|
||||
"mango": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "mango",
|
||||
"plural_name": "mangoes"
|
||||
"name": "μάνγκο",
|
||||
"plural_name": "μάνγκο"
|
||||
},
|
||||
"peach": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "peach",
|
||||
"plural_name": "peaches"
|
||||
"name": "ροδάκινο",
|
||||
"plural_name": "ροδάκινα"
|
||||
},
|
||||
"date": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "date",
|
||||
"plural_name": "dates"
|
||||
"name": "χουρμάς",
|
||||
"plural_name": "χουρμάδες"
|
||||
},
|
||||
"coconut": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "coconut",
|
||||
"plural_name": "coconuts"
|
||||
"name": "καρύδα",
|
||||
"plural_name": "καρύδες"
|
||||
},
|
||||
"craisin": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "craisin",
|
||||
"plural_name": "craisins"
|
||||
"name": "αποξηραμένο κράνμπερι",
|
||||
"plural_name": "αποξηραμένα κράνμπερι"
|
||||
},
|
||||
"pear": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "pear",
|
||||
"plural_name": "pears"
|
||||
"name": "αχλάδι",
|
||||
"plural_name": "αχλάδια"
|
||||
},
|
||||
"grape": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "grape",
|
||||
"plural_name": "grapes"
|
||||
"name": "σταφύλι",
|
||||
"plural_name": "σταφύλια"
|
||||
},
|
||||
"pomegranate": {
|
||||
"aliases": [],
|
||||
|
@ -725,8 +725,8 @@
|
|||
"watermelon": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "watermelon",
|
||||
"plural_name": "watermelons"
|
||||
"name": "καρπούζι",
|
||||
"plural_name": "καρπούζια"
|
||||
},
|
||||
"rhubarb": {
|
||||
"aliases": [],
|
||||
|
@ -743,8 +743,8 @@
|
|||
"kiwi": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "kiwi",
|
||||
"plural_name": "kiwis"
|
||||
"name": "ακτινίδιο",
|
||||
"plural_name": "ακτινίδια"
|
||||
},
|
||||
"grapefruit": {
|
||||
"aliases": [],
|
||||
|
@ -821,8 +821,8 @@
|
|||
"nectarine": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "nectarine",
|
||||
"plural_name": "nectarines"
|
||||
"name": "νεκταρίνι",
|
||||
"plural_name": "νεκταρίνια"
|
||||
},
|
||||
"dried fig": {
|
||||
"aliases": [],
|
||||
|
@ -1251,14 +1251,14 @@
|
|||
"portobello mushroom": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "portobello mushroom",
|
||||
"plural_name": "portobello mushrooms"
|
||||
"name": "μανιτάρι πορτομπέλο",
|
||||
"plural_name": "μανιτάρια πορτομπέλο"
|
||||
},
|
||||
"wild mushroom": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "wild mushroom",
|
||||
"plural_name": "wild mushrooms"
|
||||
"name": "άγριο μανιτάρι",
|
||||
"plural_name": "άγρια μανιτάρια "
|
||||
},
|
||||
"porcini": {
|
||||
"aliases": [],
|
||||
|
@ -1269,8 +1269,8 @@
|
|||
"mixed mushroom": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "mixed mushroom",
|
||||
"plural_name": "mixed mushrooms"
|
||||
"name": "μιξ μανιτάρι",
|
||||
"plural_name": "μιξ μανιταριών"
|
||||
},
|
||||
"oyster mushroom": {
|
||||
"aliases": [],
|
||||
|
@ -2009,14 +2009,14 @@
|
|||
"cheddars"
|
||||
],
|
||||
"description": "",
|
||||
"name": "cheddar cheese",
|
||||
"plural_name": "cheddar cheeses"
|
||||
"name": "τυρί τσένταρ",
|
||||
"plural_name": "τυριά τσένταρ"
|
||||
},
|
||||
"cream cheese": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "cream cheese",
|
||||
"plural_name": "cream cheeses"
|
||||
"plural_name": "τυρί κρέμα"
|
||||
},
|
||||
"sharp cheddar": {
|
||||
"aliases": [],
|
||||
|
@ -2027,20 +2027,20 @@
|
|||
"cheese": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "cheese",
|
||||
"plural_name": "cheeses"
|
||||
"name": "τυρί",
|
||||
"plural_name": "τυριά"
|
||||
},
|
||||
"mozzarella": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "mozzarella",
|
||||
"plural_name": "mozzarellas"
|
||||
"name": "μοτσαρέλα",
|
||||
"plural_name": "μοτσαρέλες"
|
||||
},
|
||||
"feta": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "feta",
|
||||
"plural_name": "fetas"
|
||||
"name": "φέτα",
|
||||
"plural_name": "φέτες"
|
||||
},
|
||||
"ricotta": {
|
||||
"aliases": [],
|
||||
|
@ -2063,32 +2063,32 @@
|
|||
"blue cheese": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "blue cheese",
|
||||
"plural_name": "blue cheeses"
|
||||
"name": "ροκφόρ τυρί ",
|
||||
"plural_name": "ροκφόρ τυριά"
|
||||
},
|
||||
"goat cheese": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "goat cheese",
|
||||
"plural_name": "goat cheeses"
|
||||
"name": "κατσικίσιο τυρί ",
|
||||
"plural_name": "κατσικίσια τυριά"
|
||||
},
|
||||
"fresh mozzarella": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "fresh mozzarella",
|
||||
"plural_name": "fresh mozzarellas"
|
||||
"name": "φρέσκια μοτσαρέλα",
|
||||
"plural_name": "φρέσκιες μοτσαρέλες"
|
||||
},
|
||||
"swiss cheese": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "swiss cheese",
|
||||
"plural_name": "swiss cheeses"
|
||||
"name": "ελβετικό τυρί ",
|
||||
"plural_name": "ελβετικά τυριά "
|
||||
},
|
||||
"pecorino": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "pecorino",
|
||||
"plural_name": "pecorinoes"
|
||||
"name": "πεκορίνο",
|
||||
"plural_name": "πεκορίνο"
|
||||
},
|
||||
"gruyere": {
|
||||
"aliases": [],
|
||||
|
@ -2099,8 +2099,8 @@
|
|||
"mascarpone": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "mascarpone",
|
||||
"plural_name": "mascarpones"
|
||||
"name": "μασκαρπόνε",
|
||||
"plural_name": "μασκαρπόνε "
|
||||
},
|
||||
"cottage cheese": {
|
||||
"aliases": [],
|
||||
|
@ -2118,7 +2118,7 @@
|
|||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "provolone",
|
||||
"plural_name": "provolones"
|
||||
"plural_name": "provolone"
|
||||
},
|
||||
"mexican cheese blend": {
|
||||
"aliases": [],
|
||||
|
|
|
@ -14515,8 +14515,8 @@
|
|||
"rum": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "rum",
|
||||
"plural_name": "rums"
|
||||
"name": "rhum",
|
||||
"plural_name": "rhums"
|
||||
},
|
||||
"vodka": {
|
||||
"aliases": [],
|
||||
|
@ -14581,8 +14581,8 @@
|
|||
"white rum": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "white rum",
|
||||
"plural_name": "white rums"
|
||||
"name": "rhum blanc",
|
||||
"plural_name": "rhums blancs"
|
||||
},
|
||||
"coffee liqueur": {
|
||||
"aliases": [],
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -2453,20 +2453,20 @@
|
|||
"hard goat cheese": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "hard goat cheese",
|
||||
"plural_name": "hard goat cheeses"
|
||||
"name": "harde geiten kaas",
|
||||
"plural_name": "harde geiten kazen"
|
||||
},
|
||||
"kashkaval": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "kashkaval",
|
||||
"plural_name": "kashkavals"
|
||||
"plural_name": "schapen kaas"
|
||||
},
|
||||
"sheep cheese": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sheep cheese",
|
||||
"plural_name": "sheep cheeses"
|
||||
"name": "schapen kaas",
|
||||
"plural_name": "schapen kazen"
|
||||
},
|
||||
"amul cheese": {
|
||||
"aliases": [],
|
||||
|
|
|
@ -8540,8 +8540,8 @@
|
|||
"rice": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "rice",
|
||||
"plural_name": "rices"
|
||||
"name": "ris",
|
||||
"plural_name": "ris"
|
||||
},
|
||||
"Rice Krispie Cereal": {
|
||||
"aliases": [
|
||||
|
@ -8555,13 +8555,13 @@
|
|||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "quinoa",
|
||||
"plural_name": "quinoas"
|
||||
"plural_name": "quinoa"
|
||||
},
|
||||
"basmati rice": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "basmati rice",
|
||||
"plural_name": "basmati rices"
|
||||
"name": "basmatiris",
|
||||
"plural_name": "basmatiris"
|
||||
},
|
||||
"brown rice": {
|
||||
"aliases": [],
|
||||
|
@ -8578,26 +8578,26 @@
|
|||
"breakfast cereal": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "breakfast cereal",
|
||||
"plural_name": "breakfast cereals"
|
||||
"name": "frukostflinga",
|
||||
"plural_name": "frukostflingor"
|
||||
},
|
||||
"risotto rice": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "risotto rice",
|
||||
"plural_name": "risotto rices"
|
||||
"name": "risottoris",
|
||||
"plural_name": "risottoris"
|
||||
},
|
||||
"couscou": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "couscou",
|
||||
"name": "couscous",
|
||||
"plural_name": "couscous"
|
||||
},
|
||||
"rice cereal": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "rice cereal",
|
||||
"plural_name": "rice cereals"
|
||||
"name": "risflinga",
|
||||
"plural_name": "risflingor"
|
||||
},
|
||||
"wild rice": {
|
||||
"aliases": [],
|
||||
|
@ -8614,14 +8614,14 @@
|
|||
"jasmine rice": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "jasmine rice",
|
||||
"plural_name": "jasmine rices"
|
||||
"name": "jasminris",
|
||||
"plural_name": "jasminris"
|
||||
},
|
||||
"polenta": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "polenta",
|
||||
"plural_name": "polentas"
|
||||
"plural_name": "polenta"
|
||||
},
|
||||
"granola cereal": {
|
||||
"aliases": [],
|
||||
|
@ -8633,7 +8633,7 @@
|
|||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "bulgur",
|
||||
"plural_name": "bulgurs"
|
||||
"plural_name": "bulgur"
|
||||
},
|
||||
"pearl barley": {
|
||||
"aliases": [],
|
||||
|
@ -8686,8 +8686,8 @@
|
|||
"sushi rice": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sushi rice",
|
||||
"plural_name": "sushi rices"
|
||||
"name": "sushiris",
|
||||
"plural_name": "sushiris"
|
||||
},
|
||||
"glutinous rice": {
|
||||
"aliases": [],
|
||||
|
@ -8764,8 +8764,8 @@
|
|||
"muesli": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "muesli",
|
||||
"plural_name": "mueslis"
|
||||
"name": "müsli",
|
||||
"plural_name": "müsli"
|
||||
},
|
||||
"amaranth": {
|
||||
"aliases": [],
|
||||
|
@ -8812,8 +8812,8 @@
|
|||
"paella rice": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "paella rice",
|
||||
"plural_name": "paella rices"
|
||||
"name": "paellaris",
|
||||
"plural_name": "paellaris"
|
||||
},
|
||||
"sorghum": {
|
||||
"aliases": [],
|
||||
|
@ -8986,8 +8986,8 @@
|
|||
"gluten-free breakfast cereal": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "gluten-free breakfast cereal",
|
||||
"plural_name": "gluten-free breakfast cereals"
|
||||
"name": "glutenfri frukostflinga",
|
||||
"plural_name": "glutenfria frukostflingor"
|
||||
},
|
||||
"puffed amaranth": {
|
||||
"aliases": [],
|
||||
|
@ -9092,8 +9092,8 @@
|
|||
"pea": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "pea",
|
||||
"plural_name": "peas"
|
||||
"name": "ärta",
|
||||
"plural_name": "ärtor"
|
||||
},
|
||||
"green bean": {
|
||||
"aliases": [],
|
||||
|
@ -9104,8 +9104,8 @@
|
|||
"chickpea": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "chickpea",
|
||||
"plural_name": "chickpeas"
|
||||
"name": "kikärta",
|
||||
"plural_name": "kikärtor"
|
||||
},
|
||||
"black bean": {
|
||||
"aliases": [],
|
||||
|
@ -9116,20 +9116,20 @@
|
|||
"kidney bean": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "kidney bean",
|
||||
"plural_name": "kidney beans"
|
||||
"name": "kidneyböna",
|
||||
"plural_name": "kidneybönor"
|
||||
},
|
||||
"white bean": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "white bean",
|
||||
"plural_name": "white beans"
|
||||
"name": "vit böna",
|
||||
"plural_name": "vita bönor"
|
||||
},
|
||||
"lentil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "lentil",
|
||||
"plural_name": "lentils"
|
||||
"name": "lins",
|
||||
"plural_name": "linser"
|
||||
},
|
||||
"pinto bean": {
|
||||
"aliases": [],
|
||||
|
@ -9152,8 +9152,8 @@
|
|||
"red lentil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "red lentil",
|
||||
"plural_name": "red lentils"
|
||||
"name": "röd lins",
|
||||
"plural_name": "röda linser"
|
||||
},
|
||||
"cannellini bean": {
|
||||
"aliases": [],
|
||||
|
@ -9170,14 +9170,14 @@
|
|||
"edamame": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "edamame",
|
||||
"plural_name": "edamames"
|
||||
"name": "edamameböna",
|
||||
"plural_name": "edamamebönor"
|
||||
},
|
||||
"green lentil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "green lentil",
|
||||
"plural_name": "green lentils"
|
||||
"name": "grön lins",
|
||||
"plural_name": "gröna linser"
|
||||
},
|
||||
"urad dal": {
|
||||
"aliases": [],
|
||||
|
@ -9188,8 +9188,8 @@
|
|||
"lima bean": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "lima bean",
|
||||
"plural_name": "lima beans"
|
||||
"name": "limaböna",
|
||||
"plural_name": "limabönor"
|
||||
},
|
||||
"chana dal": {
|
||||
"aliases": [],
|
||||
|
@ -9296,8 +9296,8 @@
|
|||
"yellow lentil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "yellow lentil",
|
||||
"plural_name": "yellow lentils"
|
||||
"name": "gul lins",
|
||||
"plural_name": "gula linser"
|
||||
},
|
||||
"mixed bean": {
|
||||
"aliases": [],
|
||||
|
@ -9428,8 +9428,8 @@
|
|||
"golden wax bean": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "golden wax bean",
|
||||
"plural_name": "golden wax beans"
|
||||
"name": "gul vaxböna",
|
||||
"plural_name": "gula vaxbönor"
|
||||
},
|
||||
"moth bean": {
|
||||
"aliases": [],
|
||||
|
@ -9782,8 +9782,8 @@
|
|||
"instant noodle": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "instant noodle",
|
||||
"plural_name": "instant noodles"
|
||||
"name": "snabbnudel",
|
||||
"plural_name": "snabbnudlar"
|
||||
},
|
||||
"somen noodle": {
|
||||
"aliases": [],
|
||||
|
@ -10042,8 +10042,8 @@
|
|||
"panko": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "panko",
|
||||
"plural_name": "pankoes"
|
||||
"name": "pankosmula",
|
||||
"plural_name": "pankosmulor"
|
||||
},
|
||||
"flour tortilla": {
|
||||
"aliases": [],
|
||||
|
@ -10114,14 +10114,14 @@
|
|||
"crouton": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "crouton",
|
||||
"plural_name": "croutons"
|
||||
"name": "krutong",
|
||||
"plural_name": "krutonger"
|
||||
},
|
||||
"whole-wheat tortilla": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "whole-wheat tortilla",
|
||||
"plural_name": "whole-wheat tortillas"
|
||||
"name": "fullkornstortilla",
|
||||
"plural_name": "fullkornstortilla"
|
||||
},
|
||||
"english muffin": {
|
||||
"aliases": [],
|
||||
|
@ -10144,8 +10144,8 @@
|
|||
"rye bread": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "rye bread",
|
||||
"plural_name": "rye breads"
|
||||
"name": "rågbröd",
|
||||
"plural_name": "rågbröd"
|
||||
},
|
||||
"flatbread": {
|
||||
"aliases": [],
|
||||
|
@ -10156,14 +10156,14 @@
|
|||
"dry-roasted peanut": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "dry-roasted peanut",
|
||||
"plural_name": "dry-roasted peanuts"
|
||||
"name": "torrostad jordnöt",
|
||||
"plural_name": "torrostade jordnötter"
|
||||
},
|
||||
"potato chip": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "potato chip",
|
||||
"plural_name": "potato chips"
|
||||
"name": "potatischips",
|
||||
"plural_name": "potatischips"
|
||||
},
|
||||
"naan": {
|
||||
"aliases": [],
|
||||
|
@ -10282,8 +10282,8 @@
|
|||
"gluten-free bread crumb": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "gluten-free bread crumb",
|
||||
"plural_name": "gluten-free bread crumbs"
|
||||
"name": "glutenfri brödsmula",
|
||||
"plural_name": "glutenfria brödsmulor"
|
||||
},
|
||||
"tostada shell": {
|
||||
"aliases": [],
|
||||
|
@ -10336,8 +10336,8 @@
|
|||
"rice cake": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "rice cake",
|
||||
"plural_name": "rice cakes"
|
||||
"name": "riskaka",
|
||||
"plural_name": "riskakor"
|
||||
},
|
||||
"panettone": {
|
||||
"aliases": [],
|
||||
|
@ -10348,8 +10348,8 @@
|
|||
"sweet potato fry": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sweet potato fry",
|
||||
"plural_name": "sweet potato fries"
|
||||
"name": "sötpotatispommes",
|
||||
"plural_name": "sötpotatispommes"
|
||||
},
|
||||
"sev": {
|
||||
"aliases": [],
|
||||
|
@ -10658,8 +10658,8 @@
|
|||
"coconut oil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "coconut oil",
|
||||
"plural_name": "coconut oils"
|
||||
"name": "kokosnötsolja",
|
||||
"plural_name": "kokosnötsoljor"
|
||||
},
|
||||
"cooking spray": {
|
||||
"aliases": [],
|
||||
|
@ -10670,20 +10670,20 @@
|
|||
"sesame oil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sesame oil",
|
||||
"plural_name": "sesame oils"
|
||||
"name": "sesamolja",
|
||||
"plural_name": "sesamoljor"
|
||||
},
|
||||
"frying oil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "frying oil",
|
||||
"plural_name": "frying oils"
|
||||
"name": "frityrolja",
|
||||
"plural_name": "frityroljor"
|
||||
},
|
||||
"sunflower oil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sunflower oil",
|
||||
"plural_name": "sunflower oils"
|
||||
"name": "solrosolja",
|
||||
"plural_name": "solrosoljor"
|
||||
},
|
||||
"avocado oil": {
|
||||
"aliases": [],
|
||||
|
@ -10700,8 +10700,8 @@
|
|||
"peanut oil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "peanut oil",
|
||||
"plural_name": "peanut oils"
|
||||
"name": "jordnötsolja",
|
||||
"plural_name": "jordnötsoljor"
|
||||
},
|
||||
"grapeseed oil": {
|
||||
"aliases": [
|
||||
|
@ -10756,8 +10756,8 @@
|
|||
"truffle oil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "truffle oil",
|
||||
"plural_name": "truffle oils"
|
||||
"name": "tryffelolja",
|
||||
"plural_name": "tryffeloljor"
|
||||
},
|
||||
"bacon grease": {
|
||||
"aliases": [],
|
||||
|
@ -10786,8 +10786,8 @@
|
|||
"duck fat": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "duck fat",
|
||||
"plural_name": "duck fats"
|
||||
"name": "ankfett",
|
||||
"plural_name": "ankfett"
|
||||
},
|
||||
"rice bran oil": {
|
||||
"aliases": [],
|
||||
|
@ -10822,8 +10822,8 @@
|
|||
"white truffle oil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "white truffle oil",
|
||||
"plural_name": "white truffle oils"
|
||||
"name": "vit tryffelolja",
|
||||
"plural_name": "vit tryffeloljor"
|
||||
},
|
||||
"pumpkin seed oil": {
|
||||
"aliases": [],
|
||||
|
@ -10870,14 +10870,14 @@
|
|||
"palm oil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "palm oil",
|
||||
"plural_name": "palm oils"
|
||||
"name": "palmolja",
|
||||
"plural_name": "palmoljor"
|
||||
},
|
||||
"basil oil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "basil oil",
|
||||
"plural_name": "basil oils"
|
||||
"name": "basilikaolja",
|
||||
"plural_name": "basilikaoljor"
|
||||
},
|
||||
"pork fat": {
|
||||
"aliases": [],
|
||||
|
@ -11078,44 +11078,44 @@
|
|||
"mayonnaise": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "mayonnaise",
|
||||
"plural_name": "mayonnaises"
|
||||
"name": "majonnäs",
|
||||
"plural_name": "majonnäser"
|
||||
},
|
||||
"apple cider vinegar": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "apple cider vinegar",
|
||||
"plural_name": "apple cider vinegars"
|
||||
"name": "äppelcidervinäger",
|
||||
"plural_name": "äppelcidervinäger"
|
||||
},
|
||||
"balsamic vinegar": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "balsamic vinegar",
|
||||
"plural_name": "balsamic vinegars"
|
||||
"name": "balsamvinäger",
|
||||
"plural_name": "balsamvinäger"
|
||||
},
|
||||
"vinegar": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "vinegar",
|
||||
"plural_name": "vinegars"
|
||||
"name": "vinäger",
|
||||
"plural_name": "vinäger"
|
||||
},
|
||||
"red wine vinegar": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "red wine vinegar",
|
||||
"plural_name": "red wine vinegars"
|
||||
"name": "rödvinsvinäger",
|
||||
"plural_name": "rödvinsvinäger"
|
||||
},
|
||||
"rice wine vinegar": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "rice wine vinegar",
|
||||
"plural_name": "rice wine vinegars"
|
||||
"name": "risvinsvinäger",
|
||||
"plural_name": "risvinsvinäger"
|
||||
},
|
||||
"white wine vinegar": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "white wine vinegar",
|
||||
"plural_name": "white wine vinegars"
|
||||
"name": "vitvinsvinäger",
|
||||
"plural_name": "vitvinsvinäger"
|
||||
},
|
||||
"ranch dressing": {
|
||||
"aliases": [],
|
||||
|
@ -11150,8 +11150,8 @@
|
|||
"white balsamic vinegar": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "white balsamic vinegar",
|
||||
"plural_name": "white balsamic vinegars"
|
||||
"name": "vit balsamvinäger",
|
||||
"plural_name": "vit balsamvinäger"
|
||||
},
|
||||
"champagne vinegar": {
|
||||
"aliases": [],
|
||||
|
@ -11210,8 +11210,8 @@
|
|||
"raspberry vinegar": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "raspberry vinegar",
|
||||
"plural_name": "raspberry vinegars"
|
||||
"name": "hallonvinäger",
|
||||
"plural_name": "hallonvinäger"
|
||||
},
|
||||
"japanese mayonnaise": {
|
||||
"aliases": [],
|
||||
|
@ -11222,8 +11222,8 @@
|
|||
"tarragon vinegar": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "tarragon vinegar",
|
||||
"plural_name": "tarragon vinegars"
|
||||
"name": "dragonvinäger",
|
||||
"plural_name": "dragonvinäger"
|
||||
},
|
||||
"greek vinaigrette": {
|
||||
"aliases": [],
|
||||
|
@ -11246,8 +11246,8 @@
|
|||
"aioli sauce": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "aioli sauce",
|
||||
"plural_name": "aioli sauces"
|
||||
"name": "aioli",
|
||||
"plural_name": "aioli"
|
||||
},
|
||||
"french dressing": {
|
||||
"aliases": [],
|
||||
|
@ -11420,8 +11420,8 @@
|
|||
"honey vinegar": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "honey vinegar",
|
||||
"plural_name": "honey vinegars"
|
||||
"name": "honungsvinäger",
|
||||
"plural_name": "honungsvinäger"
|
||||
},
|
||||
"tandoori mayonnaise": {
|
||||
"aliases": [],
|
||||
|
@ -11432,8 +11432,8 @@
|
|||
"chili vinegar": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "chili vinegar",
|
||||
"plural_name": "chili vinegars"
|
||||
"name": "chillivinäger",
|
||||
"plural_name": "chillivinäger"
|
||||
},
|
||||
"chili-lime dressing": {
|
||||
"aliases": [],
|
||||
|
@ -11490,14 +11490,14 @@
|
|||
"soy sauce": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "soy sauce",
|
||||
"plural_name": "soy sauces"
|
||||
"name": "soja",
|
||||
"plural_name": "soja"
|
||||
},
|
||||
"dijon mustard": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "dijon mustard",
|
||||
"plural_name": "dijon mustards"
|
||||
"name": "dijonsenap",
|
||||
"plural_name": "dijonsenap"
|
||||
},
|
||||
"worcestershire": {
|
||||
"aliases": [],
|
||||
|
@ -11521,13 +11521,13 @@
|
|||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "ketchup",
|
||||
"plural_name": "ketchups"
|
||||
"plural_name": "ketchup"
|
||||
},
|
||||
"mustard": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "mustard",
|
||||
"plural_name": "mustards"
|
||||
"name": "senap",
|
||||
"plural_name": "senap"
|
||||
},
|
||||
"fish sauce": {
|
||||
"aliases": [],
|
||||
|
@ -11550,8 +11550,8 @@
|
|||
"wholegrain mustard": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "wholegrain mustard",
|
||||
"plural_name": "wholegrain mustards"
|
||||
"name": "grov senap",
|
||||
"plural_name": "grov senap"
|
||||
},
|
||||
"tamari": {
|
||||
"aliases": [],
|
||||
|
@ -11610,8 +11610,8 @@
|
|||
"dark soy sauce": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "dark soy sauce",
|
||||
"plural_name": "dark soy sauces"
|
||||
"name": "mörk soja",
|
||||
"plural_name": "mörk soja"
|
||||
},
|
||||
"coconut amino": {
|
||||
"aliases": [],
|
||||
|
@ -11665,19 +11665,19 @@
|
|||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "wasabi",
|
||||
"plural_name": "wasabis"
|
||||
"plural_name": "wasabi"
|
||||
},
|
||||
"honey mustard": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "honey mustard",
|
||||
"plural_name": "honey mustards"
|
||||
"name": "honungssenap",
|
||||
"plural_name": "honungssenap"
|
||||
},
|
||||
"mango chutney": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "mango chutney",
|
||||
"plural_name": "mango chutneys"
|
||||
"plural_name": "mango chutney"
|
||||
},
|
||||
"english mustard": {
|
||||
"aliases": [],
|
||||
|
@ -11689,7 +11689,7 @@
|
|||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sambal oelek",
|
||||
"plural_name": "sambal oeleks"
|
||||
"plural_name": "sambal oelek"
|
||||
},
|
||||
"preserved lemon": {
|
||||
"aliases": [],
|
||||
|
@ -11712,8 +11712,8 @@
|
|||
"shrimp paste": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "shrimp paste",
|
||||
"plural_name": "shrimp pastes"
|
||||
"name": "räkpasta",
|
||||
"plural_name": "räkpasta"
|
||||
},
|
||||
"picante sauce": {
|
||||
"aliases": [],
|
||||
|
@ -11880,8 +11880,8 @@
|
|||
"hp sauce": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "hp sauce",
|
||||
"plural_name": "hp sauces"
|
||||
"name": "HP-sås",
|
||||
"plural_name": "HP-såser"
|
||||
},
|
||||
"duck sauce": {
|
||||
"aliases": [],
|
||||
|
@ -12012,8 +12012,8 @@
|
|||
"remoulade": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "remoulade",
|
||||
"plural_name": "remoulades"
|
||||
"name": "remoulad",
|
||||
"plural_name": "remoulad"
|
||||
},
|
||||
"white bbq sauce": {
|
||||
"aliases": [],
|
||||
|
@ -12106,26 +12106,26 @@
|
|||
"caper": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "caper",
|
||||
"plural_name": "capers"
|
||||
"name": "kapris",
|
||||
"plural_name": "kapris"
|
||||
},
|
||||
"green olive": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "green olive",
|
||||
"plural_name": "green olives"
|
||||
"name": "grön oliv",
|
||||
"plural_name": "gröna oliver"
|
||||
},
|
||||
"canned chickpea": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "canned chickpea",
|
||||
"plural_name": "canned chickpeas"
|
||||
"name": "konserverad kikärta",
|
||||
"plural_name": "konserverade kikärtor"
|
||||
},
|
||||
"black olive": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "black olive",
|
||||
"plural_name": "black olives"
|
||||
"name": "svart oliv",
|
||||
"plural_name": "svarta oliver"
|
||||
},
|
||||
"canned black bean": {
|
||||
"aliases": [],
|
||||
|
@ -12142,14 +12142,14 @@
|
|||
"kalamata olive": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "kalamata olive",
|
||||
"plural_name": "kalamata olives"
|
||||
"name": "kalamataoliv",
|
||||
"plural_name": "kalamataoliver"
|
||||
},
|
||||
"canned tuna": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "canned tuna",
|
||||
"plural_name": "canned tuna"
|
||||
"name": "konserverad tonfisk",
|
||||
"plural_name": "konserverade tonfiskar"
|
||||
},
|
||||
"pickle": {
|
||||
"aliases": [],
|
||||
|
@ -12160,8 +12160,8 @@
|
|||
"canned pineapple": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "canned pineapple",
|
||||
"plural_name": "canned pineapples"
|
||||
"name": "konserverad ananas",
|
||||
"plural_name": "konserverade ananaser"
|
||||
},
|
||||
"chipotle in adobo": {
|
||||
"aliases": [],
|
||||
|
@ -12226,8 +12226,8 @@
|
|||
"canned whole tomato": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "canned whole tomato",
|
||||
"plural_name": "canned whole tomatoes"
|
||||
"name": "konserverad hel tomat",
|
||||
"plural_name": "konserverade hela tomater"
|
||||
},
|
||||
"sweet pickle relish": {
|
||||
"aliases": [],
|
||||
|
@ -12238,8 +12238,8 @@
|
|||
"sauerkraut": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sauerkraut",
|
||||
"plural_name": "sauerkrauts"
|
||||
"name": "surkål",
|
||||
"plural_name": "surkål"
|
||||
},
|
||||
"creamed corn": {
|
||||
"aliases": [],
|
||||
|
@ -12274,14 +12274,14 @@
|
|||
"sun-dried tomato in oil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sun-dried tomato in oil",
|
||||
"plural_name": "sun-dried tomatoes in oil"
|
||||
"name": "soltorkad tomat i olja",
|
||||
"plural_name": "soltorkade tomater i olja"
|
||||
},
|
||||
"kimchi": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "kimchi",
|
||||
"plural_name": "kimchis"
|
||||
"plural_name": "kimchi"
|
||||
},
|
||||
"canned mandarin orange": {
|
||||
"aliases": [],
|
||||
|
@ -12304,14 +12304,14 @@
|
|||
"bamboo shoot": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "bamboo shoot",
|
||||
"plural_name": "bamboo shoots"
|
||||
"name": "bambuskott",
|
||||
"plural_name": "bambuskott"
|
||||
},
|
||||
"canned mushroom": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "canned mushroom",
|
||||
"plural_name": "canned mushrooms"
|
||||
"name": "konserverad champinjon",
|
||||
"plural_name": "konserverade champinjoner"
|
||||
},
|
||||
"baked bean": {
|
||||
"aliases": [],
|
||||
|
@ -12400,20 +12400,20 @@
|
|||
"canned lentil": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "canned lentil",
|
||||
"plural_name": "canned lentils"
|
||||
"name": "konserverad lins",
|
||||
"plural_name": "konserverade linser"
|
||||
},
|
||||
"canned pea": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "canned pea",
|
||||
"plural_name": "canned peas"
|
||||
"name": "konserverad ärta",
|
||||
"plural_name": "konserverade ärtor"
|
||||
},
|
||||
"pickled red onion": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "pickled red onion",
|
||||
"plural_name": "pickled red onions"
|
||||
"name": "picklad rödlök",
|
||||
"plural_name": "picklade rödlökar"
|
||||
},
|
||||
"pimiento-stuffed green olive": {
|
||||
"aliases": [],
|
||||
|
@ -12436,8 +12436,8 @@
|
|||
"canned cherry tomato": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "canned cherry tomato",
|
||||
"plural_name": "canned cherry tomatoes"
|
||||
"name": "konserverad körsbärstomat",
|
||||
"plural_name": "konserverade körsbärstomater"
|
||||
},
|
||||
"bread & butter pickle": {
|
||||
"aliases": [],
|
||||
|
@ -12460,8 +12460,8 @@
|
|||
"canned pear": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "canned pear",
|
||||
"plural_name": "canned pears"
|
||||
"name": "konserverat päron",
|
||||
"plural_name": "konserverade päron"
|
||||
},
|
||||
"peppadew pepper": {
|
||||
"aliases": [],
|
||||
|
@ -12484,8 +12484,8 @@
|
|||
"canned baby corn": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "canned baby corn",
|
||||
"plural_name": "canned baby corns"
|
||||
"name": "konserverad minimajs",
|
||||
"plural_name": "konserverade minimajs"
|
||||
},
|
||||
"mexican-style corn": {
|
||||
"aliases": [],
|
||||
|
@ -12520,8 +12520,8 @@
|
|||
"canned carrot": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "canned carrot",
|
||||
"plural_name": "canned carrots"
|
||||
"name": "konserverad morot",
|
||||
"plural_name": "konserverade morötter"
|
||||
},
|
||||
"banana pepper ring": {
|
||||
"aliases": [],
|
||||
|
@ -12586,8 +12586,8 @@
|
|||
"canned asparagu": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "canned asparagu",
|
||||
"plural_name": "canned asparagus"
|
||||
"name": "konserverad sparris",
|
||||
"plural_name": "konserverade sparris"
|
||||
},
|
||||
"fire-roasted green chile": {
|
||||
"aliases": [],
|
||||
|
@ -12622,8 +12622,8 @@
|
|||
"canned mackerel": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "canned mackerel",
|
||||
"plural_name": "canned mackerel"
|
||||
"name": "konserverad makrill",
|
||||
"plural_name": "konserverade makrillar"
|
||||
},
|
||||
"pickled cherry pepper": {
|
||||
"aliases": [],
|
||||
|
@ -12652,8 +12652,8 @@
|
|||
"canned potato": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "canned potato",
|
||||
"plural_name": "canned potatoes"
|
||||
"name": "konserverad potatis",
|
||||
"plural_name": "konserverade potatisar"
|
||||
},
|
||||
"okra pickle": {
|
||||
"aliases": [],
|
||||
|
@ -12704,14 +12704,14 @@
|
|||
"peanut butter": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "peanut butter",
|
||||
"plural_name": "peanut butters"
|
||||
"name": "jordnötssmör",
|
||||
"plural_name": "jordnötssmör"
|
||||
},
|
||||
"tomato paste": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "tomato paste",
|
||||
"plural_name": "tomato pastes"
|
||||
"name": "tomatpuré",
|
||||
"plural_name": "tomatpuréer"
|
||||
},
|
||||
"tomato sauce": {
|
||||
"aliases": [],
|
||||
|
@ -12735,7 +12735,7 @@
|
|||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "pesto",
|
||||
"plural_name": "pestoes"
|
||||
"plural_name": "pesto"
|
||||
},
|
||||
"marinara sauce": {
|
||||
"aliases": [
|
||||
|
@ -12773,12 +12773,12 @@
|
|||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "guacamole",
|
||||
"plural_name": "guacamoles"
|
||||
"plural_name": "guacamole"
|
||||
},
|
||||
"hummu": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "hummu",
|
||||
"name": "hummus",
|
||||
"plural_name": "hummus"
|
||||
},
|
||||
"enchilada sauce": {
|
||||
|
@ -12844,8 +12844,8 @@
|
|||
"taco sauce": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "taco sauce",
|
||||
"plural_name": "taco sauces"
|
||||
"name": "tacosås",
|
||||
"plural_name": "tacosåser"
|
||||
},
|
||||
"beef gravy": {
|
||||
"aliases": [],
|
||||
|
@ -12856,8 +12856,8 @@
|
|||
"sun-dried tomato pesto": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "sun-dried tomato pesto",
|
||||
"plural_name": "sun-dried tomato pestoes"
|
||||
"name": "pesto på soltorkad tomat",
|
||||
"plural_name": "pesto på soltorkad tomat"
|
||||
},
|
||||
"béchamel sauce": {
|
||||
"aliases": [],
|
||||
|
@ -12880,8 +12880,8 @@
|
|||
"garlic butter": {
|
||||
"aliases": [],
|
||||
"description": "",
|
||||
"name": "garlic butter",
|
||||
"plural_name": "garlic butter"
|
||||
"name": "vitlökssmör",
|
||||
"plural_name": "vitlökssmör"
|
||||
},
|
||||
"hollandaise sauce": {
|
||||
"aliases": [],
|
||||
|
|
|
@ -10,7 +10,7 @@ from mealie.routes._base.mixins import HttpRepo
|
|||
from mealie.schema import mapper
|
||||
from mealie.schema.household.webhook import CreateWebhook, ReadWebhook, SaveWebhook, WebhookPagination
|
||||
from mealie.schema.response.pagination import PaginationQuery
|
||||
from mealie.services.scheduler.tasks.post_webhooks import post_group_webhooks, post_single_webhook
|
||||
from mealie.services.scheduler.tasks.post_webhooks import post_group_webhooks, post_test_webhook
|
||||
|
||||
router = APIRouter(prefix="/households/webhooks", tags=["Households: Webhooks"])
|
||||
|
||||
|
@ -55,7 +55,7 @@ class ReadWebhookController(BaseUserController):
|
|||
@router.post("/{item_id}/test")
|
||||
def test_one(self, item_id: UUID4, bg_tasks: BackgroundTasks):
|
||||
webhook = self.mixins.get_one(item_id)
|
||||
bg_tasks.add_task(post_single_webhook, webhook, "Test Webhook")
|
||||
bg_tasks.add_task(post_test_webhook, webhook, "Test Webhook")
|
||||
|
||||
@router.put("/{item_id}", response_model=ReadWebhook)
|
||||
def update_one(self, item_id: UUID4, data: CreateWebhook):
|
||||
|
|
|
@ -3,7 +3,6 @@ import json
|
|||
from abc import ABC, abstractmethod
|
||||
from collections.abc import Generator
|
||||
from datetime import UTC, datetime
|
||||
from typing import cast
|
||||
from urllib.parse import parse_qs, urlencode, urlsplit, urlunsplit
|
||||
|
||||
from fastapi.encoders import jsonable_encoder
|
||||
|
@ -148,15 +147,24 @@ class WebhookEventListener(EventListenerBase):
|
|||
|
||||
def publish_to_subscribers(self, event: Event, subscribers: list[ReadWebhook]) -> None:
|
||||
with self.ensure_repos(self.group_id, self.household_id) as repos:
|
||||
if event.document_data.document_type == EventDocumentType.mealplan:
|
||||
webhook_data = cast(EventWebhookData, event.document_data)
|
||||
meal_repo = repos.meals
|
||||
meal_data = meal_repo.get_meals_by_date_range(
|
||||
webhook_data.webhook_start_dt, webhook_data.webhook_end_dt
|
||||
)
|
||||
if meal_data:
|
||||
webhook_data.webhook_body = meal_data
|
||||
self.publisher.publish(event, [webhook.url for webhook in subscribers])
|
||||
if not isinstance(event.document_data, EventWebhookData):
|
||||
return
|
||||
|
||||
match event.document_data.document_type:
|
||||
case EventDocumentType.mealplan:
|
||||
meal_repo = repos.meals
|
||||
meal_data = meal_repo.get_meals_by_date_range(
|
||||
event.document_data.webhook_start_dt, event.document_data.webhook_end_dt
|
||||
)
|
||||
event.document_data.webhook_body = meal_data or None
|
||||
case _:
|
||||
if event.event_type is EventTypes.test_message:
|
||||
# make sure the webhook has a valid body so it gets sent
|
||||
event.document_data.webhook_body = event.document_data.webhook_body or []
|
||||
|
||||
# Only publish to subscribers if we have a webhook body to send
|
||||
if event.document_data.webhook_body is not None:
|
||||
self.publisher.publish(event, [webhook.url for webhook in subscribers])
|
||||
|
||||
def get_scheduled_webhooks(self, start_dt: datetime, end_dt: datetime) -> list[ReadWebhook]:
|
||||
"""Fetches all scheduled webhooks from the database"""
|
||||
|
|
|
@ -79,12 +79,12 @@ def post_group_webhooks(
|
|||
)
|
||||
|
||||
|
||||
def post_single_webhook(webhook: ReadWebhook, message: str = "") -> None:
|
||||
def post_test_webhook(webhook: ReadWebhook, message: str = "") -> None:
|
||||
dt = datetime.min.replace(tzinfo=UTC)
|
||||
event_type = EventTypes.webhook_task
|
||||
event_type = EventTypes.test_message
|
||||
|
||||
event_document_data = EventWebhookData(
|
||||
document_type=EventDocumentType.mealplan,
|
||||
document_type=EventDocumentType.generic,
|
||||
operation=EventOperation.info,
|
||||
webhook_start_dt=dt,
|
||||
webhook_end_dt=dt,
|
||||
|
|
178
poetry.lock
generated
178
poetry.lock
generated
|
@ -478,100 +478,100 @@ markers = {main = "platform_system == \"Windows\" or sys_platform == \"win32\""}
|
|||
|
||||
[[package]]
|
||||
name = "coverage"
|
||||
version = "7.10.0"
|
||||
version = "7.10.1"
|
||||
description = "Code coverage measurement for Python"
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
groups = ["dev"]
|
||||
files = [
|
||||
{file = "coverage-7.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cbd823f7ea5286c26406ad9e54268544d82f3d1cadb6d4f3b85e9877f0cab1ef"},
|
||||
{file = "coverage-7.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab3f7a5dbaab937df0b9e9e8ec6eab235ba9a6f29d71fd3b24335affaed886cc"},
|
||||
{file = "coverage-7.10.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8c63aaf850523d8cbe3f5f1a5c78f689b223797bef902635f2493ab43498f36c"},
|
||||
{file = "coverage-7.10.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4c3133ce3fa84023f7c6921c4dca711be0b658784c5a51a797168229eae26172"},
|
||||
{file = "coverage-7.10.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3747d1d0af85b17d3a156cd30e4bbacf893815e846dc6c07050e9769da2b138e"},
|
||||
{file = "coverage-7.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:241923b350437f6a7cb343d9df72998305ef940c3c40009f06e05029a047677c"},
|
||||
{file = "coverage-7.10.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:13e82e499309307104d58ac66f9eed237f7aaceab4325416645be34064d9a2be"},
|
||||
{file = "coverage-7.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bf73cdde4f6c9cd4457b00bf1696236796ac3a241f859a55e0f84a4c58326a7f"},
|
||||
{file = "coverage-7.10.0-cp310-cp310-win32.whl", hash = "sha256:2396e13275b37870a3345f58bce8b15a7e0a985771d13a4b16ce9129954e07d6"},
|
||||
{file = "coverage-7.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:9d45c7c71fb3d2da92ab893602e3f28f2d1560cec765a27e1824a6e0f7e92cfd"},
|
||||
{file = "coverage-7.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4abc01843581a6f9dd72d4d15761861190973a2305416639435ef509288f7a04"},
|
||||
{file = "coverage-7.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2093297773111d7d748fe4a99b68747e57994531fb5c57bbe439af17c11c169"},
|
||||
{file = "coverage-7.10.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:58240e27815bf105bd975c2fd42e700839f93d5aad034ef976411193ca32dbfd"},
|
||||
{file = "coverage-7.10.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d019eac999b40ad48521ea057958b07a9f549c0c6d257a20e5c7c4ba91af8d1c"},
|
||||
{file = "coverage-7.10.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:35e0a1f5454bc80faf4ceab10d1d48f025f92046c9c0f3bec2e1a9dda55137f8"},
|
||||
{file = "coverage-7.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a93dd7759c416dd1cc754123b926d065055cb9a33b6699e64a1e5bdfae1ff459"},
|
||||
{file = "coverage-7.10.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7b3d737266048368a6ffd68f1ecd662c54de56535c82eb8f98a55ac216a72cbd"},
|
||||
{file = "coverage-7.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:93227c2707cb0effd9163cd0d8f0d9ab628982f7a3e915d6d64c7107867b9a07"},
|
||||
{file = "coverage-7.10.0-cp311-cp311-win32.whl", hash = "sha256:69270af3014ab3058ad6108c6d0e218166f568b5a7a070dc3d62c0a63aca1c4d"},
|
||||
{file = "coverage-7.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:43c16bbb661a7b4dafac0ab69e44d6dbcc6a64c4d93aefd89edc6f8911b6ab4a"},
|
||||
{file = "coverage-7.10.0-cp311-cp311-win_arm64.whl", hash = "sha256:14e7c23fcb74ed808efb4eb48fcd25a759f0e20f685f83266d1df174860e4733"},
|
||||
{file = "coverage-7.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a2adcfdaf3b4d69b0c64ad024fe9dd6996782b52790fb6033d90f36f39e287df"},
|
||||
{file = "coverage-7.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d7b27c2c0840e8eeff3f1963782bd9d3bc767488d2e67a31de18d724327f9f6"},
|
||||
{file = "coverage-7.10.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0ed50429786e935517570b08576a661fd79032e6060985ab492b9d39ba8e66ee"},
|
||||
{file = "coverage-7.10.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7171c139ab6571d70460ecf788b1dcaf376bfc75a42e1946b8c031d062bbbad4"},
|
||||
{file = "coverage-7.10.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a726aac7e6e406e403cdee4c443a13aed3ea3d67d856414c5beacac2e70c04e"},
|
||||
{file = "coverage-7.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2886257481a14e953e96861a00c0fe7151117a523f0470a51e392f00640bba03"},
|
||||
{file = "coverage-7.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:536578b79521e59c385a2e0a14a5dc2a8edd58761a966d79368413e339fc9535"},
|
||||
{file = "coverage-7.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77fae95558f7804a9ceefabf3c38ad41af1da92b39781b87197c6440dcaaa967"},
|
||||
{file = "coverage-7.10.0-cp312-cp312-win32.whl", hash = "sha256:97803e14736493eb029558e1502fe507bd6a08af277a5c8eeccf05c3e970cb84"},
|
||||
{file = "coverage-7.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:4c73ab554e54ffd38d114d6bc4a7115fb0c840cf6d8622211bee3da26e4bd25d"},
|
||||
{file = "coverage-7.10.0-cp312-cp312-win_arm64.whl", hash = "sha256:3ae95d5a9aedab853641026b71b2ddd01983a0a7e9bf870a20ef3c8f5d904699"},
|
||||
{file = "coverage-7.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d883fee92b9245c0120fa25b5d36de71ccd4cfc29735906a448271e935d8d86d"},
|
||||
{file = "coverage-7.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c87e59e88268d30e33d3665ede4fbb77b513981a2df0059e7c106ca3de537586"},
|
||||
{file = "coverage-7.10.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f669d969f669a11d6ceee0b733e491d9a50573eb92a71ffab13b15f3aa2665d4"},
|
||||
{file = "coverage-7.10.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9582bd6c6771300a847d328c1c4204e751dbc339a9e249eecdc48cada41f72e6"},
|
||||
{file = "coverage-7.10.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:91f97e9637dc7977842776fdb7ad142075d6fa40bc1b91cb73685265e0d31d32"},
|
||||
{file = "coverage-7.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ae4fa92b6601a62367c6c9967ad32ad4e28a89af54b6bb37d740946b0e0534dd"},
|
||||
{file = "coverage-7.10.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3a5cc8b97473e7b3623dd17a42d2194a2b49de8afecf8d7d03c8987237a9552c"},
|
||||
{file = "coverage-7.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc1cbb7f623250e047c32bd7aa1bb62ebc62608d5004d74df095e1059141ac88"},
|
||||
{file = "coverage-7.10.0-cp313-cp313-win32.whl", hash = "sha256:1380cc5666d778e77f1587cd88cc317158111f44d54c0dd3975f0936993284e0"},
|
||||
{file = "coverage-7.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:bf03cf176af098ee578b754a03add4690b82bdfe070adfb5d192d0b1cd15cf82"},
|
||||
{file = "coverage-7.10.0-cp313-cp313-win_arm64.whl", hash = "sha256:8041c78cd145088116db2329b2fb6e89dc338116c962fbe654b7e9f5d72ab957"},
|
||||
{file = "coverage-7.10.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:37cc2c06052771f48651160c080a86431884db9cd62ba622cab71049b90a95b3"},
|
||||
{file = "coverage-7.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:91f37270b16178b05fa107d85713d29bf21606e37b652d38646eef5f2dfbd458"},
|
||||
{file = "coverage-7.10.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f9b0b0168864d09bcb9a3837548f75121645c4cfd0efce0eb994c221955c5b10"},
|
||||
{file = "coverage-7.10.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:df0be435d3b616e7d3ee3f9ebbc0d784a213986fe5dff9c6f1042ee7cfd30157"},
|
||||
{file = "coverage-7.10.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:35e9aba1c4434b837b1d567a533feba5ce205e8e91179c97974b28a14c23d3a0"},
|
||||
{file = "coverage-7.10.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a0b0c481e74dfad631bdc2c883e57d8b058e5c90ba8ef087600995daf7bbec18"},
|
||||
{file = "coverage-7.10.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8aec1b7c8922808a433c13cd44ace6fceac0609f4587773f6c8217a06102674b"},
|
||||
{file = "coverage-7.10.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:04ec59ceb3a594af0927f2e0d810e1221212abd9a2e6b5b917769ff48760b460"},
|
||||
{file = "coverage-7.10.0-cp313-cp313t-win32.whl", hash = "sha256:b6871e62d29646eb9b3f5f92def59e7575daea1587db21f99e2b19561187abda"},
|
||||
{file = "coverage-7.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff99cff2be44f78920b76803f782e91ffb46ccc7fa89eccccc0da3ca94285b64"},
|
||||
{file = "coverage-7.10.0-cp313-cp313t-win_arm64.whl", hash = "sha256:3246b63501348fe47299d12c47a27cfc221cfbffa1c2d857bcc8151323a4ae4f"},
|
||||
{file = "coverage-7.10.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:1f628d91f941a375b4503cb486148dbeeffb48e17bc080e0f0adfee729361574"},
|
||||
{file = "coverage-7.10.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3a0e101d5af952d233557e445f42ebace20b06b4ceb615581595ced5386caa78"},
|
||||
{file = "coverage-7.10.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ec4c1abbcc53f9f650acb14ea71725d88246a9e14ed42f8dd1b4e1b694e9d842"},
|
||||
{file = "coverage-7.10.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9c95f3a7f041b4cc68a8e3fecfa6366170c13ac773841049f1cd19c8650094e0"},
|
||||
{file = "coverage-7.10.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a2cd597b69c16d24e310611f2ed6fcfb8f09429316038c03a57e7b4f5345244"},
|
||||
{file = "coverage-7.10.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5e18591906a40c2b3609196c9879136aa4a47c5405052ca6b065ab10cb0b71d0"},
|
||||
{file = "coverage-7.10.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:485c55744252ed3f300cc1a0f5f365e684a0f2651a7aed301f7a67125906b80e"},
|
||||
{file = "coverage-7.10.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4dabea1516e5b0e9577282b149c8015e4dceeb606da66fb8d9d75932d5799bf5"},
|
||||
{file = "coverage-7.10.0-cp314-cp314-win32.whl", hash = "sha256:ac455f0537af22333fdc23b824cff81110dff2d47300bb2490f947b7c9a16017"},
|
||||
{file = "coverage-7.10.0-cp314-cp314-win_amd64.whl", hash = "sha256:b3c94b532f52f95f36fbfde3e178510a4d04eea640b484b2fe8f1491338dc653"},
|
||||
{file = "coverage-7.10.0-cp314-cp314-win_arm64.whl", hash = "sha256:2f807f2c3a9da99c80dfa73f09ef5fc3bd21e70c73ba1c538f23396a3a772252"},
|
||||
{file = "coverage-7.10.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:0a889ef25215990f65073c32cadf37483363a6a22914186dedc15a6b1a597d50"},
|
||||
{file = "coverage-7.10.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:39c638ecf3123805bacbf71aff8091e93af490c676fca10ab4e442375076e483"},
|
||||
{file = "coverage-7.10.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f2f2c0df0cbcf7dffa14f88a99c530cdef3f4fcfe935fa4f95d28be2e7ebc570"},
|
||||
{file = "coverage-7.10.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:048d19a5d641a2296745ab59f34a27b89a08c48d6d432685f22aac0ec1ea447f"},
|
||||
{file = "coverage-7.10.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1209b65d302d7a762004be37ab9396cbd8c99525ed572bdf455477e3a9449e06"},
|
||||
{file = "coverage-7.10.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e44aa79a36a7a0aec6ea109905a4a7c28552d90f34e5941b36217ae9556657d5"},
|
||||
{file = "coverage-7.10.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:96124be864b89395770c9a14652afcddbcdafb99466f53a9281c51d1466fb741"},
|
||||
{file = "coverage-7.10.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:aad222e841f94b42bd1d6be71737fade66943853f0807cf87887c88f70883a2a"},
|
||||
{file = "coverage-7.10.0-cp314-cp314t-win32.whl", hash = "sha256:0eed5354d28caa5c8ad60e07e938f253e4b2810ea7dd56784339b6ce98b6f104"},
|
||||
{file = "coverage-7.10.0-cp314-cp314t-win_amd64.whl", hash = "sha256:3da35f9980058acb960b2644527cc3911f1e00f94d309d704b309fa984029109"},
|
||||
{file = "coverage-7.10.0-cp314-cp314t-win_arm64.whl", hash = "sha256:cb9e138dfa8a4b5c52c92a537651e2ca4f2ca48d8cb1bc01a2cbe7a5773c2426"},
|
||||
{file = "coverage-7.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cf283ec9c6878826291b17442eb5c32d3d252dc77d25e082b460b2d2ea67ba3c"},
|
||||
{file = "coverage-7.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8a83488c9fc6fff487f2ab551f9b64c70672357b8949f0951b0cd778b3ed8165"},
|
||||
{file = "coverage-7.10.0-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b86df3a7494d12338c11e59f210a0498d6109bbc3a4037f44de517ebb30a9c6b"},
|
||||
{file = "coverage-7.10.0-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6de9b460809e5e4787b742e786a36ae2346a53982e2be317cdcb7a33c56412fb"},
|
||||
{file = "coverage-7.10.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de5ef8a5954d63fa26a6aaa4600e48f885ce70fe495e8fce2c43aa9241fc9434"},
|
||||
{file = "coverage-7.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f178fe5e96f1e057527d5d0b20ab76b8616e0410169c33716cc226118eaf2c4f"},
|
||||
{file = "coverage-7.10.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4a38c42f0182a012fa9ec25bc6057e51114c1ba125be304f3f776d6d283cb303"},
|
||||
{file = "coverage-7.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bf09beb5c1785cb36aad042455c0afab561399b74bb8cdaf6e82b7d77322df99"},
|
||||
{file = "coverage-7.10.0-cp39-cp39-win32.whl", hash = "sha256:cb8dfbb5d3016cb8d1940444c0c69b40cdc6c8bde724b07716ee5ea47b5273c6"},
|
||||
{file = "coverage-7.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:58ff22653cd93d563110d1ff2aef958f5f21be9e917762f8124d0e36f80f172a"},
|
||||
{file = "coverage-7.10.0-py3-none-any.whl", hash = "sha256:310a786330bb0463775c21d68e26e79973839b66d29e065c5787122b8dd4489f"},
|
||||
{file = "coverage-7.10.0.tar.gz", hash = "sha256:2768885aef484b5dcde56262cbdfba559b770bfc46994fe9485dc3614c7a5867"},
|
||||
{file = "coverage-7.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1c86eb388bbd609d15560e7cc0eb936c102b6f43f31cf3e58b4fd9afe28e1372"},
|
||||
{file = "coverage-7.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6b4ba0f488c1bdb6bd9ba81da50715a372119785458831c73428a8566253b86b"},
|
||||
{file = "coverage-7.10.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:083442ecf97d434f0cb3b3e3676584443182653da08b42e965326ba12d6b5f2a"},
|
||||
{file = "coverage-7.10.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c1a40c486041006b135759f59189385da7c66d239bad897c994e18fd1d0c128f"},
|
||||
{file = "coverage-7.10.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3beb76e20b28046989300c4ea81bf690df84ee98ade4dc0bbbf774a28eb98440"},
|
||||
{file = "coverage-7.10.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bc265a7945e8d08da28999ad02b544963f813a00f3ed0a7a0ce4165fd77629f8"},
|
||||
{file = "coverage-7.10.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:47c91f32ba4ac46f1e224a7ebf3f98b4b24335bad16137737fe71a5961a0665c"},
|
||||
{file = "coverage-7.10.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1a108dd78ed185020f66f131c60078f3fae3f61646c28c8bb4edd3fa121fc7fc"},
|
||||
{file = "coverage-7.10.1-cp310-cp310-win32.whl", hash = "sha256:7092cc82382e634075cc0255b0b69cb7cada7c1f249070ace6a95cb0f13548ef"},
|
||||
{file = "coverage-7.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:ac0c5bba938879c2fc0bc6c1b47311b5ad1212a9dcb8b40fe2c8110239b7faed"},
|
||||
{file = "coverage-7.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b45e2f9d5b0b5c1977cb4feb5f594be60eb121106f8900348e29331f553a726f"},
|
||||
{file = "coverage-7.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a7a4d74cb0f5e3334f9aa26af7016ddb94fb4bfa11b4a573d8e98ecba8c34f1"},
|
||||
{file = "coverage-7.10.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d4b0aab55ad60ead26159ff12b538c85fbab731a5e3411c642b46c3525863437"},
|
||||
{file = "coverage-7.10.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:dcc93488c9ebd229be6ee1f0d9aad90da97b33ad7e2912f5495804d78a3cd6b7"},
|
||||
{file = "coverage-7.10.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa309df995d020f3438407081b51ff527171cca6772b33cf8f85344b8b4b8770"},
|
||||
{file = "coverage-7.10.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cfb8b9d8855c8608f9747602a48ab525b1d320ecf0113994f6df23160af68262"},
|
||||
{file = "coverage-7.10.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:320d86da829b012982b414c7cdda65f5d358d63f764e0e4e54b33097646f39a3"},
|
||||
{file = "coverage-7.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dc60ddd483c556590da1d9482a4518292eec36dd0e1e8496966759a1f282bcd0"},
|
||||
{file = "coverage-7.10.1-cp311-cp311-win32.whl", hash = "sha256:4fcfe294f95b44e4754da5b58be750396f2b1caca8f9a0e78588e3ef85f8b8be"},
|
||||
{file = "coverage-7.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:efa23166da3fe2915f8ab452dde40319ac84dc357f635737174a08dbd912980c"},
|
||||
{file = "coverage-7.10.1-cp311-cp311-win_arm64.whl", hash = "sha256:d12b15a8c3759e2bb580ffa423ae54be4f184cf23beffcbd641f4fe6e1584293"},
|
||||
{file = "coverage-7.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6b7dc7f0a75a7eaa4584e5843c873c561b12602439d2351ee28c7478186c4da4"},
|
||||
{file = "coverage-7.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:607f82389f0ecafc565813aa201a5cade04f897603750028dd660fb01797265e"},
|
||||
{file = "coverage-7.10.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f7da31a1ba31f1c1d4d5044b7c5813878adae1f3af8f4052d679cc493c7328f4"},
|
||||
{file = "coverage-7.10.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51fe93f3fe4f5d8483d51072fddc65e717a175490804e1942c975a68e04bf97a"},
|
||||
{file = "coverage-7.10.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e59d00830da411a1feef6ac828b90bbf74c9b6a8e87b8ca37964925bba76dbe"},
|
||||
{file = "coverage-7.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:924563481c27941229cb4e16eefacc35da28563e80791b3ddc5597b062a5c386"},
|
||||
{file = "coverage-7.10.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ca79146ee421b259f8131f153102220b84d1a5e6fb9c8aed13b3badfd1796de6"},
|
||||
{file = "coverage-7.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2b225a06d227f23f386fdc0eab471506d9e644be699424814acc7d114595495f"},
|
||||
{file = "coverage-7.10.1-cp312-cp312-win32.whl", hash = "sha256:5ba9a8770effec5baaaab1567be916c87d8eea0c9ad11253722d86874d885eca"},
|
||||
{file = "coverage-7.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:9eb245a8d8dd0ad73b4062135a251ec55086fbc2c42e0eb9725a9b553fba18a3"},
|
||||
{file = "coverage-7.10.1-cp312-cp312-win_arm64.whl", hash = "sha256:7718060dd4434cc719803a5e526838a5d66e4efa5dc46d2b25c21965a9c6fcc4"},
|
||||
{file = "coverage-7.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ebb08d0867c5a25dffa4823377292a0ffd7aaafb218b5d4e2e106378b1061e39"},
|
||||
{file = "coverage-7.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f32a95a83c2e17422f67af922a89422cd24c6fa94041f083dd0bb4f6057d0bc7"},
|
||||
{file = "coverage-7.10.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c4c746d11c8aba4b9f58ca8bfc6fbfd0da4efe7960ae5540d1a1b13655ee8892"},
|
||||
{file = "coverage-7.10.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7f39edd52c23e5c7ed94e0e4bf088928029edf86ef10b95413e5ea670c5e92d7"},
|
||||
{file = "coverage-7.10.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab6e19b684981d0cd968906e293d5628e89faacb27977c92f3600b201926b994"},
|
||||
{file = "coverage-7.10.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5121d8cf0eacb16133501455d216bb5f99899ae2f52d394fe45d59229e6611d0"},
|
||||
{file = "coverage-7.10.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:df1c742ca6f46a6f6cbcaef9ac694dc2cb1260d30a6a2f5c68c5f5bcfee1cfd7"},
|
||||
{file = "coverage-7.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:40f9a38676f9c073bf4b9194707aa1eb97dca0e22cc3766d83879d72500132c7"},
|
||||
{file = "coverage-7.10.1-cp313-cp313-win32.whl", hash = "sha256:2348631f049e884839553b9974f0821d39241c6ffb01a418efce434f7eba0fe7"},
|
||||
{file = "coverage-7.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:4072b31361b0d6d23f750c524f694e1a417c1220a30d3ef02741eed28520c48e"},
|
||||
{file = "coverage-7.10.1-cp313-cp313-win_arm64.whl", hash = "sha256:3e31dfb8271937cab9425f19259b1b1d1f556790e98eb266009e7a61d337b6d4"},
|
||||
{file = "coverage-7.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1c4f679c6b573a5257af6012f167a45be4c749c9925fd44d5178fd641ad8bf72"},
|
||||
{file = "coverage-7.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:871ebe8143da284bd77b84a9136200bd638be253618765d21a1fce71006d94af"},
|
||||
{file = "coverage-7.10.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:998c4751dabf7d29b30594af416e4bf5091f11f92a8d88eb1512c7ba136d1ed7"},
|
||||
{file = "coverage-7.10.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:780f750a25e7749d0af6b3631759c2c14f45de209f3faaa2398312d1c7a22759"},
|
||||
{file = "coverage-7.10.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:590bdba9445df4763bdbebc928d8182f094c1f3947a8dc0fc82ef014dbdd8324"},
|
||||
{file = "coverage-7.10.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b2df80cb6a2af86d300e70acb82e9b79dab2c1e6971e44b78dbfc1a1e736b53"},
|
||||
{file = "coverage-7.10.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d6a558c2725bfb6337bf57c1cd366c13798bfd3bfc9e3dd1f4a6f6fc95a4605f"},
|
||||
{file = "coverage-7.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e6150d167f32f2a54690e572e0a4c90296fb000a18e9b26ab81a6489e24e78dd"},
|
||||
{file = "coverage-7.10.1-cp313-cp313t-win32.whl", hash = "sha256:d946a0c067aa88be4a593aad1236493313bafaa27e2a2080bfe88db827972f3c"},
|
||||
{file = "coverage-7.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e37c72eaccdd5ed1130c67a92ad38f5b2af66eeff7b0abe29534225db2ef7b18"},
|
||||
{file = "coverage-7.10.1-cp313-cp313t-win_arm64.whl", hash = "sha256:89ec0ffc215c590c732918c95cd02b55c7d0f569d76b90bb1a5e78aa340618e4"},
|
||||
{file = "coverage-7.10.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:166d89c57e877e93d8827dac32cedae6b0277ca684c6511497311249f35a280c"},
|
||||
{file = "coverage-7.10.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bed4a2341b33cd1a7d9ffc47df4a78ee61d3416d43b4adc9e18b7d266650b83e"},
|
||||
{file = "coverage-7.10.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ddca1e4f5f4c67980533df01430184c19b5359900e080248bbf4ed6789584d8b"},
|
||||
{file = "coverage-7.10.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:37b69226001d8b7de7126cad7366b0778d36777e4d788c66991455ba817c5b41"},
|
||||
{file = "coverage-7.10.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2f22102197bcb1722691296f9e589f02b616f874e54a209284dd7b9294b0b7f"},
|
||||
{file = "coverage-7.10.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1e0c768b0f9ac5839dac5cf88992a4bb459e488ee8a1f8489af4cb33b1af00f1"},
|
||||
{file = "coverage-7.10.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:991196702d5e0b120a8fef2664e1b9c333a81d36d5f6bcf6b225c0cf8b0451a2"},
|
||||
{file = "coverage-7.10.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae8e59e5f4fd85d6ad34c2bb9d74037b5b11be072b8b7e9986beb11f957573d4"},
|
||||
{file = "coverage-7.10.1-cp314-cp314-win32.whl", hash = "sha256:042125c89cf74a074984002e165d61fe0e31c7bd40ebb4bbebf07939b5924613"},
|
||||
{file = "coverage-7.10.1-cp314-cp314-win_amd64.whl", hash = "sha256:a22c3bfe09f7a530e2c94c87ff7af867259c91bef87ed2089cd69b783af7b84e"},
|
||||
{file = "coverage-7.10.1-cp314-cp314-win_arm64.whl", hash = "sha256:ee6be07af68d9c4fca4027c70cea0c31a0f1bc9cb464ff3c84a1f916bf82e652"},
|
||||
{file = "coverage-7.10.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d24fb3c0c8ff0d517c5ca5de7cf3994a4cd559cde0315201511dbfa7ab528894"},
|
||||
{file = "coverage-7.10.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1217a54cfd79be20512a67ca81c7da3f2163f51bbfd188aab91054df012154f5"},
|
||||
{file = "coverage-7.10.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:51f30da7a52c009667e02f125737229d7d8044ad84b79db454308033a7808ab2"},
|
||||
{file = "coverage-7.10.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ed3718c757c82d920f1c94089066225ca2ad7f00bb904cb72b1c39ebdd906ccb"},
|
||||
{file = "coverage-7.10.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc452481e124a819ced0c25412ea2e144269ef2f2534b862d9f6a9dae4bda17b"},
|
||||
{file = "coverage-7.10.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9d6f494c307e5cb9b1e052ec1a471060f1dea092c8116e642e7a23e79d9388ea"},
|
||||
{file = "coverage-7.10.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fc0e46d86905ddd16b85991f1f4919028092b4e511689bbdaff0876bd8aab3dd"},
|
||||
{file = "coverage-7.10.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80b9ccd82e30038b61fc9a692a8dc4801504689651b281ed9109f10cc9fe8b4d"},
|
||||
{file = "coverage-7.10.1-cp314-cp314t-win32.whl", hash = "sha256:e58991a2b213417285ec866d3cd32db17a6a88061a985dbb7e8e8f13af429c47"},
|
||||
{file = "coverage-7.10.1-cp314-cp314t-win_amd64.whl", hash = "sha256:e88dd71e4ecbc49d9d57d064117462c43f40a21a1383507811cf834a4a620651"},
|
||||
{file = "coverage-7.10.1-cp314-cp314t-win_arm64.whl", hash = "sha256:1aadfb06a30c62c2eb82322171fe1f7c288c80ca4156d46af0ca039052814bab"},
|
||||
{file = "coverage-7.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:57b6e8789cbefdef0667e4a94f8ffa40f9402cee5fc3b8e4274c894737890145"},
|
||||
{file = "coverage-7.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:85b22a9cce00cb03156334da67eb86e29f22b5e93876d0dd6a98646bb8a74e53"},
|
||||
{file = "coverage-7.10.1-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:97b6983a2f9c76d345ca395e843a049390b39652984e4a3b45b2442fa733992d"},
|
||||
{file = "coverage-7.10.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ddf2a63b91399a1c2f88f40bc1705d5a7777e31c7e9eb27c602280f477b582ba"},
|
||||
{file = "coverage-7.10.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:47ab6dbbc31a14c5486420c2c1077fcae692097f673cf5be9ddbec8cdaa4cdbc"},
|
||||
{file = "coverage-7.10.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:21eb7d8b45d3700e7c2936a736f732794c47615a20f739f4133d5230a6512a88"},
|
||||
{file = "coverage-7.10.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:283005bb4d98ae33e45f2861cd2cde6a21878661c9ad49697f6951b358a0379b"},
|
||||
{file = "coverage-7.10.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fefe31d61d02a8b2c419700b1fade9784a43d726de26495f243b663cd9fe1513"},
|
||||
{file = "coverage-7.10.1-cp39-cp39-win32.whl", hash = "sha256:e8ab8e4c7ec7f8a55ac05b5b715a051d74eac62511c6d96d5bb79aaafa3b04cf"},
|
||||
{file = "coverage-7.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:c36baa0ecde742784aa76c2b816466d3ea888d5297fda0edbac1bf48fa94688a"},
|
||||
{file = "coverage-7.10.1-py3-none-any.whl", hash = "sha256:fa2a258aa6bf188eb9a8948f7102a83da7c430a0dce918dbd8b60ef8fcb772d7"},
|
||||
{file = "coverage-7.10.1.tar.gz", hash = "sha256:ae2b4856f29ddfe827106794f3589949a57da6f0d38ab01e24ec35107979ba57"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
|
|
|
@ -3,6 +3,8 @@ from datetime import UTC, datetime
|
|||
import pytest
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from mealie.schema.household.webhook import ReadWebhook
|
||||
from mealie.services.scheduler.tasks.post_webhooks import post_test_webhook
|
||||
from tests.utils import api_routes, assert_deserialize, jsonify
|
||||
from tests.utils.fixture_schemas import TestUser
|
||||
|
||||
|
@ -84,3 +86,48 @@ def test_delete_webhook(api_client: TestClient, webhook_data, unique_user: TestU
|
|||
|
||||
response = api_client.get(api_routes.households_webhooks_item_id(item_id), headers=unique_user.token)
|
||||
assert response.status_code == 404
|
||||
|
||||
|
||||
def test_post_test_webhook(
|
||||
monkeypatch: pytest.MonkeyPatch, api_client: TestClient, unique_user: TestUser, webhook_data
|
||||
):
|
||||
# Mock the requests.post to avoid actual HTTP calls
|
||||
class MockResponse:
|
||||
status_code = 200
|
||||
|
||||
mock_calls = []
|
||||
|
||||
def mock_post(*args, **kwargs):
|
||||
mock_calls.append((args, kwargs))
|
||||
return MockResponse()
|
||||
|
||||
monkeypatch.setattr("mealie.services.event_bus_service.publisher.requests.post", mock_post)
|
||||
|
||||
# Create a webhook and post it
|
||||
response = api_client.post(
|
||||
api_routes.households_webhooks,
|
||||
json=jsonify(webhook_data),
|
||||
headers=unique_user.token,
|
||||
)
|
||||
webhook_dict = assert_deserialize(response, 201)
|
||||
|
||||
webhook = ReadWebhook(
|
||||
id=webhook_dict["id"],
|
||||
name=webhook_dict["name"],
|
||||
url=webhook_dict["url"],
|
||||
scheduled_time=webhook_dict["scheduledTime"],
|
||||
enabled=webhook_dict["enabled"],
|
||||
group_id=webhook_dict["groupId"],
|
||||
household_id=webhook_dict["householdId"],
|
||||
)
|
||||
|
||||
test_message = "This is a test webhook message"
|
||||
post_test_webhook(webhook, test_message)
|
||||
|
||||
# Verify that requests.post was called with the correct parameters
|
||||
assert len(mock_calls) == 1
|
||||
args, kwargs = mock_calls[0]
|
||||
|
||||
assert kwargs["json"]["message"]["body"] == test_message
|
||||
assert kwargs["timeout"] == 15
|
||||
assert args[0] == webhook.url
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue