# ~*~ coding: utf-8 ~*~ from __future__ import unicode_literals import time import json from datetime import datetime from django.conf import settings from django.views.generic import ListView, DetailView, View from django.utils import timezone from django.shortcuts import redirect, reverse from .models import Playbook from ops.tasks import rerun_task class TaskListView(ListView): paginate_by = settings.CONFIG.DISPLAY_PER_PAGE model = Playbook ordering = ('-date_start',) context_object_name = 'task_list' template_name = 'ops/task_list.html' date_format = '%m/%d/%Y' keyword = date_from_s = date_to_s = '' def get_queryset(self): date_now = timezone.localtime(timezone.now()) date_to_default = date_now.strftime(self.date_format) date_from_default = (date_now - timezone.timedelta(7)) \ .strftime(self.date_format) self.queryset = super(TaskListView, self).get_queryset() self.keyword = self.request.GET.get('keyword', '') self.date_from_s = self.request.GET.get('date_from', date_from_default) self.date_to_s = self.request.GET.get('date_to', date_to_default) if self.date_from_s: date_from = datetime.strptime(self.date_from_s, self.date_format) date_from = date_from.replace(tzinfo=timezone.get_current_timezone()) self.queryset = self.queryset.filter(date_start__gt=date_from) if self.date_to_s: date_to = timezone.datetime.strptime( self.date_to_s + ' 23:59:59', '%m/%d/%Y %H:%M:%S') date_to = date_to.replace(tzinfo=timezone.get_current_timezone()) self.queryset = self.queryset.filter(date_finished__lt=date_to) if self.keyword: self.queryset = self.queryset.filter( name__icontains=self.keyword, ) return self.queryset def get_context_data(self, **kwargs): context = { 'app': 'Ops', 'action': 'Playbook record list', 'date_from': self.date_from_s, 'date_to': self.date_to_s, 'keyword': self.keyword, } kwargs.update(context) return super(TaskListView, self).get_context_data(**kwargs) class TaskDetailView(DetailView): model = Playbook template_name = 'ops/task_detail.html' def get_context_data(self, **kwargs): context = { 'app': 'Ops', 'action': 'Playbook record detail', 'results': json.loads(self.object.summary or '{}'), } kwargs.update(context) return super(TaskDetailView, self).get_context_data(**kwargs) class TaskRunView(View): pk_url_kwarg = 'pk' def get(self, request, *args, **kwargs): pk = kwargs.get(self.pk_url_kwarg) rerun_task.delay(pk) time.sleep(0.5) return redirect(reverse('ops:task-detail', kwargs={'pk': pk}))