mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2025-12-24 02:39:20 -05:00
Make HomeAssistant description field optional
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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',)
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user