From 0886b5e3591ce570e2a74439ea5bcba9a200ae85 Mon Sep 17 00:00:00 2001 From: Andrew Jackson Date: Sat, 13 Dec 2025 10:28:05 +0000 Subject: [PATCH 1/2] Bump aiomealie to 1.1.1 and statically define mealplan entry types --- homeassistant/components/mealie/calendar.py | 9 +- homeassistant/components/mealie/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- .../mealie/fixtures/get_mealplan_today.json | 6 +- .../mealie/fixtures/get_mealplans.json | 6 +- .../mealie/snapshots/test_calendar.ambr | 42 ----- .../mealie/snapshots/test_diagnostics.ambr | 172 +++++++++--------- .../mealie/snapshots/test_services.ambr | 6 +- 9 files changed, 109 insertions(+), 138 deletions(-) diff --git a/homeassistant/components/mealie/calendar.py b/homeassistant/components/mealie/calendar.py index 556ddede2e239..b52429fdb2ada 100644 --- a/homeassistant/components/mealie/calendar.py +++ b/homeassistant/components/mealie/calendar.py @@ -24,9 +24,16 @@ async def async_setup_entry( """Set up the calendar platform for entity.""" coordinator = entry.runtime_data.mealplan_coordinator + supported_mealplan_entry_types = [ + MealplanEntryType.BREAKFAST, + MealplanEntryType.DINNER, + MealplanEntryType.LUNCH, + MealplanEntryType.SIDE, + ] + async_add_entities( MealieMealplanCalendarEntity(coordinator, entry_type) - for entry_type in MealplanEntryType + for entry_type in supported_mealplan_entry_types ) diff --git a/homeassistant/components/mealie/manifest.json b/homeassistant/components/mealie/manifest.json index 8a561c9c0b5b6..5e090a6af738b 100644 --- a/homeassistant/components/mealie/manifest.json +++ b/homeassistant/components/mealie/manifest.json @@ -7,5 +7,5 @@ "integration_type": "service", "iot_class": "local_polling", "quality_scale": "platinum", - "requirements": ["aiomealie==1.1.0"] + "requirements": ["aiomealie==1.1.1"] } diff --git a/requirements_all.txt b/requirements_all.txt index 15f11e29b73dd..266c7dcc90c31 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -319,7 +319,7 @@ aiolookin==1.0.0 aiolyric==2.0.2 # homeassistant.components.mealie -aiomealie==1.1.0 +aiomealie==1.1.1 # homeassistant.components.modern_forms aiomodernforms==0.1.8 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index bfbfe6a8df116..879973cb60a0e 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -304,7 +304,7 @@ aiolookin==1.0.0 aiolyric==2.0.2 # homeassistant.components.mealie -aiomealie==1.1.0 +aiomealie==1.1.1 # homeassistant.components.modern_forms aiomodernforms==0.1.8 diff --git a/tests/components/mealie/fixtures/get_mealplan_today.json b/tests/components/mealie/fixtures/get_mealplan_today.json index 1413f4a01133b..634c6fad449cf 100644 --- a/tests/components/mealie/fixtures/get_mealplan_today.json +++ b/tests/components/mealie/fixtures/get_mealplan_today.json @@ -110,7 +110,7 @@ }, { "date": "2024-01-21", - "entryType": "lunch", + "entryType": "dessert", "title": "", "text": "", "recipeId": "27455eb2-31d3-4682-84ff-02a114bf293a", @@ -178,7 +178,7 @@ }, { "date": "2024-01-21", - "entryType": "dinner", + "entryType": "snack", "title": "", "text": "", "recipeId": "48f39d27-4b8e-4c14-bf36-4e1e6497e75e", @@ -218,7 +218,7 @@ }, { "date": "2024-01-21", - "entryType": "dinner", + "entryType": "drink", "title": "", "text": "", "recipeId": "27455eb2-31d3-4682-84ff-02a114bf293a", diff --git a/tests/components/mealie/fixtures/get_mealplans.json b/tests/components/mealie/fixtures/get_mealplans.json index 89584a9c9171e..c7918ed8e80f5 100644 --- a/tests/components/mealie/fixtures/get_mealplans.json +++ b/tests/components/mealie/fixtures/get_mealplans.json @@ -256,7 +256,7 @@ }, { "date": "2024-01-23", - "entryType": "dinner", + "entryType": "dessert", "title": "", "text": "", "recipeId": "47595e4c-52bc-441d-b273-3edf4258806d", @@ -500,7 +500,7 @@ }, { "date": "2024-01-22", - "entryType": "dinner", + "entryType": "drink", "title": "", "text": "", "recipeId": "9d553779-607e-471b-acf3-84e6be27b159", @@ -574,7 +574,7 @@ }, { "date": "2024-01-22", - "entryType": "dinner", + "entryType": "snack", "title": "", "text": "", "recipeId": "55c88810-4cf1-4d86-ae50-63b15fd173fb", diff --git a/tests/components/mealie/snapshots/test_calendar.ambr b/tests/components/mealie/snapshots/test_calendar.ambr index 48f5aaa7d75d8..e97fd583db7c9 100644 --- a/tests/components/mealie/snapshots/test_calendar.ambr +++ b/tests/components/mealie/snapshots/test_calendar.ambr @@ -49,20 +49,6 @@ 'summary': 'Εύκολη μακαρονάδα με κεφτεδάκια στον φούρνο (1)', 'uid': None, }), - dict({ - 'description': 'Delicious Greek turkey meatballs with lemon orzo, tender veggies, and a creamy feta yogurt sauce. These healthy baked Greek turkey meatballs are filled with tons of wonderful herbs and make the perfect protein-packed weeknight meal!', - 'end': dict({ - 'date': '2024-01-24', - }), - 'location': None, - 'recurrence_id': None, - 'rrule': None, - 'start': dict({ - 'date': '2024-01-23', - }), - 'summary': 'Greek Turkey Meatballs with Lemon Orzo & Creamy Feta Yogurt Sauce', - 'uid': None, - }), dict({ 'description': 'This is a modified Pampered Chef recipe. You can use a trifle bowl or large glass punch/salad bowl to show it off. It is really easy to make and I never have any leftovers. Cook time includes chill time.', 'end': dict({ @@ -105,20 +91,6 @@ 'summary': 'All-American Beef Stew Recipe', 'uid': None, }), - dict({ - 'description': 'Einfacher Nudelauflauf mit Brokkoli, Sahnesauce und extra Käse. Dieses vegetarische 5 Zutaten Rezept ist super schnell gemacht und SO gut!', - 'end': dict({ - 'date': '2024-01-23', - }), - 'location': None, - 'recurrence_id': None, - 'rrule': None, - 'start': dict({ - 'date': '2024-01-22', - }), - 'summary': 'Einfacher Nudelauflauf mit Brokkoli', - 'uid': None, - }), dict({ 'description': 'Simple to prepare and ready in 25 minutes, this vegetarian miso noodle recipe can be eaten on its own or served as a side.', 'end': dict({ @@ -133,20 +105,6 @@ 'summary': 'Miso Udon Noodles with Spinach and Tofu', 'uid': None, }), - dict({ - 'description': 'Avis aux nostalgiques des années 1980, la mousse de saumon est de retour dans une présentation adaptée au goût du jour. On utilise une technique sans faille : un saumon frais cuit au micro-ondes et mélangé au robot avec du fromage à la crème et de la crème sure. On obtient ainsi une texture onctueuse à tartiner, qui n’a rien à envier aux préparations gélatineuses d’antan !', - 'end': dict({ - 'date': '2024-01-23', - }), - 'location': None, - 'recurrence_id': None, - 'rrule': None, - 'start': dict({ - 'date': '2024-01-22', - }), - 'summary': 'Mousse de saumon', - 'uid': None, - }), dict({ 'description': 'Dineren met de boys', 'end': dict({ diff --git a/tests/components/mealie/snapshots/test_diagnostics.ambr b/tests/components/mealie/snapshots/test_diagnostics.ambr index d8927a0963f69..42a0eccf13b81 100644 --- a/tests/components/mealie/snapshots/test_diagnostics.ambr +++ b/tests/components/mealie/snapshots/test_diagnostics.ambr @@ -36,6 +36,37 @@ 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', }), ]), + 'dessert': list([ + dict({ + 'description': None, + 'entry_type': 'dessert', + 'group_id': '0bf60b2e-ca89-42a9-94d4-8f67ca72b157', + 'household_id': None, + 'mealplan_date': dict({ + '__type': "", + 'isoformat': '2024-01-23', + }), + 'mealplan_id': 221, + 'recipe': dict({ + 'description': 'Delicious Greek turkey meatballs with lemon orzo, tender veggies, and a creamy feta yogurt sauce. These healthy baked Greek turkey meatballs are filled with tons of wonderful herbs and make the perfect protein-packed weeknight meal!', + 'group_id': '0bf60b2e-ca89-42a9-94d4-8f67ca72b157', + 'household_id': None, + 'image': 'Kn62', + 'name': 'Greek Turkey Meatballs with Lemon Orzo & Creamy Feta Yogurt Sauce', + 'original_url': 'https://www.ambitiouskitchen.com/greek-turkey-meatballs/', + 'perform_time': '20 Minutes', + 'prep_time': '40 Minutes', + 'rating': None, + 'recipe_id': '47595e4c-52bc-441d-b273-3edf4258806d', + 'recipe_yield': '4 servings', + 'slug': 'greek-turkey-meatballs-with-lemon-orzo-creamy-feta-yogurt-sauce', + 'total_time': '1 Hour', + 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', + }), + 'title': None, + 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', + }), + ]), 'dinner': list([ dict({ 'description': None, @@ -95,35 +126,6 @@ 'title': None, 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', }), - dict({ - 'description': None, - 'entry_type': 'dinner', - 'group_id': '0bf60b2e-ca89-42a9-94d4-8f67ca72b157', - 'household_id': None, - 'mealplan_date': dict({ - '__type': "", - 'isoformat': '2024-01-23', - }), - 'mealplan_id': 221, - 'recipe': dict({ - 'description': 'Delicious Greek turkey meatballs with lemon orzo, tender veggies, and a creamy feta yogurt sauce. These healthy baked Greek turkey meatballs are filled with tons of wonderful herbs and make the perfect protein-packed weeknight meal!', - 'group_id': '0bf60b2e-ca89-42a9-94d4-8f67ca72b157', - 'household_id': None, - 'image': 'Kn62', - 'name': 'Greek Turkey Meatballs with Lemon Orzo & Creamy Feta Yogurt Sauce', - 'original_url': 'https://www.ambitiouskitchen.com/greek-turkey-meatballs/', - 'perform_time': '20 Minutes', - 'prep_time': '40 Minutes', - 'rating': None, - 'recipe_id': '47595e4c-52bc-441d-b273-3edf4258806d', - 'recipe_yield': '4 servings', - 'slug': 'greek-turkey-meatballs-with-lemon-orzo-creamy-feta-yogurt-sauce', - 'total_time': '1 Hour', - 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', - }), - 'title': None, - 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', - }), dict({ 'description': None, 'entry_type': 'dinner', @@ -211,35 +213,6 @@ 'title': None, 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', }), - dict({ - 'description': None, - 'entry_type': 'dinner', - 'group_id': '0bf60b2e-ca89-42a9-94d4-8f67ca72b157', - 'household_id': None, - 'mealplan_date': dict({ - '__type': "", - 'isoformat': '2024-01-22', - }), - 'mealplan_id': 211, - 'recipe': dict({ - 'description': 'Einfacher Nudelauflauf mit Brokkoli, Sahnesauce und extra Käse. Dieses vegetarische 5 Zutaten Rezept ist super schnell gemacht und SO gut!', - 'group_id': '0bf60b2e-ca89-42a9-94d4-8f67ca72b157', - 'household_id': None, - 'image': 'nOPT', - 'name': 'Einfacher Nudelauflauf mit Brokkoli', - 'original_url': 'https://kochkarussell.com/einfacher-nudelauflauf-brokkoli/', - 'perform_time': '20 Minutes', - 'prep_time': '15 Minutes', - 'rating': None, - 'recipe_id': '9d553779-607e-471b-acf3-84e6be27b159', - 'recipe_yield': '4 servings', - 'slug': 'einfacher-nudelauflauf-mit-brokkoli', - 'total_time': '35 Minutes', - 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', - }), - 'title': None, - 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', - }), dict({ 'description': None, 'entry_type': 'dinner', @@ -270,48 +243,50 @@ 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', }), dict({ - 'description': None, + 'description': 'Dineren met de boys', 'entry_type': 'dinner', + 'group_id': '3931df86-0679-4579-8c63-4bedc9ca9a85', + 'household_id': None, + 'mealplan_date': dict({ + '__type': "", + 'isoformat': '2024-01-21', + }), + 'mealplan_id': 1, + 'recipe': None, + 'title': 'Aquavite', + 'user_id': '6caa6e4d-521f-4ef4-9ed7-388bdd63f47d', + }), + ]), + 'drink': list([ + dict({ + 'description': None, + 'entry_type': 'drink', 'group_id': '0bf60b2e-ca89-42a9-94d4-8f67ca72b157', 'household_id': None, 'mealplan_date': dict({ '__type': "", 'isoformat': '2024-01-22', }), - 'mealplan_id': 195, + 'mealplan_id': 211, 'recipe': dict({ - 'description': 'Avis aux nostalgiques des années 1980, la mousse de saumon est de retour dans une présentation adaptée au goût du jour. On utilise une technique sans faille : un saumon frais cuit au micro-ondes et mélangé au robot avec du fromage à la crème et de la crème sure. On obtient ainsi une texture onctueuse à tartiner, qui n’a rien à envier aux préparations gélatineuses d’antan !', + 'description': 'Einfacher Nudelauflauf mit Brokkoli, Sahnesauce und extra Käse. Dieses vegetarische 5 Zutaten Rezept ist super schnell gemacht und SO gut!', 'group_id': '0bf60b2e-ca89-42a9-94d4-8f67ca72b157', 'household_id': None, - 'image': 'rrNL', - 'name': 'Mousse de saumon', - 'original_url': 'https://www.ricardocuisine.com/recettes/8919-mousse-de-saumon', - 'perform_time': '2 Minutes', + 'image': 'nOPT', + 'name': 'Einfacher Nudelauflauf mit Brokkoli', + 'original_url': 'https://kochkarussell.com/einfacher-nudelauflauf-brokkoli/', + 'perform_time': '20 Minutes', 'prep_time': '15 Minutes', 'rating': None, - 'recipe_id': '55c88810-4cf1-4d86-ae50-63b15fd173fb', - 'recipe_yield': '12 servings', - 'slug': 'mousse-de-saumon', - 'total_time': '17 Minutes', + 'recipe_id': '9d553779-607e-471b-acf3-84e6be27b159', + 'recipe_yield': '4 servings', + 'slug': 'einfacher-nudelauflauf-mit-brokkoli', + 'total_time': '35 Minutes', 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', }), 'title': None, 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', }), - dict({ - 'description': 'Dineren met de boys', - 'entry_type': 'dinner', - 'group_id': '3931df86-0679-4579-8c63-4bedc9ca9a85', - 'household_id': None, - 'mealplan_date': dict({ - '__type': "", - 'isoformat': '2024-01-21', - }), - 'mealplan_id': 1, - 'recipe': None, - 'title': 'Aquavite', - 'user_id': '6caa6e4d-521f-4ef4-9ed7-388bdd63f47d', - }), ]), 'lunch': list([ dict({ @@ -433,6 +408,37 @@ 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', }), ]), + 'snack': list([ + dict({ + 'description': None, + 'entry_type': 'snack', + 'group_id': '0bf60b2e-ca89-42a9-94d4-8f67ca72b157', + 'household_id': None, + 'mealplan_date': dict({ + '__type': "", + 'isoformat': '2024-01-22', + }), + 'mealplan_id': 195, + 'recipe': dict({ + 'description': 'Avis aux nostalgiques des années 1980, la mousse de saumon est de retour dans une présentation adaptée au goût du jour. On utilise une technique sans faille : un saumon frais cuit au micro-ondes et mélangé au robot avec du fromage à la crème et de la crème sure. On obtient ainsi une texture onctueuse à tartiner, qui n’a rien à envier aux préparations gélatineuses d’antan !', + 'group_id': '0bf60b2e-ca89-42a9-94d4-8f67ca72b157', + 'household_id': None, + 'image': 'rrNL', + 'name': 'Mousse de saumon', + 'original_url': 'https://www.ricardocuisine.com/recettes/8919-mousse-de-saumon', + 'perform_time': '2 Minutes', + 'prep_time': '15 Minutes', + 'rating': None, + 'recipe_id': '55c88810-4cf1-4d86-ae50-63b15fd173fb', + 'recipe_yield': '12 servings', + 'slug': 'mousse-de-saumon', + 'total_time': '17 Minutes', + 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', + }), + 'title': None, + 'user_id': '1ce8b5fe-04e8-4b80-aab1-d92c94685c6d', + }), + ]), }), 'shoppinglist': dict({ '27edbaab-2ec6-441f-8490-0283ea77585f': dict({ diff --git a/tests/components/mealie/snapshots/test_services.ambr b/tests/components/mealie/snapshots/test_services.ambr index 41d03587a5b2b..30f70bc9273ba 100644 --- a/tests/components/mealie/snapshots/test_services.ambr +++ b/tests/components/mealie/snapshots/test_services.ambr @@ -1967,7 +1967,7 @@ }), dict({ 'description': None, - 'entry_type': , + 'entry_type': , 'group_id': '0bf60b2e-ca89-42a9-94d4-8f67ca72b157', 'household_id': None, 'mealplan_date': HAFakeDate(2024, 1, 23), @@ -2123,7 +2123,7 @@ }), dict({ 'description': None, - 'entry_type': , + 'entry_type': , 'group_id': '0bf60b2e-ca89-42a9-94d4-8f67ca72b157', 'household_id': None, 'mealplan_date': HAFakeDate(2024, 1, 22), @@ -2175,7 +2175,7 @@ }), dict({ 'description': None, - 'entry_type': , + 'entry_type': , 'group_id': '0bf60b2e-ca89-42a9-94d4-8f67ca72b157', 'household_id': None, 'mealplan_date': HAFakeDate(2024, 1, 22), From fbd00b56ad93b52c4ffef9186e4aa4cbae2bdfc0 Mon Sep 17 00:00:00 2001 From: Andrew Jackson Date: Sat, 13 Dec 2025 10:52:53 +0000 Subject: [PATCH 2/2] Move to module level definition --- homeassistant/components/mealie/calendar.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/mealie/calendar.py b/homeassistant/components/mealie/calendar.py index b52429fdb2ada..4d5325f235f4d 100644 --- a/homeassistant/components/mealie/calendar.py +++ b/homeassistant/components/mealie/calendar.py @@ -15,6 +15,13 @@ PARALLEL_UPDATES = 0 +SUPPORTED_MEALPLAN_ENTRY_TYPES = [ + MealplanEntryType.BREAKFAST, + MealplanEntryType.DINNER, + MealplanEntryType.LUNCH, + MealplanEntryType.SIDE, +] + async def async_setup_entry( hass: HomeAssistant, @@ -24,16 +31,9 @@ async def async_setup_entry( """Set up the calendar platform for entity.""" coordinator = entry.runtime_data.mealplan_coordinator - supported_mealplan_entry_types = [ - MealplanEntryType.BREAKFAST, - MealplanEntryType.DINNER, - MealplanEntryType.LUNCH, - MealplanEntryType.SIDE, - ] - async_add_entities( MealieMealplanCalendarEntity(coordinator, entry_type) - for entry_type in supported_mealplan_entry_types + for entry_type in SUPPORTED_MEALPLAN_ENTRY_TYPES )