app/soc/views/helpers/template_helpers.py
changeset 168 87296bdfc9c6
parent 141 e120c24b89e2
child 183 37d98c3cefa5
equal deleted inserted replaced
167:13e438623ded 168:87296bdfc9c6
    55   sibling_templates = [
    55   sibling_templates = [
    56     '%s/%s' % (t.rsplit('/', 1)[0], new_template_file) for t in templates]
    56     '%s/%s' % (t.rsplit('/', 1)[0], new_template_file) for t in templates]
    57 
    57 
    58   return sibling_templates + default_template
    58   return sibling_templates + default_template
    59 
    59 
       
    60 
    60 def unescape(html): 
    61 def unescape(html): 
    61   "Returns the given HTML with ampersands, quotes and carets decoded" 
    62   """Returns the given HTML with ampersands, quotes and carets decoded.
    62 
    63   """ 
    63   if not isinstance(html, basestring): 
    64   if not isinstance(html, basestring): 
    64     html = str(html) 
    65     html = str(html) 
    65   
    66   
    66   html.replace('&amp;', '&').replace('&lt;', '<')
    67   html.replace('&amp;', '&').replace('&lt;', '<')
    67   html.replace('&gt;', '>').replace('&quot;', '"').replace('&#39;',"'")
    68   html.replace('&gt;', '>').replace('&quot;', '"').replace('&#39;',"'")
    68   return html
    69   return html
       
    70 
       
    71 
       
    72 def getSingleIndexedParamValue(request, param_name, values=()):
       
    73   """Returns a value indexed by a query parameter in the HTTP request.
       
    74   
       
    75   Args:
       
    76     request: the Django HTTP request object
       
    77     param_name: name of the query parameter in the HTTP request
       
    78     values: list (or tuple) of ordered values; one of which is
       
    79       retrieved by the index value of the param_name argument in
       
    80       the HTTP request
       
    81       
       
    82   Returns:
       
    83     None if the query parameter was not present, was not an integer, or
       
    84       was an integer that is not a valid [0..len(values)-1] index into
       
    85       the values list.
       
    86     Otherwise, returns values[int(param_name value)]
       
    87   """
       
    88   value_idx = request.GET.get(param_name)
       
    89   
       
    90   if isinstance(value_idx, (tuple, list)):
       
    91     # keep only the first argument if multiple are present
       
    92     value_idx = value_idx[0]
       
    93 
       
    94   try:
       
    95     # GET parameter 'param_name' should be an integer value index
       
    96     value_idx = int(value_idx)
       
    97   except:
       
    98     # ignore bogus or missing parameter values, so return None (no message)
       
    99     return None
       
   100     
       
   101   if value_idx < 0:
       
   102     # value index out of range, so return None (no value)
       
   103     return None
       
   104 
       
   105   if value_idx >= len(values):
       
   106     # value index out of range, so return None (no value)
       
   107     return None
       
   108 
       
   109   # return value associated with valid value index
       
   110   return values[value_idx]
       
   111 
       
   112 
       
   113 def getSingleIndexedParamValueIfMissing(value, request, param_name,
       
   114                                         values=()):
       
   115   """Returns missing value indexed by a query parameter in the HTTP request.
       
   116   
       
   117   Args:
       
   118     value: an existing value, or a "False" value such as None
       
   119     request, param_name, values: see getSingleIndexParamValue()
       
   120     
       
   121   Returns:
       
   122     value, if value is "non-False"
       
   123     Otherwise, returns getSingleIndexedParamValue() result.
       
   124   """
       
   125   if value:
       
   126     # value already present, so return it
       
   127     return value
       
   128 
       
   129   return getSingleIndexedParamValue(request, param_name, values=values)
       
   130 
       
   131 
       
   132 # TODO(tlarsen):  write getMultipleIndexParamValues() that returns a
       
   133 #   list of values if present, omitting those values that are
       
   134 #   out of range