make the connectors form be able to display all types for connectors

This commit is contained in:
Mikhail Epifanov
2024-01-14 16:59:54 +01:00
parent fb65100b14
commit 245787b89e
14 changed files with 302 additions and 93 deletions

View File

@@ -9,7 +9,7 @@ from django.views.generic import DeleteView
from cookbook.helper.permission_helper import GroupRequiredMixin, OwnerRequiredMixin, group_required
from cookbook.models import (Comment, InviteLink, MealPlan, Recipe, RecipeBook, RecipeBookEntry,
RecipeImport, Space, Storage, Sync, UserSpace, HomeAssistantConfig)
RecipeImport, Space, Storage, Sync, UserSpace, HomeAssistantConfig, ExampleConfig)
from cookbook.provider.dropbox import Dropbox
from cookbook.provider.local import Local
from cookbook.provider.nextcloud import Nextcloud
@@ -126,23 +126,24 @@ class HomeAssistantConfigDelete(GroupRequiredMixin, DeleteView):
groups_required = ['admin']
template_name = "generic/delete_template.html"
model = HomeAssistantConfig
success_url = reverse_lazy('list_storage')
success_url = reverse_lazy('list_connectors')
def get_context_data(self, **kwargs):
context = super(HomeAssistantConfigDelete, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context['title'] = _("HomeAssistant Config Backend")
return context
def post(self, request, *args, **kwargs):
try:
return self.delete(request, *args, **kwargs)
except ProtectedError:
messages.add_message(
request,
messages.WARNING,
_('Could not delete this storage backend as it is used in at least one monitor.') # noqa: E501
)
return HttpResponseRedirect(reverse('list_storage'))
class ExampleConfigDelete(GroupRequiredMixin, DeleteView):
groups_required = ['admin']
template_name = "generic/delete_template.html"
model = ExampleConfig
success_url = reverse_lazy('list_connectors')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = _("Example Config Backend")
return context
class CommentDelete(OwnerRequiredMixin, DeleteView):

View File

@@ -9,10 +9,10 @@ from django.utils.translation import gettext as _
from django.views.generic import UpdateView
from django.views.generic.edit import FormMixin
from cookbook.forms import CommentForm, ExternalRecipeForm, StorageForm, SyncForm, HomeAssistantConfigForm
from cookbook.forms import CommentForm, ExternalRecipeForm, StorageForm, SyncForm, HomeAssistantConfigForm, ExampleConfigForm
from cookbook.helper.permission_helper import (GroupRequiredMixin, OwnerRequiredMixin,
above_space_limit, group_required)
from cookbook.models import Comment, Recipe, RecipeImport, Storage, Sync, HomeAssistantConfig
from cookbook.models import Comment, Recipe, RecipeImport, Storage, Sync, HomeAssistantConfig, ExampleConfig
from cookbook.provider.dropbox import Dropbox
from cookbook.provider.local import Local
from cookbook.provider.nextcloud import Nextcloud
@@ -128,46 +128,49 @@ def edit_storage(request, pk):
)
@group_required('admin')
def edit_home_assistant_config(request, pk):
instance: HomeAssistantConfig = get_object_or_404(HomeAssistantConfig, pk=pk, space=request.space)
class HomeAssistantConfigUpdate(GroupRequiredMixin, UpdateView):
groups_required = ['admin']
template_name = "generic/edit_template.html"
model = HomeAssistantConfig
form_class = HomeAssistantConfigForm
if not (instance.created_by == request.user or request.user.is_superuser):
messages.add_message(request, messages.ERROR, _('You cannot edit this homeassistant config!'))
return HttpResponseRedirect(reverse('edit_home_assistant_config'))
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['initial']['update_token'] = VALUE_NOT_CHANGED
return kwargs
if request.space.demo or settings.HOSTED:
messages.add_message(request, messages.ERROR, _('This feature is not yet available in the hosted version of tandoor!'))
return redirect('index')
def form_valid(self, form):
if form.cleaned_data['update_token'] != VALUE_NOT_CHANGED and form.cleaned_data['update_token'] != "":
form.instance.token = form.cleaned_data['update_token']
messages.add_message(self.request, messages.SUCCESS, _('Config saved!'))
return super(HomeAssistantConfigUpdate, self).form_valid(form)
if request.method == "POST":
form = HomeAssistantConfigForm(request.POST, instance=copy.deepcopy(instance))
if form.is_valid():
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']
def get_success_url(self):
return reverse('edit_home_assistant_config', kwargs={'pk': self.object.pk})
if form.cleaned_data['token'] != VALUE_NOT_CHANGED:
instance.token = form.cleaned_data['token']
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = _("HomeAssistantConfig")
return context
instance.save()
messages.add_message(request, messages.SUCCESS, _('HomeAssistant config saved!'))
else:
messages.add_message(request, messages.ERROR, _('There was an error updating this config!'))
else:
instance.token = VALUE_NOT_CHANGED
form = HomeAssistantConfigForm(instance=instance)
class ExampleConfigUpdate(GroupRequiredMixin, UpdateView):
groups_required = ['admin']
template_name = "generic/edit_template.html"
model = ExampleConfig
form_class = ExampleConfigForm
return render(
request,
'generic/edit_template.html',
{'form': form, 'title': _('HomeAssistantConfig')}
)
def form_valid(self, form):
messages.add_message(self.request, messages.SUCCESS, _('Config saved!'))
return super().form_valid(form)
def get_success_url(self):
return reverse('edit_example_config', kwargs={'pk': self.object.pk})
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = _("ExampleConfig")
return context
class CommentUpdate(OwnerRequiredMixin, UpdateView):

