passerelle/passerelle/base/views.py

191 lines
6.5 KiB
Python

from django.contrib.contenttypes.models import ContentType
from django.core.urlresolvers import reverse
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
from django.forms import models as model_forms
from django.views.generic import *
from django.http import Http404
from .models import ApiUser, AccessRight, LoggingParameters, AvailabilityParameters, ResourceStatus
from .forms import ApiUserForm, AccessRightForm
from ..utils import get_trusted_services
class ResourceView(DetailView):
template_name = 'passerelle/base/view.html'
def get_object(self, queryset=None):
try:
obj = self.model.objects.get_subclass(slug=self.kwargs['slug'])
except ObjectDoesNotExist:
raise Http404
if obj.is_accessible_by(self.request):
return obj
raise PermissionDenied
def get_context_data(self, slug=None, **kwargs):
context = super(ResourceView, self).get_context_data(**kwargs)
context['site_base_uri'] = '%s://%s' % (
'https' if self.request.is_secure() else 'http',
self.request.get_host())
context['absolute_uri'] = '%s%s' % (
context['site_base_uri'],
self.request.path)
return context
class ApiUserCreateView(CreateView):
model = ApiUser
form_class = ApiUserForm
template_name = 'passerelle/manage/apiuser_form.html'
def get_success_url(self):
return reverse('apiuser-list')
class ApiUserUpdateView(UpdateView):
model = ApiUser
form_class = ApiUserForm
template_name = 'passerelle/manage/apiuser_form.html'
def get_success_url(self):
return reverse('apiuser-list')
class ApiUserDeleteView(DeleteView):
model = ApiUser
template_name = 'passerelle/manage/apiuser_confirm_delete.html'
def get_success_url(self):
return reverse('apiuser-list')
class ApiUserListView(ListView):
model = ApiUser
template_name = 'passerelle/manage/apiuser_list.html'
paginate_by = 25
def get_context_data(self, slug=None, **kwargs):
context = super(ApiUserListView, self).get_context_data(**kwargs)
context['trusted_services'] = get_trusted_services()
return context
class AccessRightDeleteView(DeleteView):
model = AccessRight
template_name = 'passerelle/manage/accessright_confirm_delete.html'
def get_object(self):
object = super(AccessRightDeleteView, self).get_object()
self.resource = object.resource
return object
def get_success_url(self):
return self.resource.get_absolute_url()
class AccessRightCreateView(CreateView):
model = AccessRight
form_class = AccessRightForm
template_name = 'passerelle/manage/accessright_form.html'
def get_initial(self):
d = self.initial.copy()
d['codename'] = self.kwargs.get('codename')
d['resource_type'] = self.kwargs.get('resource_type')
d['resource_pk'] = self.kwargs.get('resource_pk')
return d
def get_success_url(self):
return self.object.resource.get_absolute_url()
class LoggingParametersUpdateView(FormView):
template_name = 'passerelle/manage/logging_parameters_form.html'
def get_context_data(self, **kwargs):
context = super(LoggingParametersUpdateView, self).get_context_data(**kwargs)
context['connector'] = self.get_resource()
return context
def get_form_class(self):
form_class = model_forms.modelform_factory(
LoggingParameters,
fields=['log_level', 'trace_emails'])
form_class.base_fields['trace_emails'].widget.attrs['rows'] = '3'
return form_class
def get_initial(self):
d = self.initial.copy()
d['resource_type'] = self.kwargs['resource_type']
d['resource_pk'] = self.kwargs['resource_pk']
parameters = self.get_resource().logging_parameters
d['log_level'] = parameters.log_level
d['trace_emails'] = parameters.trace_emails
return d
def get_resource(self):
content_type = ContentType.objects.get_for_id(self.kwargs['resource_type'])
return content_type.model_class().objects.get(pk=self.kwargs['resource_pk'])
def get_success_url(self):
return self.get_resource().get_absolute_url()
def form_valid(self, form):
parameters = self.get_resource().logging_parameters
parameters.log_level = form.cleaned_data['log_level']
parameters.trace_emails = form.cleaned_data['trace_emails']
parameters.save()
return super(LoggingParametersUpdateView, self).form_valid(form)
class ManageAvailabilityView(FormView):
template_name = 'passerelle/manage/manage_availability_form.html'
def get_context_data(self, **kwargs):
context = super(ManageAvailabilityView, self).get_context_data(**kwargs)
connector = self.get_resource()
context['connector'] = connector
context['availability_status'] = connector.get_availability_status()
return context
def get_form_class(self):
form_class = model_forms.modelform_factory(
AvailabilityParameters,
fields=['run_check'])
return form_class
def get_initial(self):
d = self.initial.copy()
d['resource_type'] = self.kwargs['resource_type']
d['resource_pk'] = self.kwargs['resource_pk']
d['run_check'] = self.get_resource().availability_parameters.run_check
return d
def get_resource(self):
content_type = ContentType.objects.get_for_id(self.kwargs['resource_type'])
return content_type.model_class().objects.get(pk=self.kwargs['resource_pk'])
def get_success_url(self):
return self.get_resource().get_absolute_url()
def form_valid(self, form):
resource = self.get_resource()
parameters = resource.availability_parameters
run_check = form.cleaned_data['run_check']
if not run_check and resource.down():
resource_type = ContentType.objects.get_for_model(resource)
ResourceStatus(
resource_type=resource_type,
resource_pk=self.kwargs['resource_pk'],
status='up',
message='').save()
if parameters.run_check != run_check:
parameters.run_check = run_check
parameters.save()
resource.logger.info(u'availability checks %s', 'enabled' if run_check else 'disabled')
return super(ManageAvailabilityView, self).form_valid(form)