hobo/hobo/views.py

92 lines
3.2 KiB
Python

import json
from django.http import HttpResponse
from django.utils.translation import ugettext as _
from django.views.generic.base import TemplateView
from django.views.generic import edit
from django.core.urlresolvers import reverse
from django.contrib.auth.decorators import user_passes_test
from .environment.utils import Zone, get_operational_services
from .forms import HoboForm, HoboUpdateForm, get_tenant_model
admin_required = user_passes_test(lambda u: u.is_superuser)
class Home(TemplateView):
template_name = 'hobo/home.html'
def get_context_data(self, **kwargs):
context = super(Home, self).get_context_data(**kwargs)
context['zones'] = []
for service in get_operational_services():
context['zones'].extend(service.get_admin_zones())
context['zones'].append(Zone(_('Environment Settings'), 'settings', 'environment/'))
return context
home = admin_required(Home.as_view())
class ManagerHome(edit.CreateView):
template_name = 'hobo/manager_home.html'
form_class = HoboForm
def get_success_url(self):
return reverse('manager-home')
def get_context_data(self, **kwargs):
from tenant_schemas.utils import get_public_schema_name
context = super(ManagerHome, self).get_context_data(**kwargs)
tenants_list = ()
for obj in get_tenant_model().objects.exclude(schema_name=get_public_schema_name()):
f = HoboUpdateForm(instance=obj, auto_id='%s_%%s' % obj.pk)
tenants_list += ({'object': obj, 'form': f},)
context['tenants_list'] = tenants_list
return context
def form_valid(self, form):
response = super(ManagerHome, self).form_valid(form)
self.object.create_schema(True)
return response
manager_home = admin_required(ManagerHome.as_view())
class ManagerUpdateTenant(edit.UpdateView):
model = get_tenant_model()
template_name = 'hobo/manager_home.html'
form_class = HoboUpdateForm
def get_success_url(self):
return reverse('manager-home')
def form_valid(self, form):
response = super(ManagerUpdateTenant, self).form_valid(form)
self.object.create_schema(True)
return response
update_tenant = admin_required(ManagerUpdateTenant.as_view())
class ManagerDeleteTenant(edit.DeleteView):
template_name = 'environment/tenant_confirm_delete.html'
model = get_tenant_model()
def get_success_url(self):
return reverse('manager-home', self.object.id)
delete_tenant = admin_required(ManagerDeleteTenant.as_view())
def hobos(request, *args, **kwargs):
response = HttpResponse(content_type='application/json')
tenants = [{'name': tenant.schema_name, 'url': tenant.domain_url} \
for tenant in get_tenant_model().objects.all()]
json.dump(tenants, response)
return response
def hobo(request, **kwargs):
# The hobos URL is supposed to return a list of hobo websites, this
# dummy implementation makes it possible to point deployment agents to
# a single instance, that will announce itself as the only hobo around.
response = HttpResponse(content_type='application/json')
json.dump([request.build_absolute_uri('/')], response)
return response