Use memoized_method decorator in views
A lot of horizon's views use the pattern: def get_data(self): if not hasattr(self, "_data"): # Calculate data here. self._data = data return self._data This is copy-pasted all over the codebase. It's better to handle that with a single decorator. In the future, we might even replace it with some better caching approach. Closes-bug: #1248230 Change-Id: Id021fccf9032e5068993ec91a7774a5d0fbf29bb
This commit is contained in:
parent
491cda0a1f
commit
b7537a8b81
@ -17,6 +17,7 @@
|
|||||||
from django.utils.translation import ugettext_lazy as _ # noqa
|
from django.utils.translation import ugettext_lazy as _ # noqa
|
||||||
|
|
||||||
from horizon.tables import MultiTableView # noqa
|
from horizon.tables import MultiTableView # noqa
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
|
|
||||||
class ResourceBrowserView(MultiTableView):
|
class ResourceBrowserView(MultiTableView):
|
||||||
@ -32,15 +33,15 @@ class ResourceBrowserView(MultiTableView):
|
|||||||
self.navigation_selection = False
|
self.navigation_selection = False
|
||||||
super(ResourceBrowserView, self).__init__(*args, **kwargs)
|
super(ResourceBrowserView, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_browser(self):
|
def get_browser(self):
|
||||||
if not hasattr(self, "browser"):
|
browser = self.browser_class(self.request, **self.kwargs)
|
||||||
self.browser = self.browser_class(self.request, **self.kwargs)
|
browser.set_tables(self.get_tables())
|
||||||
self.browser.set_tables(self.get_tables())
|
|
||||||
if not self.navigation_selection:
|
if not self.navigation_selection:
|
||||||
ct = self.browser.content_table
|
ct = browser.content_table
|
||||||
item = self.browser.navigable_item_name.lower()
|
item = browser.navigable_item_name.lower()
|
||||||
ct._no_data_message = _("Select a %s to browse.") % item
|
ct._no_data_message = _("Select a %s to browse.") % item
|
||||||
return self.browser
|
return browser
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(ResourceBrowserView, self).get_context_data(**kwargs)
|
context = super(ResourceBrowserView, self).get_context_data(**kwargs)
|
||||||
|
@ -1074,6 +1074,10 @@ class DataTable(object):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def filtered_data(self):
|
def filtered_data(self):
|
||||||
|
# This function should be using django.utils.functional.cached_property
|
||||||
|
# decorator, but unfortunately due to bug in Django
|
||||||
|
# https://code.djangoproject.com/ticket/19872 it would make it fail
|
||||||
|
# when being mocked by mox in tests.
|
||||||
if not hasattr(self, '_filtered_data'):
|
if not hasattr(self, '_filtered_data'):
|
||||||
self._filtered_data = self.data
|
self._filtered_data = self.data
|
||||||
if self._meta.filter and self._meta._filter_action:
|
if self._meta.filter and self._meta._filter_action:
|
||||||
|
@ -194,6 +194,8 @@ class DataTableView(MultiTableView):
|
|||||||
return self._tables
|
return self._tables
|
||||||
|
|
||||||
def get_table(self):
|
def get_table(self):
|
||||||
|
# Note: this method cannot be easily memoized, because get_context_data
|
||||||
|
# uses its cached value directly.
|
||||||
if not self.table_class:
|
if not self.table_class:
|
||||||
raise AttributeError('You must specify a DataTable class for the '
|
raise AttributeError('You must specify a DataTable class for the '
|
||||||
'"table_class" attribute on %s.'
|
'"table_class" attribute on %s.'
|
||||||
|
@ -98,5 +98,9 @@ def memoized(func):
|
|||||||
UnhashableKeyWarning, 2)
|
UnhashableKeyWarning, 2)
|
||||||
value = func(*args, **kwargs)
|
value = func(*args, **kwargs)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
return wrapped
|
return wrapped
|
||||||
|
|
||||||
|
# We can use @memoized for methods now too, because it uses weakref and so
|
||||||
|
# it doesn't keep the instances in memory forever. We might want to separate
|
||||||
|
# them in the future, however.
|
||||||
|
memoized_method = memoized
|
||||||
|
@ -21,6 +21,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
|
|
||||||
@ -58,17 +59,16 @@ class UpdateView(forms.ModalFormView):
|
|||||||
template_name = constants.GROUPS_UPDATE_VIEW_TEMPLATE
|
template_name = constants.GROUPS_UPDATE_VIEW_TEMPLATE
|
||||||
success_url = reverse_lazy(constants.GROUPS_INDEX_URL)
|
success_url = reverse_lazy(constants.GROUPS_INDEX_URL)
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
try:
|
try:
|
||||||
self._object = api.keystone.group_get(self.request,
|
return api.keystone.group_get(self.request,
|
||||||
self.kwargs['group_id'])
|
self.kwargs['group_id'])
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse(constants.GROUPS_INDEX_URL)
|
redirect = reverse(constants.GROUPS_INDEX_URL)
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to update group.'),
|
_('Unable to update group.'),
|
||||||
redirect=redirect)
|
redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(UpdateView, self).get_context_data(**kwargs)
|
context = super(UpdateView, self).get_context_data(**kwargs)
|
||||||
@ -83,29 +83,24 @@ class UpdateView(forms.ModalFormView):
|
|||||||
|
|
||||||
|
|
||||||
class GroupManageMixin(object):
|
class GroupManageMixin(object):
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_group(self):
|
def _get_group(self):
|
||||||
if not hasattr(self, "_group"):
|
|
||||||
group_id = self.kwargs['group_id']
|
group_id = self.kwargs['group_id']
|
||||||
self._group = api.keystone.group_get(self.request, group_id)
|
return api.keystone.group_get(self.request, group_id)
|
||||||
return self._group
|
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_group_members(self):
|
def _get_group_members(self):
|
||||||
if not hasattr(self, "_group_members"):
|
|
||||||
group_id = self.kwargs['group_id']
|
group_id = self.kwargs['group_id']
|
||||||
self._group_members = api.keystone.user_list(self.request,
|
return api.keystone.user_list(self.request, group=group_id)
|
||||||
group=group_id)
|
|
||||||
return self._group_members
|
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_group_non_members(self):
|
def _get_group_non_members(self):
|
||||||
if not hasattr(self, "_group_non_members"):
|
|
||||||
domain_id = self._get_group().domain_id
|
domain_id = self._get_group().domain_id
|
||||||
all_users = api.keystone.user_list(self.request,
|
all_users = api.keystone.user_list(self.request,
|
||||||
domain=domain_id)
|
domain=domain_id)
|
||||||
group_members = self._get_group_members()
|
group_members = self._get_group_members()
|
||||||
group_member_ids = [user.id for user in group_members]
|
group_member_ids = [user.id for user in group_members]
|
||||||
self._group_non_members = filter(
|
return filter(lambda u: u.id not in group_member_ids, all_users)
|
||||||
lambda u: u.id not in group_member_ids, all_users)
|
|
||||||
return self._group_non_members
|
|
||||||
|
|
||||||
|
|
||||||
class ManageMembersView(GroupManageMixin, tables.DataTableView):
|
class ManageMembersView(GroupManageMixin, tables.DataTableView):
|
||||||
|
@ -27,6 +27,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.dashboards.admin.instances \
|
from openstack_dashboard.dashboards.admin.instances \
|
||||||
@ -126,26 +127,24 @@ class LiveMigrateView(forms.ModalFormView):
|
|||||||
context["instance_id"] = self.kwargs['instance_id']
|
context["instance_id"] = self.kwargs['instance_id']
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_hosts(self, *args, **kwargs):
|
def get_hosts(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_hosts"):
|
|
||||||
try:
|
try:
|
||||||
self._hosts = api.nova.hypervisor_list(self.request)
|
return api.nova.hypervisor_list(self.request)
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse("horizon:admin:instances:index")
|
redirect = reverse("horizon:admin:instances:index")
|
||||||
msg = _('Unable to retrieve hypervisor information.')
|
msg = _('Unable to retrieve hypervisor information.')
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._hosts
|
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self, *args, **kwargs):
|
def get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
instance_id = self.kwargs['instance_id']
|
instance_id = self.kwargs['instance_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.nova.server_get(self.request, instance_id)
|
return api.nova.server_get(self.request, instance_id)
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse("horizon:admin:instances:index")
|
redirect = reverse("horizon:admin:instances:index")
|
||||||
msg = _('Unable to retrieve instance details.')
|
msg = _('Unable to retrieve instance details.')
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
initial = super(LiveMigrateView, self).get_initial()
|
initial = super(LiveMigrateView, self).get_initial()
|
||||||
|
@ -19,6 +19,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
|
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.dashboards.project.networks.ports \
|
from openstack_dashboard.dashboards.project.networks.ports \
|
||||||
@ -38,18 +39,16 @@ class CreateView(forms.ModalFormView):
|
|||||||
return reverse(self.success_url,
|
return reverse(self.success_url,
|
||||||
args=(self.kwargs['network_id'],))
|
args=(self.kwargs['network_id'],))
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
try:
|
try:
|
||||||
network_id = self.kwargs["network_id"]
|
network_id = self.kwargs["network_id"]
|
||||||
self._object = api.neutron.network_get(self.request,
|
return api.neutron.network_get(self.request, network_id)
|
||||||
network_id)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse(self.failure_url,
|
redirect = reverse(self.failure_url,
|
||||||
args=(self.kwargs['network_id'],))
|
args=(self.kwargs['network_id'],))
|
||||||
msg = _("Unable to retrieve network.")
|
msg = _("Unable to retrieve network.")
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(CreateView, self).get_context_data(**kwargs)
|
context = super(CreateView, self).get_context_data(**kwargs)
|
||||||
|
@ -21,6 +21,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.dashboards.project.networks import views as user_views
|
from openstack_dashboard.dashboards.project.networks import views as user_views
|
||||||
@ -39,8 +40,8 @@ class IndexView(tables.DataTableView):
|
|||||||
table_class = networks_tables.NetworksTable
|
table_class = networks_tables.NetworksTable
|
||||||
template_name = 'admin/networks/index.html'
|
template_name = 'admin/networks/index.html'
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_tenant_list(self):
|
def _get_tenant_list(self):
|
||||||
if not hasattr(self, "_tenants"):
|
|
||||||
try:
|
try:
|
||||||
tenants, has_more = api.keystone.tenant_list(self.request)
|
tenants, has_more = api.keystone.tenant_list(self.request)
|
||||||
except Exception:
|
except Exception:
|
||||||
@ -49,8 +50,7 @@ class IndexView(tables.DataTableView):
|
|||||||
exceptions.handle(self.request, msg)
|
exceptions.handle(self.request, msg)
|
||||||
|
|
||||||
tenant_dict = SortedDict([(t.id, t) for t in tenants])
|
tenant_dict = SortedDict([(t.id, t) for t in tenants])
|
||||||
self._tenants = tenant_dict
|
return tenant_dict
|
||||||
return self._tenants
|
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
try:
|
try:
|
||||||
@ -107,8 +107,8 @@ class DetailView(tables.MultiTableView):
|
|||||||
p.set_id_as_name_if_empty()
|
p.set_id_as_name_if_empty()
|
||||||
return ports
|
return ports
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_data(self):
|
def _get_data(self):
|
||||||
if not hasattr(self, "_network"):
|
|
||||||
try:
|
try:
|
||||||
network_id = self.kwargs['network_id']
|
network_id = self.kwargs['network_id']
|
||||||
network = api.neutron.network_get(self.request, network_id)
|
network = api.neutron.network_get(self.request, network_id)
|
||||||
@ -119,8 +119,7 @@ class DetailView(tables.MultiTableView):
|
|||||||
_('Unable to retrieve details for '
|
_('Unable to retrieve details for '
|
||||||
'network "%s".') % network_id,
|
'network "%s".') % network_id,
|
||||||
redirect=redirect)
|
redirect=redirect)
|
||||||
self._network = network
|
return network
|
||||||
return self._network
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
|
@ -23,6 +23,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
|
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
|
from horizon.utils import memoized
|
||||||
from horizon import workflows
|
from horizon import workflows
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
@ -47,18 +48,15 @@ INDEX_URL = "horizon:admin:projects:index"
|
|||||||
|
|
||||||
|
|
||||||
class TenantContextMixin(object):
|
class TenantContextMixin(object):
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
tenant_id = self.kwargs['tenant_id']
|
tenant_id = self.kwargs['tenant_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.keystone.tenant_get(self.request,
|
return api.keystone.tenant_get(self.request, tenant_id, admin=True)
|
||||||
tenant_id,
|
|
||||||
admin=True)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to retrieve project information.'),
|
_('Unable to retrieve project information.'),
|
||||||
redirect=reverse(INDEX_URL))
|
redirect=reverse(INDEX_URL))
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(TenantContextMixin, self).get_context_data(**kwargs)
|
context = super(TenantContextMixin, self).get_context_data(**kwargs)
|
||||||
|
@ -21,6 +21,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
|
|
||||||
@ -49,17 +50,15 @@ class UpdateView(forms.ModalFormView):
|
|||||||
template_name = 'admin/roles/update.html'
|
template_name = 'admin/roles/update.html'
|
||||||
success_url = reverse_lazy('horizon:admin:roles:index')
|
success_url = reverse_lazy('horizon:admin:roles:index')
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
try:
|
try:
|
||||||
self._object = api.keystone.role_get(self.request,
|
return api.keystone.role_get(self.request, self.kwargs['role_id'])
|
||||||
self.kwargs['role_id'])
|
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse("horizon:admin:roles:index")
|
redirect = reverse("horizon:admin:roles:index")
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to update role.'),
|
_('Unable to update role.'),
|
||||||
redirect=redirect)
|
redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(UpdateView, self).get_context_data(**kwargs)
|
context = super(UpdateView, self).get_context_data(**kwargs)
|
||||||
|
@ -29,6 +29,7 @@ from django.views.decorators.debug import sensitive_post_parameters # noqa
|
|||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
|
|
||||||
@ -64,18 +65,16 @@ class UpdateView(forms.ModalFormView):
|
|||||||
def dispatch(self, *args, **kwargs):
|
def dispatch(self, *args, **kwargs):
|
||||||
return super(UpdateView, self).dispatch(*args, **kwargs)
|
return super(UpdateView, self).dispatch(*args, **kwargs)
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
try:
|
try:
|
||||||
self._object = api.keystone.user_get(self.request,
|
return api.keystone.user_get(self.request, self.kwargs['user_id'],
|
||||||
self.kwargs['user_id'],
|
|
||||||
admin=True)
|
admin=True)
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse("horizon:admin:users:index")
|
redirect = reverse("horizon:admin:users:index")
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to update user.'),
|
_('Unable to update user.'),
|
||||||
redirect=redirect)
|
redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(UpdateView, self).get_context_data(**kwargs)
|
context = super(UpdateView, self).get_context_data(**kwargs)
|
||||||
|
@ -28,6 +28,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.utils import filters
|
from openstack_dashboard.utils import filters
|
||||||
@ -42,17 +43,16 @@ class DetailView(tables.DataTableView):
|
|||||||
table_class = project_tables.RulesTable
|
table_class = project_tables.RulesTable
|
||||||
template_name = 'project/access_and_security/security_groups/detail.html'
|
template_name = 'project/access_and_security/security_groups/detail.html'
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_data(self):
|
def _get_data(self):
|
||||||
if not hasattr(self, '_sg'):
|
|
||||||
sg_id = filters.get_int_or_uuid(self.kwargs['security_group_id'])
|
sg_id = filters.get_int_or_uuid(self.kwargs['security_group_id'])
|
||||||
try:
|
try:
|
||||||
self._sg = api.network.security_group_get(self.request, sg_id)
|
return api.network.security_group_get(self.request, sg_id)
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse('horizon:project:access_and_security:index')
|
redirect = reverse('horizon:project:access_and_security:index')
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to retrieve security group.'),
|
_('Unable to retrieve security group.'),
|
||||||
redirect=redirect)
|
redirect=redirect)
|
||||||
return self._sg
|
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
return self._get_data().rules
|
return self._get_data().rules
|
||||||
@ -68,17 +68,15 @@ class UpdateView(forms.ModalFormView):
|
|||||||
template_name = 'project/access_and_security/security_groups/update.html'
|
template_name = 'project/access_and_security/security_groups/update.html'
|
||||||
success_url = reverse_lazy('horizon:project:access_and_security:index')
|
success_url = reverse_lazy('horizon:project:access_and_security:index')
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
sg_id = filters.get_int_or_uuid(self.kwargs['security_group_id'])
|
sg_id = filters.get_int_or_uuid(self.kwargs['security_group_id'])
|
||||||
try:
|
try:
|
||||||
self._object = api.network.security_group_get(self.request,
|
return api.network.security_group_get(self.request, sg_id)
|
||||||
sg_id)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
msg = _('Unable to retrieve security group.')
|
msg = _('Unable to retrieve security group.')
|
||||||
url = reverse('horizon:project:access_and_security:index')
|
url = reverse('horizon:project:access_and_security:index')
|
||||||
exceptions.handle(self.request, msg, redirect=url)
|
exceptions.handle(self.request, msg, redirect=url)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(UpdateView, self).get_context_data(**kwargs)
|
context = super(UpdateView, self).get_context_data(**kwargs)
|
||||||
|
@ -32,6 +32,7 @@ from django.views import generic
|
|||||||
from horizon import browsers
|
from horizon import browsers
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.api import swift
|
from openstack_dashboard.api import swift
|
||||||
@ -265,10 +266,10 @@ class CopyView(forms.ModalFormView):
|
|||||||
class ContainerDetailView(forms.ModalFormMixin, generic.TemplateView):
|
class ContainerDetailView(forms.ModalFormMixin, generic.TemplateView):
|
||||||
template_name = 'project/containers/container_detail.html'
|
template_name = 'project/containers/container_detail.html'
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
try:
|
try:
|
||||||
self._object = api.swift.swift_get_container(
|
return api.swift.swift_get_container(
|
||||||
self.request,
|
self.request,
|
||||||
self.kwargs["container_name"],
|
self.kwargs["container_name"],
|
||||||
with_data=False)
|
with_data=False)
|
||||||
@ -277,7 +278,6 @@ class ContainerDetailView(forms.ModalFormMixin, generic.TemplateView):
|
|||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to retrieve details.'),
|
_('Unable to retrieve details.'),
|
||||||
redirect=redirect)
|
redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(ContainerDetailView, self).get_context_data(**kwargs)
|
context = super(ContainerDetailView, self).get_context_data(**kwargs)
|
||||||
@ -288,10 +288,10 @@ class ContainerDetailView(forms.ModalFormMixin, generic.TemplateView):
|
|||||||
class ObjectDetailView(forms.ModalFormMixin, generic.TemplateView):
|
class ObjectDetailView(forms.ModalFormMixin, generic.TemplateView):
|
||||||
template_name = 'project/containers/object_detail.html'
|
template_name = 'project/containers/object_detail.html'
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
try:
|
try:
|
||||||
self._object = api.swift.swift_get_object(
|
return api.swift.swift_get_object(
|
||||||
self.request,
|
self.request,
|
||||||
self.kwargs["container_name"],
|
self.kwargs["container_name"],
|
||||||
self.kwargs["object_path"],
|
self.kwargs["object_path"],
|
||||||
@ -301,7 +301,6 @@ class ObjectDetailView(forms.ModalFormMixin, generic.TemplateView):
|
|||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to retrieve details.'),
|
_('Unable to retrieve details.'),
|
||||||
redirect=redirect)
|
redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(ObjectDetailView, self).get_context_data(**kwargs)
|
context = super(ObjectDetailView, self).get_context_data(**kwargs)
|
||||||
|
@ -38,6 +38,8 @@ class IndexView(horizon_tables.DataTableView):
|
|||||||
def _get_extra_data(self, backup):
|
def _get_extra_data(self, backup):
|
||||||
"""Apply extra info to the backup."""
|
"""Apply extra info to the backup."""
|
||||||
instance_id = backup.instance_id
|
instance_id = backup.instance_id
|
||||||
|
# TODO(rdopieralski) It's not clear where this attribute is supposed
|
||||||
|
# to come from. At first glance it looks like it will always be {}.
|
||||||
if not hasattr(self, '_instances'):
|
if not hasattr(self, '_instances'):
|
||||||
self._instances = {}
|
self._instances = {}
|
||||||
instance = self._instances.get(instance_id)
|
instance = self._instances.get(instance_id)
|
||||||
|
@ -26,6 +26,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import tables as horizon_tables
|
from horizon import tables as horizon_tables
|
||||||
from horizon import tabs as horizon_tabs
|
from horizon import tabs as horizon_tabs
|
||||||
|
from horizon.utils import memoized
|
||||||
from horizon import workflows as horizon_workflows
|
from horizon import workflows as horizon_workflows
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
@ -44,17 +45,18 @@ class IndexView(horizon_tables.DataTableView):
|
|||||||
def has_more_data(self, table):
|
def has_more_data(self, table):
|
||||||
return self._more
|
return self._more
|
||||||
|
|
||||||
def _extra_data(self, instance):
|
@memoized.memoized_method
|
||||||
if not hasattr(self, '_flavors'):
|
def get_flavors(self):
|
||||||
try:
|
try:
|
||||||
flavors = api.trove.flavor_list(self.request)
|
flavors = api.trove.flavor_list(self.request)
|
||||||
except Exception:
|
except Exception:
|
||||||
flavors = []
|
flavors = []
|
||||||
msg = _('Unable to retrieve database size information.')
|
msg = _('Unable to retrieve database size information.')
|
||||||
exceptions.handle(self.request, msg)
|
exceptions.handle(self.request, msg)
|
||||||
self._flavors = SortedDict([(unicode(flavor.id), flavor)
|
return SortedDict((unicode(flavor.id), flavor) for flavor in flavors)
|
||||||
for flavor in flavors])
|
|
||||||
flavor = self._flavors.get(instance.flavor["id"])
|
def _extra_data(self, instance):
|
||||||
|
flavor = self.get_flavors().get(instance.flavor["id"])
|
||||||
if flavor is not None:
|
if flavor is not None:
|
||||||
instance.full_flavor = flavor
|
instance.full_flavor = flavor
|
||||||
return instance
|
return instance
|
||||||
@ -95,8 +97,8 @@ class DetailView(horizon_tabs.TabbedTableView):
|
|||||||
context["instance"] = self.get_data()
|
context["instance"] = self.get_data()
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
if not hasattr(self, "_instance"):
|
|
||||||
try:
|
try:
|
||||||
LOG.info("Obtaining instance for detailed view ")
|
LOG.info("Obtaining instance for detailed view ")
|
||||||
instance_id = self.kwargs['instance_id']
|
instance_id = self.kwargs['instance_id']
|
||||||
@ -112,8 +114,7 @@ class DetailView(horizon_tabs.TabbedTableView):
|
|||||||
except Exception:
|
except Exception:
|
||||||
LOG.error('Unable to retrieve flavor details'
|
LOG.error('Unable to retrieve flavor details'
|
||||||
' for database instance: %s') % instance_id
|
' for database instance: %s') % instance_id
|
||||||
self._instance = instance
|
return instance
|
||||||
return self._instance
|
|
||||||
|
|
||||||
def get_tabs(self, request, *args, **kwargs):
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
instance = self.get_data()
|
instance = self.get_data()
|
||||||
|
@ -20,6 +20,7 @@ from django.conf import settings # noqa
|
|||||||
from django.utils.translation import ugettext_lazy as _ # noqa
|
from django.utils.translation import ugettext_lazy as _ # noqa
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
|
from horizon.utils import memoized
|
||||||
from horizon import workflows
|
from horizon import workflows
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
@ -40,14 +41,13 @@ class SetInstanceDetailsAction(workflows.Action):
|
|||||||
name = _("Details")
|
name = _("Details")
|
||||||
help_text_template = ("project/databases/_launch_details_help.html")
|
help_text_template = ("project/databases/_launch_details_help.html")
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def flavors(self, request):
|
def flavors(self, request):
|
||||||
if not hasattr(self, '_flavors'):
|
|
||||||
try:
|
try:
|
||||||
self._flavors = api.trove.flavor_list(request)
|
return api.trove.flavor_list(request)
|
||||||
except Exception:
|
except Exception:
|
||||||
LOG.exception("Exception while obtaining flavors list")
|
LOG.exception("Exception while obtaining flavors list")
|
||||||
self._flavors = []
|
self._flavors = []
|
||||||
return self._flavors
|
|
||||||
|
|
||||||
def populate_flavor_choices(self, request, context):
|
def populate_flavor_choices(self, request, context):
|
||||||
flavor_list = [(f.id, "%s" % f.name) for f in self.flavors(request)]
|
flavor_list = [(f.id, "%s" % f.name) for f in self.flavors(request)]
|
||||||
|
@ -24,6 +24,7 @@ from horizon import exceptions
|
|||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import messages
|
from horizon import messages
|
||||||
from horizon import tabs
|
from horizon import tabs
|
||||||
|
from horizon.utils import memoized
|
||||||
from horizon import workflows
|
from horizon import workflows
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
@ -131,17 +132,17 @@ class UpdateRuleView(forms.ModalFormView):
|
|||||||
context['name'] = obj.name
|
context['name'] = obj.name
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_object(self, *args, **kwargs):
|
def _get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
rule_id = self.kwargs['rule_id']
|
rule_id = self.kwargs['rule_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.fwaas.rule_get(self.request, rule_id)
|
rule = api.fwaas.rule_get(self.request, rule_id)
|
||||||
self._object.set_id_as_name_if_empty()
|
rule.set_id_as_name_if_empty()
|
||||||
|
return rule
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = self.success_url
|
redirect = self.success_url
|
||||||
msg = _('Unable to retrieve rule details.')
|
msg = _('Unable to retrieve rule details.')
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
rule = self._get_object()
|
rule = self._get_object()
|
||||||
@ -163,17 +164,17 @@ class UpdatePolicyView(forms.ModalFormView):
|
|||||||
context['name'] = obj.name
|
context['name'] = obj.name
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_object(self, *args, **kwargs):
|
def _get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
policy_id = self.kwargs['policy_id']
|
policy_id = self.kwargs['policy_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.fwaas.policy_get(self.request, policy_id)
|
policy = api.fwaas.policy_get(self.request, policy_id)
|
||||||
self._object.set_id_as_name_if_empty()
|
policy.set_id_as_name_if_empty()
|
||||||
|
return policy
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = self.success_url
|
redirect = self.success_url
|
||||||
msg = _('Unable to retrieve policy details.')
|
msg = _('Unable to retrieve policy details.')
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
policy = self._get_object()
|
policy = self._get_object()
|
||||||
@ -195,18 +196,18 @@ class UpdateFirewallView(forms.ModalFormView):
|
|||||||
context['name'] = obj.name
|
context['name'] = obj.name
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_object(self, *args, **kwargs):
|
def _get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
firewall_id = self.kwargs['firewall_id']
|
firewall_id = self.kwargs['firewall_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.fwaas.firewall_get(self.request,
|
firewall = api.fwaas.firewall_get(self.request,
|
||||||
firewall_id)
|
firewall_id)
|
||||||
self._object.set_id_as_name_if_empty()
|
firewall.set_id_as_name_if_empty()
|
||||||
|
return firewall
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = self.success_url
|
redirect = self.success_url
|
||||||
msg = _('Unable to retrieve firewall details.')
|
msg = _('Unable to retrieve firewall details.')
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
firewall = self._get_object()
|
firewall = self._get_object()
|
||||||
@ -229,17 +230,17 @@ class InsertRuleToPolicyView(forms.ModalFormView):
|
|||||||
context['name'] = obj.name
|
context['name'] = obj.name
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_object(self, *args, **kwargs):
|
def _get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
policy_id = self.kwargs['policy_id']
|
policy_id = self.kwargs['policy_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.fwaas.policy_get(self.request, policy_id)
|
policy = api.fwaas.policy_get(self.request, policy_id)
|
||||||
self._object.set_id_as_name_if_empty()
|
policy.set_id_as_name_if_empty()
|
||||||
|
return policy
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = self.success_url
|
redirect = self.success_url
|
||||||
msg = _('Unable to retrieve policy details.')
|
msg = _('Unable to retrieve policy details.')
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
policy = self._get_object()
|
policy = self._get_object()
|
||||||
@ -263,17 +264,17 @@ class RemoveRuleFromPolicyView(forms.ModalFormView):
|
|||||||
context['name'] = obj.name
|
context['name'] = obj.name
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_object(self, *args, **kwargs):
|
def _get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
policy_id = self.kwargs['policy_id']
|
policy_id = self.kwargs['policy_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.fwaas.policy_get(self.request, policy_id)
|
policy = api.fwaas.policy_get(self.request, policy_id)
|
||||||
self._object.set_id_as_name_if_empty()
|
policy.set_id_as_name_if_empty()
|
||||||
|
return policy
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = self.success_url
|
redirect = self.success_url
|
||||||
msg = _('Unable to retrieve policy details.')
|
msg = _('Unable to retrieve policy details.')
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
policy = self._get_object()
|
policy = self._get_object()
|
||||||
|
@ -28,6 +28,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tabs
|
from horizon import tabs
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
|
|
||||||
@ -49,16 +50,14 @@ class UpdateView(forms.ModalFormView):
|
|||||||
template_name = 'project/images_and_snapshots/images/update.html'
|
template_name = 'project/images_and_snapshots/images/update.html'
|
||||||
success_url = reverse_lazy("horizon:project:images_and_snapshots:index")
|
success_url = reverse_lazy("horizon:project:images_and_snapshots:index")
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
try:
|
try:
|
||||||
self._object = api.glance.image_get(self.request,
|
return api.glance.image_get(self.request, self.kwargs['image_id'])
|
||||||
self.kwargs['image_id'])
|
|
||||||
except Exception:
|
except Exception:
|
||||||
msg = _('Unable to retrieve image.')
|
msg = _('Unable to retrieve image.')
|
||||||
url = reverse('horizon:project:images_and_snapshots:index')
|
url = reverse('horizon:project:images_and_snapshots:index')
|
||||||
exceptions.handle(self.request, msg, redirect=url)
|
exceptions.handle(self.request, msg, redirect=url)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(UpdateView, self).get_context_data(**kwargs)
|
context = super(UpdateView, self).get_context_data(**kwargs)
|
||||||
@ -88,19 +87,16 @@ class DetailView(tabs.TabView):
|
|||||||
context["image"] = self.get_data()
|
context["image"] = self.get_data()
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
if not hasattr(self, "_image"):
|
|
||||||
try:
|
try:
|
||||||
image_id = self.kwargs['image_id']
|
return api.glance.image_get(self.request, self.kwargs['image_id'])
|
||||||
self._image = api.glance.image_get(self.request, image_id)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
url = reverse('horizon:project:images_and_snapshots:index')
|
url = reverse('horizon:project:images_and_snapshots:index')
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to retrieve image details.'),
|
_('Unable to retrieve image details.'),
|
||||||
redirect=url)
|
redirect=url)
|
||||||
|
|
||||||
return self._image
|
|
||||||
|
|
||||||
def get_tabs(self, request, *args, **kwargs):
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
image = self.get_data()
|
image = self.get_data()
|
||||||
return self.tab_group_class(request, image=image, **kwargs)
|
return self.tab_group_class(request, image=image, **kwargs)
|
||||||
|
@ -27,6 +27,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
|
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
|
|
||||||
@ -39,17 +40,16 @@ class CreateView(forms.ModalFormView):
|
|||||||
template_name = 'project/images_and_snapshots/snapshots/create.html'
|
template_name = 'project/images_and_snapshots/snapshots/create.html'
|
||||||
success_url = reverse_lazy("horizon:project:images_and_snapshots:index")
|
success_url = reverse_lazy("horizon:project:images_and_snapshots:index")
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
try:
|
try:
|
||||||
self._object = api.nova.server_get(self.request,
|
return api.nova.server_get(self.request,
|
||||||
self.kwargs["instance_id"])
|
self.kwargs["instance_id"])
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse('horizon:project:instances:index')
|
redirect = reverse('horizon:project:instances:index')
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_("Unable to retrieve instance."),
|
_("Unable to retrieve instance."),
|
||||||
redirect=redirect)
|
redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
return {"instance_id": self.kwargs["instance_id"]}
|
return {"instance_id": self.kwargs["instance_id"]}
|
||||||
|
@ -29,6 +29,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
from horizon import tabs
|
from horizon import tabs
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.api import base
|
from openstack_dashboard.api import base
|
||||||
@ -95,20 +96,17 @@ class DetailView(tabs.TabView):
|
|||||||
context["snapshot"] = self.get_data()
|
context["snapshot"] = self.get_data()
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
if not hasattr(self, "_snapshot"):
|
|
||||||
try:
|
try:
|
||||||
snapshot_id = self.kwargs['snapshot_id']
|
snapshot_id = self.kwargs['snapshot_id']
|
||||||
self._snapshot = api.cinder.volume_snapshot_get(self.request,
|
return api.cinder.volume_snapshot_get(self.request, snapshot_id)
|
||||||
snapshot_id)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
url = reverse('horizon:project:images_and_snapshots:index')
|
url = reverse('horizon:project:images_and_snapshots:index')
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to retrieve snapshot details.'),
|
_('Unable to retrieve snapshot details.'),
|
||||||
redirect=url)
|
redirect=url)
|
||||||
|
|
||||||
return self._snapshot
|
|
||||||
|
|
||||||
def get_tabs(self, request, *args, **kwargs):
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
snapshot = self.get_data()
|
snapshot = self.get_data()
|
||||||
return self.tab_group_class(request, snapshot=snapshot, **kwargs)
|
return self.tab_group_class(request, snapshot=snapshot, **kwargs)
|
||||||
|
@ -32,6 +32,7 @@ from horizon import exceptions
|
|||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
from horizon import tabs
|
from horizon import tabs
|
||||||
|
from horizon.utils import memoized
|
||||||
from horizon import workflows
|
from horizon import workflows
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
@ -172,16 +173,15 @@ class UpdateView(workflows.WorkflowView):
|
|||||||
context["instance_id"] = self.kwargs['instance_id']
|
context["instance_id"] = self.kwargs['instance_id']
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self, *args, **kwargs):
|
def get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
instance_id = self.kwargs['instance_id']
|
instance_id = self.kwargs['instance_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.nova.server_get(self.request, instance_id)
|
return api.nova.server_get(self.request, instance_id)
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse("horizon:project:instances:index")
|
redirect = reverse("horizon:project:instances:index")
|
||||||
msg = _('Unable to retrieve instance details.')
|
msg = _('Unable to retrieve instance details.')
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
initial = super(UpdateView, self).get_initial()
|
initial = super(UpdateView, self).get_initial()
|
||||||
@ -214,8 +214,8 @@ class DetailView(tabs.TabView):
|
|||||||
context["instance"] = self.get_data()
|
context["instance"] = self.get_data()
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
if not hasattr(self, "_instance"):
|
|
||||||
try:
|
try:
|
||||||
instance_id = self.kwargs['instance_id']
|
instance_id = self.kwargs['instance_id']
|
||||||
instance = api.nova.server_get(self.request, instance_id)
|
instance = api.nova.server_get(self.request, instance_id)
|
||||||
@ -233,8 +233,7 @@ class DetailView(tabs.TabView):
|
|||||||
_('Unable to retrieve details for '
|
_('Unable to retrieve details for '
|
||||||
'instance "%s".') % instance_id,
|
'instance "%s".') % instance_id,
|
||||||
redirect=redirect)
|
redirect=redirect)
|
||||||
self._instance = instance
|
return instance
|
||||||
return self._instance
|
|
||||||
|
|
||||||
def get_tabs(self, request, *args, **kwargs):
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
instance = self.get_data()
|
instance = self.get_data()
|
||||||
@ -250,35 +249,33 @@ class ResizeView(workflows.WorkflowView):
|
|||||||
context["instance_id"] = self.kwargs['instance_id']
|
context["instance_id"] = self.kwargs['instance_id']
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self, *args, **kwargs):
|
def get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
instance_id = self.kwargs['instance_id']
|
instance_id = self.kwargs['instance_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.nova.server_get(self.request, instance_id)
|
instance = api.nova.server_get(self.request, instance_id)
|
||||||
flavor_id = self._object.flavor['id']
|
flavor_id = instance.flavor['id']
|
||||||
flavors = self.get_flavors()
|
flavors = self.get_flavors()
|
||||||
if flavor_id in flavors:
|
if flavor_id in flavors:
|
||||||
self._object.flavor_name = flavors[flavor_id].name
|
instance.flavor_name = flavors[flavor_id].name
|
||||||
else:
|
else:
|
||||||
flavor = api.nova.flavor_get(self.request, flavor_id)
|
flavor = api.nova.flavor_get(self.request, flavor_id)
|
||||||
self._object.flavor_name = flavor.name
|
instance.flavor_name = flavor.name
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse("horizon:project:instances:index")
|
redirect = reverse("horizon:project:instances:index")
|
||||||
msg = _('Unable to retrieve instance details.')
|
msg = _('Unable to retrieve instance details.')
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
return instance
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_flavors(self, *args, **kwargs):
|
def get_flavors(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_flavors"):
|
|
||||||
try:
|
try:
|
||||||
flavors = api.nova.flavor_list(self.request)
|
flavors = api.nova.flavor_list(self.request)
|
||||||
self._flavors = SortedDict([(str(flavor.id), flavor)
|
return SortedDict((str(flavor.id), flavor) for flavor in flavors)
|
||||||
for flavor in flavors])
|
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse("horizon:project:instances:index")
|
redirect = reverse("horizon:project:instances:index")
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to retrieve flavors.'), redirect=redirect)
|
_('Unable to retrieve flavors.'), redirect=redirect)
|
||||||
return self._flavors
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
initial = super(ResizeView, self).get_initial()
|
initial = super(ResizeView, self).get_initial()
|
||||||
|
@ -21,6 +21,7 @@ from horizon import exceptions
|
|||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import messages
|
from horizon import messages
|
||||||
from horizon import tabs
|
from horizon import tabs
|
||||||
|
from horizon.utils import memoized
|
||||||
from horizon import workflows
|
from horizon import workflows
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
@ -162,16 +163,15 @@ class UpdatePoolView(forms.ModalFormView):
|
|||||||
context["pool_id"] = self.kwargs['pool_id']
|
context["pool_id"] = self.kwargs['pool_id']
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_object(self, *args, **kwargs):
|
def _get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
pool_id = self.kwargs['pool_id']
|
pool_id = self.kwargs['pool_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.lbaas.pool_get(self.request, pool_id)
|
return api.lbaas.pool_get(self.request, pool_id)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
redirect = self.success_url
|
redirect = self.success_url
|
||||||
msg = _('Unable to retrieve pool details. %s') % e
|
msg = _('Unable to retrieve pool details. %s') % e
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
pool = self._get_object()
|
pool = self._get_object()
|
||||||
@ -193,16 +193,15 @@ class UpdateVipView(forms.ModalFormView):
|
|||||||
context["vip_id"] = self.kwargs['vip_id']
|
context["vip_id"] = self.kwargs['vip_id']
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_object(self, *args, **kwargs):
|
def _get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
vip_id = self.kwargs['vip_id']
|
vip_id = self.kwargs['vip_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.lbaas.vip_get(self.request, vip_id)
|
return api.lbaas.vip_get(self.request, vip_id)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
redirect = self.success_url
|
redirect = self.success_url
|
||||||
msg = _('Unable to retrieve VIP details. %s') % e
|
msg = _('Unable to retrieve VIP details. %s') % e
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
vip = self._get_object()
|
vip = self._get_object()
|
||||||
@ -238,16 +237,15 @@ class UpdateMemberView(forms.ModalFormView):
|
|||||||
context["member_id"] = self.kwargs['member_id']
|
context["member_id"] = self.kwargs['member_id']
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_object(self, *args, **kwargs):
|
def _get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
member_id = self.kwargs['member_id']
|
member_id = self.kwargs['member_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.lbaas.member_get(self.request, member_id)
|
return api.lbaas.member_get(self.request, member_id)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
redirect = self.success_url
|
redirect = self.success_url
|
||||||
msg = _('Unable to retrieve member details. %s') % e
|
msg = _('Unable to retrieve member details. %s') % e
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
member = self._get_object()
|
member = self._get_object()
|
||||||
@ -268,17 +266,15 @@ class UpdateMonitorView(forms.ModalFormView):
|
|||||||
context["monitor_id"] = self.kwargs['monitor_id']
|
context["monitor_id"] = self.kwargs['monitor_id']
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_object(self, *args, **kwargs):
|
def _get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
monitor_id = self.kwargs['monitor_id']
|
monitor_id = self.kwargs['monitor_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.lbaas.pool_health_monitor_get(
|
return api.lbaas.pool_health_monitor_get(self.request, monitor_id)
|
||||||
self.request, monitor_id)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
redirect = self.success_url
|
redirect = self.success_url
|
||||||
msg = _('Unable to retrieve health monitor details. %s') % e
|
msg = _('Unable to retrieve health monitor details. %s') % e
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
monitor = self._get_object()
|
monitor = self._get_object()
|
||||||
|
@ -20,6 +20,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tabs
|
from horizon import tabs
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
|
|
||||||
@ -44,17 +45,16 @@ class UpdateView(forms.ModalFormView):
|
|||||||
return reverse(self.success_url,
|
return reverse(self.success_url,
|
||||||
args=(self.kwargs['network_id'],))
|
args=(self.kwargs['network_id'],))
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_object(self, *args, **kwargs):
|
def _get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
port_id = self.kwargs['port_id']
|
port_id = self.kwargs['port_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.neutron.port_get(self.request, port_id)
|
return api.neutron.port_get(self.request, port_id)
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse("horizon:project:networks:detail",
|
redirect = reverse("horizon:project:networks:detail",
|
||||||
args=(self.kwargs['network_id'],))
|
args=(self.kwargs['network_id'],))
|
||||||
msg = _('Unable to retrieve port details')
|
msg = _('Unable to retrieve port details')
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(UpdateView, self).get_context_data(**kwargs)
|
context = super(UpdateView, self).get_context_data(**kwargs)
|
||||||
|
@ -22,6 +22,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
|
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
|
|
||||||
@ -87,8 +88,8 @@ class SubnetsTable(tables.DataTable):
|
|||||||
gateway_ip = tables.Column("gateway_ip", verbose_name=_("Gateway IP"))
|
gateway_ip = tables.Column("gateway_ip", verbose_name=_("Gateway IP"))
|
||||||
failure_url = reverse_lazy('horizon:project:networks:index')
|
failure_url = reverse_lazy('horizon:project:networks:index')
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_network(self):
|
def _get_network(self):
|
||||||
if not hasattr(self, "_network"):
|
|
||||||
try:
|
try:
|
||||||
network_id = self.kwargs['network_id']
|
network_id = self.kwargs['network_id']
|
||||||
network = api.neutron.network_get(self.request, network_id)
|
network = api.neutron.network_get(self.request, network_id)
|
||||||
@ -97,8 +98,7 @@ class SubnetsTable(tables.DataTable):
|
|||||||
msg = _('Unable to retrieve details for network "%s".') \
|
msg = _('Unable to retrieve details for network "%s".') \
|
||||||
% (network_id)
|
% (network_id)
|
||||||
exceptions.handle(self.request, msg, redirect=self.failure_url)
|
exceptions.handle(self.request, msg, redirect=self.failure_url)
|
||||||
self._network = network
|
return network
|
||||||
return self._network
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
name = "subnets"
|
name = "subnets"
|
||||||
|
@ -22,6 +22,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
|
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import tabs
|
from horizon import tabs
|
||||||
|
from horizon.utils import memoized
|
||||||
from horizon import workflows
|
from horizon import workflows
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
@ -35,18 +36,17 @@ from openstack_dashboard.dashboards.project.networks.subnets \
|
|||||||
class CreateView(workflows.WorkflowView):
|
class CreateView(workflows.WorkflowView):
|
||||||
workflow_class = project_workflows.CreateSubnet
|
workflow_class = project_workflows.CreateSubnet
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
try:
|
try:
|
||||||
network_id = self.kwargs["network_id"]
|
network_id = self.kwargs["network_id"]
|
||||||
self._object = api.neutron.network_get(self.request,
|
network = api.neutron.network_get(self.request, network_id)
|
||||||
network_id)
|
network.set_id_as_name_if_empty()
|
||||||
self._object.set_id_as_name_if_empty()
|
return network
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse('horizon:project:networks:index')
|
redirect = reverse('horizon:project:networks:index')
|
||||||
msg = _("Unable to retrieve network.")
|
msg = _("Unable to retrieve network.")
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
network = self.get_object()
|
network = self.get_object()
|
||||||
@ -57,16 +57,15 @@ class CreateView(workflows.WorkflowView):
|
|||||||
class UpdateView(workflows.WorkflowView):
|
class UpdateView(workflows.WorkflowView):
|
||||||
workflow_class = project_workflows.UpdateSubnet
|
workflow_class = project_workflows.UpdateSubnet
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_object(self, *args, **kwargs):
|
def _get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
subnet_id = self.kwargs['subnet_id']
|
subnet_id = self.kwargs['subnet_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.neutron.subnet_get(self.request, subnet_id)
|
return api.neutron.subnet_get(self.request, subnet_id)
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse("horizon:project:networks:index")
|
redirect = reverse("horizon:project:networks:index")
|
||||||
msg = _('Unable to retrieve subnet details')
|
msg = _('Unable to retrieve subnet details')
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
initial = super(UpdateView, self).get_initial()
|
initial = super(UpdateView, self).get_initial()
|
||||||
|
@ -23,6 +23,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
|
from horizon.utils import memoized
|
||||||
from horizon import workflows
|
from horizon import workflows
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
@ -75,17 +76,15 @@ class UpdateView(forms.ModalFormView):
|
|||||||
context["network_id"] = self.kwargs['network_id']
|
context["network_id"] = self.kwargs['network_id']
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_object(self, *args, **kwargs):
|
def _get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
network_id = self.kwargs['network_id']
|
network_id = self.kwargs['network_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.neutron.network_get(self.request,
|
return api.neutron.network_get(self.request, network_id)
|
||||||
network_id)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = self.success_url
|
redirect = self.success_url
|
||||||
msg = _('Unable to retrieve network details.')
|
msg = _('Unable to retrieve network details.')
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
network = self._get_object()
|
network = self._get_object()
|
||||||
@ -125,8 +124,8 @@ class DetailView(tables.MultiTableView):
|
|||||||
p.set_id_as_name_if_empty()
|
p.set_id_as_name_if_empty()
|
||||||
return ports
|
return ports
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_data(self):
|
def _get_data(self):
|
||||||
if not hasattr(self, "_network"):
|
|
||||||
try:
|
try:
|
||||||
network_id = self.kwargs['network_id']
|
network_id = self.kwargs['network_id']
|
||||||
network = api.neutron.network_get(self.request, network_id)
|
network = api.neutron.network_get(self.request, network_id)
|
||||||
@ -135,8 +134,7 @@ class DetailView(tables.MultiTableView):
|
|||||||
msg = _('Unable to retrieve details for network "%s".') \
|
msg = _('Unable to retrieve details for network "%s".') \
|
||||||
% (network_id)
|
% (network_id)
|
||||||
exceptions.handle(self.request, msg, redirect=self.failure_url)
|
exceptions.handle(self.request, msg, redirect=self.failure_url)
|
||||||
self._network = network
|
return network
|
||||||
return self._network
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
|
@ -21,6 +21,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
|
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.dashboards.project.routers.extensions.routerrules\
|
from openstack_dashboard.dashboards.project.routers.extensions.routerrules\
|
||||||
@ -40,17 +41,15 @@ class AddRouterRuleView(forms.ModalFormView):
|
|||||||
return reverse(self.success_url,
|
return reverse(self.success_url,
|
||||||
args=(self.kwargs['router_id'],))
|
args=(self.kwargs['router_id'],))
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
try:
|
try:
|
||||||
router_id = self.kwargs["router_id"]
|
router_id = self.kwargs["router_id"]
|
||||||
self._object = api.neutron.router_get(self.request,
|
return api.neutron.router_get(self.request, router_id)
|
||||||
router_id)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse(self.failure_url, args=[router_id])
|
redirect = reverse(self.failure_url, args=[router_id])
|
||||||
msg = _("Unable to retrieve router.")
|
msg = _("Unable to retrieve router.")
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(AddRouterRuleView, self).get_context_data(**kwargs)
|
context = super(AddRouterRuleView, self).get_context_data(**kwargs)
|
||||||
|
@ -20,6 +20,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
|
|||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tabs
|
from horizon import tabs
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
|
|
||||||
@ -39,17 +40,15 @@ class AddInterfaceView(forms.ModalFormView):
|
|||||||
return reverse(self.success_url,
|
return reverse(self.success_url,
|
||||||
args=(self.kwargs['router_id'],))
|
args=(self.kwargs['router_id'],))
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
try:
|
try:
|
||||||
router_id = self.kwargs["router_id"]
|
router_id = self.kwargs["router_id"]
|
||||||
self._object = api.neutron.router_get(self.request,
|
return api.neutron.router_get(self.request, router_id)
|
||||||
router_id)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse(self.failure_url, args=[router_id])
|
redirect = reverse(self.failure_url, args=[router_id])
|
||||||
msg = _("Unable to retrieve router.")
|
msg = _("Unable to retrieve router.")
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(AddInterfaceView, self).get_context_data(**kwargs)
|
context = super(AddInterfaceView, self).get_context_data(**kwargs)
|
||||||
@ -71,17 +70,15 @@ class SetGatewayView(forms.ModalFormView):
|
|||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return reverse(self.success_url)
|
return reverse(self.success_url)
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
try:
|
try:
|
||||||
router_id = self.kwargs["router_id"]
|
router_id = self.kwargs["router_id"]
|
||||||
self._object = api.neutron.router_get(self.request,
|
return api.neutron.router_get(self.request, router_id)
|
||||||
router_id)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = reverse(self.failure_url)
|
redirect = reverse(self.failure_url)
|
||||||
msg = _("Unable to set gateway.")
|
msg = _("Unable to set gateway.")
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(SetGatewayView, self).get_context_data(**kwargs)
|
context = super(SetGatewayView, self).get_context_data(**kwargs)
|
||||||
|
@ -27,6 +27,7 @@ from horizon import exceptions
|
|||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
from horizon import tabs
|
from horizon import tabs
|
||||||
|
from horizon.utils import memoized
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.dashboards.project.routers\
|
from openstack_dashboard.dashboards.project.routers\
|
||||||
import forms as project_forms
|
import forms as project_forms
|
||||||
@ -90,8 +91,8 @@ class DetailView(tabs.TabbedTableView):
|
|||||||
template_name = 'project/routers/detail.html'
|
template_name = 'project/routers/detail.html'
|
||||||
failure_url = reverse_lazy('horizon:project:routers:index')
|
failure_url = reverse_lazy('horizon:project:routers:index')
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_data(self):
|
def _get_data(self):
|
||||||
if not hasattr(self, "_router"):
|
|
||||||
try:
|
try:
|
||||||
router_id = self.kwargs['router_id']
|
router_id = self.kwargs['router_id']
|
||||||
router = api.neutron.router_get(self.request, router_id)
|
router = api.neutron.router_get(self.request, router_id)
|
||||||
@ -112,9 +113,7 @@ class DetailView(tabs.TabbedTableView):
|
|||||||
% (ext_net_id)
|
% (ext_net_id)
|
||||||
exceptions.handle(self.request, msg)
|
exceptions.handle(self.request, msg)
|
||||||
router.external_gateway_info['network'] = ext_net_id
|
router.external_gateway_info['network'] = ext_net_id
|
||||||
|
return router
|
||||||
self._router = router
|
|
||||||
return self._router
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
context = super(DetailView, self).get_context_data(**kwargs)
|
||||||
|
@ -19,6 +19,7 @@ from horizon import exceptions
|
|||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
from horizon import tabs
|
from horizon import tabs
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from django.core.urlresolvers import reverse # noqa
|
from django.core.urlresolvers import reverse # noqa
|
||||||
from django.core.urlresolvers import reverse_lazy # noqa
|
from django.core.urlresolvers import reverse_lazy # noqa
|
||||||
@ -100,19 +101,18 @@ class DetailView(tabs.TabView):
|
|||||||
context["stack"] = self.get_data(self.request)
|
context["stack"] = self.get_data(self.request)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_data(self, request, **kwargs):
|
def get_data(self, request, **kwargs):
|
||||||
if not hasattr(self, "_stack"):
|
|
||||||
stack_id = kwargs['stack_id']
|
stack_id = kwargs['stack_id']
|
||||||
try:
|
try:
|
||||||
stack = api.heat.stack_get(request, stack_id)
|
stack = api.heat.stack_get(request, stack_id)
|
||||||
self._stack = stack
|
|
||||||
request.session['stack_id'] = stack.id
|
request.session['stack_id'] = stack.id
|
||||||
request.session['stack_name'] = stack.stack_name
|
request.session['stack_name'] = stack.stack_name
|
||||||
|
return stack
|
||||||
except Exception:
|
except Exception:
|
||||||
msg = _("Unable to retrieve stack.")
|
msg = _("Unable to retrieve stack.")
|
||||||
redirect = reverse('horizon:project:stacks:index')
|
redirect = reverse('horizon:project:stacks:index')
|
||||||
exceptions.handle(request, msg, redirect=redirect)
|
exceptions.handle(request, msg, redirect=redirect)
|
||||||
return self._stack
|
|
||||||
|
|
||||||
def get_tabs(self, request, **kwargs):
|
def get_tabs(self, request, **kwargs):
|
||||||
stack = self.get_data(request, **kwargs)
|
stack = self.get_data(request, **kwargs)
|
||||||
@ -129,33 +129,31 @@ class ResourceView(tabs.TabView):
|
|||||||
context["metadata"] = self.get_metadata(self.request, **kwargs)
|
context["metadata"] = self.get_metadata(self.request, **kwargs)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_data(self, request, **kwargs):
|
def get_data(self, request, **kwargs):
|
||||||
if not hasattr(self, "_resource"):
|
|
||||||
try:
|
try:
|
||||||
resource = api.heat.resource_get(
|
resource = api.heat.resource_get(
|
||||||
request,
|
request,
|
||||||
kwargs['stack_id'],
|
kwargs['stack_id'],
|
||||||
kwargs['resource_name'])
|
kwargs['resource_name'])
|
||||||
self._resource = resource
|
return resource
|
||||||
except Exception:
|
except Exception:
|
||||||
msg = _("Unable to retrieve resource.")
|
msg = _("Unable to retrieve resource.")
|
||||||
redirect = reverse('horizon:project:stacks:index')
|
redirect = reverse('horizon:project:stacks:index')
|
||||||
exceptions.handle(request, msg, redirect=redirect)
|
exceptions.handle(request, msg, redirect=redirect)
|
||||||
return self._resource
|
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_metadata(self, request, **kwargs):
|
def get_metadata(self, request, **kwargs):
|
||||||
if not hasattr(self, "_metadata"):
|
|
||||||
try:
|
try:
|
||||||
metadata = api.heat.resource_metadata_get(
|
metadata = api.heat.resource_metadata_get(
|
||||||
request,
|
request,
|
||||||
kwargs['stack_id'],
|
kwargs['stack_id'],
|
||||||
kwargs['resource_name'])
|
kwargs['resource_name'])
|
||||||
self._metadata = json.dumps(metadata, indent=2)
|
return json.dumps(metadata, indent=2)
|
||||||
except Exception:
|
except Exception:
|
||||||
msg = _("Unable to retrieve metadata.")
|
msg = _("Unable to retrieve metadata.")
|
||||||
redirect = reverse('horizon:project:stacks:index')
|
redirect = reverse('horizon:project:stacks:index')
|
||||||
exceptions.handle(request, msg, redirect=redirect)
|
exceptions.handle(request, msg, redirect=redirect)
|
||||||
return self._metadata
|
|
||||||
|
|
||||||
def get_tabs(self, request, **kwargs):
|
def get_tabs(self, request, **kwargs):
|
||||||
resource = self.get_data(request, **kwargs)
|
resource = self.get_data(request, **kwargs)
|
||||||
|
@ -27,6 +27,7 @@ from horizon import exceptions
|
|||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
from horizon import tabs
|
from horizon import tabs
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.api import cinder
|
from openstack_dashboard.api import cinder
|
||||||
@ -97,12 +98,12 @@ class DetailView(tabs.TabView):
|
|||||||
context["volume"] = self.get_data()
|
context["volume"] = self.get_data()
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
if not hasattr(self, "_volume"):
|
|
||||||
try:
|
try:
|
||||||
volume_id = self.kwargs['volume_id']
|
volume_id = self.kwargs['volume_id']
|
||||||
self._volume = cinder.volume_get(self.request, volume_id)
|
volume = cinder.volume_get(self.request, volume_id)
|
||||||
for att in self._volume.attachments:
|
for att in volume.attachments:
|
||||||
att['instance'] = api.nova.server_get(self.request,
|
att['instance'] = api.nova.server_get(self.request,
|
||||||
att['server_id'])
|
att['server_id'])
|
||||||
except Exception:
|
except Exception:
|
||||||
@ -110,8 +111,7 @@ class DetailView(tabs.TabView):
|
|||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to retrieve volume details.'),
|
_('Unable to retrieve volume details.'),
|
||||||
redirect=redirect)
|
redirect=redirect)
|
||||||
|
return volume
|
||||||
return self._volume
|
|
||||||
|
|
||||||
def get_tabs(self, request, *args, **kwargs):
|
def get_tabs(self, request, *args, **kwargs):
|
||||||
volume = self.get_data()
|
volume = self.get_data()
|
||||||
@ -156,16 +156,15 @@ class EditAttachmentsView(tables.DataTableView, forms.ModalFormView):
|
|||||||
template_name = 'project/volumes/attach.html'
|
template_name = 'project/volumes/attach.html'
|
||||||
success_url = reverse_lazy("horizon:project:volumes:index")
|
success_url = reverse_lazy("horizon:project:volumes:index")
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
volume_id = self.kwargs['volume_id']
|
volume_id = self.kwargs['volume_id']
|
||||||
try:
|
try:
|
||||||
self._object = cinder.volume_get(self.request, volume_id)
|
return cinder.volume_get(self.request, volume_id)
|
||||||
except Exception:
|
except Exception:
|
||||||
self._object = None
|
self._object = None
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
_('Unable to retrieve volume information.'))
|
_('Unable to retrieve volume information.'))
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
try:
|
try:
|
||||||
@ -187,11 +186,10 @@ class EditAttachmentsView(tables.DataTableView, forms.ModalFormView):
|
|||||||
return {'volume': self.get_object(),
|
return {'volume': self.get_object(),
|
||||||
'instances': instances}
|
'instances': instances}
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def get_form(self):
|
def get_form(self):
|
||||||
if not hasattr(self, "_form"):
|
|
||||||
form_class = self.get_form_class()
|
form_class = self.get_form_class()
|
||||||
self._form = super(EditAttachmentsView, self).get_form(form_class)
|
return super(EditAttachmentsView, self).get_form(form_class)
|
||||||
return self._form
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(EditAttachmentsView, self).get_context_data(**kwargs)
|
context = super(EditAttachmentsView, self).get_context_data(**kwargs)
|
||||||
|
@ -25,6 +25,7 @@ from horizon import exceptions
|
|||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import tables
|
from horizon import tables
|
||||||
from horizon import tabs
|
from horizon import tabs
|
||||||
|
from horizon.utils import memoized
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
|
|
||||||
@ -119,18 +120,18 @@ class UpdateNetworkProfileView(forms.ModalFormView):
|
|||||||
context["profile_id"] = self.kwargs['profile_id']
|
context["profile_id"] = self.kwargs['profile_id']
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@memoized.memoized_method
|
||||||
def _get_object(self, *args, **kwargs):
|
def _get_object(self, *args, **kwargs):
|
||||||
if not hasattr(self, "_object"):
|
|
||||||
profile_id = self.kwargs['profile_id']
|
profile_id = self.kwargs['profile_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.neutron.profile_get(self.request,
|
profile = api.neutron.profile_get(self.request,
|
||||||
profile_id)
|
profile_id)
|
||||||
LOG.debug("Network Profile object=%s", self._object)
|
LOG.debug("Network Profile object=%s", profile)
|
||||||
|
return profile
|
||||||
except Exception:
|
except Exception:
|
||||||
redirect = self.success_url
|
redirect = self.success_url
|
||||||
msg = _('Unable to retrieve network profile details.')
|
msg = _('Unable to retrieve network profile details.')
|
||||||
exceptions.handle(self.request, msg, redirect=redirect)
|
exceptions.handle(self.request, msg, redirect=redirect)
|
||||||
return self._object
|
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
profile = self._get_object()
|
profile = self._get_object()
|
||||||
|
Loading…
Reference in New Issue
Block a user