You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.6 KiB

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')