Moved getSidebarLinks to sitemap.sidebar
This is the fourth, and final patch, that attempts to
improve the cohesion in the base.View class.
Patch by: Sverre Rabbelier
--- a/app/soc/views/models/base.py Sat Nov 29 19:44:48 2008 +0000
+++ b/app/soc/views/models/base.py Sat Nov 29 19:45:19 2008 +0000
@@ -543,119 +543,29 @@
return helper.responses.respond(request, template, context)
- def _getSidebarItems(self, params):
- """Retrieves a list of sidebar entries for this view
-
- Params usage:
- The params dictionary is provided to the menu_text's format.
-
- sidebar: The sidebar value is returned directly if non-False
- sidebar_defaults: The sidebar_defaults are used to construct the
- sidebar items for this View. It is expected to be a tuple of
- three items, the item's url, it's menu_text, and it's
- access_type, see getSidebarLinks on how access_type is used.
- sidebar_additional: The sidebar_additional values are appended
- to the list of items verbatim, and should be in the format
- expected by getSidebarLinks.
-
- Args:
- params: a dict with params for this View.
- """
-
- # Return the found result
- if params['sidebar']:
- return params['sidebar']
-
- # Construct defaults manualy
- defaults = params['sidebar_defaults']
-
- result = []
-
- for url, menu_text, access_type in defaults:
- url = url % params['url_name'].lower()
- item = (url, menu_text % params, access_type)
- result.append(item)
-
- for item in params['sidebar_additional']:
- result.append(item)
-
- return result
-
def getSidebarLinks(self, request, params=None):
"""Returns an dictionary with one sidebar entry.
- Calls _getSidebarItems to retrieve the items that should be in the
- menu. Expected is a tuple with an url, a menu_text, and an
- access_type. The access_type is then passed to checkAccess, if it
- raises out_of_band.Error, the item will not be added.
-
Args:
request: the django request object
params: a dict with params for this View
Params usage:
- The params dictionary is passed as argument to _getSidebarItems,
- see the docstring of _getSidebarItems on how it uses it.
-
- rights: The rights dictionary is used to check if the user has
- the required rights to see a sidebar item.
- See checkAccess for more details on how the rights dictionary
- is used to check access rights.
- sidebar_heading: The sidebar_heading value is used to set the
- heading variable in the result.
- name: The name value is used if sidebar_heading is not present.
-
- Returns: A dictionary is returned with it's 'heading' value set
- as explained above. It's 'items' value is constructed by
- calling _getSidebarItems. It constists of dictionaries with a
- url and a title field.
+ The params dictionary is passed as argument to getSidebarItems
+ from the soc.views.sitemap.sidebar module, see the docstring
+ of _getSidebarItems on how it uses it.
"""
params = dicts.merge(params, self._params)
- rights = params['rights']
-
- items = []
-
- for url, menu_text, access_type in self._getSidebarItems(params):
- try:
- access.checkAccess(access_type, request, rights)
- items.append({'url': url, 'title': menu_text})
- except out_of_band.Error:
- pass
-
- if not items:
- return
-
- res = {}
-
- if 'sidebar_heading' not in params:
- params['sidebar_heading'] = params['name']
-
- res['heading'] = params['sidebar_heading']
- res['items'] = items
-
- return res
+ return sitemap.sidebar.getSidebarLinks(params)
def getDjangoURLPatterns(self, params=None):
- """Retrieves a list of sidebar entries for this view from self._params.
-
- If self._params['django_patterns'] is None default entries will be
- constructed.
+ """Retrieves a list of sidebar entries for this view
Params usage:
- The params dictionary is passed to the getKeyFieldsPatterns
- method, see it's docstring on how it is used.
- django_patterns: The django_patterns value is returned directly
- if it is non-False.
- django_patterns_defaults: The dajngo_patterns_defaults value is
- used to construct the url patterns. It is expected to be a
- list of tuples. The tuples should contain an url, a module
- name, and the name of the url. The name is used as the
- page_name passed as keyword argument, but also as the name
- by which the url is known to Django internally.
- url_name: The url_name argument is passed as argument to each
- url, together with the link_id pattern, the link_id core
- pattern, and the key fields for this View.
+ The params dictionary is passed to the getDjangoURLPatterns
+ function in the soc.views.sitemap.sitemap module, see the
+ docstring of getDjangoURLPatterns on how it uses it.
Args:
params: a dict with params for this View
--- a/app/soc/views/sitemap/sidebar.py Sat Nov 29 19:44:48 2008 +0000
+++ b/app/soc/views/sitemap/sidebar.py Sat Nov 29 19:45:19 2008 +0000
@@ -40,3 +40,97 @@
sidebar.append(menu)
return sidebar
+
+
+def getSidebarItems(params):
+ """Retrieves a list of sidebar entries for this view
+
+ Params usage:
+ The params dictionary is provided to the menu_text's format.
+
+ sidebar: The sidebar value is returned directly if non-False
+ sidebar_defaults: The sidebar_defaults are used to construct the
+ sidebar items for this View. It is expected to be a tuple of
+ three items, the item's url, it's menu_text, and it's
+ access_type, see getSidebarLinks on how access_type is used.
+ sidebar_additional: The sidebar_additional values are appended
+ to the list of items verbatim, and should be in the format
+ expected by getSidebarLinks.
+
+ Args:
+ params: a dict with params for this View.
+ """
+
+ # Return the found result
+ if params['sidebar']:
+ return params['sidebar']
+
+ # Construct defaults manualy
+ defaults = params['sidebar_defaults']
+
+ result = []
+
+ for url, menu_text, access_type in defaults:
+ url = url % params['url_name'].lower()
+ item = (url, menu_text % params, access_type)
+ result.append(item)
+
+ for item in params['sidebar_additional']:
+ result.append(item)
+
+ return result
+
+
+def getSidebarLinks(request, params=None):
+ """Returns an dictionary with one sidebar entry.
+
+ Calls getSidebarItems to retrieve the items that should be in the
+ menu. Expected is a tuple with an url, a menu_text, and an
+ access_type. The access_type is then passed to checkAccess, if it
+ raises out_of_band.Error, the item will not be added.
+
+ Args:
+ request: the django request object
+ params: a dict with params for this View
+
+ Params usage:
+ The params dictionary is passed as argument to getSidebarItems,
+ see the docstring of getSidebarItems on how it uses it.
+
+ rights: The rights dictionary is used to check if the user has
+ the required rights to see a sidebar item.
+ See checkAccess for more details on how the rights dictionary
+ is used to check access rights.
+ sidebar_heading: The sidebar_heading value is used to set the
+ heading variable in the result.
+ name: The name value is used if sidebar_heading is not present.
+
+ Returns: A dictionary is returned with it's 'heading' value set
+ as explained above. It's 'items' value is constructed by
+ calling _getSidebarItems. It constists of dictionaries with a
+ url and a title field.
+ """
+
+ rights = params['rights']
+
+ items = []
+
+ for url, menu_text, access_type in getSidebarItems(params):
+ try:
+ access.checkAccess(access_type, request, rights)
+ items.append({'url': url, 'title': menu_text})
+ except out_of_band.Error:
+ pass
+
+ if not items:
+ return
+
+ res = {}
+
+ if 'sidebar_heading' not in params:
+ params['sidebar_heading'] = params['name']
+
+ res['heading'] = params['sidebar_heading']
+ res['items'] = items
+
+ return res
--- a/app/soc/views/sitemap/sitemap.py Sat Nov 29 19:44:48 2008 +0000
+++ b/app/soc/views/sitemap/sitemap.py Sat Nov 29 19:45:19 2008 +0000
@@ -31,7 +31,7 @@
def getDjangoURLPatterns(params):
- """Retrieves a list of sidebar entries for this view from self._params.
+ """Retrieves a list of sidebar entries for this View
Params usage:
The params dictionary is passed to the getKeyFieldsPatterns