Make HomeAssistant description field optional

This commit is contained in:
Eugene Howe
2024-09-15 10:44:30 -04:00
parent 41ee8cf66f
commit eb0a95f594
6 changed files with 43 additions and 4 deletions

View File

@@ -43,13 +43,15 @@ class HomeAssistant(Connector):
data = { data = {
"entity_id": self._config.todo_entity, "entity_id": self._config.todo_entity,
"item": item, "item": item,
"description": description,
} }
if self._config.supports_description_field:
data["description"] = description
try: try:
await self.homeassistant_api_call("POST", "services/todo/add_item", data) await self.homeassistant_api_call("POST", "services/todo/add_item", data)
except ClientError as err: except ClientError as err:
self._logger.warning(f"received an exception from the api: {err=}, {type(err)=}") self._logger.warning(f"received an exception from the api: {err=}, {type(err)=} {data=}")
async def on_shopping_list_entry_updated(self, space: Space, shopping_list_entry: ShoppingListEntry) -> None: async def on_shopping_list_entry_updated(self, space: Space, shopping_list_entry: ShoppingListEntry) -> None:
if not self._config.on_shopping_list_entry_updated_enabled: if not self._config.on_shopping_list_entry_updated_enabled:

View File

@@ -182,6 +182,12 @@ class ConnectorConfigForm(forms.ModelForm):
required=False, required=False,
) )
supports_description_field = forms.BooleanField(
help_text="Does the connector todo entity support the description field",
initial=True,
required=False,
)
update_token = forms.CharField( update_token = forms.CharField(
widget=forms.TextInput(attrs={'autocomplete': 'update-token', 'type': 'password'}), widget=forms.TextInput(attrs={'autocomplete': 'update-token', 'type': 'password'}),
required=False, required=False,
@@ -198,7 +204,7 @@ class ConnectorConfigForm(forms.ModelForm):
fields = ( fields = (
'name', 'type', 'enabled', 'on_shopping_list_entry_created_enabled', 'on_shopping_list_entry_updated_enabled', 'name', 'type', 'enabled', 'on_shopping_list_entry_created_enabled', 'on_shopping_list_entry_updated_enabled',
'on_shopping_list_entry_deleted_enabled', 'url', 'todo_entity', 'on_shopping_list_entry_deleted_enabled', 'supports_description_field', 'url', 'todo_entity',
) )
help_texts = { help_texts = {

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.2.15 on 2024-09-15 10:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('cookbook', '0218_alter_mealplan_from_date_alter_mealplan_to_date'),
]
operations = [
migrations.AddField(
model_name='connectorconfig',
name='supports_description_field',
field=models.BooleanField(default=True, help_text='Does the todo entity support the description field'),
),
]

View File

@@ -406,6 +406,7 @@ class ConnectorConfig(models.Model, PermissionModelMixin):
on_shopping_list_entry_created_enabled = models.BooleanField(default=False) on_shopping_list_entry_created_enabled = models.BooleanField(default=False)
on_shopping_list_entry_updated_enabled = models.BooleanField(default=False) on_shopping_list_entry_updated_enabled = models.BooleanField(default=False)
on_shopping_list_entry_deleted_enabled = models.BooleanField(default=False) on_shopping_list_entry_deleted_enabled = models.BooleanField(default=False)
supports_description_field = models.BooleanField(default=True, help_text="Does the todo entity support the description field")
url = models.URLField(blank=True, null=True) url = models.URLField(blank=True, null=True)
token = models.CharField(max_length=512, blank=True, null=True) token = models.CharField(max_length=512, blank=True, null=True)

View File

@@ -427,7 +427,7 @@ class ConnectorConfigConfigSerializer(SpacedModelSerializer):
fields = ( fields = (
'id', 'name', 'url', 'token', 'todo_entity', 'enabled', 'id', 'name', 'url', 'token', 'todo_entity', 'enabled',
'on_shopping_list_entry_created_enabled', 'on_shopping_list_entry_updated_enabled', 'on_shopping_list_entry_created_enabled', 'on_shopping_list_entry_updated_enabled',
'on_shopping_list_entry_deleted_enabled', 'created_by' 'on_shopping_list_entry_deleted_enabled', 'supports_description_field', 'created_by'
) )
read_only_fields = ('created_by',) read_only_fields = ('created_by',)

View File

@@ -99,11 +99,23 @@ def test_add(arg, request, a1_s2, obj_1):
assert r.status_code == arg[1] assert r.status_code == arg[1]
if r.status_code == 201: if r.status_code == 201:
assert response['name'] == 'test' assert response['name'] == 'test'
assert response['supports_description_field'] == True
r = c.get(reverse(DETAIL_URL, args={response['id']})) r = c.get(reverse(DETAIL_URL, args={response['id']}))
assert r.status_code == 200 assert r.status_code == 200
r = a1_s2.get(reverse(DETAIL_URL, args={response['id']})) r = a1_s2.get(reverse(DETAIL_URL, args={response['id']}))
assert r.status_code == 404 assert r.status_code == 404
def test_add_with_supports_description_field_false(a1_s2):
r = a1_s2.post(
reverse(LIST_URL),
{'name': 'test', 'url': 'http://localhost:8123/api', 'token': '1234', 'enabled': 'true', 'supports_description_field': 'false'},
content_type='application/json'
)
response = json.loads(r.content)
print(r.content)
assert r.status_code == 201
assert response['name'] == 'test'
assert response['supports_description_field'] == False
def test_delete(a1_s1, a1_s2, obj_1): def test_delete(a1_s1, a1_s2, obj_1):
r = a1_s2.delete( r = a1_s2.delete(