from django.contrib import messages from django.contrib.auth.mixins import LoginRequiredMixin from django.shortcuts import redirect from django.views import View from django.views.generic import ListView, UpdateView, CreateView from django.views.generic.detail import SingleObjectMixin from aggregator.forms import AggregationSourceForm, AggregationSourceEditForm from aggregator.models import AggregationSource from cabinet.utils import CabinetViewMixin class AggregationSourceListView(CabinetViewMixin, ListView): template_name = 'cabinet/aggregator/source_list.html' title = 'Aggregation source list' sidebar_section = 'aggregator' def get_queryset(self): return AggregationSource.objects.filter(owner=self.request.user) class AggregationSourceCreateView(CabinetViewMixin, CreateView): template_name = 'cabinet/aggregator/source_form.html' title = 'Create aggregation source' sidebar_section = 'aggregator' form_class = AggregationSourceForm def form_valid(self, form): form.instance.owner = self.request.user form.instance.chat_id = form.cleaned_data['chat_id'] form.save() return redirect('cabinet:aggregator:edit', pk=form.instance.pk) class AggregationSourceUpdateView(CabinetViewMixin, UpdateView): template_name = 'cabinet/aggregator/source_form.html' title = 'Configure aggregation source' sidebar_section = 'aggregator' form_class = AggregationSourceEditForm context_object_name = 'source' def get_queryset(self): return AggregationSource.objects.filter(owner=self.request.user) def form_valid(self, form): if 'chat_id' in form.cleaned_data: form.instance.chat_id = form.cleaned_data['chat_id'] form.save() return redirect('cabinet:aggregator:edit', pk=form.instance.pk) class AggregationSourceDeleteView(LoginRequiredMixin, SingleObjectMixin, View): def get_queryset(self): return AggregationSource.objects.filter(owner=self.request.user) def post(self, request, *args, **kwargs): source = self.get_object() messages.success(self.request, 'Source "{}" was successfully deleted'.format(source.title)) source.delete() return redirect('cabinet:aggregator:index')