diff -r 13e438623ded -r 87296bdfc9c6 app/soc/views/helpers/template_helpers.py --- 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