Mark Gius a46df8dbbe Totally out of band diff of improve_logging_again
improves logging in dashboard, mostly error logging.
Some informational and debugging
2011-06-28 11:29:29 -07:00

167 lines
5.7 KiB
Python

# vim: tabstop=4 shiftwidth=4 softtabstop=4
from django import template
from django import http
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.shortcuts import render_to_response
from django.shortcuts import redirect
from django.utils.translation import ugettext as _
import datetime
import json
import logging
from django.contrib import messages
from django_openstack import api
from django_openstack import forms
from django_openstack.dash.views import instances as dash_instances
from openstackx.api import exceptions as api_exceptions
LOG = logging.getLogger('django_openstack.syspanel.views.users')
class UserForm(forms.Form):
def __init__(self, *args, **kwargs):
tenant_list = kwargs.pop('tenant_list', None)
super(UserForm, self).__init__(*args, **kwargs)
self.fields['tenant_id'].choices = [[tenant.id,tenant.id] for tenant in tenant_list]
id = forms.CharField(label="ID")
email = forms.CharField(label="Email")
password = forms.CharField(label="Password", widget=forms.PasswordInput(render_value=False), required=False)
tenant_id = forms.ChoiceField(label="Primary Tenant")
class UserDeleteForm(forms.SelfHandlingForm):
user = forms.CharField(required=True)
def handle(self, request, data):
user_id = data['user']
LOG.info('Deleting user with id "%s"' % user_id)
api.user_delete(request, user_id)
messages.success(request,
'%s was successfully deleted.'
% user_id)
return redirect(request.build_absolute_uri())
@login_required
def index(request):
for f in (UserDeleteForm,):
_, handled = f.maybe_handle(request)
if handled:
return handled
users = api.user_list(request)
user_delete_form = UserDeleteForm()
return render_to_response('syspanel_users.html',{
'users': users,
'user_delete_form': user_delete_form,
}, context_instance = template.RequestContext(request))
@login_required
def update(request, user_id):
if request.method == "POST":
tenants = api.tenant_list(request)
form = UserForm(request.POST, tenant_list=tenants)
if form.is_valid():
user = form.clean()
updated = []
if user['email']:
updated.append('email')
api.user_update_email(request, user['id'], user['email'])
if user['password']:
updated.append('password')
api.user_update_password(request, user['id'], user['password'])
if user['tenant_id']:
updated.append('tenant')
api.user_update_tenant(request, user['id'], user['tenant_id'])
messages.success(request,
'Updated %s for %s.'
% (', '.join(updated), user_id))
return redirect('syspanel_users')
else:
# TODO add better error management
messages.error(request, 'Unable to update user,\
please try again.')
return render_to_response(
'syspanel_user_update.html',{
'form': form,
'user_id': user_id,
}, context_instance = template.RequestContext(request))
else:
u = api.user_get(request, user_id)
tenants = api.tenant_list(request)
try:
# FIXME
email = u.email
except:
email = ''
try:
tenant_id = u.tenantId
except:
tenant_id = None
form = UserForm(initial={'id': user_id,
'tenant_id': tenant_id,
'email': email},
tenant_list=tenants)
return render_to_response(
'syspanel_user_update.html',{
'form': form,
'user_id': user_id,
}, context_instance = template.RequestContext(request))
@login_required
def create(request):
tenants = api.tenant_list(request)
if request.method == "POST":
form = UserForm(request.POST, tenant_list=tenants)
if form.is_valid():
user = form.clean()
# TODO Make this a real request
try:
LOG.info('Creating user with id "%s"' % user['id'])
api.user_create(request,
user['id'],
user['email'],
user['password'],
user['tenant_id'],
True)
messages.success(request,
'%s was successfully created.'
% user['id'])
return redirect('syspanel_users')
except api_exceptions.ApiException, e:
LOG.error('ApiException while creating user\n'
'id: "%s", email: "%s", tenant_id: "%s"' %
(user['id'], user['email'], user['tenant_id']),
exc_info=True)
messages.error(request,
'Error creating user: %s'
% e.message)
return redirect('syspanel_users')
else:
return render_to_response(
'syspanel_user_create.html',{
'form': form,
}, context_instance = template.RequestContext(request))
else:
form = UserForm(tenant_list=tenants)
return render_to_response(
'syspanel_user_create.html',{
'form': form,
}, context_instance = template.RequestContext(request))