201 lines
6.8 KiB
Python
201 lines
6.8 KiB
Python
import json
|
|
import string
|
|
|
|
from django.conf import settings
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.core.urlresolvers import reverse_lazy
|
|
from django.http import HttpResponse, HttpResponseRedirect, Http404
|
|
from django.shortcuts import get_object_or_404
|
|
from django.views.generic.base import TemplateView
|
|
from django.views.generic.edit import CreateView, UpdateView, DeleteView
|
|
|
|
from .models import Variable, AVAILABLE_SERVICES
|
|
from . import forms, utils
|
|
|
|
|
|
class AvailableService(object):
|
|
def __init__(self, klass):
|
|
self.id = klass.Extra.service_id
|
|
self.label = klass._meta.verbose_name
|
|
|
|
|
|
class HomeView(TemplateView):
|
|
template_name = 'environment/home.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(HomeView, self).get_context_data(**kwargs)
|
|
context['available_services'] = [
|
|
AvailableService(x) for x in AVAILABLE_SERVICES if x.is_enabled()]
|
|
context['installed_services'] = [x for x in utils.get_installed_services() if not x.secondary]
|
|
return context
|
|
|
|
|
|
class VariablesView(TemplateView):
|
|
template_name = 'environment/variables.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(VariablesView, self).get_context_data(**kwargs)
|
|
context['variables'] = Variable.objects.filter(auto=False,
|
|
service_pk__isnull=True).order_by('label')
|
|
return context
|
|
|
|
|
|
class VariableCreateView(CreateView):
|
|
model = Variable
|
|
form_class = forms.VariableForm
|
|
|
|
def get_form_kwargs(self):
|
|
kwargs = super(VariableCreateView, self).get_form_kwargs()
|
|
if 'service' in self.kwargs:
|
|
service_id = self.kwargs.pop('service')
|
|
service_slug = self.kwargs.pop('slug')
|
|
for service in AVAILABLE_SERVICES:
|
|
if service.Extra.service_id == service_id:
|
|
kwargs['service'] = service.objects.get(slug=service_slug)
|
|
break
|
|
return kwargs
|
|
|
|
def form_valid(self, form):
|
|
if form.service:
|
|
service_kwargs = {
|
|
'service_pk': form.service.id,
|
|
'service_type': ContentType.objects.get_for_model(form.service)
|
|
}
|
|
else:
|
|
service_kwargs = {
|
|
'service_pk__isnull': True
|
|
}
|
|
try:
|
|
self.object = Variable.objects.get(
|
|
name=form.instance.name,
|
|
**service_kwargs)
|
|
except Variable.DoesNotExist:
|
|
self.object = form.save()
|
|
else:
|
|
self.object.auto = False
|
|
self.object.value = form.instance.value
|
|
self.object.save()
|
|
return HttpResponseRedirect(self.get_success_url())
|
|
|
|
def get_success_url(self):
|
|
if self.object.service is None:
|
|
return reverse_lazy('environment-variables')
|
|
return reverse_lazy('environment-home')
|
|
|
|
|
|
class VariableUpdateView(UpdateView):
|
|
model = Variable
|
|
form_class = forms.VariableForm
|
|
|
|
def get_success_url(self):
|
|
if self.object.service is None:
|
|
return reverse_lazy('environment-variables')
|
|
return reverse_lazy('environment-home')
|
|
|
|
|
|
class VariableDeleteView(DeleteView):
|
|
model = Variable
|
|
template_name = 'environment/generic_confirm_delete.html'
|
|
|
|
def get_success_url(self):
|
|
if self.object.service is None:
|
|
return reverse_lazy('environment-variables')
|
|
return reverse_lazy('environment-home')
|
|
|
|
|
|
class ServiceCreateView(CreateView):
|
|
success_url = reverse_lazy('environment-home')
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ServiceCreateView, self).get_context_data(**kwargs)
|
|
context['model_name'] = self.model._meta.verbose_name
|
|
return context
|
|
|
|
def get_initial(self):
|
|
initial = super(ServiceCreateView, self).get_initial()
|
|
initial['base_url'] = utils.create_base_url(self.request.build_absolute_uri(), self.model.Extra.service_default_slug)
|
|
initial['slug'] = self.model.Extra.service_default_slug
|
|
return initial
|
|
|
|
def get_template_names(self):
|
|
return 'environment/service_form.html'
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
self.service_id = kwargs.pop('service')
|
|
return super(ServiceCreateView, self).get(request, *args, **kwargs)
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
self.service_id = kwargs.pop('service')
|
|
return super(ServiceCreateView, self).post(request, *args, **kwargs)
|
|
|
|
def get_form_class(self):
|
|
for service in AVAILABLE_SERVICES:
|
|
if service.Extra.service_id == self.service_id:
|
|
form_class = getattr(forms, service.__name__ + 'Form')
|
|
self.model = form_class.Meta.model
|
|
return form_class
|
|
return None
|
|
|
|
|
|
class ServiceUpdateView(UpdateView):
|
|
success_url = reverse_lazy('environment-home')
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ServiceUpdateView, self).get_context_data(**kwargs)
|
|
context['model_name'] = self.model._meta.verbose_name
|
|
return context
|
|
|
|
def get_template_names(self):
|
|
return 'environment/service_form.html'
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
self.service_id = kwargs.pop('service')
|
|
self.get_form_class()
|
|
return super(ServiceUpdateView, self).get(request, *args, **kwargs)
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
self.service_id = kwargs.pop('service')
|
|
self.get_form_class()
|
|
return super(ServiceUpdateView, self).post(request, *args, **kwargs)
|
|
|
|
def get_form_class(self):
|
|
for service in AVAILABLE_SERVICES:
|
|
if service.Extra.service_id == self.service_id:
|
|
form_class = getattr(forms, service.__name__ + 'Form')
|
|
self.model = form_class.Meta.model
|
|
return form_class
|
|
return None
|
|
|
|
class ServiceDeleteView(DeleteView):
|
|
success_url = reverse_lazy('environment-home')
|
|
template_name = 'environment/generic_confirm_delete.html'
|
|
context_object_name = 'object'
|
|
|
|
def get_object(self):
|
|
service_id = self.kwargs.pop('service')
|
|
service_slug = self.kwargs.pop('slug')
|
|
for service in AVAILABLE_SERVICES:
|
|
if service.Extra.service_id == service_id:
|
|
return service.objects.get(slug=service_slug)
|
|
return None
|
|
|
|
def operational_check_view(request, service, slug, **kwargs):
|
|
|
|
for klass in AVAILABLE_SERVICES:
|
|
if klass.Extra.service_id == service:
|
|
break
|
|
else:
|
|
raise Http404()
|
|
|
|
object = get_object_or_404(klass, slug=slug)
|
|
object.check_operational()
|
|
response = HttpResponse(content_type='application/json')
|
|
json.dump({'operational': object.is_operational()}, response)
|
|
return response
|
|
|
|
|
|
def debug_json(request):
|
|
response = HttpResponse(content_type='application/json')
|
|
json.dump((utils.get_installed_services_dict(),), response, indent=2)
|
|
return response
|