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 /horizon/browsers | |
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 'horizon/browsers')
-rw-r--r-- | horizon/browsers/views.py | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/horizon/browsers/views.py b/horizon/browsers/views.py index baf1d907a..84daa5695 100644 --- a/horizon/browsers/views.py +++ b/horizon/browsers/views.py @@ -17,6 +17,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa from horizon.tables import MultiTableView # noqa +from horizon.utils import memoized class ResourceBrowserView(MultiTableView): @@ -32,15 +33,15 @@ class ResourceBrowserView(MultiTableView): self.navigation_selection = False super(ResourceBrowserView, self).__init__(*args, **kwargs) + @memoized.memoized_method def get_browser(self): - if not hasattr(self, "browser"): - self.browser = self.browser_class(self.request, **self.kwargs) - self.browser.set_tables(self.get_tables()) - if not self.navigation_selection: - ct = self.browser.content_table - item = self.browser.navigable_item_name.lower() - ct._no_data_message = _("Select a %s to browse.") % item - return self.browser + browser = self.browser_class(self.request, **self.kwargs) + browser.set_tables(self.get_tables()) + if not self.navigation_selection: + ct = browser.content_table + item = browser.navigable_item_name.lower() + ct._no_data_message = _("Select a %s to browse.") % item + return browser def get_context_data(self, **kwargs): context = super(ResourceBrowserView, self).get_context_data(**kwargs) |