diff --git a/cookbook/admin.py b/cookbook/admin.py index 4a2b2697..3429e63d 100644 --- a/cookbook/admin.py +++ b/cookbook/admin.py @@ -96,8 +96,8 @@ admin.site.register(Storage, StorageAdmin) class HomeAssistantConfigAdmin(admin.ModelAdmin): - list_display = ('name',) - search_fields = ('name',) + list_display = ('id', 'name', 'enabled', 'url') + search_fields = ('name', 'url') admin.site.register(HomeAssistantConfig, HomeAssistantConfigAdmin) diff --git a/cookbook/connectors/connector.py b/cookbook/connectors/connector.py index f97905b9..76699e09 100644 --- a/cookbook/connectors/connector.py +++ b/cookbook/connectors/connector.py @@ -16,4 +16,5 @@ class Connector(ABC): async def on_shopping_list_entry_deleted(self, space: Space, instance: ShoppingListEntry) -> None: pass + # TODO: Maybe add an 'IsEnabled(self) -> Bool' to here # TODO: Add Recipes & possibly Meal Place listeners/hooks (And maybe more?) diff --git a/cookbook/connectors/connector_manager.py b/cookbook/connectors/connector_manager.py index 93fa637d..8a50f90b 100644 --- a/cookbook/connectors/connector_manager.py +++ b/cookbook/connectors/connector_manager.py @@ -35,7 +35,7 @@ class ConnectorManager: connectors: List[Connector] = self._connectors[space.name] else: with scope(space=space): - connectors: List[Connector] = [HomeAssistant(config) for config in space.homeassistantconfig_set.all()] + connectors: List[Connector] = [HomeAssistant(config) for config in space.homeassistantconfig_set.all() if config.enabled] self._connectors[space.name] = connectors if len(connectors) == 0 or purge_connector_cache: diff --git a/cookbook/forms.py b/cookbook/forms.py index 76d4a17f..dce4da57 100644 --- a/cookbook/forms.py +++ b/cookbook/forms.py @@ -202,6 +202,11 @@ class HomeAssistantConfigForm(forms.ModelForm): help_text=_('Something like http://homeassistant.local:8123/api'), ) + enabled = forms.BooleanField( + help_text="Is the HomeAssistantConnector enabled", + required=False, + ) + on_shopping_list_entry_created_enabled = forms.BooleanField( help_text="Enable syncing ShoppingListEntry to Homeassistant Todo List -- Warning: Might have negative performance impact", required=False, @@ -220,7 +225,8 @@ class HomeAssistantConfigForm(forms.ModelForm): class Meta: model = HomeAssistantConfig fields = ( - 'name', 'url', 'token', 'todo_entity', 'on_shopping_list_entry_created_enabled', 'on_shopping_list_entry_updated_enabled', 'on_shopping_list_entry_deleted_enabled') + 'name', 'url', 'token', 'todo_entity', 'enabled', 'on_shopping_list_entry_created_enabled', 'on_shopping_list_entry_updated_enabled', + 'on_shopping_list_entry_deleted_enabled') help_texts = { 'url': _('http://homeassistant.local:8123/api for example'), diff --git a/cookbook/migrations/0208_homeassistantconfig.py b/cookbook/migrations/0208_homeassistantconfig.py index 6eca066f..a7140b34 100644 --- a/cookbook/migrations/0208_homeassistantconfig.py +++ b/cookbook/migrations/0208_homeassistantconfig.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.7 on 2024-01-11 21:34 +# Generated by Django 4.2.7 on 2024-01-11 22:06 import cookbook.models from django.conf import settings @@ -23,6 +23,7 @@ class Migration(migrations.Migration): ('url', models.URLField(blank=True)), ('token', models.CharField(blank=True, max_length=512)), ('todo_entity', models.CharField(default='todo.shopping_list', max_length=128)), + ('enabled', models.BooleanField(default=True, help_text='Is HomeAssistant Connector Enabled')), ('on_shopping_list_entry_created_enabled', models.BooleanField(default=False, help_text='Enable syncing ShoppingListEntry to Homeassistant Todo List')), ('on_shopping_list_entry_updated_enabled', models.BooleanField(default=False, help_text='PLACEHOLDER')), ('on_shopping_list_entry_deleted_enabled', models.BooleanField(default=False, help_text='Enable syncing ShoppingListEntry deletion to Homeassistant Todo List')), diff --git a/cookbook/models.py b/cookbook/models.py index bb9eb716..d6cf5078 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -374,6 +374,7 @@ class HomeAssistantConfig(models.Model, PermissionModelMixin): todo_entity = models.CharField(max_length=128, default='todo.shopping_list') + enabled = models.BooleanField(default=True, help_text="Is HomeAssistant Connector Enabled") on_shopping_list_entry_created_enabled = models.BooleanField(default=False, help_text="Enable syncing ShoppingListEntry to Homeassistant Todo List") on_shopping_list_entry_updated_enabled = models.BooleanField(default=False, help_text="PLACEHOLDER") on_shopping_list_entry_deleted_enabled = models.BooleanField(default=False, help_text="Enable syncing ShoppingListEntry deletion to Homeassistant Todo List") diff --git a/cookbook/serializer.py b/cookbook/serializer.py index 8e338c17..53fc8eeb 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -422,7 +422,7 @@ class HomeAssistantConfigSerializer(SpacedModelSerializer): class Meta: model = HomeAssistantConfig fields = ( - 'id', 'name', 'url', 'token', 'todo_entity', + 'id', 'name', 'url', 'token', 'todo_entity', 'enabled', 'on_shopping_list_entry_created_enabled', 'on_shopping_list_entry_updated_enabled', 'on_shopping_list_entry_deleted_enabled', 'created_by' ) diff --git a/cookbook/tables.py b/cookbook/tables.py index 8ffe2a53..4f49690c 100644 --- a/cookbook/tables.py +++ b/cookbook/tables.py @@ -21,7 +21,7 @@ class HomeAssistantConfigTable(tables.Table): class Meta: model = HomeAssistantConfig template_name = 'generic/table_template.html' - fields = ('id', 'name', 'url') + fields = ('id', 'name', 'enabled', 'url') class ImportLogTable(tables.Table): diff --git a/cookbook/views/edit.py b/cookbook/views/edit.py index ce4aac27..deb9654b 100644 --- a/cookbook/views/edit.py +++ b/cookbook/views/edit.py @@ -146,6 +146,7 @@ def edit_home_assistant_config(request, pk): instance.name = form.cleaned_data['name'] instance.url = form.cleaned_data['url'] instance.todo_entity = form.cleaned_data['todo_entity'] + instance.enabled = form.cleaned_data['enabled'] instance.on_shopping_list_entry_created_enabled = form.cleaned_data['on_shopping_list_entry_created_enabled'] instance.on_shopping_list_entry_updated_enabled = form.cleaned_data['on_shopping_list_entry_updated_enabled'] instance.on_shopping_list_entry_deleted_enabled = form.cleaned_data['on_shopping_list_entry_deleted_enabled'] diff --git a/requirements.txt b/requirements.txt index 9cf4efdf..0611ea42 100644 --- a/requirements.txt +++ b/requirements.txt @@ -46,3 +46,4 @@ pytest-factoryboy==2.5.1 pyppeteer==1.0.2 validators==0.20.0 pytube==15.0.0 +homeassistant-api==4.1.1.post2