add an config toggle for external connectors
This commit is contained in:
parent
d576394c99
commit
445e64c71e
@ -1,6 +1,7 @@
|
||||
import asyncio
|
||||
import logging
|
||||
import multiprocessing
|
||||
import queue
|
||||
from asyncio import Task
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum
|
||||
@ -55,7 +56,10 @@ class ConnectorManager:
|
||||
else:
|
||||
return
|
||||
|
||||
self._queue.put_nowait(Payload(instance, action_type))
|
||||
try:
|
||||
self._queue.put_nowait(Payload(instance, action_type))
|
||||
except queue.Full:
|
||||
return
|
||||
|
||||
def stop(self):
|
||||
self._queue.close()
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Generated by Django 4.2.7 on 2024-01-11 22:06
|
||||
# Generated by Django 4.2.7 on 2024-01-12 21:01
|
||||
|
||||
import cookbook.models
|
||||
from django.conf import settings
|
||||
@ -20,16 +20,19 @@ class Migration(migrations.Migration):
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=128, validators=[django.core.validators.MinLengthValidator(1)])),
|
||||
('enabled', models.BooleanField(default=True, help_text='Is Connector Enabled')),
|
||||
('on_shopping_list_entry_created_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)),
|
||||
('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')),
|
||||
('created_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
|
||||
('space', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cookbook.space')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
bases=(models.Model, cookbook.models.PermissionModelMixin),
|
||||
),
|
||||
]
|
||||
|
@ -366,24 +366,28 @@ class Space(ExportModelOperationsMixin('space'), models.Model):
|
||||
return self.name
|
||||
|
||||
|
||||
class HomeAssistantConfig(models.Model, PermissionModelMixin):
|
||||
class ConnectorConfig(models.Model, PermissionModelMixin):
|
||||
name = models.CharField(max_length=128, validators=[MinLengthValidator(1)])
|
||||
|
||||
url = models.URLField(blank=True)
|
||||
token = models.CharField(max_length=512, blank=True)
|
||||
|
||||
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")
|
||||
enabled = models.BooleanField(default=True, help_text="Is Connector Enabled")
|
||||
on_shopping_list_entry_created_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)
|
||||
|
||||
created_by = models.ForeignKey(User, on_delete=models.PROTECT)
|
||||
|
||||
space = models.ForeignKey(Space, on_delete=models.CASCADE)
|
||||
objects = ScopedManager(space='space')
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
class HomeAssistantConfig(ConnectorConfig):
|
||||
url = models.URLField(blank=True)
|
||||
token = models.CharField(max_length=512, blank=True)
|
||||
todo_entity = models.CharField(max_length=128, default='todo.shopping_list')
|
||||
|
||||
|
||||
class UserPreference(models.Model, PermissionModelMixin):
|
||||
# Themes
|
||||
|
@ -15,6 +15,7 @@ from cookbook.helper.shopping_helper import RecipeShoppingEditor
|
||||
from cookbook.managers import DICTIONARY
|
||||
from cookbook.models import (Food, MealPlan, PropertyType, Recipe, SearchFields, SearchPreference,
|
||||
Step, Unit, UserPreference)
|
||||
from recipes.settings import ENABLE_EXTERNAL_CONNECTORS
|
||||
|
||||
SQLITE = True
|
||||
if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.postgresql':
|
||||
@ -164,6 +165,7 @@ def clear_property_type_cache(sender, instance=None, created=False, **kwargs):
|
||||
caches['default'].delete(CacheHelper(instance.space).PROPERTY_TYPE_CACHE_KEY)
|
||||
|
||||
|
||||
handler = ConnectorManager()
|
||||
post_save.connect(handler, dispatch_uid="connector_manager")
|
||||
post_delete.connect(handler, dispatch_uid="connector_manager")
|
||||
if ENABLE_EXTERNAL_CONNECTORS:
|
||||
handler = ConnectorManager()
|
||||
post_save.connect(handler, dispatch_uid="connector_manager")
|
||||
post_delete.connect(handler, dispatch_uid="connector_manager")
|
||||
|
@ -335,6 +335,10 @@
|
||||
<a class="dropdown-item" href="{% url 'view_space_manage' request.space.pk %}"><i
|
||||
class="fas fa-server fa-fw"></i> {% trans 'Space Settings' %}</a>
|
||||
{% endif %}
|
||||
{% if request.user == request.space.created_by or user.is_superuser %}
|
||||
<a class="dropdown-item" href="{% url 'list_home_assistant_config' %}"><i
|
||||
class="fas fa-sync-alt fa-fw"></i> {% trans 'External Connectors' %}</a>
|
||||
{% endif %}
|
||||
{% if user.is_superuser %}
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="{% url 'view_system' %}"><i
|
||||
|
@ -554,4 +554,6 @@ DEFAULT_FROM_EMAIL = os.getenv('DEFAULT_FROM_EMAIL', 'webmaster@localhost')
|
||||
ACCOUNT_EMAIL_SUBJECT_PREFIX = os.getenv(
|
||||
'ACCOUNT_EMAIL_SUBJECT_PREFIX', '[Tandoor Recipes] ') # allauth sender prefix
|
||||
|
||||
ENABLE_EXTERNAL_CONNECTORS = bool(int(os.getenv('ENABLE_EXTERNAL_CONNECTORS', False)))
|
||||
|
||||
mimetypes.add_type("text/javascript", ".js", True)
|
||||
|
Loading…
Reference in New Issue
Block a user