--- a/app/soc/views/helpers/template_helpers.py Fri Sep 19 04:28:17 2008 +0000
+++ b/app/soc/views/helpers/template_helpers.py Fri Sep 19 04:50:42 2008 +0000
@@ -57,12 +57,78 @@
return sibling_templates + default_template
+
def unescape(html):
- "Returns the given HTML with ampersands, quotes and carets decoded"
-
+ """Returns the given HTML with ampersands, quotes and carets decoded.
+ """
if not isinstance(html, basestring):
html = str(html)
html.replace('&', '&').replace('<', '<')
html.replace('>', '>').replace('"', '"').replace(''',"'")
return html
+
+
+def getSingleIndexedParamValue(request, param_name, values=()):
+ """Returns a value indexed by a query parameter in the HTTP request.
+
+ Args:
+ request: the Django HTTP request object
+ param_name: name of the query parameter in the HTTP request
+ values: list (or tuple) of ordered values; one of which is
+ retrieved by the index value of the param_name argument in
+ the HTTP request
+
+ Returns:
+ None if the query parameter was not present, was not an integer, or
+ was an integer that is not a valid [0..len(values)-1] index into
+ the values list.
+ Otherwise, returns values[int(param_name value)]
+ """
+ value_idx = request.GET.get(param_name)
+
+ if isinstance(value_idx, (tuple, list)):
+ # keep only the first argument if multiple are present
+ value_idx = value_idx[0]
+
+ try:
+ # GET parameter 'param_name' should be an integer value index
+ value_idx = int(value_idx)
+ except:
+ # ignore bogus or missing parameter values, so return None (no message)
+ return None
+
+ if value_idx < 0:
+ # value index out of range, so return None (no value)
+ return None
+
+ if value_idx >= len(values):
+ # value index out of range, so return None (no value)
+ return None
+
+ # return value associated with valid value index
+ return values[value_idx]
+
+
+def getSingleIndexedParamValueIfMissing(value, request, param_name,
+ values=()):
+ """Returns missing value indexed by a query parameter in the HTTP request.
+
+ Args:
+ value: an existing value, or a "False" value such as None
+ request, param_name, values: see getSingleIndexParamValue()
+
+ Returns:
+ value, if value is "non-False"
+ Otherwise, returns getSingleIndexedParamValue() result.
+ """
+ if value:
+ # value already present, so return it
+ return value
+
+ return getSingleIndexedParamValue(request, param_name, values=values)
+
+
+# TODO(tlarsen): write getMultipleIndexParamValues() that returns a
+# list of values if present, omitting those values that are
+# out of range