View File

@@ -6,8 +6,8 @@ from django.utils.translation import gettext as _
from django_tables2 import RequestConfig
from cookbook.helper.permission_helper import group_required
from cookbook.models import InviteLink, RecipeImport, Storage, SyncLog, UserFile, HomeAssistantConfig
from cookbook.tables import ImportLogTable, InviteLinkTable, RecipeImportTable, StorageTable, HomeAssistantConfigTable
from cookbook.models import InviteLink, RecipeImport, Storage, SyncLog, UserFile
from cookbook.tables import ImportLogTable, InviteLinkTable, RecipeImportTable, StorageTable
@group_required('admin')
@@ -65,19 +65,6 @@ def storage(request):
)
@group_required('admin')
def home_assistant_config(request):
table = HomeAssistantConfigTable(HomeAssistantConfig.objects.filter(space=request.space).all())
RequestConfig(request, paginate={'per_page': 25}).configure(table)
return render(
request, 'generic/list_template.html', {
'title': _("HomeAssistant Config Backend"),
'table': table,
'create_url': 'new_home_assistant_config'
})
@group_required('admin')
def invite_link(request):
table = InviteLinkTable(

View File

@@ -5,9 +5,9 @@ from django.urls import reverse, reverse_lazy
from django.utils.translation import gettext as _
from django.views.generic import CreateView
from cookbook.forms import ImportRecipeForm, Storage, StorageForm, HomeAssistantConfigForm
from cookbook.forms import ImportRecipeForm, Storage, StorageForm, HomeAssistantConfigForm, ExampleConfigForm
from cookbook.helper.permission_helper import GroupRequiredMixin, above_space_limit, group_required
from cookbook.models import Recipe, RecipeImport, ShareLink, Step, HomeAssistantConfig
from cookbook.models import Recipe, RecipeImport, ShareLink, Step, HomeAssistantConfig, ExampleConfig
from recipes import settings
@@ -77,6 +77,40 @@ class HomeAssistantConfigCreate(GroupRequiredMixin, CreateView):
form_class = HomeAssistantConfigForm
success_url = reverse_lazy('list_home_assistant_config')
def get_form_class(self):
form_class = super().get_form_class()
if self.request.method == 'GET':
update_token_field = form_class.base_fields['update_token']
update_token_field.required = True
return form_class
def form_valid(self, form):
if self.request.space.demo or settings.HOSTED:
messages.add_message(self.request, messages.ERROR, _('This feature is not yet available in the hosted version of tandoor!'))
return redirect('index')
obj = form.save(commit=False)
obj.token = form.cleaned_data['update_token']
obj.created_by = self.request.user
obj.space = self.request.space
obj.save()
return HttpResponseRedirect(reverse('edit_home_assistant_config', kwargs={'pk': obj.pk}))
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = _("HomeAssistant Config Backend")
return context
class ExampleConfigCreate(GroupRequiredMixin, CreateView):
groups_required = ['admin']
template_name = "generic/new_template.html"
model = ExampleConfig
form_class = ExampleConfigForm
success_url = reverse_lazy('list_connectors')
def form_valid(self, form):
if self.request.space.demo or settings.HOSTED:
messages.add_message(self.request, messages.ERROR, _('This feature is not yet available in the hosted version of tandoor!'))
@@ -86,11 +120,11 @@ class HomeAssistantConfigCreate(GroupRequiredMixin, CreateView):
obj.created_by = self.request.user
obj.space = self.request.space
obj.save()
return HttpResponseRedirect(reverse('edit_home_assistant_config', kwargs={'pk': obj.pk}))
return HttpResponseRedirect(reverse('edit_example_config', kwargs={'pk': obj.pk}))
def get_context_data(self, **kwargs):
context = super(HomeAssistantConfigCreate, self).get_context_data(**kwargs)
context['title'] = _("HomeAssistant Config Backend")
context = super().get_context_data(**kwargs)
context['title'] = _("Example Config Backend")
return context