from django.contrib import messages from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.contenttypes.models import ContentType from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404, redirect from django.views import View from django.views.generic import ListView from django.views.generic.detail import SingleObjectMixin from cabinet.utils import CabinetViewMixin from feeds.models import Feed from feeds.modules import * from feeds.tasks import execute_feed from feeds.utils import BaseFeedConfigView class FeedListView(CabinetViewMixin, ListView): template_name = 'cabinet/feeds/feed_list.html' title = 'Feed list' sidebar_section = 'feeds' def get_queryset(self): return Feed.objects.filter(owner=self.request.user) def get_context_data(self, *args, **kwargs): ctx = super(FeedListView, self).get_context_data(*args, **kwargs) ctx['feed_modules'] = FEED_MODULES return ctx class FeedConfigEditView(BaseFeedConfigView, SingleObjectMixin): title = 'Configure feed' sidebar_section = 'feeds' def form_valid(self, feed_form, config_form): feed = feed_form.save() config_form.save() if 'run' in self.request.POST: execute_feed.apply_async(args=(feed.pk,), shadow=str(feed)) else: messages.success(self.request, 'Config was successfully saved') return HttpResponseRedirect('') def get_content_type(self): return self.get_object().config_type class FeedConfigCreateView(BaseFeedConfigView): title = 'Create feed' sidebar_section = 'feeds' def get_object(self): return None def form_valid(self, feed_form, config_form): config_form.save() feed_form.instance.owner = self.request.user feed_form.instance.config_type = self.get_content_type() feed_form.instance.config_id = config_form.instance.pk feed_form.save() messages.success(self.request, 'Config was successfully saved') return redirect('cabinet:feeds:edit', pk=feed_form.instance.pk) def get_content_type(self): return get_object_or_404(ContentType, model=self.kwargs['content_type']) class FeedConfigDeleteView(LoginRequiredMixin, SingleObjectMixin, View): def get_queryset(self): return Feed.objects.filter(owner=self.request.user) def post(self, request, *args, **kwargs): feed = self.get_object() messages.success(self.request, 'Feed "{}" was successfully deleted'.format(feed.title)) feed.delete() return redirect('cabinet:feeds:index')