mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-24 16:53:12 -05:00
Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2d73c703cb | ||
|
|
10315fe8f7 | ||
|
|
1f7d5a57af | ||
|
|
6d22df7b95 | ||
|
|
f5ddcdf193 | ||
|
|
36f6917308 | ||
|
|
53b5df92ae | ||
|
|
736352af5f | ||
|
|
41940b8003 | ||
|
|
641d24aa1e | ||
|
|
fb08a11ffe | ||
|
|
ba26378abc | ||
|
|
2a4b0d3d8b | ||
|
|
af4b3fa83d | ||
|
|
564012c53d | ||
|
|
2316a3fef9 | ||
|
|
a52fda72d6 | ||
|
|
cb05adeb48 | ||
|
|
f2eadd2908 | ||
|
|
4229061377 | ||
|
|
970ed1da7b | ||
|
|
dd9d9b85c1 | ||
|
|
6001d679e7 | ||
|
|
02cf53340b | ||
|
|
95042f1d40 | ||
|
|
34245687a5 | ||
|
|
7e5c750231 | ||
|
|
93c2df41c3 | ||
|
|
1e69577d12 | ||
|
|
cbafc28fa1 | ||
|
|
8622e19502 | ||
|
|
2fee1778ed | ||
|
|
2284ecb226 | ||
|
|
2716260473 | ||
|
|
0b89ab1a95 |
@@ -12,7 +12,7 @@ repos:
|
||||
exclude: ^tests/data/
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.9.2
|
||||
rev: v0.9.4
|
||||
hooks:
|
||||
- id: ruff
|
||||
- id: ruff-format
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
Mealie supports 3rd party authentication via [OpenID Connect (OIDC)](https://openid.net/connect/), an identity layer built on top of OAuth2. OIDC is supported by many Identity Providers (IdP), including:
|
||||
|
||||
- [Authentik](https://goauthentik.io/integrations/sources/oauth/#openid-connect)
|
||||
- [Authelia](https://www.authelia.com/configuration/identity-providers/open-id-connect/)
|
||||
- [Authelia](https://www.authelia.com/integration/openid-connect/mealie/)
|
||||
- [Keycloak](https://www.keycloak.org/docs/latest/securing_apps/#_oidc)
|
||||
- [Okta](https://www.okta.com/openid-connect/)
|
||||
|
||||
|
||||
@@ -139,6 +139,9 @@ Below is a list of all valid merge fields:
|
||||
- ${id}
|
||||
- ${slug}
|
||||
- ${url}
|
||||
- ${servings}
|
||||
- ${yieldQuantity}
|
||||
- ${yieldText}
|
||||
|
||||
To add, modify, or delete Recipe Actions, visit the Data Management page (more on that below).
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ To deploy mealie on your local network, it is highly recommended to use Docker t
|
||||
We've gone through a few versions of Mealie v1 deployment targets. We have settled on a single container deployment, and we've begun publishing the nightly container on github containers. If you're looking to move from the old nightly (split containers _or_ the omni image) to the new nightly, there are a few things you need to do:
|
||||
|
||||
1. Take a backup just in case!
|
||||
2. Replace the image for the API container with `ghcr.io/mealie-recipes/mealie:v2.4.2`
|
||||
2. Replace the image for the API container with `ghcr.io/mealie-recipes/mealie:v2.5.0`
|
||||
3. Take the external port from the frontend container and set that as the port mapped to port `9000` on the new container. The frontend is now served on port 9000 from the new container, so it will need to be mapped for you to have access.
|
||||
4. Restart the container
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ PostgreSQL might be considered if you need to support many concurrent users. In
|
||||
```yaml
|
||||
services:
|
||||
mealie:
|
||||
image: ghcr.io/mealie-recipes/mealie:v2.4.2 # (3)
|
||||
image: ghcr.io/mealie-recipes/mealie:v2.5.0 # (3)
|
||||
container_name: mealie
|
||||
restart: always
|
||||
ports:
|
||||
|
||||
@@ -11,7 +11,7 @@ SQLite is a popular, open source, self-contained, zero-configuration database th
|
||||
```yaml
|
||||
services:
|
||||
mealie:
|
||||
image: ghcr.io/mealie-recipes/mealie:v2.4.2 # (3)
|
||||
image: ghcr.io/mealie-recipes/mealie:v2.5.0 # (3)
|
||||
container_name: mealie
|
||||
restart: always
|
||||
ports:
|
||||
|
||||
@@ -85,12 +85,13 @@ nav:
|
||||
- OpenID Connect: "documentation/getting-started/authentication/oidc-v2.md"
|
||||
|
||||
- Community Guides:
|
||||
- Bring API without internet exposure: "documentation/community-guide/bring-api.md"
|
||||
- Automate Backups with n8n: "documentation/community-guide/n8n-backup-automation.md"
|
||||
- Bulk Url Import: "documentation/community-guide/bulk-url-import.md"
|
||||
- Home Assistant: "documentation/community-guide/home-assistant.md"
|
||||
- Import Bookmarklet: "documentation/community-guide/import-recipe-bookmarklet.md"
|
||||
- iOS Shortcuts: "documentation/community-guide/ios.md"
|
||||
- Reverse Proxy (SWAG): "documentation/community-guide/swag.md"
|
||||
- Home Assistant: "documentation/community-guide/home-assistant.md"
|
||||
- Bulk Url Import: "documentation/community-guide/bulk-url-import.md"
|
||||
- Import Bookmarklet: "documentation/community-guide/import-recipe-bookmarklet.md"
|
||||
- Automate Backups with n8n: "documentation/community-guide/n8n-backup-automation.md"
|
||||
|
||||
- API Reference: "api/redoc.md"
|
||||
|
||||
|
||||
@@ -236,14 +236,17 @@ export default defineComponent({
|
||||
});
|
||||
|
||||
async function fetchRecipes(pageCount = 1) {
|
||||
const orderDir = props.query?.orderDirection || preferences.value.orderDirection;
|
||||
const orderByNullPosition = props.query?.orderByNullPosition || orderDir === "asc" ? "first" : "last";
|
||||
return await fetchMore(
|
||||
page.value,
|
||||
perPage * pageCount,
|
||||
props.query?.orderBy || preferences.value.orderBy,
|
||||
props.query?.orderDirection || preferences.value.orderDirection,
|
||||
orderDir,
|
||||
orderByNullPosition,
|
||||
props.query,
|
||||
// we use a computed queryFilter to filter out recipes that have a null value for the property we're sorting by
|
||||
queryFilter.value
|
||||
queryFilter.value,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -371,7 +371,7 @@ export default defineComponent({
|
||||
const groupRecipeActionsStore = useGroupRecipeActions();
|
||||
|
||||
async function executeRecipeAction(action: GroupRecipeActionOut) {
|
||||
const response = await groupRecipeActionsStore.execute(action, props.recipe);
|
||||
const response = await groupRecipeActionsStore.execute(action, props.recipe, props.recipeScale);
|
||||
|
||||
if (action.actionType === "post") {
|
||||
if (!response?.error) {
|
||||
|
||||
@@ -2,7 +2,7 @@ import { useAsync, useRouter, ref } from "@nuxtjs/composition-api";
|
||||
import { useAsyncKey } from "../use-utils";
|
||||
import { usePublicExploreApi } from "~/composables/api/api-client";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
import { Recipe } from "~/lib/api/types/recipe";
|
||||
import { OrderByNullPosition, Recipe } from "~/lib/api/types/recipe";
|
||||
import { RecipeSearchQuery } from "~/lib/api/user/recipes/recipe";
|
||||
|
||||
export const allRecipes = ref<Recipe[]>([]);
|
||||
@@ -11,12 +11,14 @@ export const recentRecipes = ref<Recipe[]>([]);
|
||||
function getParams(
|
||||
orderBy: string | null = null,
|
||||
orderDirection = "desc",
|
||||
orderByNullPosition: OrderByNullPosition | null = null,
|
||||
query: RecipeSearchQuery | null = null,
|
||||
queryFilter: string | null = null
|
||||
) {
|
||||
return {
|
||||
orderBy,
|
||||
orderDirection,
|
||||
orderByNullPosition,
|
||||
paginationSeed: query?._searchSeed, // propagate searchSeed to stabilize random order pagination
|
||||
searchSeed: query?._searchSeed, // unused, but pass it along for completeness of data
|
||||
search: query?.search,
|
||||
@@ -47,6 +49,7 @@ export const useLazyRecipes = function (publicGroupSlug: string | null = null) {
|
||||
perPage: number,
|
||||
orderBy: string | null = null,
|
||||
orderDirection = "desc",
|
||||
orderByNullPosition: OrderByNullPosition | null = null,
|
||||
query: RecipeSearchQuery | null = null,
|
||||
queryFilter: string | null = null,
|
||||
) {
|
||||
@@ -54,7 +57,7 @@ export const useLazyRecipes = function (publicGroupSlug: string | null = null) {
|
||||
const { data, error } = await api.recipes.getAll(
|
||||
page,
|
||||
perPage,
|
||||
getParams(orderBy, orderDirection, query, queryFilter),
|
||||
getParams(orderBy, orderDirection, orderByNullPosition, query, queryFilter),
|
||||
);
|
||||
|
||||
if (error?.response?.status === 404) {
|
||||
@@ -88,7 +91,7 @@ export const useLazyRecipes = function (publicGroupSlug: string | null = null) {
|
||||
}
|
||||
|
||||
async function getRandom(query: RecipeSearchQuery | null = null, queryFilter: string | null = null) {
|
||||
const { data } = await api.recipes.getAll(1, 1, getParams("random", "desc", query, queryFilter));
|
||||
const { data } = await api.recipes.getAll(1, 1, getParams("random", "desc", null, query, queryFilter));
|
||||
if (data?.items.length) {
|
||||
return data.items[0];
|
||||
}
|
||||
|
||||
@@ -46,17 +46,23 @@ export const useGroupRecipeActions = function (
|
||||
return groupRecipeActions.value;
|
||||
});
|
||||
|
||||
function parseRecipeActionUrl(url: string, recipe: Recipe): string {
|
||||
function parseRecipeActionUrl(url: string, recipe: Recipe, recipeScale: number): string {
|
||||
const recipeServings = (recipe.recipeServings || 1) * recipeScale;
|
||||
const recipeYieldQuantity = (recipe.recipeYieldQuantity || 1) * recipeScale;
|
||||
|
||||
/* eslint-disable no-template-curly-in-string */
|
||||
return url
|
||||
.replace("${url}", window.location.href)
|
||||
.replace("${id}", recipe.id || "")
|
||||
.replace("${slug}", recipe.slug || "")
|
||||
.replace("${servings}", recipeServings.toString())
|
||||
.replace("${yieldQuantity}", recipeYieldQuantity.toString())
|
||||
.replace("${yieldText}", recipe.recipeYield || "")
|
||||
/* eslint-enable no-template-curly-in-string */
|
||||
};
|
||||
|
||||
async function execute(action: GroupRecipeActionOut, recipe: Recipe): Promise<void | RequestResponse<unknown>> {
|
||||
const url = parseRecipeActionUrl(action.url, recipe);
|
||||
async function execute(action: GroupRecipeActionOut, recipe: Recipe, recipeScale: number): Promise<void | RequestResponse<unknown>> {
|
||||
const url = parseRecipeActionUrl(action.url, recipe, recipeScale);
|
||||
|
||||
switch (action.actionType) {
|
||||
case "link":
|
||||
|
||||
@@ -349,7 +349,7 @@
|
||||
"note-only": "Pouze poznámka",
|
||||
"random-meal": "Náhodné jídlo",
|
||||
"random-dinner": "Náhodná večeře",
|
||||
"random-side": "Random Side",
|
||||
"random-side": "Náhodná příloha",
|
||||
"this-rule-will-apply": "Toto pravidlo se použije {dayCriteria} {mealTypeCriteria}.",
|
||||
"to-all-days": "na všechny dny",
|
||||
"on-days": "on {0}s",
|
||||
@@ -1059,14 +1059,14 @@
|
||||
"food-label": "Označení jídla",
|
||||
"edit-food": "Upravit jídlo",
|
||||
"food-data": "Data jídla",
|
||||
"example-food-singular": "ex: Onion",
|
||||
"example-food-plural": "ex: Onions",
|
||||
"example-food-singular": "např.: Brambora",
|
||||
"example-food-plural": "např.: Brambory",
|
||||
"label-overwrite-warning": "Toto přiřadí vybraný štítek všem vybraným jídlům a může přepsat stávající štítky.",
|
||||
"on-hand-checkbox-label": "Nastavením tohoto příznaku bude tato potravina při přidávání receptu do nákupního seznamu ve výchozím nastavení odškrtnuta."
|
||||
},
|
||||
"units": {
|
||||
"seed-dialog-text": "Naplnit databázi s běžnými jednotkami používanými ve vašem jazyce.",
|
||||
"combine-unit-description": "Combining the selected units will merge the Source Unit and Target Unit into a single unit. The {source-unit-will-be-deleted} and all of the references to the Source Unit will be updated to point to the Target Unit.",
|
||||
"combine-unit-description": "Zkombinování zvolených jednotek spojí zdrojovou a cílovou jednotku do jedné. {source-unit-will-be-deleted} a všechny odkazy na ni budou upraveny na cílovou jednotku.",
|
||||
"combine-unit": "Kombinovaná jednotka",
|
||||
"source-unit": "Zdrojová jednotka",
|
||||
"target-unit": "Cílová jednotka",
|
||||
@@ -1081,10 +1081,10 @@
|
||||
"unit-data": "Data jednotky",
|
||||
"use-abbv": "Používat zkratky",
|
||||
"fraction": "Zlomek",
|
||||
"example-unit-singular": "ex: Tablespoon",
|
||||
"example-unit-plural": "ex: Tablespoons",
|
||||
"example-unit-abbreviation-singular": "ex: Tbsp",
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps"
|
||||
"example-unit-singular": "např.: Čajová lžička",
|
||||
"example-unit-plural": "např.: Čajové lžičky",
|
||||
"example-unit-abbreviation-singular": "např.: čl",
|
||||
"example-unit-abbreviation-plural": "např.: čl"
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Naplnit databázi s běžnými popisky používanými ve vašem jazyce.",
|
||||
@@ -1296,7 +1296,7 @@
|
||||
"profile": {
|
||||
"welcome-user": "👋 Vítejte, {0}!",
|
||||
"description": "Spravujte svůj profil, recepty a nastavení skupiny.",
|
||||
"invite-link": "Invite Link",
|
||||
"invite-link": "Odkaz pozvánky",
|
||||
"get-invite-link": "Získat odkaz na pozvánku",
|
||||
"get-public-link": "Získat veřejný odkaz",
|
||||
"account-summary": "Přehled účtu",
|
||||
@@ -1346,7 +1346,7 @@
|
||||
"cookbook": {
|
||||
"cookbooks": "Kuchařky",
|
||||
"description": "Kuchařky jsou dalším způsobem, jak uspořádat recepty vytvořením průřezů receptů, organizátorů a dalších filtrů. Vytvořením kuchařky se přidá položka na postranní panel a v kuchařce se zobrazí všechny recepty s vybranými filtry.",
|
||||
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
|
||||
"hide-cookbooks-from-other-households": "Skrýt kuchařky ostatních domácností",
|
||||
"hide-cookbooks-from-other-households-description": "Pokud je povoleno, objeví se na postranním panelu pouze kuchařské knihy z vaší domácnosti",
|
||||
"public-cookbook": "Veřejná kuchařka",
|
||||
"public-cookbook-description": "Veřejné kuchařky mohou být sdíleny s neregistrovanými uživateli a budou zobrazeny na stránce vaší skupiny.",
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
"wednesday": "Τετάρτη",
|
||||
"yes": "Ναι",
|
||||
"foods": "Τρόφιμα",
|
||||
"units": "Μονάδες",
|
||||
"units": "Μονάδες μέτρησης",
|
||||
"back": "Πίσω",
|
||||
"next": "Επόμενο",
|
||||
"start": "Εναρξη",
|
||||
|
||||
@@ -469,7 +469,7 @@
|
||||
"categories": "Categorías",
|
||||
"cholesterol-content": "Colesterol",
|
||||
"comment-action": "Comentar",
|
||||
"comment": "Comentar",
|
||||
"comment": "Comentario",
|
||||
"comments": "Comentarios",
|
||||
"delete-confirmation": "¿Estás seguro de eliminar esta receta?",
|
||||
"delete-recipe": "Borrar receta",
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"support": "Tuki",
|
||||
"version": "Versio",
|
||||
"unknown-version": "tuntematon",
|
||||
"sponsor": "Yhteistyökumppani"
|
||||
"sponsor": "Sponsori"
|
||||
},
|
||||
"asset": {
|
||||
"assets": "Liitteet",
|
||||
@@ -72,7 +72,7 @@
|
||||
"enable-notifier": "Ota ilmoittaja käyttöön",
|
||||
"what-events": "Mistä tapahtumista tulisi ilmoittaa?",
|
||||
"user-events": "Käyttäjän tapahtumat",
|
||||
"mealplan-events": "Ateriasuunnittelun tapahtumat",
|
||||
"mealplan-events": "Ateriasuunnitelman Tapahtumat",
|
||||
"when-a-user-in-your-group-creates-a-new-mealplan": "Kun ryhmäsi käyttäjä tekee ateriasuunnitelman",
|
||||
"shopping-list-events": "Ostoslistatapahtumat",
|
||||
"cookbook-events": "Keittokirjatapahtumat",
|
||||
@@ -277,7 +277,7 @@
|
||||
"admin-group-management-text": "Muutokset tähän ryhmään tulevat näkymään välittömästi.",
|
||||
"group-id-value": "Ryhmän tunniste: {0}",
|
||||
"total-households": "Kotitaloudet Yhteensä",
|
||||
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
|
||||
"you-must-select-a-group-before-selecting-a-household": "Sinun tulee valita ryhmä ennen kuin valitset kotitalouden"
|
||||
},
|
||||
"household": {
|
||||
"household": "Kotitalous",
|
||||
@@ -518,7 +518,7 @@
|
||||
"save-recipe-before-use": "Tallenna resepti ennen käyttöä",
|
||||
"section-title": "Osion otsikko",
|
||||
"servings": "Annokset",
|
||||
"serves-amount": "Serves {amount}",
|
||||
"serves-amount": "{amount} annosta",
|
||||
"share-recipe-message": "Halusin jakaa reseptin {0} kanssasi.",
|
||||
"show-nutrition-values": "Näytä ravintoarvot",
|
||||
"sodium-content": "Natrium",
|
||||
@@ -532,7 +532,7 @@
|
||||
"no-recipe": "Ei reseptiä",
|
||||
"locked-by-owner": "Omistajan lukitsema",
|
||||
"join-the-conversation": "Liity keskusteluun",
|
||||
"add-recipe-to-mealplan": "Lisää resepti ateriasuunnitelmaan",
|
||||
"add-recipe-to-mealplan": "Lisää resepti Ateriasuunnitelmaan",
|
||||
"entry-type": "Merkinnän tyyppi",
|
||||
"date-format-hint": "KK/PP/VVVV-muoto",
|
||||
"date-format-hint-yyyy-mm-dd": "VVVV-KK-PP-muoto",
|
||||
@@ -546,9 +546,9 @@
|
||||
"failed-to-add-recipes-to-list": "Luetteloon lisääminen epäonnistui",
|
||||
"failed-to-add-recipe-to-mealplan": "Reseptiä ei voitu lisätä ateriasuunnitelmaan",
|
||||
"failed-to-add-to-list": "Luetteloon lisääminen epäonnistui",
|
||||
"yield": "Sato",
|
||||
"yields-amount-with-text": "Yields {amount} {text}",
|
||||
"yield-text": "Yield Text",
|
||||
"yield": "Tuotto",
|
||||
"yields-amount-with-text": "Tuottaa {amount} {text}",
|
||||
"yield-text": "Tuotosteksti",
|
||||
"quantity": "Määrä",
|
||||
"choose-unit": "Valitse Yksikkö",
|
||||
"press-enter-to-create": "Luo painamalla Enter",
|
||||
@@ -637,9 +637,9 @@
|
||||
"recipe-debugger-use-openai-description": "Käytä OpenAI:ta kaavinkirjaston sijaan tulosten jäsentämiseen. Luodessa reseptiä URL:n kautta tämä tehdään ilman eri kysymystä, kun kaavinkirjasto ei toimi, mutta voit kokeilla sitä tässä manuaalisesti.",
|
||||
"debug": "Vianhaku",
|
||||
"tree-view": "Puunäkymä",
|
||||
"recipe-servings": "Recipe Servings",
|
||||
"recipe-yield": "Reseptin tekijä",
|
||||
"recipe-yield-text": "Recipe Yield Text",
|
||||
"recipe-servings": "Reseptin annokset",
|
||||
"recipe-yield": "Reseptin tuotto",
|
||||
"recipe-yield-text": "Reseptin tuotosteksti",
|
||||
"unit": "Yksikkö",
|
||||
"upload-image": "Lataa kuva",
|
||||
"screen-awake": "Pidä näyttö aina päällä",
|
||||
@@ -661,25 +661,25 @@
|
||||
"missing-food": "Luo puuttuva ruoka: {food}",
|
||||
"no-food": "Ei ruokaa"
|
||||
},
|
||||
"reset-servings-count": "Reset Servings Count",
|
||||
"not-linked-ingredients": "Additional Ingredients"
|
||||
"reset-servings-count": "Palauta Annoksien Määrä",
|
||||
"not-linked-ingredients": "Muut ainesosat"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recipe Finder",
|
||||
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
|
||||
"selected-ingredients": "Selected Ingredients",
|
||||
"no-ingredients-selected": "No ingredients selected",
|
||||
"missing": "Missing",
|
||||
"no-recipes-found": "No recipes found",
|
||||
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
|
||||
"include-ingredients-on-hand": "Include Ingredients On Hand",
|
||||
"include-tools-on-hand": "Include Tools On Hand",
|
||||
"max-missing-ingredients": "Max Missing Ingredients",
|
||||
"max-missing-tools": "Max Missing Tools",
|
||||
"selected-tools": "Selected Tools",
|
||||
"other-filters": "Other Filters",
|
||||
"ready-to-make": "Ready to Make",
|
||||
"almost-ready-to-make": "Almost Ready to Make"
|
||||
"recipe-finder": "Reseptin etsijä",
|
||||
"recipe-finder-description": "Etsi sopivia reseptejä saatavilla olevien ainesosien perusteella. Voit myös suodattaa tulokset saatavilla olevien ruoanvalmistusvälineiden perusteella, ja asettaa enimmäismäärän puuttuvia ainesosia tai välineitä.",
|
||||
"selected-ingredients": "Valitut ainesosat",
|
||||
"no-ingredients-selected": "Ei valittuja ainesosia",
|
||||
"missing": "Puuttuu",
|
||||
"no-recipes-found": "Reseptejä ei löytynyt",
|
||||
"no-recipes-found-description": "Kokeile lisätä enemmän ainesosia hakuun tai säätää suodattimia",
|
||||
"include-ingredients-on-hand": "Sisällytä saatavilla olevat ainesosat",
|
||||
"include-tools-on-hand": "Sisällytä saatavilla olevat välineet",
|
||||
"max-missing-ingredients": "Puuttuvien ainesten enimmäismäärä",
|
||||
"max-missing-tools": "Puuttuvien välineiden enimmäismäärä",
|
||||
"selected-tools": "Valitut välineet",
|
||||
"other-filters": "Muut suodattimet",
|
||||
"ready-to-make": "Valmis tekemään",
|
||||
"almost-ready-to-make": "Melkein valmis tekemään"
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Tarkennettu haku",
|
||||
@@ -690,7 +690,7 @@
|
||||
"or": "Tai",
|
||||
"has-any": "On Mikä Tahansa",
|
||||
"has-all": "On Kaikki",
|
||||
"clear-selection": "Clear Selection",
|
||||
"clear-selection": "Tyhjennä valinnat",
|
||||
"results": "Tulokset",
|
||||
"search": "Hae",
|
||||
"search-mealie": "Hae Mealiestä (paina /)",
|
||||
@@ -884,7 +884,7 @@
|
||||
"are-you-sure-you-want-to-check-all-items": "Haluatko varmasti valita kaikki kohteet?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Haluatko varmasti poistaa kaikki valinnat?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Haluatko varmasti poistaa kaikki valitut kohteet?",
|
||||
"no-shopping-lists-found": "No Shopping Lists Found"
|
||||
"no-shopping-lists-found": "Ostoslistoja ei löytynyt"
|
||||
},
|
||||
"sidebar": {
|
||||
"all-recipes": "Reseptit",
|
||||
@@ -981,7 +981,7 @@
|
||||
"register": "Rekisteröidy",
|
||||
"reset-password": "Palauta salasana",
|
||||
"sign-in": "Kirjaudu",
|
||||
"total-mealplans": "Ateriasuunnitelmia",
|
||||
"total-mealplans": "Ateriasuunnitelma Yhteensä",
|
||||
"total-users": "Käyttäjien määrä",
|
||||
"upload-photo": "Tuo kuva",
|
||||
"use-8-characters-or-more-for-your-password": "Salasanan pituuden on oltava vähintään kahdeksan merkkiä",
|
||||
@@ -1030,7 +1030,7 @@
|
||||
"administrator": "Ylläpitäjä",
|
||||
"user-can-invite-other-to-group": "Käyttäjä voi kutsua muita ryhmään",
|
||||
"user-can-manage-group": "Käyttäjä voi hallita ryhmää",
|
||||
"user-can-manage-household": "User can manage household",
|
||||
"user-can-manage-household": "Käyttäjä voi hallita kotitaloutta",
|
||||
"user-can-organize-group-data": "Käyttäjä voi järjestellä ryhmän tietoja",
|
||||
"enable-advanced-features": "Salli edistyneemmät ominaisuudet",
|
||||
"it-looks-like-this-is-your-first-time-logging-in": "Tämä vaikuttaa olevan ensimmäinen kirjautumisesi.",
|
||||
@@ -1213,7 +1213,7 @@
|
||||
"result": "Valittu teksti tulee näkymään aiemmin valitun kentän sisällä."
|
||||
},
|
||||
"pan-and-zoom-mode": "Kääntö- ja zoomaustila",
|
||||
"pan-and-zoom-desc": "Select pan and zoom by clicking the icon. This mode allows to zoom inside the image and move around to make using big images easier.",
|
||||
"pan-and-zoom-desc": "Valitse panorointi ja zoomaus klikkaamalla kuvaketta. Tämä tila mahdollistaa zoomauksen kuvan sisällä ja liikkumisen niin, että isojen kuvien käyttö on helpompaa.",
|
||||
"split-text-mode": "Jaa tekstitila",
|
||||
"split-modes": {
|
||||
"line-mode": "Rivitila (oletus)",
|
||||
@@ -1232,37 +1232,37 @@
|
||||
"summary-title": "Yhteenveto",
|
||||
"button-label-get-summary": "Hae Yhteenveto",
|
||||
"button-label-open-details": "Tiedot",
|
||||
"info-description-data-dir-size": "Datahakemiston Koko",
|
||||
"info-description-data-dir-size": "Datahakemiston koko",
|
||||
"info-description-log-file-size": "Lokitiedoston Koko",
|
||||
"info-description-cleanable-directories": "Siivottavat Hakemistot",
|
||||
"info-description-cleanable-images": "Siivottavat Kuvat",
|
||||
"info-description-cleanable-directories": "Siivottavat hakemistot",
|
||||
"info-description-cleanable-images": "Siivottavat kuvat",
|
||||
"storage": {
|
||||
"title-temporary-directory": "Väliaikainen Hakemisto (.temp)",
|
||||
"title-temporary-directory": "Väliaikainen hakemisto (.temp)",
|
||||
"title-backups-directory": "Varmuuskopiointihakemisto (varmuuskopiot)",
|
||||
"title-groups-directory": "Ryhmien Hakemisto (ryhmät)",
|
||||
"title-groups-directory": "Ryhmien hakemisto (ryhmät)",
|
||||
"title-recipes-directory": "Reseptihakemisto (reseptit)",
|
||||
"title-user-directory": "Käyttäjähakemisto (käyttäjä)"
|
||||
},
|
||||
"action-delete-log-files-name": "Poista Lokitiedostot",
|
||||
"action-delete-log-files-description": "Poistaa kaikki lokitiedostot",
|
||||
"action-clean-directories-name": "Puhdista Hakemistot",
|
||||
"action-clean-directories-name": "Puhdista hakemistot",
|
||||
"action-clean-directories-description": "Poistaa kaikki reseptikansiot, jotka eivät ole kelvollisia UUID-koodeja",
|
||||
"action-clean-temporary-files-name": "Poista väliaikaiset tiedostot",
|
||||
"action-clean-temporary-files-description": "Poistaa kaikki tiedostot ja kansiot .temp kansiosta",
|
||||
"action-clean-images-name": "Puhdista Kuvat",
|
||||
"action-clean-images-name": "Puhdista kuvat",
|
||||
"action-clean-images-description": "Poistaa kaikki kuvat, jotka eivät pääty .webp",
|
||||
"actions-description": "Maintenance actions are {destructive_in_bold} and should be used with caution. Performing any of these actions is {irreversible_in_bold}.",
|
||||
"actions-description-destructive": "lopullinen",
|
||||
"actions-description-irreversible": "peruuttamaton",
|
||||
"actions-description": "Huoltotoimenpiteet ovat {destructive_in_bold} ja niitä tulisi käyttää varoen. Kaikkien näiden toimenpiteiden suorittaminen on {irreversible_in_bold}.",
|
||||
"actions-description-destructive": "tuhoisia",
|
||||
"actions-description-irreversible": "peruuttamatonta",
|
||||
"logs-action-refresh": "Päivitä lokit",
|
||||
"logs-page-title": "Mealie- Lokit",
|
||||
"logs-tail-lines-label": "Tail Lines"
|
||||
"logs-tail-lines-label": "Loppurivit"
|
||||
},
|
||||
"mainentance": {
|
||||
"actions-title": "Toiminnot"
|
||||
},
|
||||
"ingredients-natural-language-processor": "Ingredients Natural Language Processor",
|
||||
"ingredients-natural-language-processor-explanation": "Mealie uses Conditional Random Fields (CRFs) for parsing and processing ingredients. The model used for ingredients is based off a data set of over 100,000 ingredients from a dataset compiled by the New York Times. Note that as the model is trained in English only, you may have varied results when using the model in other languages. This page is a playground for testing the model.",
|
||||
"ingredients-natural-language-processor-explanation": "Mealie käyttää Conditional Random Fields (CRF) ainesosien jäsentämiseen ja prosessointiin. Ainesosien osalta käytetty malli perustuu yli 100000 ainesosan aineistoon New York Timesin kokoamasta aineistosta. Huomaa, että koska malli on koulutettu vain englanniksi, mallilla voi olla vaihtelevia tuloksia, kun käytät mallia muilla kielillä. Tämä sivu on mallin testaamiseen tarkoitettu leikkipaikka.",
|
||||
"ingredients-natural-language-processor-explanation-2": "Se ei ole täydellinen, mutta se tuottaa hyviä tuloksia yleensä ja on hyvä lähtökohta manuaalisesti jäsentää ainesosia yksittäisiin kenttiin. Vaihtoehtoisesti voit myös käyttää Brute-prosessori, joka käyttää kuvion täsmäystekniikkaa tunnistamaan ainesosia.",
|
||||
"nlp": "NLP",
|
||||
"brute": "Brute",
|
||||
@@ -1279,24 +1279,24 @@
|
||||
"setup": {
|
||||
"first-time-setup": "Ensiasetukset",
|
||||
"welcome-to-mealie-get-started": "Tervetuloa Mealieen! Aloitetaan",
|
||||
"already-set-up-bring-to-homepage": "I'm already set up, just bring me to the homepage",
|
||||
"common-settings-for-new-sites": "Here are some common settings for new sites",
|
||||
"setup-complete": "Setup Complete!",
|
||||
"already-set-up-bring-to-homepage": "Olen jo valmis, vie minut kotisivulle",
|
||||
"common-settings-for-new-sites": "Tässä muutamia yleisiä asetuksia uusille sivustoille",
|
||||
"setup-complete": "Asennus valmis.",
|
||||
"here-are-a-few-things-to-help-you-get-started": "Näillä muutamilla asioilla pääset alkuun",
|
||||
"restore-from-v1-backup": "Onko sinulla varmuuskopio aiemmasta Mealie v1 -instanssista? Palauta se tästä.",
|
||||
"manage-profile-or-get-invite-link": "Hallitse profiiliasi tai hanki kutsulinkki muille."
|
||||
},
|
||||
"debug-openai-services": "Debug OpenAI Services",
|
||||
"debug-openai-services-description": "Use this page to debug OpenAI services. You can test your OpenAI connection and see the results here. If you have image services enabled, you can also provide an image.",
|
||||
"run-test": "Run Test",
|
||||
"test-results": "Test Results",
|
||||
"group-delete-note": "Groups with users or households cannot be deleted",
|
||||
"household-delete-note": "Households with users cannot be deleted"
|
||||
"debug-openai-services": "Debuggaa OpenAI-palveluita",
|
||||
"debug-openai-services-description": "Käytä tätä sivua OpenAI-palveluiden debuggaamiseen. Voit testata OpenAI-yhteytesi ja nähdä tulokset täällä. Jos kuvapalvelut ovat käytössä, voit myös antaa kuvan.",
|
||||
"run-test": "Suorita testi",
|
||||
"test-results": "Testitulokset",
|
||||
"group-delete-note": "Ryhmiä, joilla on käyttäjiä tai kotitalouksia, ei voi poistaa",
|
||||
"household-delete-note": "Kotitalouksia, joissa on käyttäjiä, ei voi poistaa"
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Tervetuloa, {0}!",
|
||||
"description": "Hallitse profiiliasi, reseptejäsi ja ryhmäasetuksiasi.",
|
||||
"invite-link": "Invite Link",
|
||||
"invite-link": "",
|
||||
"get-invite-link": "Hanki Kutsulinkki",
|
||||
"get-public-link": "Julkinen linkki",
|
||||
"account-summary": "Tilin Yhteenveto",
|
||||
@@ -1345,9 +1345,9 @@
|
||||
},
|
||||
"cookbook": {
|
||||
"cookbooks": "Keittokirjat",
|
||||
"description": "Cookbooks are another way to organize recipes by creating cross sections of recipes, organizers, and other filters. Creating a cookbook will add an entry to the side-bar and all the recipes with the filters chosen will be displayed in the cookbook.",
|
||||
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
|
||||
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
|
||||
"description": "Keittokirjat ovat toinen tapa järjestää reseptejä luomalla poikkileikkauksia resepteistä, järjestäjistä, sekä muista suodattimista. Keittokirjan luominen lisää merkinnän sivupalkkiin, ja kaikki reseptit näkyvät keittokirjassa valittujen suodatinten mukaisesti.",
|
||||
"hide-cookbooks-from-other-households": "Piilota keittokirjat muista kotitalouksista",
|
||||
"hide-cookbooks-from-other-households-description": "Kun käytössä, sivupalkissa näkyy vain oman kotitaloutesi keittokirjoja",
|
||||
"public-cookbook": "Julkinen Keittokirja",
|
||||
"public-cookbook-description": "Julkisia keittokirjoja voidaan jakaa ei-Mealien käyttäjille, ja ne näkyvät ryhmäsi sivulla.",
|
||||
"filter-options": "Suodatuksen asetukset",
|
||||
@@ -1363,25 +1363,25 @@
|
||||
},
|
||||
"query-filter": {
|
||||
"logical-operators": {
|
||||
"and": "AND",
|
||||
"or": "OR"
|
||||
"and": "JA",
|
||||
"or": "TAI"
|
||||
},
|
||||
"relational-operators": {
|
||||
"equals": "equals",
|
||||
"does-not-equal": "does not equal",
|
||||
"is-greater-than": "is greater than",
|
||||
"is-greater-than-or-equal-to": "is greater than or equal to",
|
||||
"is-less-than": "is less than",
|
||||
"is-less-than-or-equal-to": "is less than or equal to"
|
||||
"equals": "on yhtä kuin",
|
||||
"does-not-equal": "ei ole yhtä kuin",
|
||||
"is-greater-than": "on suurempi kuin",
|
||||
"is-greater-than-or-equal-to": "on suurempi tai yhtäsuuri kuin",
|
||||
"is-less-than": "on vähemmän kuin",
|
||||
"is-less-than-or-equal-to": "on vähemmän tai yhtäsuuri kuin"
|
||||
},
|
||||
"relational-keywords": {
|
||||
"is": "is",
|
||||
"is-not": "is not",
|
||||
"is-one-of": "is one of",
|
||||
"is-not-one-of": "is not one of",
|
||||
"contains-all-of": "contains all of",
|
||||
"is-like": "is like",
|
||||
"is-not-like": "is not like"
|
||||
"is": "on",
|
||||
"is-not": "ei ole",
|
||||
"is-one-of": "on yksi näistä",
|
||||
"is-not-one-of": "ei ole yksi näistä",
|
||||
"contains-all-of": "sisältää kaikki nämä",
|
||||
"is-like": "on kuin",
|
||||
"is-not-like": "ei ole kuin"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -517,7 +517,7 @@
|
||||
"saturated-fat-content": "Grassi saturi",
|
||||
"save-recipe-before-use": "Salva la ricetta prima dell'uso",
|
||||
"section-title": "Titolo Sezione",
|
||||
"servings": "Portate",
|
||||
"servings": "Porzioni",
|
||||
"serves-amount": "Porzioni {amount}",
|
||||
"share-recipe-message": "Volevo condividere la mia {0} ricetta con te.",
|
||||
"show-nutrition-values": "Mostra Valori Nutrizionali",
|
||||
@@ -546,9 +546,9 @@
|
||||
"failed-to-add-recipes-to-list": "Impossibile aggiungere la ricetta alla lista",
|
||||
"failed-to-add-recipe-to-mealplan": "Impossibile aggiungere la ricetta al piano alimentare",
|
||||
"failed-to-add-to-list": "Errore durante l'aggiunta alla lista",
|
||||
"yield": "Porzioni",
|
||||
"yields-amount-with-text": "Rendimenti {amount} {text}",
|
||||
"yield-text": "Testo di rendimento",
|
||||
"yield": "Quantità prodotta",
|
||||
"yields-amount-with-text": "Quantità prodotta: {amount} {text}",
|
||||
"yield-text": "Unità della quantità prodotta",
|
||||
"quantity": "Quantità",
|
||||
"choose-unit": "Scegli Unità",
|
||||
"press-enter-to-create": "Premi invio per creare",
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
"loading": "Kraunasi",
|
||||
"loading-events": "Užkrovimo įvykiai",
|
||||
"loading-recipe": "Receptai kraunasi...",
|
||||
"loading-ocr-data": "Loading OCR data...",
|
||||
"loading-ocr-data": "Įkeliami OCR duomenys...",
|
||||
"loading-recipes": "Receptai kraunasi",
|
||||
"message": "Pranešimas",
|
||||
"monday": "Pirmadienis",
|
||||
@@ -210,14 +210,14 @@
|
||||
"upload-file": "Įkelti failą",
|
||||
"created-on-date": "Sukurta: {0}",
|
||||
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"clipboard-copy-failure": "Nepavyko nukopijuoti į iškarpinę.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers",
|
||||
"caution": "Caution",
|
||||
"show-advanced": "Show Advanced",
|
||||
"add-field": "Add Field",
|
||||
"date-created": "Date Created",
|
||||
"date-updated": "Date Updated"
|
||||
"show-advanced": "Rodyti plačiau",
|
||||
"add-field": "Pridėti lauką",
|
||||
"date-created": "Sukūrimo data",
|
||||
"date-updated": "Atnaujinimo data"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Ar tikrai norite ištrinti <b>{groupName}<b/>?",
|
||||
@@ -322,7 +322,7 @@
|
||||
"mealplan-update-failed": "Mitybos plano atnaujinti nepavyko",
|
||||
"mealplan-updated": "Mitybos planas atnaujintas",
|
||||
"mealplan-households-description": "If no household is selected, recipes can be added from any household",
|
||||
"any-category": "Any Category",
|
||||
"any-category": "Bet kuri kategorija",
|
||||
"any-tag": "Any Tag",
|
||||
"any-household": "Any Household",
|
||||
"no-meal-plan-defined-yet": "Nėra nustatytų mitybos planų",
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"database-type": "Tipo do Banco de Dados",
|
||||
"database-url": "URL do banco de dados",
|
||||
"default-group": "Grupo Padrão",
|
||||
"default-household": "Default Household",
|
||||
"default-household": "Casa Padrão",
|
||||
"demo": "Demonstração",
|
||||
"demo-status": "Status da Demonstração",
|
||||
"development": "Desenvolvimento",
|
||||
@@ -182,7 +182,7 @@
|
||||
"date": "Data",
|
||||
"id": "Id",
|
||||
"owner": "Proprietário",
|
||||
"change-owner": "Change Owner",
|
||||
"change-owner": "Alterar Dono",
|
||||
"date-added": "Data de inclusão",
|
||||
"none": "Nenhum",
|
||||
"run": "Executar",
|
||||
@@ -214,10 +214,10 @@
|
||||
"confirm-delete-generic-items": "Tem certeza que quer excluir os itens seguintes?",
|
||||
"organizers": "Organizadores",
|
||||
"caution": "Cuidado",
|
||||
"show-advanced": "Show Advanced",
|
||||
"add-field": "Add Field",
|
||||
"date-created": "Date Created",
|
||||
"date-updated": "Date Updated"
|
||||
"show-advanced": "Mostrar Avançado",
|
||||
"add-field": "Adicionar Campo",
|
||||
"date-created": "Data de Criação",
|
||||
"date-updated": "Data de Atualização"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Tem certeza que deseja excluir o grupo <b>{groupName}<b/>?",
|
||||
@@ -244,9 +244,9 @@
|
||||
"keep-my-recipes-private-description": "Define o seu grupo e todas as receitas padrão como privadas. Você sempre pode mudar isso mais tarde."
|
||||
},
|
||||
"manage-members": "Gerenciar membros",
|
||||
"manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.",
|
||||
"manage-members-description": "Gerencie as permissões dos membros da sua casa. {manage} permite ao usuário acessar a página de gerenciamento de dados, e {invite} permite ao usuário gerar links de convites para outros usuários. Os proprietários de grupos não podem mudar suas próprias permissões.",
|
||||
"manage": "Gerenciar",
|
||||
"manage-household": "Manage Household",
|
||||
"manage-household": "Gerenciar Casa",
|
||||
"invite": "Convidar",
|
||||
"looking-to-update-your-profile": "Procurando atualizar seu perfil?",
|
||||
"default-recipe-preferences-description": "Estas são as configurações padrão quando uma nova receita é criada no seu grupo. Elas podem ser alteradas para receitas individuais no menu de configurações de receitas.",
|
||||
@@ -267,7 +267,7 @@
|
||||
"disable-users-from-commenting-on-recipes": "Desabilitar usuários de comentar em receitas",
|
||||
"disable-users-from-commenting-on-recipes-description": "Oculta a seção de comentários na página de receita e desativa os comentários",
|
||||
"disable-organizing-recipe-ingredients-by-units-and-food": "Desativar a organização de ingredientes de receita por unidades e alimentos",
|
||||
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields",
|
||||
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Oculta os campos Comida, Unidade e Quantidade de ingredientes e trata os ingredientes como campos de texto simples",
|
||||
"general-preferences": "Preferências Gerais",
|
||||
"group-recipe-preferences": "Preferências de Grupo de Receitas",
|
||||
"report": "Denunciar",
|
||||
@@ -280,8 +280,8 @@
|
||||
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
|
||||
},
|
||||
"household": {
|
||||
"household": "Household",
|
||||
"households": "Households",
|
||||
"household": "Casa",
|
||||
"households": "Casas",
|
||||
"user-household": "User Household",
|
||||
"create-household": "Create Household",
|
||||
"household-name": "Household Name",
|
||||
@@ -467,7 +467,7 @@
|
||||
"calories-suffix": "calorias",
|
||||
"carbohydrate-content": "Carboidrato",
|
||||
"categories": "Categorias",
|
||||
"cholesterol-content": "Cholesterol",
|
||||
"cholesterol-content": "Colesterol",
|
||||
"comment-action": "Comentário",
|
||||
"comment": "Comentário",
|
||||
"comments": "Comentários",
|
||||
@@ -514,11 +514,11 @@
|
||||
"recipe-updated": "Receita atualizada",
|
||||
"remove-from-favorites": "Remover dos Favoritos",
|
||||
"remove-section": "Remover Seção",
|
||||
"saturated-fat-content": "Saturated fat",
|
||||
"saturated-fat-content": "Gorduras saturadas",
|
||||
"save-recipe-before-use": "Salve a receita antes de utilizar",
|
||||
"section-title": "Título da Seção",
|
||||
"servings": "Porções",
|
||||
"serves-amount": "Serves {amount}",
|
||||
"serves-amount": "Serve {amount}",
|
||||
"share-recipe-message": "Eu quero compartilhar minha receita de {0} com você.",
|
||||
"show-nutrition-values": "Mostrar informações nutricionais",
|
||||
"sodium-content": "Sódio",
|
||||
@@ -528,7 +528,7 @@
|
||||
"total-time": "Tempo Total",
|
||||
"trans-fat-content": "Trans-fat",
|
||||
"unable-to-delete-recipe": "Não foi possível apagar a receita",
|
||||
"unsaturated-fat-content": "Unsaturated fat",
|
||||
"unsaturated-fat-content": "Gorduras não saturadas",
|
||||
"no-recipe": "Nenhuma Receita",
|
||||
"locked-by-owner": "Bloqueado pelo Proprietário",
|
||||
"join-the-conversation": "Participe da conversa",
|
||||
@@ -600,9 +600,9 @@
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"create-from-image": "Criar a partir da imagem",
|
||||
"should-translate-description": "Traduza a receita para o meu idioma",
|
||||
"please-wait-image-procesing": "Por favor aguarde, a imagem está sendo processada. Isto pode levar algum tempo.",
|
||||
"bulk-url-import": "Importação de URL em massa",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crie uma receita fornecendo o nome. Todas as receitas devem ter nomes exclusivos.",
|
||||
@@ -611,7 +611,7 @@
|
||||
"scrape-recipe-description": "Scrape uma receita por url. Forneça o Url para o site que você deseja scrape, e Mealie tentará raspar a receita desse site e adicioná-la à sua coleção.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Tem muitas receitas a extrair de uma vez?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Tente o importador em massa",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Have raw HTML or JSON data?",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Tem dados HTML ou JSON brutos?",
|
||||
"scrape-recipe-you-can-import-from-raw-data-directly": "You can import from raw data directly",
|
||||
"import-original-keywords-as-tags": "Importar palavras-chave originais como marcadores",
|
||||
"stay-in-edit-mode": "Permanecer no modo de edição",
|
||||
@@ -662,22 +662,22 @@
|
||||
"no-food": "Sem Comida"
|
||||
},
|
||||
"reset-servings-count": "Reset Servings Count",
|
||||
"not-linked-ingredients": "Additional Ingredients"
|
||||
"not-linked-ingredients": "Ingredientes adicionais"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recipe Finder",
|
||||
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
|
||||
"selected-ingredients": "Selected Ingredients",
|
||||
"no-ingredients-selected": "No ingredients selected",
|
||||
"missing": "Missing",
|
||||
"no-recipes-found": "No recipes found",
|
||||
"recipe-finder": "Localizador de Receitas",
|
||||
"recipe-finder-description": "Procure por receitas baseadas em ingredientes que você tem na mão. Você também pode filtrar por ferramentas disponíveis e definir um número máximo de ingredientes ou ferramentas que faltam.",
|
||||
"selected-ingredients": "Ingredientes selecionados",
|
||||
"no-ingredients-selected": "Nenhum ingrediente selecionado",
|
||||
"missing": "Ausente",
|
||||
"no-recipes-found": "Nenhuma receita encontrada",
|
||||
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
|
||||
"include-ingredients-on-hand": "Include Ingredients On Hand",
|
||||
"include-tools-on-hand": "Include Tools On Hand",
|
||||
"max-missing-ingredients": "Max Missing Ingredients",
|
||||
"max-missing-tools": "Max Missing Tools",
|
||||
"selected-tools": "Selected Tools",
|
||||
"other-filters": "Other Filters",
|
||||
"selected-tools": "Ferramentas Selecionadas",
|
||||
"other-filters": "Outros Filtros",
|
||||
"ready-to-make": "Ready to Make",
|
||||
"almost-ready-to-make": "Almost Ready to Make"
|
||||
},
|
||||
@@ -690,7 +690,7 @@
|
||||
"or": "Ou",
|
||||
"has-any": "Tem alguma",
|
||||
"has-all": "Tem todos",
|
||||
"clear-selection": "Clear Selection",
|
||||
"clear-selection": "Limpar Seleção",
|
||||
"results": "Resultados",
|
||||
"search": "Pesquisar",
|
||||
"search-mealie": "Pesquisar no Mealie (pressione /)",
|
||||
@@ -884,7 +884,7 @@
|
||||
"are-you-sure-you-want-to-check-all-items": "Tem certeza que deseja marcar todos os itens?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Tem certeza que deseja desmarcar todos os itens?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Tem certeza que deseja apagar todos os itens marcados?",
|
||||
"no-shopping-lists-found": "No Shopping Lists Found"
|
||||
"no-shopping-lists-found": "Nenhuma lista de compras encontrada"
|
||||
},
|
||||
"sidebar": {
|
||||
"all-recipes": "Todas as Receitas",
|
||||
@@ -1286,17 +1286,17 @@
|
||||
"restore-from-v1-backup": "Tem uma cópia de segurança de uma instância anterior do Mealie v1? Você pode restaurá-la aqui.",
|
||||
"manage-profile-or-get-invite-link": "Gerencie seu próprio perfil, ou pegue um link de convite para compartilhar."
|
||||
},
|
||||
"debug-openai-services": "Debug OpenAI Services",
|
||||
"debug-openai-services-description": "Use this page to debug OpenAI services. You can test your OpenAI connection and see the results here. If you have image services enabled, you can also provide an image.",
|
||||
"run-test": "Run Test",
|
||||
"test-results": "Test Results",
|
||||
"debug-openai-services": "Debug de Serviços OpenAI",
|
||||
"debug-openai-services-description": "Use esta página para depurar serviços OpenAI. Você pode testar a sua conexão OpenAI e ver os resultados aqui. Se você tiver os serviços de imagem ativados, você também pode fornecer uma imagem.",
|
||||
"run-test": "Executar teste",
|
||||
"test-results": "Resultados do teste",
|
||||
"group-delete-note": "Groups with users or households cannot be deleted",
|
||||
"household-delete-note": "Households with users cannot be deleted"
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Bem-vindo(a), {0}!",
|
||||
"description": "Gerencie seu perfil, receitas e configurações de grupo.",
|
||||
"invite-link": "Invite Link",
|
||||
"invite-link": "Link de convite",
|
||||
"get-invite-link": "Obter link de convite",
|
||||
"get-public-link": "Obter link público",
|
||||
"account-summary": "Resumo da conta",
|
||||
@@ -1367,21 +1367,21 @@
|
||||
"or": "OR"
|
||||
},
|
||||
"relational-operators": {
|
||||
"equals": "equals",
|
||||
"does-not-equal": "does not equal",
|
||||
"is-greater-than": "is greater than",
|
||||
"is-greater-than-or-equal-to": "is greater than or equal to",
|
||||
"is-less-than": "is less than",
|
||||
"is-less-than-or-equal-to": "is less than or equal to"
|
||||
"equals": "igual a",
|
||||
"does-not-equal": "não é igual a",
|
||||
"is-greater-than": "é maior que",
|
||||
"is-greater-than-or-equal-to": "é maior ou igual a",
|
||||
"is-less-than": "é menor que",
|
||||
"is-less-than-or-equal-to": "é menor ou igual a"
|
||||
},
|
||||
"relational-keywords": {
|
||||
"is": "is",
|
||||
"is-not": "is not",
|
||||
"is-one-of": "is one of",
|
||||
"is-not-one-of": "is not one of",
|
||||
"contains-all-of": "contains all of",
|
||||
"is-like": "is like",
|
||||
"is-not-like": "is not like"
|
||||
"is": "é",
|
||||
"is-not": "não é",
|
||||
"is-one-of": "é um(a) de",
|
||||
"is-not-one-of": "não é um de",
|
||||
"contains-all-of": "contém todos de",
|
||||
"is-like": "é como",
|
||||
"is-not-like": "não é como"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -601,7 +601,7 @@
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"should-translate-description": "Перевести рецепт на мой язык",
|
||||
"please-wait-image-procesing": "Подождите, идет обработка изображения.",
|
||||
"bulk-url-import": "Массовый импорт по URL",
|
||||
"debug-scraper": "Отладка сканирования",
|
||||
@@ -611,16 +611,16 @@
|
||||
"scrape-recipe-description": "Отсканировать рецепт по ссылке. Предоставьте ссылку на страницу, которую вы хотите отсканировать, и Mealie попытается вырезать рецепт с этого сайта и добавить его в свою коллекцию.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Хотите отсканировать несколько рецептов за раз?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Воспользуйтесь массовым импортом",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Have raw HTML or JSON data?",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "У Вас есть данные HTML или JSON?",
|
||||
"scrape-recipe-you-can-import-from-raw-data-directly": "You can import from raw data directly",
|
||||
"import-original-keywords-as-tags": "Импортировать исходные ключевые слова как теги",
|
||||
"stay-in-edit-mode": "Остаться в режиме редактирования",
|
||||
"import-from-zip": "Импорт из архива",
|
||||
"import-from-zip-description": "Импорт одного рецепта, который был экспортирован из другого экземпляра Mealie.",
|
||||
"import-from-html-or-json": "Import from HTML or JSON",
|
||||
"import-from-html-or-json": "Импортировать из HTML или JSON",
|
||||
"import-from-html-or-json-description": "Import a single recipe from raw HTML or JSON. This is useful if you have a recipe from a site that Mealie can't scrape normally, or from some other external source.",
|
||||
"json-import-format-description-colon": "To import via JSON, it must be in valid format:",
|
||||
"json-editor": "JSON Editor",
|
||||
"json-editor": "Редактор JSON",
|
||||
"zip-files-must-have-been-exported-from-mealie": ".zip файлы должны быть экспортированы из Mealie",
|
||||
"create-a-recipe-by-uploading-a-scan": "Создайте рецепт, загрузив скан.",
|
||||
"upload-a-png-image-from-a-recipe-book": "Загрузить png изображение из книги рецептов",
|
||||
@@ -661,16 +661,16 @@
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "Нет еды"
|
||||
},
|
||||
"reset-servings-count": "Reset Servings Count",
|
||||
"not-linked-ingredients": "Additional Ingredients"
|
||||
"reset-servings-count": "Сбросить количество порций",
|
||||
"not-linked-ingredients": "Дополнительные ингредиенты"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recipe Finder",
|
||||
"recipe-finder": "Поиск рецептов",
|
||||
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
|
||||
"selected-ingredients": "Selected Ingredients",
|
||||
"selected-ingredients": "Выбранные ингредиенты",
|
||||
"no-ingredients-selected": "No ingredients selected",
|
||||
"missing": "Missing",
|
||||
"no-recipes-found": "No recipes found",
|
||||
"no-recipes-found": "Рецепты не найдены",
|
||||
"no-recipes-found-description": "Try adding more ingredients to your search or adjusting your filters",
|
||||
"include-ingredients-on-hand": "Include Ingredients On Hand",
|
||||
"include-tools-on-hand": "Include Tools On Hand",
|
||||
@@ -881,10 +881,10 @@
|
||||
"completed-on": "Выполнено в {date}",
|
||||
"you-are-offline": "Вы не в сети",
|
||||
"you-are-offline-description": "Not all features are available while offline. You can still add, modify, and remove items, but you will not be able to sync your changes to the server until you are back online.",
|
||||
"are-you-sure-you-want-to-check-all-items": "Are you sure you want to check all items?",
|
||||
"are-you-sure-you-want-to-check-all-items": "Вы уверены, что хотите выбрать все элементы?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Are you sure you want to uncheck all items?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Are you sure you want to delete all checked items?",
|
||||
"no-shopping-lists-found": "No Shopping Lists Found"
|
||||
"no-shopping-lists-found": "Списки покупок не найдены"
|
||||
},
|
||||
"sidebar": {
|
||||
"all-recipes": "Все рецепты",
|
||||
@@ -1286,17 +1286,17 @@
|
||||
"restore-from-v1-backup": "Have a backup from a previous instance of Mealie v1? You can restore it here.",
|
||||
"manage-profile-or-get-invite-link": "Manage your own profile, or grab an invite link to share with others."
|
||||
},
|
||||
"debug-openai-services": "Debug OpenAI Services",
|
||||
"debug-openai-services": "Отладка OpenAI сервисов",
|
||||
"debug-openai-services-description": "Use this page to debug OpenAI services. You can test your OpenAI connection and see the results here. If you have image services enabled, you can also provide an image.",
|
||||
"run-test": "Run Test",
|
||||
"test-results": "Test Results",
|
||||
"run-test": "Запустить тест",
|
||||
"test-results": "Результаты тестов",
|
||||
"group-delete-note": "Groups with users or households cannot be deleted",
|
||||
"household-delete-note": "Households with users cannot be deleted"
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Добро пожаловать, {0}!",
|
||||
"description": "Управление настройками профиля, рецептов и группы.",
|
||||
"invite-link": "Invite Link",
|
||||
"invite-link": "Ссылка-приглашение",
|
||||
"get-invite-link": "Получить ссылку для приглашения",
|
||||
"get-public-link": "Получить публичную ссылку",
|
||||
"account-summary": "Cведения об учетной записи",
|
||||
|
||||
@@ -93,6 +93,12 @@ export interface GroupSummary {
|
||||
slug: string;
|
||||
preferences?: ReadGroupPreferences | null;
|
||||
}
|
||||
export interface LongLiveTokenCreateResponse {
|
||||
name: string;
|
||||
id: number;
|
||||
createdAt?: string | null;
|
||||
token: string;
|
||||
}
|
||||
export interface LongLiveTokenIn {
|
||||
name: string;
|
||||
integrationId?: string;
|
||||
@@ -130,7 +136,6 @@ export interface PrivateUser {
|
||||
lockedAt?: string | null;
|
||||
}
|
||||
export interface LongLiveTokenOut {
|
||||
token: string;
|
||||
name: string;
|
||||
id: number;
|
||||
createdAt?: string | null;
|
||||
|
||||
@@ -84,6 +84,7 @@ export type RecipeSearchQuery = {
|
||||
page?: number;
|
||||
perPage?: number;
|
||||
orderBy?: string;
|
||||
orderByNullPosition?: "first" | "last";
|
||||
|
||||
_searchSeed?: string;
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "mealie",
|
||||
"version": "2.4.2",
|
||||
"version": "2.5.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "nuxt",
|
||||
|
||||
@@ -17,11 +17,69 @@
|
||||
<v-container>
|
||||
<v-row>
|
||||
<v-col cols="3" class="text-left">
|
||||
<ButtonLink :to="`/shopping-lists?disableRedirect=true`" :text="$tc('general.back')" :icon="$globals.icons.backArrow" />
|
||||
<ButtonLink :to="`/shopping-lists?disableRedirect=true`" :text="$tc('shopping-list.all-lists')" :icon="$globals.icons.backArrow" />
|
||||
</v-col>
|
||||
<v-col cols="6" class="d-flex justify-center">
|
||||
<v-col cols="6" class="d-none d-lg-flex justify-center">
|
||||
<v-img max-height="100" max-width="100" :src="require('~/static/svgs/shopping-cart.svg')"></v-img>
|
||||
</v-col>
|
||||
<v-col class="d-flex justify-end">
|
||||
<BaseButtonGroup
|
||||
:buttons="[
|
||||
{
|
||||
icon: $globals.icons.contentCopy,
|
||||
text: '',
|
||||
event: 'edit',
|
||||
children: [
|
||||
{
|
||||
icon: $globals.icons.contentCopy,
|
||||
text: $tc('shopping-list.copy-as-text'),
|
||||
event: 'copy-plain',
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.contentCopy,
|
||||
text: $tc('shopping-list.copy-as-markdown'),
|
||||
event: 'copy-markdown',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.checkboxOutline,
|
||||
text: $tc('shopping-list.check-all-items'),
|
||||
event: 'check',
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.dotsVertical,
|
||||
text: '',
|
||||
event: 'three-dot',
|
||||
children: [
|
||||
{
|
||||
icon: $globals.icons.tags,
|
||||
text: $tc('shopping-list.toggle-label-sort'),
|
||||
event: 'sort-by-labels',
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.tags,
|
||||
text: $tc('shopping-list.reorder-labels'),
|
||||
event: 'reorder-labels',
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.tags,
|
||||
text: $tc('shopping-list.manage-labels'),
|
||||
event: 'manage-labels',
|
||||
},
|
||||
],
|
||||
},
|
||||
]"
|
||||
@edit="edit = true"
|
||||
@three-dot="threeDot = true"
|
||||
@check="openCheckAll"
|
||||
@sort-by-labels="sortByLabels"
|
||||
@copy-plain="copyListItems('plain')"
|
||||
@copy-markdown="copyListItems('markdown')"
|
||||
@reorder-labels="toggleReorderLabelsDialog()"
|
||||
@manage-labels="$router.push(`/group/data/labels`)"
|
||||
/>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</v-container>
|
||||
</template>
|
||||
@@ -119,27 +177,6 @@
|
||||
</v-card>
|
||||
</BaseDialog>
|
||||
|
||||
<!-- Settings -->
|
||||
<BaseDialog
|
||||
v-model="settingsDialog"
|
||||
:icon="$globals.icons.cog"
|
||||
:title="$t('general.settings')"
|
||||
@confirm="updateSettings"
|
||||
>
|
||||
<v-container>
|
||||
<v-form>
|
||||
<v-select
|
||||
v-model="currentUserId"
|
||||
:items="allUsers"
|
||||
item-text="fullName"
|
||||
item-value="id"
|
||||
:label="$t('general.owner')"
|
||||
:prepend-icon="$globals.icons.user"
|
||||
/>
|
||||
</v-form>
|
||||
</v-container>
|
||||
</BaseDialog>
|
||||
|
||||
<!-- Create Item -->
|
||||
<div v-if="createEditorOpen">
|
||||
<ShoppingListItemEditor
|
||||
@@ -154,78 +191,41 @@
|
||||
/>
|
||||
</div>
|
||||
<div v-else class="mt-4 d-flex justify-end">
|
||||
<BaseButton
|
||||
v-if="preferences.viewByLabel" edit class="mr-2"
|
||||
:disabled="$nuxt.isOffline"
|
||||
@click="toggleReorderLabelsDialog">
|
||||
<template #icon> {{ $globals.icons.tags }} </template>
|
||||
{{ $t('shopping-list.reorder-labels') }}
|
||||
</BaseButton>
|
||||
<BaseButton create @click="createEditorOpen = true" > {{ $t('general.add') }} </BaseButton>
|
||||
</div>
|
||||
|
||||
<!-- Action Bar -->
|
||||
<div class="d-flex justify-end mb-4 mt-2">
|
||||
<BaseButtonGroup
|
||||
:buttons="[
|
||||
{
|
||||
icon: $globals.icons.contentCopy,
|
||||
text: '',
|
||||
event: 'edit',
|
||||
children: [
|
||||
{
|
||||
icon: $globals.icons.contentCopy,
|
||||
text: $tc('shopping-list.copy-as-text'),
|
||||
event: 'copy-plain',
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.contentCopy,
|
||||
text: $tc('shopping-list.copy-as-markdown'),
|
||||
event: 'copy-markdown',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.delete,
|
||||
text: $tc('shopping-list.delete-checked'),
|
||||
event: 'delete',
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.tags,
|
||||
text: $tc('shopping-list.toggle-label-sort'),
|
||||
event: 'sort-by-labels',
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.checkboxBlankOutline,
|
||||
text: $tc('shopping-list.uncheck-all-items'),
|
||||
event: 'uncheck',
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.checkboxOutline,
|
||||
text: $tc('shopping-list.check-all-items'),
|
||||
event: 'check',
|
||||
},
|
||||
]"
|
||||
@edit="edit = true"
|
||||
@delete="openDeleteChecked"
|
||||
@uncheck="openUncheckAll"
|
||||
@check="openCheckAll"
|
||||
@sort-by-labels="sortByLabels"
|
||||
@copy-plain="copyListItems('plain')"
|
||||
@copy-markdown="copyListItems('markdown')"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Checked Items -->
|
||||
<div v-if="listItems.checked && listItems.checked.length > 0" class="mt-6">
|
||||
<button @click="toggleShowChecked()">
|
||||
<span>
|
||||
<v-icon>
|
||||
{{ showChecked ? $globals.icons.chevronDown : $globals.icons.chevronRight }}
|
||||
</v-icon>
|
||||
</span>
|
||||
{{ $tc('shopping-list.items-checked-count', listItems.checked ? listItems.checked.length : 0) }}
|
||||
</button>
|
||||
<div class="d-flex">
|
||||
<div class="flex-grow-1">
|
||||
<button @click="toggleShowChecked()">
|
||||
<span>
|
||||
<v-icon>
|
||||
{{ showChecked ? $globals.icons.chevronDown : $globals.icons.chevronRight }}
|
||||
</v-icon>
|
||||
</span>
|
||||
{{ $tc('shopping-list.items-checked-count', listItems.checked ? listItems.checked.length : 0) }}
|
||||
</button>
|
||||
</div>
|
||||
<div class="justify-end mt-n2">
|
||||
<BaseButtonGroup
|
||||
:buttons="[
|
||||
{
|
||||
icon: $globals.icons.checkboxBlankOutline,
|
||||
text: $tc('shopping-list.uncheck-all-items'),
|
||||
event: 'uncheck',
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.delete,
|
||||
text: $tc('shopping-list.delete-checked'),
|
||||
event: 'delete',
|
||||
},
|
||||
]"
|
||||
@uncheck="openUncheckAll"
|
||||
@delete="openDeleteChecked"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<v-divider class="my-4"></v-divider>
|
||||
<v-expand-transition>
|
||||
<div v-show="showChecked">
|
||||
@@ -277,29 +277,6 @@
|
||||
</RecipeList>
|
||||
</section>
|
||||
</v-lazy>
|
||||
|
||||
<v-lazy>
|
||||
<div class="d-flex justify-end">
|
||||
<BaseButton
|
||||
edit
|
||||
:disabled="$nuxt.isOffline"
|
||||
@click="toggleSettingsDialog"
|
||||
>
|
||||
<template #icon> {{ $globals.icons.cog }} </template>
|
||||
{{ $t('general.settings') }}
|
||||
</BaseButton>
|
||||
</div>
|
||||
</v-lazy>
|
||||
|
||||
<v-lazy>
|
||||
<div v-if="$nuxt.isOnline" class="d-flex justify-end mt-10">
|
||||
<ButtonLink
|
||||
:to="`/group/data/labels`"
|
||||
:text="$tc('shopping-list.manage-labels')"
|
||||
:icon="$globals.icons.tags"
|
||||
/>
|
||||
</div>
|
||||
</v-lazy>
|
||||
<WakelockSwitch/>
|
||||
</v-container>
|
||||
</template>
|
||||
@@ -314,7 +291,6 @@ import { useUserApi } from "~/composables/api";
|
||||
import MultiPurposeLabelSection from "~/components/Domain/ShoppingList/MultiPurposeLabelSection.vue"
|
||||
import ShoppingListItem from "~/components/Domain/ShoppingList/ShoppingListItem.vue";
|
||||
import { ShoppingListItemOut, ShoppingListMultiPurposeLabelOut, ShoppingListOut } from "~/lib/api/types/household";
|
||||
import { UserOut } from "~/lib/api/types/user";
|
||||
import RecipeList from "~/components/Domain/Recipe/RecipeList.vue";
|
||||
import ShoppingListItemEditor from "~/components/Domain/ShoppingList/ShoppingListItemEditor.vue";
|
||||
import { useFoodStore, useLabelStore, useUnitStore } from "~/composables/store";
|
||||
@@ -349,8 +325,8 @@ export default defineComponent({
|
||||
const userApi = useUserApi();
|
||||
|
||||
const edit = ref(false);
|
||||
const threeDot = ref(false);
|
||||
const reorderLabelsDialog = ref(false);
|
||||
const settingsDialog = ref(false);
|
||||
const preserveItemOrder = ref(false);
|
||||
|
||||
const route = useRoute();
|
||||
@@ -678,13 +654,6 @@ export default defineComponent({
|
||||
localLabels.value = shoppingList.value?.labelSettings
|
||||
}
|
||||
|
||||
async function toggleSettingsDialog() {
|
||||
if (!settingsDialog.value) {
|
||||
await fetchAllUsers();
|
||||
}
|
||||
settingsDialog.value = !settingsDialog.value;
|
||||
}
|
||||
|
||||
function updateLabelOrder(labelSettings: ShoppingListMultiPurposeLabelOut[]) {
|
||||
if (!shoppingList.value) {
|
||||
return;
|
||||
@@ -1064,39 +1033,6 @@ export default defineComponent({
|
||||
refresh();
|
||||
}
|
||||
|
||||
// ===============================================================
|
||||
// Shopping List Settings
|
||||
|
||||
const allUsers = ref<UserOut[]>([]);
|
||||
const currentUserId = ref<string | undefined>();
|
||||
async function fetchAllUsers() {
|
||||
const { data } = await userApi.households.fetchMembers();
|
||||
if (!data) {
|
||||
return;
|
||||
}
|
||||
|
||||
// update current user
|
||||
allUsers.value = data.items.sort((a, b) => ((a.fullName || "") < (b.fullName || "") ? -1 : 1));
|
||||
currentUserId.value = shoppingList.value?.userId;
|
||||
}
|
||||
|
||||
async function updateSettings() {
|
||||
if (!shoppingList.value || !currentUserId.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
loadingCounter.value += 1;
|
||||
const { data } = await userApi.shopping.lists.updateOne(
|
||||
shoppingList.value.id,
|
||||
{...shoppingList.value, userId: currentUserId.value},
|
||||
);
|
||||
loadingCounter.value -= 1;
|
||||
|
||||
if (data) {
|
||||
refresh();
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
addRecipeReferenceToList,
|
||||
@@ -1112,6 +1048,7 @@ export default defineComponent({
|
||||
openDeleteChecked,
|
||||
deleteListItem,
|
||||
edit,
|
||||
threeDot,
|
||||
getLabelColor,
|
||||
groupSlug,
|
||||
itemsByLabel,
|
||||
@@ -1123,8 +1060,6 @@ export default defineComponent({
|
||||
removeRecipeReferenceToList,
|
||||
reorderLabelsDialog,
|
||||
toggleReorderLabelsDialog,
|
||||
settingsDialog,
|
||||
toggleSettingsDialog,
|
||||
localLabels,
|
||||
updateLabelOrder,
|
||||
cancelLabelOrder,
|
||||
@@ -1144,9 +1079,6 @@ export default defineComponent({
|
||||
updateIndexUncheckedByLabel,
|
||||
allUnits,
|
||||
allFoods,
|
||||
allUsers,
|
||||
currentUserId,
|
||||
updateSettings,
|
||||
getTextColor,
|
||||
};
|
||||
},
|
||||
|
||||
@@ -6,6 +6,27 @@
|
||||
</v-card-text>
|
||||
</BaseDialog>
|
||||
|
||||
<!-- Settings -->
|
||||
<BaseDialog
|
||||
v-model="ownerDialog"
|
||||
:icon="$globals.icons.admin"
|
||||
:title="$t('user.edit-user')"
|
||||
@confirm="updateOwner"
|
||||
>
|
||||
<v-container>
|
||||
<v-form>
|
||||
<v-select
|
||||
v-model="updateUserId"
|
||||
:items="allUsers"
|
||||
item-text="fullName"
|
||||
item-value="id"
|
||||
:label="$t('general.owner')"
|
||||
:prepend-icon="$globals.icons.user"
|
||||
/>
|
||||
</v-form>
|
||||
</v-container>
|
||||
</BaseDialog>
|
||||
|
||||
<BaseDialog v-model="deleteDialog" :title="$tc('general.confirm')" color="error" @confirm="deleteOne">
|
||||
<v-card-text>{{ $t('shopping-list.are-you-sure-you-want-to-delete-this-item') }}</v-card-text>
|
||||
</BaseDialog>
|
||||
@@ -38,26 +59,34 @@
|
||||
<v-icon left>
|
||||
{{ $globals.icons.cartCheck }}
|
||||
</v-icon>
|
||||
{{ list.name }}
|
||||
<v-btn class="ml-auto" icon @click.prevent="openDelete(list.id)">
|
||||
<v-icon>
|
||||
{{ $globals.icons.delete }}
|
||||
</v-icon>
|
||||
</v-btn>
|
||||
<div class="flex-grow-1">
|
||||
{{ list.name }}
|
||||
</div>
|
||||
<div class="d-flex justify-end">
|
||||
<v-btn icon @click.prevent="toggleOwnerDialog(list)">
|
||||
<v-icon>
|
||||
{{ $globals.icons.user }}
|
||||
</v-icon>
|
||||
</v-btn>
|
||||
<v-btn icon @click.prevent="openDelete(list.id)">
|
||||
<v-icon>
|
||||
{{ $globals.icons.delete }}
|
||||
</v-icon>
|
||||
</v-btn>
|
||||
</div>
|
||||
</v-card-title>
|
||||
</v-card>
|
||||
</section>
|
||||
<div class="d-flex justify-end mt-10">
|
||||
<ButtonLink :to="`/group/data/labels`" :text="$tc('shopping-list.manage-labels')" :icon="$globals.icons.tags" />
|
||||
</div>
|
||||
</v-container>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { computed, defineComponent, useAsync, useContext, reactive, ref, toRefs, useRoute, useRouter, watch } from "@nuxtjs/composition-api";
|
||||
import { ShoppingListOut } from "~/lib/api/types/household";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
import { useAsyncKey } from "~/composables/use-utils";
|
||||
import { useShoppingListPreferences } from "~/composables/use-users/preferences";
|
||||
import { UserOut } from "~/lib/api/types/user";
|
||||
|
||||
export default defineComponent({
|
||||
middleware: "auth",
|
||||
@@ -77,6 +106,8 @@ export default defineComponent({
|
||||
createDialog: false,
|
||||
deleteDialog: false,
|
||||
deleteTarget: "",
|
||||
ownerDialog: false,
|
||||
ownerTarget: ref<ShoppingListOut | null>(null),
|
||||
});
|
||||
|
||||
const shoppingLists = useAsync(async () => {
|
||||
@@ -136,6 +167,53 @@ export default defineComponent({
|
||||
}
|
||||
}
|
||||
|
||||
async function toggleOwnerDialog(list: ShoppingListOut) {
|
||||
if (!state.ownerDialog) {
|
||||
state.ownerTarget = list;
|
||||
await fetchAllUsers();
|
||||
}
|
||||
state.ownerDialog = !state.ownerDialog;
|
||||
}
|
||||
|
||||
// ===============================================================
|
||||
// Shopping List Edit User/Owner
|
||||
|
||||
const allUsers = ref<UserOut[]>([]);
|
||||
const updateUserId = ref<string | undefined>();
|
||||
async function fetchAllUsers() {
|
||||
const { data } = await userApi.households.fetchMembers();
|
||||
if (!data) {
|
||||
return;
|
||||
}
|
||||
|
||||
// update current user
|
||||
allUsers.value = data.items.sort((a, b) => ((a.fullName || "") < (b.fullName || "") ? -1 : 1));
|
||||
updateUserId.value = state.ownerTarget?.userId;
|
||||
}
|
||||
|
||||
async function updateOwner() {
|
||||
if (!state.ownerTarget || !updateUserId.value) {
|
||||
return;
|
||||
}
|
||||
// user has not changed, so we should not update
|
||||
if (state.ownerTarget.userId === updateUserId.value) {
|
||||
return;
|
||||
}
|
||||
// get full list, so the move does not delete shopping list items
|
||||
const { data: fullList } = await userApi.shopping.lists.getOne(state.ownerTarget.id);
|
||||
if (!fullList) {
|
||||
return;
|
||||
}
|
||||
const { data } = await userApi.shopping.lists.updateOne(
|
||||
state.ownerTarget.id,
|
||||
{...fullList, userId: updateUserId.value},
|
||||
);
|
||||
|
||||
if (data) {
|
||||
refresh();
|
||||
}
|
||||
}
|
||||
|
||||
function openDelete(id: string) {
|
||||
state.deleteDialog = true;
|
||||
state.deleteTarget = id;
|
||||
@@ -155,6 +233,10 @@ export default defineComponent({
|
||||
preferences,
|
||||
shoppingListChoices,
|
||||
createOne,
|
||||
toggleOwnerDialog,
|
||||
allUsers,
|
||||
updateUserId,
|
||||
updateOwner,
|
||||
deleteOne,
|
||||
openDelete,
|
||||
};
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
"generic-updated": "{name} blev opdateret",
|
||||
"generic-created-with-url": "{name} er oprettet, {url}",
|
||||
"generic-updated-with-url": "{name} er blevet opdateret, {url}",
|
||||
"generic-duplicated": "{name} er blevet dublikeret",
|
||||
"generic-duplicated": "{name} er blevet duplikeret",
|
||||
"generic-deleted": "{name} er blevet slettet"
|
||||
},
|
||||
"datetime": {
|
||||
@@ -60,7 +60,7 @@
|
||||
"header_text": "Glemt adgangskode",
|
||||
"message_top": "Du har anmodet om at nulstille din adgangskode.",
|
||||
"message_bottom": "Klik på knappen ovenfor for at nulstille din adgangskode.",
|
||||
"button_text": "Nulstil adgangskoden"
|
||||
"button_text": "Nulstil adgangskode"
|
||||
},
|
||||
"invitation": {
|
||||
"subject": "Invitation til at deltage i Mealie",
|
||||
|
||||
@@ -4,18 +4,18 @@
|
||||
},
|
||||
"recipe": {
|
||||
"unique-name-error": "Reseptien nimien täytyy olla yksilöllisiä",
|
||||
"recipe-created": "Recipe Created",
|
||||
"recipe-created": "Resepti luotu",
|
||||
"recipe-defaults": {
|
||||
"ingredient-note": "1 kuppi jauhoja",
|
||||
"step-text": "Recipe steps as well as other fields in the recipe page support markdown syntax.\n\n**Add a link**\n\n[My Link](https://demo.mealie.io)\n"
|
||||
"ingredient-note": "1 kupillinen jauhoja",
|
||||
"step-text": "Reseptin vaiheet sekä muut kentät reseptisivulla tukevat markdown-syntaksia.\n\n**Lisää linkki**\n\n[Oma linkki](https://demo.mealie.io)\n"
|
||||
},
|
||||
"servings-text": {
|
||||
"makes": "Makes",
|
||||
"serves": "Serves",
|
||||
"serving": "Serving",
|
||||
"servings": "Servings",
|
||||
"yield": "Yield",
|
||||
"yields": "Yields"
|
||||
"makes": "Tekee",
|
||||
"serves": "Annoksia",
|
||||
"serving": "Annos",
|
||||
"servings": "Annosta",
|
||||
"yield": "Tuotto",
|
||||
"yields": "Tuottaa"
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
@@ -25,7 +25,7 @@
|
||||
"user-updated": "Käyttäjä päivitetty",
|
||||
"password-updated": "Salasana päivitetty",
|
||||
"invalid-current-password": "Nykyinen salasana ei kelpaa",
|
||||
"ldap-update-password-unavailable": "Salasanaa ei voitu päivittää. Käyttäjä hallinnoi LDAP:ia."
|
||||
"ldap-update-password-unavailable": "Salasanaa ei voitu päivittää, sillä käyttäjä on LDAP-hakemiston alainen"
|
||||
},
|
||||
"group": {
|
||||
"report-deleted": "Raportti poistettu."
|
||||
@@ -56,25 +56,25 @@
|
||||
},
|
||||
"emails": {
|
||||
"password": {
|
||||
"subject": "Mealie Forgot Password",
|
||||
"header_text": "Forgot Password",
|
||||
"message_top": "You have requested to reset your password.",
|
||||
"message_bottom": "Please click the button above to reset your password.",
|
||||
"button_text": "Reset Password"
|
||||
"subject": "Mealie Unohtunut salasana",
|
||||
"header_text": "Unohdin salasanan",
|
||||
"message_top": "Olet pyytänyt salasanasi nollausta.",
|
||||
"message_bottom": "Klikkaa yllä olevaa painiketta nollataksesi salasanasi.",
|
||||
"button_text": "Nollaa salasana"
|
||||
},
|
||||
"invitation": {
|
||||
"subject": "Invitation to join Mealie",
|
||||
"header_text": "You're Invited!",
|
||||
"message_top": "You have been invited to join Mealie.",
|
||||
"message_bottom": "Please click the button above to accept the invitation.",
|
||||
"button_text": "Accept Invitation"
|
||||
"subject": "Kutsu liittyä Mealieen",
|
||||
"header_text": "Sinut on kutsuttu.",
|
||||
"message_top": "Sinut on kutsuttu liittymään Mealieen.",
|
||||
"message_bottom": "Ole hyvä ja klikkaa yllä olevaa painiketta hyväksyäksesi kutsun.",
|
||||
"button_text": "Hyväksy kutsu"
|
||||
},
|
||||
"test": {
|
||||
"subject": "Mealie Test Email",
|
||||
"header_text": "Test Email",
|
||||
"message_top": "This is a test email.",
|
||||
"message_bottom": "Please click the button above to test the email.",
|
||||
"button_text": "Open Mealie"
|
||||
"subject": "Mealie Testiviesti",
|
||||
"header_text": "Testiviesti",
|
||||
"message_top": "Tämä on testiviesti.",
|
||||
"message_bottom": "Ole hyvä ja klikkaa yllä olevaa painiketta testataksesi sähköpostia.",
|
||||
"button_text": "Avaa Mealie"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,18 +4,18 @@
|
||||
},
|
||||
"recipe": {
|
||||
"unique-name-error": "Les noms de recette doivent être uniques",
|
||||
"recipe-created": "Recipe Created",
|
||||
"recipe-created": "Recette créée",
|
||||
"recipe-defaults": {
|
||||
"ingredient-note": "100 g de farine",
|
||||
"step-text": "Les étapes de la recette ainsi que les autres champs de la page de recette supportent la syntaxe markdown.\n\n**Ajouter un lien**\n\n[Mon lien](https://demo.mealie.io)\n"
|
||||
},
|
||||
"servings-text": {
|
||||
"makes": "Makes",
|
||||
"serves": "Serves",
|
||||
"serving": "Serving",
|
||||
"servings": "Servings",
|
||||
"yield": "Yield",
|
||||
"yields": "Yields"
|
||||
"makes": "Fait",
|
||||
"serves": "Pour",
|
||||
"serving": "Portion",
|
||||
"servings": "Portions",
|
||||
"yield": "Quantité",
|
||||
"yields": "Produit"
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
|
||||
@@ -4,18 +4,18 @@
|
||||
},
|
||||
"recipe": {
|
||||
"unique-name-error": "Les noms de recette doivent être uniques",
|
||||
"recipe-created": "Recipe Created",
|
||||
"recipe-created": "Recette créée",
|
||||
"recipe-defaults": {
|
||||
"ingredient-note": "1 tasse de Farine",
|
||||
"step-text": "Les étapes de la recette ainsi que les autres champs de la page de recette supportent la syntaxe markdown.\n\n**Ajouter un lien**\n\n[Mon lien](https://demo.mealie.io)\n"
|
||||
},
|
||||
"servings-text": {
|
||||
"makes": "Makes",
|
||||
"serves": "Serves",
|
||||
"serving": "Serving",
|
||||
"servings": "Servings",
|
||||
"yield": "Yield",
|
||||
"yields": "Yields"
|
||||
"makes": "Fait",
|
||||
"serves": "Pour",
|
||||
"serving": "Portion",
|
||||
"servings": "Portions",
|
||||
"yield": "Quantité",
|
||||
"yields": "Produit"
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
},
|
||||
"recipe": {
|
||||
"unique-name-error": "Receptų pavadinimai turi būti unikalūs",
|
||||
"recipe-created": "Recipe Created",
|
||||
"recipe-created": "Receptas sukurtas",
|
||||
"recipe-defaults": {
|
||||
"ingredient-note": "1 Cup Flour",
|
||||
"step-text": "Recipe steps as well as other fields in the recipe page support markdown syntax.\n\n**Add a link**\n\n[My Link](https://demo.mealie.io)\n"
|
||||
@@ -13,7 +13,7 @@
|
||||
"makes": "Makes",
|
||||
"serves": "Serves",
|
||||
"serving": "Serving",
|
||||
"servings": "Servings",
|
||||
"servings": "Porcijos",
|
||||
"yield": "Yield",
|
||||
"yields": "Yields"
|
||||
}
|
||||
@@ -46,13 +46,13 @@
|
||||
"generic-deleted": "{name} ištrintas"
|
||||
},
|
||||
"datetime": {
|
||||
"year": "year|years",
|
||||
"day": "day|days",
|
||||
"hour": "hour|hours",
|
||||
"minute": "minute|minutes",
|
||||
"second": "second|seconds",
|
||||
"millisecond": "millisecond|milliseconds",
|
||||
"microsecond": "microsecond|microseconds"
|
||||
"year": "metai|metai",
|
||||
"day": "diena|dienos",
|
||||
"hour": "valanda|valandos",
|
||||
"minute": "minutė|minutės",
|
||||
"second": "sekundė|sekundės",
|
||||
"millisecond": "milisekundė|milisekundės",
|
||||
"microsecond": "mikrosekundė|mikrosekundės"
|
||||
},
|
||||
"emails": {
|
||||
"password": {
|
||||
@@ -67,12 +67,12 @@
|
||||
"header_text": "You're Invited!",
|
||||
"message_top": "You have been invited to join Mealie.",
|
||||
"message_bottom": "Please click the button above to accept the invitation.",
|
||||
"button_text": "Accept Invitation"
|
||||
"button_text": "Priimti pakvietimą"
|
||||
},
|
||||
"test": {
|
||||
"subject": "Mealie Test Email",
|
||||
"header_text": "Test Email",
|
||||
"message_top": "This is a test email.",
|
||||
"message_top": "Tai bandomasis el. laiškas.",
|
||||
"message_bottom": "Please click the button above to test the email.",
|
||||
"button_text": "Open Mealie"
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
},
|
||||
"recipe": {
|
||||
"unique-name-error": "Nomes de receitas devem ser únicos",
|
||||
"recipe-created": "Recipe Created",
|
||||
"recipe-created": "Receita criada",
|
||||
"recipe-defaults": {
|
||||
"ingredient-note": "1 Xícara de Farinha",
|
||||
"step-text": "Passos das receitas, assim como outros campos na página da receita, suportam sintaxe \"markdown\".\n\n**Adicione um link**\n\n[Meu Link](https://demo.mealie.io)\n"
|
||||
@@ -12,8 +12,8 @@
|
||||
"servings-text": {
|
||||
"makes": "Makes",
|
||||
"serves": "Serves",
|
||||
"serving": "Serving",
|
||||
"servings": "Servings",
|
||||
"serving": "Porção",
|
||||
"servings": "Porções",
|
||||
"yield": "Yield",
|
||||
"yields": "Yields"
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
},
|
||||
"recipe": {
|
||||
"unique-name-error": "Название рецепта должно быть уникальным",
|
||||
"recipe-created": "Recipe Created",
|
||||
"recipe-created": "Рецепт создан",
|
||||
"recipe-defaults": {
|
||||
"ingredient-note": "1 Чашка муки",
|
||||
"step-text": "Шаги рецепта, как и другие поля на странице рецепта, поддерживают синтаксис Markdown.\n\n**Добавить ссылку**\n\n[Моя Ссылка](https://demo.mealie.io)\n"
|
||||
@@ -12,8 +12,8 @@
|
||||
"servings-text": {
|
||||
"makes": "Makes",
|
||||
"serves": "Serves",
|
||||
"serving": "Serving",
|
||||
"servings": "Servings",
|
||||
"serving": "Порция",
|
||||
"servings": "Порции",
|
||||
"yield": "Yield",
|
||||
"yields": "Yields"
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
},
|
||||
"bell-peppers": {
|
||||
"name": "papriky",
|
||||
"plural_name": "bell peppers"
|
||||
"plural_name": "papriky"
|
||||
},
|
||||
"blackberries": {
|
||||
"name": "ostružiny"
|
||||
@@ -260,8 +260,8 @@
|
||||
"name": "kapradiny"
|
||||
},
|
||||
"fiddlehead-fern": {
|
||||
"name": "fiddlehead fern",
|
||||
"plural_name": "fiddlehead ferns"
|
||||
"name": "kapradina",
|
||||
"plural_name": "kapradiny"
|
||||
},
|
||||
"fish": {
|
||||
"name": "ryba"
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"name": "ansjoser"
|
||||
},
|
||||
"apples": {
|
||||
"name": "æbler",
|
||||
"name": "æble",
|
||||
"plural_name": "æbler"
|
||||
},
|
||||
"artichoke": {
|
||||
|
||||
@@ -337,7 +337,7 @@
|
||||
},
|
||||
"jackfruit": {
|
||||
"name": "τζάκφρουτ",
|
||||
"plural_name": "jackfruits"
|
||||
"plural_name": "τζάκφρουτ"
|
||||
},
|
||||
"jaggery": {
|
||||
"name": "ζάχαρη jaggery"
|
||||
@@ -364,7 +364,7 @@
|
||||
"name": "κούμαρα"
|
||||
},
|
||||
"leavening-agents": {
|
||||
"name": "leavening agents"
|
||||
"name": "διογκωτικά"
|
||||
},
|
||||
"leek": {
|
||||
"name": "πράσο",
|
||||
|
||||
@@ -3,73 +3,73 @@
|
||||
"name": "koristekurpitsa"
|
||||
},
|
||||
"alfalfa-sprouts": {
|
||||
"name": "alfalfaidut"
|
||||
"name": "alfalfaituja"
|
||||
},
|
||||
"anchovies": {
|
||||
"name": "anjovikset"
|
||||
"name": "anjoviksia"
|
||||
},
|
||||
"apples": {
|
||||
"name": "omenat",
|
||||
"plural_name": "apples"
|
||||
"plural_name": "omenaa"
|
||||
},
|
||||
"artichoke": {
|
||||
"name": "artisokka"
|
||||
"name": "artisokkaa"
|
||||
},
|
||||
"arugula": {
|
||||
"name": "rukola"
|
||||
},
|
||||
"asparagus": {
|
||||
"name": "parsa"
|
||||
"name": "parsaa"
|
||||
},
|
||||
"avocado": {
|
||||
"name": "avokado",
|
||||
"plural_name": "avocado"
|
||||
"plural_name": "avokadoa"
|
||||
},
|
||||
"bacon": {
|
||||
"name": "pekoni"
|
||||
"name": "pekonia"
|
||||
},
|
||||
"baking-powder": {
|
||||
"name": "leivinjauhe"
|
||||
"name": "leivinjauhetta"
|
||||
},
|
||||
"baking-soda": {
|
||||
"name": "ruokasooda"
|
||||
"name": "ruokasoodaa"
|
||||
},
|
||||
"baking-sugar": {
|
||||
"name": "leivontasokeri"
|
||||
"name": "leivontasokeria"
|
||||
},
|
||||
"bar-sugar": {
|
||||
"name": "sirosokeri"
|
||||
},
|
||||
"basil": {
|
||||
"name": "basilika"
|
||||
"name": "basilikaa"
|
||||
},
|
||||
"beans": {
|
||||
"name": "pavut"
|
||||
},
|
||||
"bell-peppers": {
|
||||
"name": "paprika",
|
||||
"plural_name": "bell peppers"
|
||||
"plural_name": "paprikaa"
|
||||
},
|
||||
"blackberries": {
|
||||
"name": "karhunvatukat"
|
||||
"name": "karhunvatukoita"
|
||||
},
|
||||
"bok-choy": {
|
||||
"name": "paksoi"
|
||||
"name": "paksoita"
|
||||
},
|
||||
"brassicas": {
|
||||
"name": "kaalit"
|
||||
},
|
||||
"bread": {
|
||||
"name": "leipä"
|
||||
"name": "leipää"
|
||||
},
|
||||
"breadfruit": {
|
||||
"name": "leipäpuun hedelmä"
|
||||
"name": "leipäpuun hedelmää"
|
||||
},
|
||||
"broccoflower": {
|
||||
"name": "parsakukkakaali"
|
||||
},
|
||||
"broccoli": {
|
||||
"name": "parsakaali"
|
||||
"name": "parsakaalia"
|
||||
},
|
||||
"broccoli-rabe": {
|
||||
"name": "varsiparsakaali"
|
||||
@@ -78,7 +78,7 @@
|
||||
"name": "broccolini"
|
||||
},
|
||||
"brown-sugar": {
|
||||
"name": "fariinisokeri"
|
||||
"name": "fariinisokeria"
|
||||
},
|
||||
"brussels-sprouts": {
|
||||
"name": "ruusukaalit"
|
||||
@@ -94,7 +94,7 @@
|
||||
},
|
||||
"cabbage": {
|
||||
"name": "kaali",
|
||||
"plural_name": "cabbages"
|
||||
"plural_name": "kaalia"
|
||||
},
|
||||
"cactus-edible": {
|
||||
"name": "kaktus, syötävä"
|
||||
@@ -116,7 +116,7 @@
|
||||
},
|
||||
"carrot": {
|
||||
"name": "porkkana",
|
||||
"plural_name": "carrots"
|
||||
"plural_name": "porkkanaa"
|
||||
},
|
||||
"caster-sugar": {
|
||||
"name": "castersokeri"
|
||||
@@ -129,7 +129,7 @@
|
||||
},
|
||||
"cauliflower": {
|
||||
"name": "kukkakaali",
|
||||
"plural_name": "cauliflowers"
|
||||
"plural_name": "kukkakaalia"
|
||||
},
|
||||
"cayenne-pepper": {
|
||||
"name": "cayenne-pippuri"
|
||||
@@ -154,7 +154,7 @@
|
||||
},
|
||||
"chilli-peppers": {
|
||||
"name": "chilipaprikat",
|
||||
"plural_name": "chilli peppers"
|
||||
"plural_name": "chilipippuria"
|
||||
},
|
||||
"chinese-leaves": {
|
||||
"name": "kiinankaali"
|
||||
@@ -176,7 +176,7 @@
|
||||
},
|
||||
"coconut": {
|
||||
"name": "kookospähkinä",
|
||||
"plural_name": "coconuts"
|
||||
"plural_name": "kookospähkinää"
|
||||
},
|
||||
"coconut-milk": {
|
||||
"name": "kookosmaito"
|
||||
@@ -198,7 +198,7 @@
|
||||
},
|
||||
"corn": {
|
||||
"name": "maissi",
|
||||
"plural_name": "corns"
|
||||
"plural_name": "maissia"
|
||||
},
|
||||
"corn-syrup": {
|
||||
"name": "maissisiirappi"
|
||||
@@ -214,7 +214,7 @@
|
||||
},
|
||||
"cucumber": {
|
||||
"name": "kurkku",
|
||||
"plural_name": "cucumbers"
|
||||
"plural_name": "kurkkua"
|
||||
},
|
||||
"cumin": {
|
||||
"name": "kumina"
|
||||
@@ -240,15 +240,15 @@
|
||||
},
|
||||
"eggplant": {
|
||||
"name": "munakoiso",
|
||||
"plural_name": "eggplants"
|
||||
"plural_name": "munakoisoa"
|
||||
},
|
||||
"eggs": {
|
||||
"name": "munat",
|
||||
"plural_name": "eggs"
|
||||
"plural_name": "kananmunaa"
|
||||
},
|
||||
"endive": {
|
||||
"name": "endiivit",
|
||||
"plural_name": "endives"
|
||||
"plural_name": "endiiviä"
|
||||
},
|
||||
"fats": {
|
||||
"name": "rasvat"
|
||||
@@ -292,7 +292,7 @@
|
||||
},
|
||||
"garlic": {
|
||||
"name": "valkosipuli",
|
||||
"plural_name": "garlics"
|
||||
"plural_name": "valkosipuleja"
|
||||
},
|
||||
"gem-squash": {
|
||||
"name": "kurpitsa"
|
||||
@@ -317,7 +317,7 @@
|
||||
},
|
||||
"green-onion": {
|
||||
"name": "vihreä sipuli",
|
||||
"plural_name": "green onions"
|
||||
"plural_name": "vihreää sipulia"
|
||||
},
|
||||
"heart-of-palm": {
|
||||
"name": "palmun sydän",
|
||||
@@ -337,7 +337,7 @@
|
||||
},
|
||||
"jackfruit": {
|
||||
"name": "jakkihedelmä",
|
||||
"plural_name": "jackfruits"
|
||||
"plural_name": "jakkihedelmää"
|
||||
},
|
||||
"jaggery": {
|
||||
"name": "raakasokeri"
|
||||
@@ -368,7 +368,7 @@
|
||||
},
|
||||
"leek": {
|
||||
"name": "purjo",
|
||||
"plural_name": "leeks"
|
||||
"plural_name": "purjoa"
|
||||
},
|
||||
"legumes": {
|
||||
"name": "palkokasvit"
|
||||
@@ -384,7 +384,7 @@
|
||||
},
|
||||
"liver": {
|
||||
"name": "maksa",
|
||||
"plural_name": "livers"
|
||||
"plural_name": "maksaa"
|
||||
},
|
||||
"maize": {
|
||||
"name": "maissi"
|
||||
@@ -403,7 +403,7 @@
|
||||
},
|
||||
"mushroom": {
|
||||
"name": "sieni",
|
||||
"plural_name": "mushrooms"
|
||||
"plural_name": "sientä"
|
||||
},
|
||||
"mussels": {
|
||||
"name": "sinisimpukka"
|
||||
@@ -425,13 +425,13 @@
|
||||
},
|
||||
"octopuses": {
|
||||
"name": "mustekalat",
|
||||
"plural_name": "octopuses"
|
||||
"plural_name": "mustekalaa"
|
||||
},
|
||||
"oils": {
|
||||
"name": "öljyt"
|
||||
},
|
||||
"okra": {
|
||||
"name": "okra"
|
||||
"name": "okraa"
|
||||
},
|
||||
"olive": {
|
||||
"name": "oliivi"
|
||||
@@ -450,10 +450,10 @@
|
||||
},
|
||||
"oranges": {
|
||||
"name": "appelsiinit",
|
||||
"plural_name": "oranges"
|
||||
"plural_name": "appelsiinia"
|
||||
},
|
||||
"oregano": {
|
||||
"name": "oregano"
|
||||
"name": "oreganoa"
|
||||
},
|
||||
"oysters": {
|
||||
"name": "osterit"
|
||||
@@ -462,40 +462,40 @@
|
||||
"name": "panch puran"
|
||||
},
|
||||
"paprika": {
|
||||
"name": "paprika"
|
||||
"name": "paprikajauhetta"
|
||||
},
|
||||
"parsley": {
|
||||
"name": "persilja"
|
||||
},
|
||||
"parsnip": {
|
||||
"name": "palsternakka",
|
||||
"plural_name": "parsnips"
|
||||
"plural_name": "palsternakkaa"
|
||||
},
|
||||
"pear": {
|
||||
"name": "päärynä",
|
||||
"plural_name": "pears"
|
||||
"plural_name": "päärynää"
|
||||
},
|
||||
"peas": {
|
||||
"name": "herneet"
|
||||
},
|
||||
"pepper": {
|
||||
"name": "pippuri",
|
||||
"plural_name": "peppers"
|
||||
"plural_name": "pippuria"
|
||||
},
|
||||
"pineapple": {
|
||||
"name": "ananas",
|
||||
"plural_name": "pineapples"
|
||||
"plural_name": "ananasta"
|
||||
},
|
||||
"plantain": {
|
||||
"name": "keittobanaani",
|
||||
"plural_name": "plantains"
|
||||
"plural_name": "keittobanaania"
|
||||
},
|
||||
"poppy-seeds": {
|
||||
"name": "unikonsiemenet"
|
||||
},
|
||||
"potato": {
|
||||
"name": "peruna",
|
||||
"plural_name": "potatoes"
|
||||
"plural_name": "perunaa"
|
||||
},
|
||||
"poultry": {
|
||||
"name": "siipikarja"
|
||||
@@ -505,14 +505,14 @@
|
||||
},
|
||||
"pumpkin": {
|
||||
"name": "kurpitsa",
|
||||
"plural_name": "pumpkins"
|
||||
"plural_name": "kurpitsaa"
|
||||
},
|
||||
"pumpkin-seeds": {
|
||||
"name": "kurpitsansiemen"
|
||||
},
|
||||
"radish": {
|
||||
"name": "retiisi",
|
||||
"plural_name": "radishes"
|
||||
"plural_name": "retiisiä"
|
||||
},
|
||||
"raw-sugar": {
|
||||
"name": "raakasokeri"
|
||||
@@ -543,7 +543,7 @@
|
||||
},
|
||||
"scallion": {
|
||||
"name": "vihersipuli",
|
||||
"plural_name": "scallions"
|
||||
"plural_name": "kevätsipulia"
|
||||
},
|
||||
"seafood": {
|
||||
"name": "merenelävät"
|
||||
@@ -556,7 +556,7 @@
|
||||
},
|
||||
"shallot": {
|
||||
"name": "salottisipuli",
|
||||
"plural_name": "shallots"
|
||||
"plural_name": "salottisipulia"
|
||||
},
|
||||
"skate": {
|
||||
"name": "skate-kala"
|
||||
@@ -585,7 +585,7 @@
|
||||
},
|
||||
"spring-onion": {
|
||||
"name": "kevätsipuli",
|
||||
"plural_name": "spring onions"
|
||||
"plural_name": "kevätsipulia"
|
||||
},
|
||||
"squash": {
|
||||
"name": "kurpitsa",
|
||||
@@ -602,7 +602,7 @@
|
||||
},
|
||||
"sunchoke": {
|
||||
"name": "maa-artisokka",
|
||||
"plural_name": "sunchokes"
|
||||
"plural_name": "maa-artisokkaa"
|
||||
},
|
||||
"sunflower-seeds": {
|
||||
"name": "auringonkukansiemenet"
|
||||
@@ -612,35 +612,35 @@
|
||||
},
|
||||
"sweet-potato": {
|
||||
"name": "bataatti",
|
||||
"plural_name": "sweet potatoes"
|
||||
"plural_name": "bataattia"
|
||||
},
|
||||
"sweetcorn": {
|
||||
"name": "maissi",
|
||||
"plural_name": "sweetcorns"
|
||||
"plural_name": "sokerimaissia"
|
||||
},
|
||||
"sweeteners": {
|
||||
"name": "makeutusaineet"
|
||||
},
|
||||
"tahini": {
|
||||
"name": "tahini"
|
||||
"name": "tahinia"
|
||||
},
|
||||
"taro": {
|
||||
"name": "taaro",
|
||||
"plural_name": "taroes"
|
||||
"plural_name": "taaroa"
|
||||
},
|
||||
"teff": {
|
||||
"name": "teff"
|
||||
},
|
||||
"tomato": {
|
||||
"name": "tomaatti",
|
||||
"plural_name": "tomatoes"
|
||||
"plural_name": "tomaattia"
|
||||
},
|
||||
"trout": {
|
||||
"name": "taimen"
|
||||
},
|
||||
"tubers": {
|
||||
"name": "mukulat",
|
||||
"plural_name": "tubers"
|
||||
"plural_name": "mukulaa"
|
||||
},
|
||||
"tuna": {
|
||||
"name": "tonnikala"
|
||||
@@ -650,7 +650,7 @@
|
||||
},
|
||||
"turnip": {
|
||||
"name": "nauris",
|
||||
"plural_name": "turnips"
|
||||
"plural_name": "naurista"
|
||||
},
|
||||
"unrefined-sugar": {
|
||||
"name": "puhdistamaton sokeri"
|
||||
@@ -666,11 +666,11 @@
|
||||
},
|
||||
"watermelon": {
|
||||
"name": "vesimeloni",
|
||||
"plural_name": "watermelons"
|
||||
"plural_name": "vesimelonia"
|
||||
},
|
||||
"white-mushroom": {
|
||||
"name": "herkkusieni",
|
||||
"plural_name": "white mushrooms"
|
||||
"plural_name": "herkkusientä"
|
||||
},
|
||||
"white-sugar": {
|
||||
"name": "valkoinen sokeri"
|
||||
@@ -680,13 +680,13 @@
|
||||
},
|
||||
"yam": {
|
||||
"name": "hillo",
|
||||
"plural_name": "yams"
|
||||
"plural_name": "jamssia"
|
||||
},
|
||||
"yeast": {
|
||||
"name": "hiiva"
|
||||
},
|
||||
"zucchini": {
|
||||
"name": "kesäkurpitsa",
|
||||
"plural_name": "zucchinis"
|
||||
"plural_name": "kesäkurpitsaa"
|
||||
}
|
||||
}
|
||||
@@ -54,7 +54,7 @@
|
||||
"name": "mûres"
|
||||
},
|
||||
"bok-choy": {
|
||||
"name": "bok choy"
|
||||
"name": "pakchoï"
|
||||
},
|
||||
"brassicas": {
|
||||
"name": "crucifères"
|
||||
@@ -100,7 +100,7 @@
|
||||
"name": "cactus, comestible"
|
||||
},
|
||||
"calabrese": {
|
||||
"name": "calabrese"
|
||||
"name": "brocoli calabrese"
|
||||
},
|
||||
"cane-sugar": {
|
||||
"name": "sucre de canne"
|
||||
|
||||
@@ -221,7 +221,7 @@
|
||||
},
|
||||
"daikon": {
|
||||
"name": "rzodkiew japońska",
|
||||
"plural_name": "daikons"
|
||||
"plural_name": "rzodkwie japońskie"
|
||||
},
|
||||
"dairy-products-and-dairy-substitutes": {
|
||||
"name": "przetwory i substytuty mleczne"
|
||||
@@ -321,7 +321,7 @@
|
||||
},
|
||||
"heart-of-palm": {
|
||||
"name": "serce palmy",
|
||||
"plural_name": "heart of palms"
|
||||
"plural_name": "serca palm"
|
||||
},
|
||||
"hemp": {
|
||||
"name": "konopia"
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
},
|
||||
"apples": {
|
||||
"name": "maçãs",
|
||||
"plural_name": "apples"
|
||||
"plural_name": "maçãs"
|
||||
},
|
||||
"artichoke": {
|
||||
"name": "alcachofra"
|
||||
@@ -48,7 +48,7 @@
|
||||
},
|
||||
"bell-peppers": {
|
||||
"name": "pimentões",
|
||||
"plural_name": "bell peppers"
|
||||
"plural_name": "pimentões"
|
||||
},
|
||||
"blackberries": {
|
||||
"name": "amoras silvestres"
|
||||
@@ -94,7 +94,7 @@
|
||||
},
|
||||
"cabbage": {
|
||||
"name": "repolho",
|
||||
"plural_name": "cabbages"
|
||||
"plural_name": "repolhos"
|
||||
},
|
||||
"cactus-edible": {
|
||||
"name": "cacto, comestível"
|
||||
@@ -116,7 +116,7 @@
|
||||
},
|
||||
"carrot": {
|
||||
"name": "cenoura",
|
||||
"plural_name": "carrots"
|
||||
"plural_name": "cenouras"
|
||||
},
|
||||
"caster-sugar": {
|
||||
"name": "açúcar refinado"
|
||||
@@ -129,7 +129,7 @@
|
||||
},
|
||||
"cauliflower": {
|
||||
"name": "couve-flor",
|
||||
"plural_name": "cauliflowers"
|
||||
"plural_name": "couve-flor"
|
||||
},
|
||||
"cayenne-pepper": {
|
||||
"name": "pimenta caiena"
|
||||
@@ -154,7 +154,7 @@
|
||||
},
|
||||
"chilli-peppers": {
|
||||
"name": "pimenta picante",
|
||||
"plural_name": "chilli peppers"
|
||||
"plural_name": "pimenta em pó"
|
||||
},
|
||||
"chinese-leaves": {
|
||||
"name": "couve-china"
|
||||
@@ -176,7 +176,7 @@
|
||||
},
|
||||
"coconut": {
|
||||
"name": "coco",
|
||||
"plural_name": "coconuts"
|
||||
"plural_name": "cocos"
|
||||
},
|
||||
"coconut-milk": {
|
||||
"name": "leite de coco"
|
||||
@@ -198,7 +198,7 @@
|
||||
},
|
||||
"corn": {
|
||||
"name": "milho",
|
||||
"plural_name": "corns"
|
||||
"plural_name": "milhos"
|
||||
},
|
||||
"corn-syrup": {
|
||||
"name": "xarope de milho"
|
||||
@@ -214,14 +214,14 @@
|
||||
},
|
||||
"cucumber": {
|
||||
"name": "pepino",
|
||||
"plural_name": "cucumbers"
|
||||
"plural_name": "pepinos"
|
||||
},
|
||||
"cumin": {
|
||||
"name": "cominho"
|
||||
},
|
||||
"daikon": {
|
||||
"name": "rabanete",
|
||||
"plural_name": "daikons"
|
||||
"plural_name": "rabanetes"
|
||||
},
|
||||
"dairy-products-and-dairy-substitutes": {
|
||||
"name": "produtos lácteos e substitutos de leite"
|
||||
@@ -240,15 +240,15 @@
|
||||
},
|
||||
"eggplant": {
|
||||
"name": "berinjela",
|
||||
"plural_name": "eggplants"
|
||||
"plural_name": "berinjelas"
|
||||
},
|
||||
"eggs": {
|
||||
"name": "ovos",
|
||||
"plural_name": "eggs"
|
||||
"plural_name": "ovos"
|
||||
},
|
||||
"endive": {
|
||||
"name": "endívia",
|
||||
"plural_name": "endives"
|
||||
"plural_name": "endívias"
|
||||
},
|
||||
"fats": {
|
||||
"name": "gorduras"
|
||||
@@ -292,7 +292,7 @@
|
||||
},
|
||||
"garlic": {
|
||||
"name": "alho",
|
||||
"plural_name": "garlics"
|
||||
"plural_name": "alhos"
|
||||
},
|
||||
"gem-squash": {
|
||||
"name": "abóbora coroa"
|
||||
@@ -317,11 +317,11 @@
|
||||
},
|
||||
"green-onion": {
|
||||
"name": "Cebola Verde",
|
||||
"plural_name": "green onions"
|
||||
"plural_name": "cebolinha"
|
||||
},
|
||||
"heart-of-palm": {
|
||||
"name": "palmito",
|
||||
"plural_name": "heart of palms"
|
||||
"plural_name": "palmito"
|
||||
},
|
||||
"hemp": {
|
||||
"name": "cânhamo"
|
||||
@@ -337,7 +337,7 @@
|
||||
},
|
||||
"jackfruit": {
|
||||
"name": "jaca",
|
||||
"plural_name": "jackfruits"
|
||||
"plural_name": "jaca"
|
||||
},
|
||||
"jaggery": {
|
||||
"name": "açúcar mascavo"
|
||||
@@ -368,7 +368,7 @@
|
||||
},
|
||||
"leek": {
|
||||
"name": "alho-porró",
|
||||
"plural_name": "leeks"
|
||||
"plural_name": "alhos-porró"
|
||||
},
|
||||
"legumes": {
|
||||
"name": "leguminosas"
|
||||
@@ -384,7 +384,7 @@
|
||||
},
|
||||
"liver": {
|
||||
"name": "fígado",
|
||||
"plural_name": "livers"
|
||||
"plural_name": "fígados"
|
||||
},
|
||||
"maize": {
|
||||
"name": "milho"
|
||||
@@ -403,7 +403,7 @@
|
||||
},
|
||||
"mushroom": {
|
||||
"name": "cogumelo",
|
||||
"plural_name": "mushrooms"
|
||||
"plural_name": "cogumelos"
|
||||
},
|
||||
"mussels": {
|
||||
"name": "mexilhões"
|
||||
@@ -425,7 +425,7 @@
|
||||
},
|
||||
"octopuses": {
|
||||
"name": "polvos",
|
||||
"plural_name": "octopuses"
|
||||
"plural_name": "polvos"
|
||||
},
|
||||
"oils": {
|
||||
"name": "óleos"
|
||||
@@ -450,7 +450,7 @@
|
||||
},
|
||||
"oranges": {
|
||||
"name": "laranjas",
|
||||
"plural_name": "oranges"
|
||||
"plural_name": "laranjas"
|
||||
},
|
||||
"oregano": {
|
||||
"name": "orégano"
|
||||
@@ -473,29 +473,29 @@
|
||||
},
|
||||
"pear": {
|
||||
"name": "pêra",
|
||||
"plural_name": "pears"
|
||||
"plural_name": "peras"
|
||||
},
|
||||
"peas": {
|
||||
"name": "ervilha"
|
||||
},
|
||||
"pepper": {
|
||||
"name": "pimenta",
|
||||
"plural_name": "peppers"
|
||||
"plural_name": "pimentas"
|
||||
},
|
||||
"pineapple": {
|
||||
"name": "abacaxi",
|
||||
"plural_name": "pineapples"
|
||||
"plural_name": "abacaxis"
|
||||
},
|
||||
"plantain": {
|
||||
"name": "banana-da-terra",
|
||||
"plural_name": "plantains"
|
||||
"plural_name": "bananas-da-terra"
|
||||
},
|
||||
"poppy-seeds": {
|
||||
"name": "sementes de papoula"
|
||||
},
|
||||
"potato": {
|
||||
"name": "batata",
|
||||
"plural_name": "potatoes"
|
||||
"plural_name": "batatas"
|
||||
},
|
||||
"poultry": {
|
||||
"name": "carne de frango"
|
||||
@@ -505,14 +505,14 @@
|
||||
},
|
||||
"pumpkin": {
|
||||
"name": "abóbora",
|
||||
"plural_name": "pumpkins"
|
||||
"plural_name": "abóboras"
|
||||
},
|
||||
"pumpkin-seeds": {
|
||||
"name": "sementes de abóbora"
|
||||
},
|
||||
"radish": {
|
||||
"name": "rabanete",
|
||||
"plural_name": "radishes"
|
||||
"plural_name": "rabanetes"
|
||||
},
|
||||
"raw-sugar": {
|
||||
"name": "açúcar mascavo"
|
||||
@@ -543,7 +543,7 @@
|
||||
},
|
||||
"scallion": {
|
||||
"name": "cebolinha",
|
||||
"plural_name": "scallions"
|
||||
"plural_name": "cebolinhas"
|
||||
},
|
||||
"seafood": {
|
||||
"name": "frutos do mar"
|
||||
@@ -556,7 +556,7 @@
|
||||
},
|
||||
"shallot": {
|
||||
"name": "chalota",
|
||||
"plural_name": "shallots"
|
||||
"plural_name": "chalota"
|
||||
},
|
||||
"skate": {
|
||||
"name": "raia"
|
||||
|
||||
@@ -261,7 +261,7 @@
|
||||
},
|
||||
"fiddlehead-fern": {
|
||||
"name": "побеги папоротника",
|
||||
"plural_name": "fiddlehead ferns"
|
||||
"plural_name": "побеги папоротника"
|
||||
},
|
||||
"fish": {
|
||||
"name": "рыба"
|
||||
@@ -337,7 +337,7 @@
|
||||
},
|
||||
"jackfruit": {
|
||||
"name": "джекфрут",
|
||||
"plural_name": "jackfruits"
|
||||
"plural_name": "джекфрут"
|
||||
},
|
||||
"jaggery": {
|
||||
"name": "джаггери"
|
||||
@@ -469,7 +469,7 @@
|
||||
},
|
||||
"parsnip": {
|
||||
"name": "пастернак",
|
||||
"plural_name": "parsnips"
|
||||
"plural_name": "пастернак"
|
||||
},
|
||||
"pear": {
|
||||
"name": "груша",
|
||||
@@ -512,7 +512,7 @@
|
||||
},
|
||||
"radish": {
|
||||
"name": "редис",
|
||||
"plural_name": "radishes"
|
||||
"plural_name": "редис"
|
||||
},
|
||||
"raw-sugar": {
|
||||
"name": "нерафинированный сахар"
|
||||
@@ -585,11 +585,11 @@
|
||||
},
|
||||
"spring-onion": {
|
||||
"name": "зелёный лук",
|
||||
"plural_name": "spring onions"
|
||||
"plural_name": "зелёный лук"
|
||||
},
|
||||
"squash": {
|
||||
"name": "тыква",
|
||||
"plural_name": "squashes"
|
||||
"plural_name": "кабачки"
|
||||
},
|
||||
"squash-family": {
|
||||
"name": "тыквы"
|
||||
@@ -640,7 +640,7 @@
|
||||
},
|
||||
"tubers": {
|
||||
"name": "клубни",
|
||||
"plural_name": "tubers"
|
||||
"plural_name": "клубни"
|
||||
},
|
||||
"tuna": {
|
||||
"name": "тунец"
|
||||
@@ -650,7 +650,7 @@
|
||||
},
|
||||
"turnip": {
|
||||
"name": "репа",
|
||||
"plural_name": "turnips"
|
||||
"plural_name": "репа"
|
||||
},
|
||||
"unrefined-sugar": {
|
||||
"name": "нерафинированный сахар"
|
||||
@@ -666,7 +666,7 @@
|
||||
},
|
||||
"watermelon": {
|
||||
"name": "арбуз",
|
||||
"plural_name": "watermelons"
|
||||
"plural_name": "арбузы"
|
||||
},
|
||||
"white-mushroom": {
|
||||
"name": "белый гриб",
|
||||
@@ -687,6 +687,6 @@
|
||||
},
|
||||
"zucchini": {
|
||||
"name": "цуккини",
|
||||
"plural_name": "zucchinis"
|
||||
"plural_name": "цуккини"
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
[
|
||||
{
|
||||
"name": "Tuote"
|
||||
"name": "HeVi"
|
||||
},
|
||||
{
|
||||
"name": "Vilja"
|
||||
"name": "Viljat"
|
||||
},
|
||||
{
|
||||
"name": "Hedelmät"
|
||||
@@ -21,16 +21,16 @@
|
||||
"name": "Juomat"
|
||||
},
|
||||
{
|
||||
"name": "Paistetut"
|
||||
"name": "Leivonnaiset"
|
||||
},
|
||||
{
|
||||
"name": "Tölkitetyt"
|
||||
"name": "Säilykkeet"
|
||||
},
|
||||
{
|
||||
"name": "Mausteet"
|
||||
"name": "Maustekastikkeet"
|
||||
},
|
||||
{
|
||||
"name": "Makeiset"
|
||||
"name": "Konditoriatuotteet"
|
||||
},
|
||||
{
|
||||
"name": "Maitotuotteet"
|
||||
@@ -39,16 +39,16 @@
|
||||
"name": "Pakasteet"
|
||||
},
|
||||
{
|
||||
"name": "Terveelliset"
|
||||
"name": "Terveysruoka"
|
||||
},
|
||||
{
|
||||
"name": "Kotitaloudet"
|
||||
"name": "Kotitalous"
|
||||
},
|
||||
{
|
||||
"name": "Lihatuotteet"
|
||||
},
|
||||
{
|
||||
"name": "Pienpurtavat"
|
||||
"name": "Välipalat"
|
||||
},
|
||||
{
|
||||
"name": "Mausteet"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"name": "šálek",
|
||||
"plural_name": "šálků",
|
||||
"description": "",
|
||||
"abbreviation": "c"
|
||||
"abbreviation": "š"
|
||||
},
|
||||
"fluid-ounce": {
|
||||
"name": "dutá unce",
|
||||
@@ -31,7 +31,7 @@
|
||||
},
|
||||
"quart": {
|
||||
"name": "čtvrtka",
|
||||
"plural_name": "quarts",
|
||||
"plural_name": "čtvrtky",
|
||||
"description": "",
|
||||
"abbreviation": "čtvrtka"
|
||||
},
|
||||
@@ -92,7 +92,7 @@
|
||||
},
|
||||
"dash": {
|
||||
"name": "špetka",
|
||||
"plural_name": "dashes",
|
||||
"plural_name": "špetky",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
@@ -127,8 +127,8 @@
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pack": {
|
||||
"name": "pack",
|
||||
"plural_name": "packs",
|
||||
"name": "balení",
|
||||
"plural_name": "balení",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
|
||||
@@ -73,8 +73,8 @@
|
||||
"abbreviation": "g"
|
||||
},
|
||||
"kilogram": {
|
||||
"name": "kilogam",
|
||||
"plural_name": "kilogam",
|
||||
"name": "kilogram",
|
||||
"plural_name": "kilogram",
|
||||
"description": "",
|
||||
"abbreviation": "kg"
|
||||
},
|
||||
@@ -97,7 +97,7 @@
|
||||
"abbreviation": ""
|
||||
},
|
||||
"serving": {
|
||||
"name": "servering",
|
||||
"name": "portion",
|
||||
"plural_name": "portioner",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
|
||||
@@ -1,140 +1,140 @@
|
||||
{
|
||||
"teaspoon": {
|
||||
"name": "teelusikka",
|
||||
"plural_name": "teaspoons",
|
||||
"name": "teelusikallinen",
|
||||
"plural_name": "teelusikallista",
|
||||
"description": "",
|
||||
"abbreviation": "tl"
|
||||
},
|
||||
"tablespoon": {
|
||||
"name": "ruokalusikka",
|
||||
"plural_name": "tablespoons",
|
||||
"name": "ruokalusikallinen",
|
||||
"plural_name": "ruokalusikallista",
|
||||
"description": "",
|
||||
"abbreviation": "rkl"
|
||||
},
|
||||
"cup": {
|
||||
"name": "kuppi",
|
||||
"plural_name": "cups",
|
||||
"name": "kupillinen",
|
||||
"plural_name": "kupillista",
|
||||
"description": "",
|
||||
"abbreviation": "c"
|
||||
"abbreviation": "k"
|
||||
},
|
||||
"fluid-ounce": {
|
||||
"name": "nesteunssi",
|
||||
"plural_name": "fluid ounces",
|
||||
"plural_name": "nesteunssia",
|
||||
"description": "",
|
||||
"abbreviation": "fl oz"
|
||||
},
|
||||
"pint": {
|
||||
"name": "tuoppi",
|
||||
"plural_name": "pints",
|
||||
"name": "pintti",
|
||||
"plural_name": "pinttiä",
|
||||
"description": "",
|
||||
"abbreviation": "pt"
|
||||
},
|
||||
"quart": {
|
||||
"name": "kvartti",
|
||||
"plural_name": "quarts",
|
||||
"name": "vartti",
|
||||
"plural_name": "varttia",
|
||||
"description": "",
|
||||
"abbreviation": "qt"
|
||||
},
|
||||
"gallon": {
|
||||
"name": "gallona",
|
||||
"plural_name": "gallons",
|
||||
"plural_name": "gallonaa",
|
||||
"description": "",
|
||||
"abbreviation": "gal"
|
||||
},
|
||||
"milliliter": {
|
||||
"name": "millilitra",
|
||||
"plural_name": "milliliters",
|
||||
"plural_name": "millilitraa",
|
||||
"description": "",
|
||||
"abbreviation": "ml"
|
||||
},
|
||||
"liter": {
|
||||
"name": "litra",
|
||||
"plural_name": "liters",
|
||||
"plural_name": "litraa",
|
||||
"description": "",
|
||||
"abbreviation": "l"
|
||||
},
|
||||
"pound": {
|
||||
"name": "pauna",
|
||||
"plural_name": "pounds",
|
||||
"plural_name": "paunaa",
|
||||
"description": "",
|
||||
"abbreviation": "lb",
|
||||
"plural_abbreviation": "lbs"
|
||||
},
|
||||
"ounce": {
|
||||
"name": "unssi",
|
||||
"plural_name": "ounces",
|
||||
"plural_name": "unssia",
|
||||
"description": "",
|
||||
"abbreviation": "oz"
|
||||
},
|
||||
"gram": {
|
||||
"name": "gramma",
|
||||
"plural_name": "grams",
|
||||
"plural_name": "grammaa",
|
||||
"description": "",
|
||||
"abbreviation": "g"
|
||||
},
|
||||
"kilogram": {
|
||||
"name": "kilogramma",
|
||||
"plural_name": "kilograms",
|
||||
"plural_name": "kilogrammaa",
|
||||
"description": "",
|
||||
"abbreviation": "kg"
|
||||
},
|
||||
"milligram": {
|
||||
"name": "milligramma",
|
||||
"plural_name": "milligrams",
|
||||
"plural_name": "milligrammaa",
|
||||
"description": "",
|
||||
"abbreviation": "mg"
|
||||
},
|
||||
"splash": {
|
||||
"name": "tilkka",
|
||||
"plural_name": "splashes",
|
||||
"plural_name": "tilkkaa",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"dash": {
|
||||
"name": "ripaus",
|
||||
"plural_name": "dashes",
|
||||
"plural_name": "ripausta",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"serving": {
|
||||
"name": "annos",
|
||||
"plural_name": "servings",
|
||||
"plural_name": "annosta",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"head": {
|
||||
"name": "pää",
|
||||
"plural_name": "heads",
|
||||
"plural_name": "päätä",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"clove": {
|
||||
"name": "kynsi",
|
||||
"plural_name": "cloves",
|
||||
"plural_name": "kynttä",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"can": {
|
||||
"name": "tölkki",
|
||||
"plural_name": "cans",
|
||||
"name": "tölkillinen",
|
||||
"plural_name": "tölkillistä",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"bunch": {
|
||||
"name": "bunch",
|
||||
"plural_name": "bunches",
|
||||
"name": "nippu",
|
||||
"plural_name": "nippua",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pack": {
|
||||
"name": "pack",
|
||||
"plural_name": "packs",
|
||||
"name": "pakkaus",
|
||||
"plural_name": "pakkausta",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pinch": {
|
||||
"name": "pinch",
|
||||
"plural_name": "pinches",
|
||||
"name": "hyppysellinen",
|
||||
"plural_name": "hyppysellistä",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
},
|
||||
"liter": {
|
||||
"name": "litras",
|
||||
"plural_name": "liters",
|
||||
"plural_name": "litrų",
|
||||
"description": "",
|
||||
"abbreviation": "l"
|
||||
},
|
||||
@@ -68,19 +68,19 @@
|
||||
},
|
||||
"gram": {
|
||||
"name": "gramas",
|
||||
"plural_name": "grams",
|
||||
"plural_name": "gramų",
|
||||
"description": "",
|
||||
"abbreviation": "g"
|
||||
},
|
||||
"kilogram": {
|
||||
"name": "kilogramas",
|
||||
"plural_name": "kilograms",
|
||||
"plural_name": "kilogramų",
|
||||
"description": "",
|
||||
"abbreviation": "kg"
|
||||
},
|
||||
"milligram": {
|
||||
"name": "miligramas",
|
||||
"plural_name": "milligrams",
|
||||
"plural_name": "miligramų",
|
||||
"description": "",
|
||||
"abbreviation": "mg"
|
||||
},
|
||||
@@ -98,7 +98,7 @@
|
||||
},
|
||||
"serving": {
|
||||
"name": "porcijos",
|
||||
"plural_name": "servings",
|
||||
"plural_name": "porcijų",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
|
||||
@@ -104,13 +104,13 @@
|
||||
},
|
||||
"head": {
|
||||
"name": "cabeça",
|
||||
"plural_name": "heads",
|
||||
"plural_name": "cabeças",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"clove": {
|
||||
"name": "cravo",
|
||||
"plural_name": "cloves",
|
||||
"plural_name": "cravos",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
@@ -127,8 +127,8 @@
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pack": {
|
||||
"name": "pack",
|
||||
"plural_name": "packs",
|
||||
"name": "pacote",
|
||||
"plural_name": "pacotes",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
|
||||
@@ -5,14 +5,20 @@ from fastapi import HTTPException, status
|
||||
from mealie.core.security import create_access_token
|
||||
from mealie.routes._base import BaseUserController, controller
|
||||
from mealie.routes._base.routers import UserAPIRouter
|
||||
from mealie.schema.user import CreateToken, DeleteTokenResponse, LongLiveTokenIn, LongLiveTokenInDB, LongLiveTokenOut
|
||||
from mealie.schema.user import (
|
||||
CreateToken,
|
||||
DeleteTokenResponse,
|
||||
LongLiveTokenCreateResponse,
|
||||
LongLiveTokenIn,
|
||||
LongLiveTokenInDB,
|
||||
)
|
||||
|
||||
router = UserAPIRouter(prefix="/users", tags=["Users: Tokens"])
|
||||
|
||||
|
||||
@controller(router)
|
||||
class UserApiTokensController(BaseUserController):
|
||||
@router.post("/api-tokens", status_code=status.HTTP_201_CREATED, response_model=LongLiveTokenOut)
|
||||
@router.post("/api-tokens", status_code=status.HTTP_201_CREATED, response_model=LongLiveTokenCreateResponse)
|
||||
def create_api_token(
|
||||
self,
|
||||
token_params: LongLiveTokenIn,
|
||||
|
||||
@@ -10,6 +10,7 @@ from .user import (
|
||||
GroupInDB,
|
||||
GroupPagination,
|
||||
GroupSummary,
|
||||
LongLiveTokenCreateResponse,
|
||||
LongLiveTokenIn,
|
||||
LongLiveTokenInDB,
|
||||
LongLiveTokenOut,
|
||||
@@ -57,6 +58,7 @@ __all__ = [
|
||||
"GroupInDB",
|
||||
"GroupPagination",
|
||||
"GroupSummary",
|
||||
"LongLiveTokenCreateResponse",
|
||||
"LongLiveTokenIn",
|
||||
"LongLiveTokenInDB",
|
||||
"LongLiveTokenOut",
|
||||
|
||||
@@ -31,7 +31,6 @@ class LongLiveTokenIn(MealieModel):
|
||||
|
||||
|
||||
class LongLiveTokenOut(MealieModel):
|
||||
token: str
|
||||
name: str
|
||||
id: int
|
||||
created_at: datetime | None = None
|
||||
@@ -42,6 +41,12 @@ class LongLiveTokenOut(MealieModel):
|
||||
return [joinedload(LongLiveToken.user)]
|
||||
|
||||
|
||||
class LongLiveTokenCreateResponse(LongLiveTokenOut):
|
||||
"""Should ONLY be used when creating a new token, as the token field is sensitive"""
|
||||
|
||||
token: str
|
||||
|
||||
|
||||
class CreateToken(LongLiveTokenIn):
|
||||
user_id: UUID4
|
||||
token: str
|
||||
|
||||
334
poetry.lock
generated
334
poetry.lock
generated
@@ -118,13 +118,13 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "authlib"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients."
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
files = [
|
||||
{file = "Authlib-1.4.0-py2.py3-none-any.whl", hash = "sha256:4bb20b978c8b636222b549317c1815e1fe62234fc1c5efe8855d84aebf3a74e3"},
|
||||
{file = "authlib-1.4.0.tar.gz", hash = "sha256:1c1e6608b5ed3624aeeee136ca7f8c120d6f51f731aa152b153d54741840e1f2"},
|
||||
{file = "Authlib-1.4.1-py2.py3-none-any.whl", hash = "sha256:edc29c3f6a3e72cd9e9f45fff67fc663a2c364022eb0371c003f22d5405915c1"},
|
||||
{file = "authlib-1.4.1.tar.gz", hash = "sha256:30ead9ea4993cdbab821dc6e01e818362f92da290c04c7f6a1940f86507a790d"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -607,23 +607,23 @@ cli = ["requests"]
|
||||
|
||||
[[package]]
|
||||
name = "fastapi"
|
||||
version = "0.115.6"
|
||||
version = "0.115.8"
|
||||
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "fastapi-0.115.6-py3-none-any.whl", hash = "sha256:e9240b29e36fa8f4bb7290316988e90c381e5092e0cbe84e7818cc3713bcf305"},
|
||||
{file = "fastapi-0.115.6.tar.gz", hash = "sha256:9ec46f7addc14ea472958a96aae5b5de65f39721a46aaf5705c480d9a8b76654"},
|
||||
{file = "fastapi-0.115.8-py3-none-any.whl", hash = "sha256:753a96dd7e036b34eeef8babdfcfe3f28ff79648f86551eb36bfc1b0bf4a8cbf"},
|
||||
{file = "fastapi-0.115.8.tar.gz", hash = "sha256:0ce9111231720190473e222cdf0f07f7206ad7e53ea02beb1d2dc36e2f0741e9"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0"
|
||||
starlette = ">=0.40.0,<0.42.0"
|
||||
starlette = ">=0.40.0,<0.46.0"
|
||||
typing-extensions = ">=4.8.0"
|
||||
|
||||
[package.extras]
|
||||
all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
|
||||
standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"]
|
||||
all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
|
||||
standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"]
|
||||
|
||||
[[package]]
|
||||
name = "filelock"
|
||||
@@ -1451,13 +1451,13 @@ pyyaml = ">=5.1"
|
||||
|
||||
[[package]]
|
||||
name = "mkdocs-material"
|
||||
version = "9.5.50"
|
||||
version = "9.6.2"
|
||||
description = "Documentation that simply works"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "mkdocs_material-9.5.50-py3-none-any.whl", hash = "sha256:f24100f234741f4d423a9d672a909d859668a4f404796be3cf035f10d6050385"},
|
||||
{file = "mkdocs_material-9.5.50.tar.gz", hash = "sha256:ae5fe16f3d7c9ccd05bb6916a7da7420cf99a9ce5e33debd9d40403a090d5825"},
|
||||
{file = "mkdocs_material-9.6.2-py3-none-any.whl", hash = "sha256:71d90dbd63b393ad11a4d90151dfe3dcbfcd802c0f29ce80bebd9bbac6abc753"},
|
||||
{file = "mkdocs_material-9.6.2.tar.gz", hash = "sha256:a3de1c5d4c745f10afa78b1a02f917b9dce0808fb206adc0f5bb48b58c1ca21f"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -1491,49 +1491,43 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "mypy"
|
||||
version = "1.14.1"
|
||||
version = "1.15.0"
|
||||
description = "Optional static typing for Python"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
python-versions = ">=3.9"
|
||||
files = [
|
||||
{file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"},
|
||||
{file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"},
|
||||
{file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d"},
|
||||
{file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b"},
|
||||
{file = "mypy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427"},
|
||||
{file = "mypy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f"},
|
||||
{file = "mypy-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c"},
|
||||
{file = "mypy-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1"},
|
||||
{file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8"},
|
||||
{file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f"},
|
||||
{file = "mypy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1"},
|
||||
{file = "mypy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae"},
|
||||
{file = "mypy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14"},
|
||||
{file = "mypy-1.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9"},
|
||||
{file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11"},
|
||||
{file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e"},
|
||||
{file = "mypy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89"},
|
||||
{file = "mypy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b"},
|
||||
{file = "mypy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255"},
|
||||
{file = "mypy-1.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34"},
|
||||
{file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a"},
|
||||
{file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9"},
|
||||
{file = "mypy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd"},
|
||||
{file = "mypy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107"},
|
||||
{file = "mypy-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31"},
|
||||
{file = "mypy-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6"},
|
||||
{file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319"},
|
||||
{file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac"},
|
||||
{file = "mypy-1.14.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b"},
|
||||
{file = "mypy-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837"},
|
||||
{file = "mypy-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35"},
|
||||
{file = "mypy-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc"},
|
||||
{file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9"},
|
||||
{file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb"},
|
||||
{file = "mypy-1.14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60"},
|
||||
{file = "mypy-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c"},
|
||||
{file = "mypy-1.14.1-py3-none-any.whl", hash = "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1"},
|
||||
{file = "mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6"},
|
||||
{file = "mypy-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13"},
|
||||
{file = "mypy-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559"},
|
||||
{file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b"},
|
||||
{file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3"},
|
||||
{file = "mypy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b"},
|
||||
{file = "mypy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828"},
|
||||
{file = "mypy-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f"},
|
||||
{file = "mypy-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5"},
|
||||
{file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e"},
|
||||
{file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c"},
|
||||
{file = "mypy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f"},
|
||||
{file = "mypy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f"},
|
||||
{file = "mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd"},
|
||||
{file = "mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f"},
|
||||
{file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464"},
|
||||
{file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee"},
|
||||
{file = "mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e"},
|
||||
{file = "mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22"},
|
||||
{file = "mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445"},
|
||||
{file = "mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d"},
|
||||
{file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5"},
|
||||
{file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036"},
|
||||
{file = "mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357"},
|
||||
{file = "mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf"},
|
||||
{file = "mypy-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078"},
|
||||
{file = "mypy-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba"},
|
||||
{file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5"},
|
||||
{file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b"},
|
||||
{file = "mypy-1.15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2"},
|
||||
{file = "mypy-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980"},
|
||||
{file = "mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e"},
|
||||
{file = "mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -1590,13 +1584,13 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"]
|
||||
|
||||
[[package]]
|
||||
name = "openai"
|
||||
version = "1.60.0"
|
||||
version = "1.61.1"
|
||||
description = "The official Python library for the openai API"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "openai-1.60.0-py3-none-any.whl", hash = "sha256:df06c43be8018274980ac363da07d4b417bd835ead1c66e14396f6f15a0d5dda"},
|
||||
{file = "openai-1.60.0.tar.gz", hash = "sha256:7fa536cd4b644718645b874d2706e36dbbef38b327e42ca0623275da347ee1a9"},
|
||||
{file = "openai-1.61.1-py3-none-any.whl", hash = "sha256:72b0826240ce26026ac2cd17951691f046e5be82ad122d20a8e1b30ca18bd11e"},
|
||||
{file = "openai-1.61.1.tar.gz", hash = "sha256:ce1851507218209961f89f3520e06726c0aa7d0512386f0f977e3ac3e4f2472e"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -2274,20 +2268,20 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"]
|
||||
|
||||
[[package]]
|
||||
name = "pylint"
|
||||
version = "3.3.3"
|
||||
version = "3.3.4"
|
||||
description = "python code static checker"
|
||||
optional = false
|
||||
python-versions = ">=3.9.0"
|
||||
files = [
|
||||
{file = "pylint-3.3.3-py3-none-any.whl", hash = "sha256:26e271a2bc8bce0fc23833805a9076dd9b4d5194e2a02164942cb3cdc37b4183"},
|
||||
{file = "pylint-3.3.3.tar.gz", hash = "sha256:07c607523b17e6d16e2ae0d7ef59602e332caa762af64203c24b41c27139f36a"},
|
||||
{file = "pylint-3.3.4-py3-none-any.whl", hash = "sha256:289e6a1eb27b453b08436478391a48cd53bb0efb824873f949e709350f3de018"},
|
||||
{file = "pylint-3.3.4.tar.gz", hash = "sha256:74ae7a38b177e69a9b525d0794bd8183820bfa7eb68cc1bee6e8ed22a42be4ce"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
astroid = ">=3.3.8,<=3.4.0-dev0"
|
||||
colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""}
|
||||
dill = {version = ">=0.3.7", markers = "python_version >= \"3.12\""}
|
||||
isort = ">=4.2.5,<5.13.0 || >5.13.0,<6"
|
||||
isort = ">=4.2.5,<5.13.0 || >5.13.0,<7"
|
||||
mccabe = ">=0.6,<0.8"
|
||||
platformdirs = ">=2.2.0"
|
||||
tomlkit = ">=0.10.1"
|
||||
@@ -2366,13 +2360,13 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments
|
||||
|
||||
[[package]]
|
||||
name = "pytest-asyncio"
|
||||
version = "0.25.2"
|
||||
version = "0.25.3"
|
||||
description = "Pytest support for asyncio"
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
files = [
|
||||
{file = "pytest_asyncio-0.25.2-py3-none-any.whl", hash = "sha256:0d0bb693f7b99da304a0634afc0a4b19e49d5e0de2d670f38dc4bfa5727c5075"},
|
||||
{file = "pytest_asyncio-0.25.2.tar.gz", hash = "sha256:3f8ef9a98f45948ea91a0ed3dc4268b5326c0e7bce73892acc654df4262ad45f"},
|
||||
{file = "pytest_asyncio-0.25.3-py3-none-any.whl", hash = "sha256:9e89518e0f9bd08928f97a3482fdc4e244df17529460bc038291ccaf8f85c7c3"},
|
||||
{file = "pytest_asyncio-0.25.3.tar.gz", hash = "sha256:fc1da2cf9f125ada7e710b4ddad05518d4cee187ae9412e9ac9271003497f07a"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -2530,99 +2524,99 @@ pyyaml = "*"
|
||||
|
||||
[[package]]
|
||||
name = "rapidfuzz"
|
||||
version = "3.11.0"
|
||||
version = "3.12.1"
|
||||
description = "rapid fuzzy string matching"
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
files = [
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eb8a54543d16ab1b69e2c5ed96cabbff16db044a50eddfc028000138ca9ddf33"},
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:231c8b2efbd7f8d2ecd1ae900363ba168b8870644bb8f2b5aa96e4a7573bde19"},
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54e7f442fb9cca81e9df32333fb075ef729052bcabe05b0afc0441f462299114"},
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:906f1f2a1b91c06599b3dd1be207449c5d4fc7bd1e1fa2f6aef161ea6223f165"},
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed59044aea9eb6c663112170f2399b040d5d7b162828b141f2673e822093fa8"},
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cb1965a28b0fa64abdee130c788a0bc0bb3cf9ef7e3a70bf055c086c14a3d7e"},
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b488b244931d0291412917e6e46ee9f6a14376625e150056fe7c4426ef28225"},
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f0ba13557fec9d5ffc0a22826754a7457cc77f1b25145be10b7bb1d143ce84c6"},
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3871fa7dfcef00bad3c7e8ae8d8fd58089bad6fb21f608d2bf42832267ca9663"},
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:b2669eafee38c5884a6e7cc9769d25c19428549dcdf57de8541cf9e82822e7db"},
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ffa1bb0e26297b0f22881b219ffc82a33a3c84ce6174a9d69406239b14575bd5"},
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:45b15b8a118856ac9caac6877f70f38b8a0d310475d50bc814698659eabc1cdb"},
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-win32.whl", hash = "sha256:22033677982b9c4c49676f215b794b0404073f8974f98739cb7234e4a9ade9ad"},
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:be15496e7244361ff0efcd86e52559bacda9cd975eccf19426a0025f9547c792"},
|
||||
{file = "rapidfuzz-3.11.0-cp310-cp310-win_arm64.whl", hash = "sha256:714a7ba31ba46b64d30fccfe95f8013ea41a2e6237ba11a805a27cdd3bce2573"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8724a978f8af7059c5323d523870bf272a097478e1471295511cf58b2642ff83"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b63cb1f2eb371ef20fb155e95efd96e060147bdd4ab9fc400c97325dfee9fe1"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82497f244aac10b20710448645f347d862364cc4f7d8b9ba14bd66b5ce4dec18"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:339607394941801e6e3f6c1ecd413a36e18454e7136ed1161388de674f47f9d9"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84819390a36d6166cec706b9d8f0941f115f700b7faecab5a7e22fc367408bc3"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eea8d9e20632d68f653455265b18c35f90965e26f30d4d92f831899d6682149b"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b659e1e2ea2784a9a397075a7fc395bfa4fe66424042161c4bcaf6e4f637b38"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1315cd2a351144572e31fe3df68340d4b83ddec0af8b2e207cd32930c6acd037"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a7743cca45b4684c54407e8638f6d07b910d8d811347b9d42ff21262c7c23245"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:5bb636b0150daa6d3331b738f7c0f8b25eadc47f04a40e5c23c4bfb4c4e20ae3"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:42f4dd264ada7a9aa0805ea0da776dc063533917773cf2df5217f14eb4429eae"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:51f24cb39e64256221e6952f22545b8ce21cacd59c0d3e367225da8fc4b868d8"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-win32.whl", hash = "sha256:aaf391fb6715866bc14681c76dc0308f46877f7c06f61d62cc993b79fc3c4a2a"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:ebadd5b8624d8ad503e505a99b8eb26fe3ea9f8e9c2234e805a27b269e585842"},
|
||||
{file = "rapidfuzz-3.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:d895998fec712544c13cfe833890e0226585cf0391dd3948412441d5d68a2b8c"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f382fec4a7891d66fb7163c90754454030bb9200a13f82ee7860b6359f3f2fa8"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dfaefe08af2a928e72344c800dcbaf6508e86a4ed481e28355e8d4b6a6a5230e"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92ebb7c12f682b5906ed98429f48a3dd80dd0f9721de30c97a01473d1a346576"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a1b3ebc62d4bcdfdeba110944a25ab40916d5383c5e57e7c4a8dc0b6c17211a"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c6d7fea39cb33e71de86397d38bf7ff1a6273e40367f31d05761662ffda49e4"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99aebef8268f2bc0b445b5640fd3312e080bd17efd3fbae4486b20ac00466308"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4469307f464ae3089acf3210b8fc279110d26d10f79e576f385a98f4429f7d97"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:eb97c53112b593f89a90b4f6218635a9d1eea1d7f9521a3b7d24864228bbc0aa"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ef8937dae823b889c0273dfa0f0f6c46a3658ac0d851349c464d1b00e7ff4252"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d95f9e9f3777b96241d8a00d6377cc9c716981d828b5091082d0fe3a2924b43e"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:b1d67d67f89e4e013a5295e7523bc34a7a96f2dba5dd812c7c8cb65d113cbf28"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d994cf27e2f874069884d9bddf0864f9b90ad201fcc9cb2f5b82bacc17c8d5f2"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-win32.whl", hash = "sha256:ba26d87fe7fcb56c4a53b549a9e0e9143f6b0df56d35fe6ad800c902447acd5b"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:b1f7efdd7b7adb32102c2fa481ad6f11923e2deb191f651274be559d56fc913b"},
|
||||
{file = "rapidfuzz-3.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:ed78c8e94f57b44292c1a0350f580e18d3a3c5c0800e253f1583580c1b417ad2"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e60814edd0c9b511b5f377d48b9782b88cfe8be07a98f99973669299c8bb318a"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f28952da055dbfe75828891cd3c9abf0984edc8640573c18b48c14c68ca5e06"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e8f93bc736020351a6f8e71666e1f486bb8bd5ce8112c443a30c77bfde0eb68"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76a4a11ba8f678c9e5876a7d465ab86def047a4fcc043617578368755d63a1bc"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc0e0d41ad8a056a9886bac91ff9d9978e54a244deb61c2972cc76b66752de9c"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e8ea35f2419c7d56b3e75fbde2698766daedb374f20eea28ac9b1f668ef4f74"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd340bbd025302276b5aa221dccfe43040c7babfc32f107c36ad783f2ffd8775"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:494eef2c68305ab75139034ea25328a04a548d297712d9cf887bf27c158c388b"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5a167344c1d6db06915fb0225592afdc24d8bafaaf02de07d4788ddd37f4bc2f"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:8c7af25bda96ac799378ac8aba54a8ece732835c7b74cfc201b688a87ed11152"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d2a0f7e17f33e7890257367a1662b05fecaf56625f7dbb6446227aaa2b86448b"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4d0d26c7172bdb64f86ee0765c5b26ea1dc45c52389175888ec073b9b28f4305"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-win32.whl", hash = "sha256:6ad02bab756751c90fa27f3069d7b12146613061341459abf55f8190d899649f"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:b1472986fd9c5d318399a01a0881f4a0bf4950264131bb8e2deba9df6d8c362b"},
|
||||
{file = "rapidfuzz-3.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:c408f09649cbff8da76f8d3ad878b64ba7f7abdad1471efb293d2c075e80c822"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1bac4873f6186f5233b0084b266bfb459e997f4c21fc9f029918f44a9eccd304"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f9f12c2d0aa52b86206d2059916153876a9b1cf9dfb3cf2f344913167f1c3d4"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd501de6f7a8f83557d20613b58734d1cb5f0be78d794cde64fe43cfc63f5f2"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4416ca69af933d4a8ad30910149d3db6d084781d5c5fdedb713205389f535385"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f0821b9bdf18c5b7d51722b906b233a39b17f602501a966cfbd9b285f8ab83cd"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0edecc3f90c2653298d380f6ea73b536944b767520c2179ec5d40b9145e47aa"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4513dd01cee11e354c31b75f652d4d466c9440b6859f84e600bdebfccb17735a"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d9727b85511b912571a76ce53c7640ba2c44c364e71cef6d7359b5412739c570"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ab9eab33ee3213f7751dc07a1a61b8d9a3d748ca4458fffddd9defa6f0493c16"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:6b01c1ddbb054283797967ddc5433d5c108d680e8fa2684cf368be05407b07e4"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:3857e335f97058c4b46fa39ca831290b70de554a5c5af0323d2f163b19c5f2a6"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d98a46cf07c0c875d27e8a7ed50f304d83063e49b9ab63f21c19c154b4c0d08d"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-win32.whl", hash = "sha256:c36539ed2c0173b053dafb221458812e178cfa3224ade0960599bec194637048"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:ec8d7d8567e14af34a7911c98f5ac74a3d4a743cd848643341fc92b12b3784ff"},
|
||||
{file = "rapidfuzz-3.11.0-cp39-cp39-win_arm64.whl", hash = "sha256:62171b270ecc4071be1c1f99960317db261d4c8c83c169e7f8ad119211fe7397"},
|
||||
{file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f06e3c4c0a8badfc4910b9fd15beb1ad8f3b8fafa8ea82c023e5e607b66a78e4"},
|
||||
{file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fe7aaf5a54821d340d21412f7f6e6272a9b17a0cbafc1d68f77f2fc11009dcd5"},
|
||||
{file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25398d9ac7294e99876a3027ffc52c6bebeb2d702b1895af6ae9c541ee676702"},
|
||||
{file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a52eea839e4bdc72c5e60a444d26004da00bb5bc6301e99b3dde18212e41465"},
|
||||
{file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c87319b0ab9d269ab84f6453601fd49b35d9e4a601bbaef43743f26fabf496c"},
|
||||
{file = "rapidfuzz-3.11.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3048c6ed29d693fba7d2a7caf165f5e0bb2b9743a0989012a98a47b975355cca"},
|
||||
{file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b04f29735bad9f06bb731c214f27253bd8bedb248ef9b8a1b4c5bde65b838454"},
|
||||
{file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7864e80a0d4e23eb6194254a81ee1216abdc53f9dc85b7f4d56668eced022eb8"},
|
||||
{file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3794df87313dfb56fafd679b962e0613c88a293fd9bd5dd5c2793d66bf06a101"},
|
||||
{file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d71da0012face6f45432a11bc59af19e62fac5a41f8ce489e80c0add8153c3d1"},
|
||||
{file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff38378346b7018f42cbc1f6d1d3778e36e16d8595f79a312b31e7c25c50bd08"},
|
||||
{file = "rapidfuzz-3.11.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6668321f90aa02a5a789d4e16058f2e4f2692c5230252425c3532a8a62bc3424"},
|
||||
{file = "rapidfuzz-3.11.0.tar.gz", hash = "sha256:a53ca4d3f52f00b393fab9b5913c5bafb9afc27d030c8a1db1283da6917a860f"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dbb7ea2fd786e6d66f225ef6eef1728832314f47e82fee877cb2a793ebda9579"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1ae41361de05762c1eaa3955e5355de7c4c6f30d1ef1ea23d29bf738a35809ab"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc3c39e0317e7f68ba01bac056e210dd13c7a0abf823e7b6a5fe7e451ddfc496"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69f2520296f1ae1165b724a3aad28c56fd0ac7dd2e4cff101a5d986e840f02d4"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34dcbf5a7daecebc242f72e2500665f0bde9dd11b779246c6d64d106a7d57c99"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:773ab37fccf6e0513891f8eb4393961ddd1053c6eb7e62eaa876e94668fc6d31"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ecf0e6de84c0bc2c0f48bc03ba23cef2c5f1245db7b26bc860c11c6fd7a097c"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4dc2ebad4adb29d84a661f6a42494df48ad2b72993ff43fad2b9794804f91e45"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8389d98b9f54cb4f8a95f1fa34bf0ceee639e919807bb931ca479c7a5f2930bf"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:165bcdecbfed9978962da1d3ec9c191b2ff9f1ccc2668fbaf0613a975b9aa326"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:129d536740ab0048c1a06ccff73c683f282a2347c68069affae8dbc423a37c50"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b67e390261ffe98ec86c771b89425a78b60ccb610c3b5874660216fcdbded4b"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-win32.whl", hash = "sha256:a66520180d3426b9dc2f8d312f38e19bc1fc5601f374bae5c916f53fa3534a7d"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:82260b20bc7a76556cecb0c063c87dad19246a570425d38f8107b8404ca3ac97"},
|
||||
{file = "rapidfuzz-3.12.1-cp310-cp310-win_arm64.whl", hash = "sha256:3a860d103bbb25c69c2e995fdf4fac8cb9f77fb69ec0a00469d7fd87ff148f46"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d9afad7b16d01c9e8929b6a205a18163c7e61b6cd9bcf9c81be77d5afc1067a"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bb424ae7240f2d2f7d8dda66a61ebf603f74d92f109452c63b0dbf400204a437"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42149e6d13bd6d06437d2a954dae2184dadbbdec0fdb82dafe92860d99f80519"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:760ac95d788f2964b73da01e0bdffbe1bf2ad8273d0437565ce9092ae6ad1fbc"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2cf27e8e4bf7bf9d92ef04f3d2b769e91c3f30ba99208c29f5b41e77271a2614"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00ceb8ff3c44ab0d6014106c71709c85dee9feedd6890eff77c814aa3798952b"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b61c558574fbc093d85940c3264c08c2b857b8916f8e8f222e7b86b0bb7d12"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:346a2d8f17224e99f9ef988606c83d809d5917d17ad00207237e0965e54f9730"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d60d1db1b7e470e71ae096b6456e20ec56b52bde6198e2dbbc5e6769fa6797dc"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2477da227e266f9c712f11393182c69a99d3c8007ea27f68c5afc3faf401cc43"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:8499c7d963ddea8adb6cffac2861ee39a1053e22ca8a5ee9de1197f8dc0275a5"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:12802e5c4d8ae104fb6efeeb436098325ce0dca33b461c46e8df015c84fbef26"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-win32.whl", hash = "sha256:e1061311d07e7cdcffa92c9b50c2ab4192907e70ca01b2e8e1c0b6b4495faa37"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6e4ed63e204daa863a802eec09feea5448617981ba5d150f843ad8e3ae071a4"},
|
||||
{file = "rapidfuzz-3.12.1-cp311-cp311-win_arm64.whl", hash = "sha256:920733a28c3af47870835d59ca9879579f66238f10de91d2b4b3f809d1ebfc5b"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f6235b57ae3faa3f85cb3f90c9fee49b21bd671b76e90fc99e8ca2bdf0b5e4a3"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:af4585e5812632c357fee5ab781c29f00cd06bea58f8882ff244cc4906ba6c9e"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5942dc4460e5030c5f9e1d4c9383de2f3564a2503fe25e13e89021bcbfea2f44"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b31ab59e1a0df5afc21f3109b6cfd77b34040dbf54f1bad3989f885cfae1e60"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97c885a7a480b21164f57a706418c9bbc9a496ec6da087e554424358cadde445"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d844c0587d969ce36fbf4b7cbf0860380ffeafc9ac5e17a7cbe8abf528d07bb"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a93c95dce8917bf428064c64024de43ffd34ec5949dd4425780c72bd41f9d969"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:834f6113d538af358f39296604a1953e55f8eeffc20cb4caf82250edbb8bf679"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a940aa71a7f37d7f0daac186066bf6668d4d3b7e7ef464cb50bc7ba89eae1f51"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ec9eaf73501c9a7de2c6938cb3050392e2ee0c5ca3921482acf01476b85a7226"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3c5ec360694ac14bfaeb6aea95737cf1a6cf805b5fe8ea7fd28814706c7fa838"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6b5e176524653ac46f1802bdd273a4b44a5f8d0054ed5013a8e8a4b72f254599"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-win32.whl", hash = "sha256:6f463c6f1c42ec90e45d12a6379e18eddd5cdf74138804d8215619b6f4d31cea"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:b894fa2b30cd6498a29e5c470cb01c6ea898540b7e048a0342775a5000531334"},
|
||||
{file = "rapidfuzz-3.12.1-cp312-cp312-win_arm64.whl", hash = "sha256:43bb17056c5d1332f517b888c4e57846c4b5f936ed304917eeb5c9ac85d940d4"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:97f824c15bc6933a31d6e3cbfa90188ba0e5043cf2b6dd342c2b90ee8b3fd47c"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a973b3f5cabf931029a3ae4a0f72e3222e53d412ea85fc37ddc49e1774f00fbf"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df7880e012228722dec1be02b9ef3898ed023388b8a24d6fa8213d7581932510"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c78582f50e75e6c2bc38c791ed291cb89cf26a3148c47860c1a04d6e5379c8e"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d7d9e6a04d8344b0198c96394c28874086888d0a2b2f605f30d1b27b9377b7d"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5620001fd4d6644a2f56880388179cc8f3767670f0670160fcb97c3b46c828af"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0666ab4c52e500af7ba5cc17389f5d15c0cdad06412c80312088519fdc25686d"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:27b4d440fa50b50c515a91a01ee17e8ede719dca06eef4c0cccf1a111a4cfad3"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:83dccfd5a754f2a0e8555b23dde31f0f7920601bfa807aa76829391ea81e7c67"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b572b634740e047c53743ed27a1bb3b4f93cf4abbac258cd7af377b2c4a9ba5b"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7fa7b81fb52902d5f78dac42b3d6c835a6633b01ddf9b202a3ca8443be4b2d6a"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b1d4fbff980cb6baef4ee675963c081f7b5d6580a105d6a4962b20f1f880e1fb"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-win32.whl", hash = "sha256:3fe8da12ea77271097b303fa7624cfaf5afd90261002314e3b0047d36f4afd8d"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:6f7e92fc7d2a7f02e1e01fe4f539324dfab80f27cb70a30dd63a95445566946b"},
|
||||
{file = "rapidfuzz-3.12.1-cp313-cp313-win_arm64.whl", hash = "sha256:e31be53d7f4905a6a038296d8b773a79da9ee9f0cd19af9490c5c5a22e37d2e5"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bef5c91d5db776523530073cda5b2a276283258d2f86764be4a008c83caf7acd"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:841e0c2a5fbe8fc8b9b1a56e924c871899932c0ece7fbd970aa1c32bfd12d4bf"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:046fc67f3885d94693a2151dd913aaf08b10931639cbb953dfeef3151cb1027c"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4d2d39b2e76c17f92edd6d384dc21fa020871c73251cdfa017149358937a41d"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5857dda85165b986c26a474b22907db6b93932c99397c818bcdec96340a76d5"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c26cd1b9969ea70dbf0dbda3d2b54ab4b2e683d0fd0f17282169a19563efeb1"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf56ea4edd69005786e6c80a9049d95003aeb5798803e7a2906194e7a3cb6472"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fbe7580b5fb2db8ebd53819171ff671124237a55ada3f64d20fc9a149d133960"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:018506a53c3b20dcbda8c93d4484b9eb1764c93d5ea16be103cf6b0d8b11d860"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:325c9c71b737fcd32e2a4e634c430c07dd3d374cfe134eded3fe46e4c6f9bf5d"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:930756639643e3aa02d3136b6fec74e5b9370a24f8796e1065cd8a857a6a6c50"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0acbd27543b158cb915fde03877383816a9e83257832818f1e803bac9b394900"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-win32.whl", hash = "sha256:80ff9283c54d7d29b2d954181e137deee89bec62f4a54675d8b6dbb6b15d3e03"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:fd37e53f0ed239d0cec27b250cec958982a8ba252ce64aa5e6052de3a82fa8db"},
|
||||
{file = "rapidfuzz-3.12.1-cp39-cp39-win_arm64.whl", hash = "sha256:4a4422e4f73a579755ab60abccb3ff148b5c224b3c7454a13ca217dfbad54da6"},
|
||||
{file = "rapidfuzz-3.12.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b7cba636c32a6fc3a402d1cb2c70c6c9f8e6319380aaf15559db09d868a23e56"},
|
||||
{file = "rapidfuzz-3.12.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b79286738a43e8df8420c4b30a92712dec6247430b130f8e015c3a78b6d61ac2"},
|
||||
{file = "rapidfuzz-3.12.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dc1937198e7ff67e217e60bfa339f05da268d91bb15fec710452d11fe2fdf60"},
|
||||
{file = "rapidfuzz-3.12.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b85817a57cf8db32dd5d2d66ccfba656d299b09eaf86234295f89f91be1a0db2"},
|
||||
{file = "rapidfuzz-3.12.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04283c6f3e79f13a784f844cd5b1df4f518ad0f70c789aea733d106c26e1b4fb"},
|
||||
{file = "rapidfuzz-3.12.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a718f740553aad5f4daef790191511da9c6eae893ee1fc2677627e4b624ae2db"},
|
||||
{file = "rapidfuzz-3.12.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cbdf145c7e4ebf2e81c794ed7a582c4acad19e886d5ad6676086369bd6760753"},
|
||||
{file = "rapidfuzz-3.12.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0d03ad14a26a477be221fddc002954ae68a9e2402b9d85433f2d0a6af01aa2bb"},
|
||||
{file = "rapidfuzz-3.12.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1187aeae9c89e838d2a0a2b954b4052e4897e5f62e5794ef42527bf039d469e"},
|
||||
{file = "rapidfuzz-3.12.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd47dfb1bca9673a48b923b3d988b7668ee8efd0562027f58b0f2b7abf27144c"},
|
||||
{file = "rapidfuzz-3.12.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187cdb402e223264eebed2fe671e367e636a499a7a9c82090b8d4b75aa416c2a"},
|
||||
{file = "rapidfuzz-3.12.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d6899b41bf6c30282179f77096c1939f1454836440a8ab05b48ebf7026a3b590"},
|
||||
{file = "rapidfuzz-3.12.1.tar.gz", hash = "sha256:6a98bbca18b4a37adddf2d8201856441c26e9c981d8895491b5bc857b5f780eb"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
@@ -2832,29 +2826,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
|
||||
|
||||
[[package]]
|
||||
name = "ruff"
|
||||
version = "0.9.2"
|
||||
version = "0.9.4"
|
||||
description = "An extremely fast Python linter and code formatter, written in Rust."
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "ruff-0.9.2-py3-none-linux_armv6l.whl", hash = "sha256:80605a039ba1454d002b32139e4970becf84b5fee3a3c3bf1c2af6f61a784347"},
|
||||
{file = "ruff-0.9.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b9aab82bb20afd5f596527045c01e6ae25a718ff1784cb92947bff1f83068b00"},
|
||||
{file = "ruff-0.9.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fbd337bac1cfa96be615f6efcd4bc4d077edbc127ef30e2b8ba2a27e18c054d4"},
|
||||
{file = "ruff-0.9.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82b35259b0cbf8daa22a498018e300b9bb0174c2bbb7bcba593935158a78054d"},
|
||||
{file = "ruff-0.9.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b6a9701d1e371bf41dca22015c3f89769da7576884d2add7317ec1ec8cb9c3c"},
|
||||
{file = "ruff-0.9.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9cc53e68b3c5ae41e8faf83a3b89f4a5d7b2cb666dff4b366bb86ed2a85b481f"},
|
||||
{file = "ruff-0.9.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:8efd9da7a1ee314b910da155ca7e8953094a7c10d0c0a39bfde3fcfd2a015684"},
|
||||
{file = "ruff-0.9.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3292c5a22ea9a5f9a185e2d131dc7f98f8534a32fb6d2ee7b9944569239c648d"},
|
||||
{file = "ruff-0.9.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a605fdcf6e8b2d39f9436d343d1f0ff70c365a1e681546de0104bef81ce88df"},
|
||||
{file = "ruff-0.9.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c547f7f256aa366834829a08375c297fa63386cbe5f1459efaf174086b564247"},
|
||||
{file = "ruff-0.9.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d18bba3d3353ed916e882521bc3e0af403949dbada344c20c16ea78f47af965e"},
|
||||
{file = "ruff-0.9.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b338edc4610142355ccf6b87bd356729b62bf1bc152a2fad5b0c7dc04af77bfe"},
|
||||
{file = "ruff-0.9.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:492a5e44ad9b22a0ea98cf72e40305cbdaf27fac0d927f8bc9e1df316dcc96eb"},
|
||||
{file = "ruff-0.9.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:af1e9e9fe7b1f767264d26b1075ac4ad831c7db976911fa362d09b2d0356426a"},
|
||||
{file = "ruff-0.9.2-py3-none-win32.whl", hash = "sha256:71cbe22e178c5da20e1514e1e01029c73dc09288a8028a5d3446e6bba87a5145"},
|
||||
{file = "ruff-0.9.2-py3-none-win_amd64.whl", hash = "sha256:c5e1d6abc798419cf46eed03f54f2e0c3adb1ad4b801119dedf23fcaf69b55b5"},
|
||||
{file = "ruff-0.9.2-py3-none-win_arm64.whl", hash = "sha256:a1b63fa24149918f8b37cef2ee6fff81f24f0d74b6f0bdc37bc3e1f2143e41c6"},
|
||||
{file = "ruff-0.9.2.tar.gz", hash = "sha256:b5eceb334d55fae5f316f783437392642ae18e16dcf4f1858d55d3c2a0f8f5d0"},
|
||||
{file = "ruff-0.9.4-py3-none-linux_armv6l.whl", hash = "sha256:64e73d25b954f71ff100bb70f39f1ee09e880728efb4250c632ceed4e4cdf706"},
|
||||
{file = "ruff-0.9.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6ce6743ed64d9afab4fafeaea70d3631b4d4b28b592db21a5c2d1f0ef52934bf"},
|
||||
{file = "ruff-0.9.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:54499fb08408e32b57360f6f9de7157a5fec24ad79cb3f42ef2c3f3f728dfe2b"},
|
||||
{file = "ruff-0.9.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37c892540108314a6f01f105040b5106aeb829fa5fb0561d2dcaf71485021137"},
|
||||
{file = "ruff-0.9.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:de9edf2ce4b9ddf43fd93e20ef635a900e25f622f87ed6e3047a664d0e8f810e"},
|
||||
{file = "ruff-0.9.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87c90c32357c74f11deb7fbb065126d91771b207bf9bfaaee01277ca59b574ec"},
|
||||
{file = "ruff-0.9.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:56acd6c694da3695a7461cc55775f3a409c3815ac467279dfa126061d84b314b"},
|
||||
{file = "ruff-0.9.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0c93e7d47ed951b9394cf352d6695b31498e68fd5782d6cbc282425655f687a"},
|
||||
{file = "ruff-0.9.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d4c8772670aecf037d1bf7a07c39106574d143b26cfe5ed1787d2f31e800214"},
|
||||
{file = "ruff-0.9.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfc5f1d7afeda8d5d37660eeca6d389b142d7f2b5a1ab659d9214ebd0e025231"},
|
||||
{file = "ruff-0.9.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:faa935fc00ae854d8b638c16a5f1ce881bc3f67446957dd6f2af440a5fc8526b"},
|
||||
{file = "ruff-0.9.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a6c634fc6f5a0ceae1ab3e13c58183978185d131a29c425e4eaa9f40afe1e6d6"},
|
||||
{file = "ruff-0.9.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:433dedf6ddfdec7f1ac7575ec1eb9844fa60c4c8c2f8887a070672b8d353d34c"},
|
||||
{file = "ruff-0.9.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d612dbd0f3a919a8cc1d12037168bfa536862066808960e0cc901404b77968f0"},
|
||||
{file = "ruff-0.9.4-py3-none-win32.whl", hash = "sha256:db1192ddda2200671f9ef61d9597fcef89d934f5d1705e571a93a67fb13a4402"},
|
||||
{file = "ruff-0.9.4-py3-none-win_amd64.whl", hash = "sha256:05bebf4cdbe3ef75430d26c375773978950bbf4ee3c95ccb5448940dc092408e"},
|
||||
{file = "ruff-0.9.4-py3-none-win_arm64.whl", hash = "sha256:585792f1e81509e38ac5123492f8875fbc36f3ede8185af0a26df348e5154f41"},
|
||||
{file = "ruff-0.9.4.tar.gz", hash = "sha256:6907ee3529244bb0ed066683e075f09285b38dd5b4039370df6ff06041ca19e7"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
@@ -3,7 +3,7 @@ authors = ["Hayden <hay-kot@pm.me>"]
|
||||
description = "A Recipe Manager"
|
||||
license = "AGPL"
|
||||
name = "mealie"
|
||||
version = "2.4.2"
|
||||
version = "2.5.0"
|
||||
|
||||
[tool.poetry.scripts]
|
||||
start = "mealie.app:main"
|
||||
|
||||
@@ -17,6 +17,25 @@ def long_live_token(api_client: TestClient, admin_token):
|
||||
def test_api_token_creation(api_client: TestClient, admin_token):
|
||||
response = api_client.post(api_routes.users_api_tokens, json={"name": "Test API Token"}, headers=admin_token)
|
||||
assert response.status_code == 201
|
||||
assert response.json()["token"]
|
||||
|
||||
|
||||
def test_api_token_private(api_client: TestClient, admin_token):
|
||||
response = api_client.post(api_routes.users_api_tokens, json={"name": "Test API Token"}, headers=admin_token)
|
||||
assert response.status_code == 201
|
||||
|
||||
response = api_client.get(api_routes.users, headers=admin_token, params={"perPage": -1})
|
||||
assert response.status_code == 200
|
||||
for user in response.json()["items"]:
|
||||
for user_token in user["tokens"] or []:
|
||||
assert "token" not in user_token
|
||||
|
||||
response = api_client.get(api_routes.users_self, headers=admin_token)
|
||||
assert response.status_code == 200
|
||||
response_json = response.json()
|
||||
assert response_json["tokens"]
|
||||
for user_token in response_json["tokens"]:
|
||||
assert "token" not in user_token
|
||||
|
||||
|
||||
def test_use_token(api_client: TestClient, long_live_token):
|
||||
|
||||
Reference in New Issue
Block a user