# HG changeset patch # User Todd Larsen # Date 1222212023 0 # Node ID 1cf3e7531382c30199710b357bb187c5cf6eda63 # Parent 27ed1a09c98d3ddd8e16cbd87a8ee517b82b34f2 Split out HTTP request manipulation functions from template_helpers.py, which is in danger of becoming a "misc" or "util" module unnecessarily. diff -r 27ed1a09c98d -r 1cf3e7531382 app/soc/views/helpers/request_helpers.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/soc/views/helpers/request_helpers.py Tue Sep 23 23:20:23 2008 +0000 @@ -0,0 +1,87 @@ +#!/usr/bin/python2.5 +# +# Copyright 2008 the Melange authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Helpers for manipulating HTTP requests. +""" + +__authors__ = [ + '"Todd Larsen" ', + ] + + +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 diff -r 27ed1a09c98d -r 1cf3e7531382 app/soc/views/helpers/template_helpers.py --- a/app/soc/views/helpers/template_helpers.py Tue Sep 23 19:20:57 2008 +0000 +++ b/app/soc/views/helpers/template_helpers.py Tue Sep 23 23:20:23 2008 +0000 @@ -67,68 +67,3 @@ 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 diff -r 27ed1a09c98d -r 1cf3e7531382 app/soc/views/site/user/profile.py --- a/app/soc/views/site/user/profile.py Tue Sep 23 19:20:57 2008 +0000 +++ b/app/soc/views/site/user/profile.py Tue Sep 23 23:20:23 2008 +0000 @@ -32,8 +32,8 @@ from soc.logic.site import id_user from soc.views import simple from soc.views.helpers import forms_helpers +from soc.views.helpers import request_helpers from soc.views.helpers import response_helpers -from soc.views.helpers import template_helpers from soc.views.user import profile import soc.models.user @@ -291,7 +291,7 @@ # referrer was us, so select which submit message to display # (may display no message if ?s=0 parameter is not present) context['submit_message'] = ( - template_helpers.getSingleIndexedParamValue( + request_helpers.getSingleIndexedParamValue( request, profile.SUBMIT_MSG_PARAM_NAME, values=profile.SUBMIT_MESSAGES)) diff -r 27ed1a09c98d -r 1cf3e7531382 app/soc/views/user/profile.py --- a/app/soc/views/user/profile.py Tue Sep 23 19:20:57 2008 +0000 +++ b/app/soc/views/user/profile.py Tue Sep 23 23:20:23 2008 +0000 @@ -32,8 +32,8 @@ from soc.logic.site import id_user from soc.views import simple from soc.views.helpers import forms_helpers +from soc.views.helpers import request_helpers from soc.views.helpers import response_helpers -from soc.views.helpers import template_helpers import soc.models.user @@ -146,7 +146,7 @@ # referrer was us, so select which submit message to display # (may display no message if ?s=0 parameter is not present) context['submit_message'] = ( - template_helpers.getSingleIndexedParamValue( + url_helpers.getSingleIndexedParamValue( request, SUBMIT_MSG_PARAM_NAME, values=SUBMIT_MESSAGES)) # populate form with the existing User entity