summaryrefslogtreecommitdiff
path: root/openstack_dashboard/dashboards/project/routers/views.py
diff options
context:
space:
mode:
authorRadomir Dopieralski <openstack@sheep.art.pl>2013-10-28 11:24:00 +0100
committerRadomir Dopieralski <openstack@sheep.art.pl>2013-12-18 16:46:30 +0100
commitb7537a8b8155fcf112067eb7d9d12339e280e44f (patch)
tree7d229ef9cb08f3171f19a6d13d529c3768f2ec51 /openstack_dashboard/dashboards/project/routers/views.py
parent491cda0a1f0fd6bd016b15aa2afbe54ff0318d69 (diff)
downloadhorizon-b7537a8b8155fcf112067eb7d9d12339e280e44f.tar.gz
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
Diffstat (limited to 'openstack_dashboard/dashboards/project/routers/views.py')
-rw-r--r--openstack_dashboard/dashboards/project/routers/views.py43
1 files changed, 21 insertions, 22 deletions
diff --git a/openstack_dashboard/dashboards/project/routers/views.py b/openstack_dashboard/dashboards/project/routers/views.py
index 22ac9e364..b3ebb835f 100644
--- a/openstack_dashboard/dashboards/project/routers/views.py
+++ b/openstack_dashboard/dashboards/project/routers/views.py
@@ -27,6 +27,7 @@ from horizon import exceptions
from horizon import forms
from horizon import tables
from horizon import tabs
+from horizon.utils import memoized
from openstack_dashboard import api
from openstack_dashboard.dashboards.project.routers\
import forms as project_forms
@@ -90,31 +91,29 @@ class DetailView(tabs.TabbedTableView):
template_name = 'project/routers/detail.html'
failure_url = reverse_lazy('horizon:project:routers:index')
+ @memoized.memoized_method
def _get_data(self):
- if not hasattr(self, "_router"):
+ try:
+ router_id = self.kwargs['router_id']
+ router = api.neutron.router_get(self.request, router_id)
+ router.set_id_as_name_if_empty(length=0)
+ except Exception:
+ msg = _('Unable to retrieve details for router "%s".') \
+ % (router_id)
+ exceptions.handle(self.request, msg, redirect=self.failure_url)
+ if router.external_gateway_info:
+ ext_net_id = router.external_gateway_info['network_id']
try:
- router_id = self.kwargs['router_id']
- router = api.neutron.router_get(self.request, router_id)
- router.set_id_as_name_if_empty(length=0)
+ ext_net = api.neutron.network_get(self.request, ext_net_id,
+ expand_subnet=False)
+ ext_net.set_id_as_name_if_empty(length=0)
+ router.external_gateway_info['network'] = ext_net.name
except Exception:
- msg = _('Unable to retrieve details for router "%s".') \
- % (router_id)
- exceptions.handle(self.request, msg, redirect=self.failure_url)
- if router.external_gateway_info:
- ext_net_id = router.external_gateway_info['network_id']
- try:
- ext_net = api.neutron.network_get(self.request, ext_net_id,
- expand_subnet=False)
- ext_net.set_id_as_name_if_empty(length=0)
- router.external_gateway_info['network'] = ext_net.name
- except Exception:
- msg = _('Unable to retrieve an external network "%s".') \
- % (ext_net_id)
- exceptions.handle(self.request, msg)
- router.external_gateway_info['network'] = ext_net_id
-
- self._router = router
- return self._router
+ msg = _('Unable to retrieve an external network "%s".') \
+ % (ext_net_id)
+ exceptions.handle(self.request, msg)
+ router.external_gateway_info['network'] = ext_net_id
+ return router
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)