~ubuntu-branches/ubuntu/precise/horizon/precise-updates

« back to all changes in this revision

Viewing changes to horizon/dashboards/syspanel/projects/views.py

  • Committer: Package Import Robot
  • Author(s): Chuck Short
  • Date: 2012-03-02 12:11:59 UTC
  • mfrom: (1.1.8)
  • Revision ID: package-import@ubuntu.com-20120302121159-65b88lcl4slve26i
Tags: 2012.1~e4-0ubuntu1
* New upstream version.
* debian/rules: Update due to upstream build changes.
* debian/control: Update standards-version.
* debian/patches/openstack-config-settings.patch: Dropped
* debian/patches/fix-dashboard-django-wsgi.patch: Refreshed
* debian/patches/fix-dashboard-manage.patch: Refreshed
* debian/openstack-dashboard.install: Update due to upstream build changes.
* debian/dashboard: Update to upstream build changes.
* debian/pydist-overrides: Dont try to install python-django-nose-selenium.
* debian/openstack-dashboard.install: Add missing config files.
* debian/rules: Fix broken settings.py
* debian/patches/pkg-setup.patch: Copy missing templates, shameously
  taken from debian
* debian/patches/fix-broken-tarbll.patch: Add missing files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
 
2
 
 
3
# Copyright 2012 United States Government as represented by the
 
4
# Administrator of the National Aeronautics and Space Administration.
 
5
# All Rights Reserved.
 
6
#
 
7
# Copyright 2012 Nebula, Inc.
 
8
#
 
9
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
 
10
#    not use this file except in compliance with the License. You may obtain
 
11
#    a copy of the License at
 
12
#
 
13
#         http://www.apache.org/licenses/LICENSE-2.0
 
14
#
 
15
#    Unless required by applicable law or agreed to in writing, software
 
16
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 
17
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 
18
#    License for the specific language governing permissions and limitations
 
19
#    under the License.
 
20
 
 
21
import logging
 
22
import operator
 
23
 
 
24
from django.core.urlresolvers import reverse
 
25
from django.utils.translation import ugettext as _
 
26
 
 
27
from horizon import api
 
28
from horizon import exceptions
 
29
from horizon import forms
 
30
from horizon import tables
 
31
from horizon import usage
 
32
from .forms import AddUser, CreateTenant, UpdateTenant, UpdateQuotas
 
33
from .tables import TenantsTable, TenantUsersTable, AddUsersTable
 
34
 
 
35
 
 
36
LOG = logging.getLogger(__name__)
 
37
 
 
38
 
 
39
class IndexView(tables.DataTableView):
 
40
    table_class = TenantsTable
 
41
    template_name = 'syspanel/projects/index.html'
 
42
 
 
43
    def get_data(self):
 
44
        tenants = []
 
45
        try:
 
46
            tenants = api.keystone.tenant_list(self.request, admin=True)
 
47
        except:
 
48
            exceptions.handle(self.request)
 
49
        tenants.sort(key=lambda x: x.id, reverse=True)
 
50
        return tenants
 
51
 
 
52
 
 
53
class CreateView(forms.ModalFormView):
 
54
    form_class = CreateTenant
 
55
    template_name = 'syspanel/projects/create.html'
 
56
 
 
57
 
 
58
class UpdateView(forms.ModalFormView):
 
59
    form_class = UpdateTenant
 
60
    template_name = 'syspanel/projects/update.html'
 
61
    context_object_name = 'tenant'
 
62
 
 
63
    def get_object(self, *args, **kwargs):
 
64
        tenant_id = kwargs['tenant_id']
 
65
        try:
 
66
            return api.keystone.tenant_get(self.request, tenant_id, admin=True)
 
67
        except:
 
68
            redirect = reverse("horizon:syspanel:projects:index")
 
69
            exceptions.handle(self.request,
 
70
                              _('Unable to retrieve tenant.'),
 
71
                              redirect=redirect)
 
72
 
 
73
    def get_initial(self):
 
74
        return {'id': self.object.id,
 
75
                'name': self.object.name,
 
76
                'description': getattr(self.object, "description", ""),
 
77
                'enabled': self.object.enabled}
 
78
 
 
79
 
 
80
class UsersView(tables.MultiTableView):
 
81
    table_classes = (TenantUsersTable, AddUsersTable)
 
82
    template_name = 'syspanel/projects/users.html'
 
83
 
 
84
    def _get_shared_data(self, *args, **kwargs):
 
85
        tenant_id = self.kwargs["tenant_id"]
 
86
        if not hasattr(self, "_shared_data"):
 
87
            try:
 
