app/soc/views/helpers/template_helpers.py
changeset 168 87296bdfc9c6
parent 141 e120c24b89e2
child 183 37d98c3cefa5
--- 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('&amp;', '&').replace('&lt;', '<')
   html.replace('&gt;', '>').replace('&quot;', '"').replace('&#39;',"'")
   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