diff options
author | Radomir Dopieralski <openstack@sheep.art.pl> | 2013-10-28 11:24:00 +0100 |
---|---|---|
committer | Radomir Dopieralski <openstack@sheep.art.pl> | 2013-12-18 16:46:30 +0100 |
commit | b7537a8b8155fcf112067eb7d9d12339e280e44f (patch) | |
tree | 7d229ef9cb08f3171f19a6d13d529c3768f2ec51 /openstack_dashboard/dashboards/project/routers/views.py | |
parent | 491cda0a1f0fd6bd016b15aa2afbe54ff0318d69 (diff) | |
download | horizon-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.py | 43 |
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) |