88
                tenant = api.keystone.tenant_get(self.request,
 
89
                                                 tenant_id,
 
90
                                                 admin=True)
 
91
                all_users = api.keystone.user_list(self.request)
 
92
                tenant_users = api.keystone.user_list(self.request, tenant_id)
 
93
                self._shared_data = {'tenant': tenant,
 
94
                                     'all_users': all_users,
 
95
                                     'tenant_users': tenant_users}
 
96
            except:
 
97
                redirect = reverse("horizon:syspanel:projects:index")
 
98
                exceptions.handle(self.request,
 
99
                                  _("Unable to retrieve users."),
 
100
                                  redirect=redirect)
 
101
        return self._shared_data
 
102
 
 
103
    def get_tenant_users_data(self):
 
104
        return self._get_shared_data()["tenant_users"]
 
105
 
 
106
    def get_add_users_data(self):
 
107
        tenant_users = self._get_shared_data()["tenant_users"]
 
108
        all_users = self._get_shared_data()["all_users"]
 
109
        tenant_user_ids = [user.id for user in tenant_users]
 
110
        return filter(lambda u: u.id not in tenant_user_ids, all_users)
 
111
 
 
112
    def get_context_data(self, **kwargs):
 
113
        context = super(UsersView, self).get_context_data(**kwargs)
 
114
        context['tenant'] = self._get_shared_data()["tenant"]
 
115
        return context
 
116
 
 
117
 
 
118
class AddUserView(forms.ModalFormView):
 
119
    form_class = AddUser
 
120
    template_name = 'syspanel/projects/add_user.html'
 
121
    context_object_name = 'tenant'
 
122
 
 
123
    def get_object(self, *args, **kwargs):
 
124
        return api.keystone.tenant_get(self.request,
 
125
                                       kwargs["tenant_id"],
 
126
                                       admin=True)
 
127
 
 
128
    def get_context_data(self, **kwargs):
 
129
        context = super(AddUserView, self).get_context_data(**kwargs)
 
130
        context['tenant_id'] = self.kwargs["tenant_id"]
 
131
        context['user_id'] = self.kwargs["user_id"]
 
132
        return context
 
133
 
 
134
    def get_form_kwargs(self):
 
135
        kwargs = super(AddUserView, self).get_form_kwargs()
 
136
        try:
 
137
            roles = api.keystone.role_list(self.request)
 
138
        except:
 
139
            redirect = reverse("horizon:syspanel:projects:users",
 
140
                               args=(self.kwargs["tenant_id"],))
 
141
            exceptions.handle(self.request,
 
142
                              _("Unable to retrieve roles."),
 
143
                              redirect=redirect)
 
144
        roles.sort(key=operator.attrgetter("id"))
 
145
        kwargs['roles'] = roles
 
146
        return kwargs
 
147
 
 
148
    def get_initial(self):
 
149
        default_role = api.keystone.get_default_role(self.request)
 
150
        return {'tenant_id': self.kwargs['tenant_id'],
 
151
                'user_id': self.kwargs['user_id'],
 
152
                'role_id': getattr(default_role, "id", None)}
 
153
 
 
154
 
 
155
class QuotasView(forms.ModalFormView):
 
156
    form_class = UpdateQuotas
 
157
    template_name = 'syspanel/projects/quotas.html'
 
158
    context_object_name = 'tenant'
 
159
 
 
160
    def get_object(self, *args, **kwargs):
 
161
        return api.keystone.tenant_get(self.request,
 
162
                                       kwargs["tenant_id"],
 
163
                                       admin=True)
 
164
 
 
165
    def get_initial(self):
 
166
        quotas = api.nova.tenant_quota_get(self.request,
 
167
                                           self.kwargs['tenant_id'])
 
168
        return {
 
169
            'tenant_id': self.kwargs['tenant_id'],
 
170
            'metadata_items': quotas.metadata_items,
 
171
            'injected_file_content_bytes': quotas.injected_file_content_bytes,
 
172
            'volumes': quotas.volumes,
 
173
            'gigabytes': quotas.gigabytes,
 
174
            'ram': int(quotas.ram),
 
175
            'floating_ips': quotas.floating_ips,
 
176
            'instances': quotas.instances,
 
177
            'injected_files': quotas.injected_files,
 
178
            'cores': quotas.cores}
 
179
 
 
180
 
 
181
class TenantUsageView(usage.UsageView):
 
182
    table_class = usage.TenantUsageTable
 
183
    usage_class = usage.TenantUsage
 
184
    template_name = 'syspanel/projects/usage.html'
 
185
 
 
186
    def get_data(self):
 
187
        super(TenantUsageView, self).get_data()
 
188
        return self.usage.get_instances()