def marsloader_func(request, *args, **kwargs): """MARS_loader (Modifying Arguments for the Result Set) adds arguments specifically meant to modify the result set (eg. limit, offset and order_by) """ check_safety() STATUS = 'status' # This should be abstracted # StatusName 'active' should always be available arg_list = [('limit', 100), ('offset', 0), ('order_by', 'created_at'), (STATUS, models.StatusName.objects.get(name='active'))] new_args = copy.copy(kwargs) rsm_arg_list = {} for arg in arg_list: rsm_arg_list[arg[0]] = arg[1] # All paths that end in a slash and have an HTTP method of GET will return a result set rsm_cand = request.method == 'GET' and request.META['PATH_INFO'][ -1] == '/' if rsm_cand: for rsm_arg, qdefault in rsm_arg_list.items(): if request.GET.has_key(rsm_arg): if rsm_arg == STATUS: try: new_args[rsm_arg] = models.StatusName.objects.get( name=request.GET[rsm_arg]) except StatusName.DoesNotExist: new_args[rsm_arg] = qdefault else: try: new_args[rsm_arg] = int(request.GET[rsm_arg]) except: new_args[rsm_arg] = request.GET[rsm_arg] else: new_args[rsm_arg] = qdefault # Check that the new arguments are all in func() if len(inspect.getargspec(func)) > 0: for new_arg in new_args.keys(): if new_arg not in inspect.getargspec(func)[0]: raise Exception("Missing arg " + new_arg + " in " + func.func_name) return func(request, **new_args)
def marsloader_func(request, *args, **kwargs): """MARS_loader (Modifying Arguments for the Result Set) adds arguments specifically meant to modify the result set (eg. limit, offset and order_by) """ check_safety() STATUS = 'status' # This should be abstracted # StatusName 'active' should always be available arg_list = [ ('limit', 100), ('offset', 0), ('order_by', 'created_at'), (STATUS, models.StatusName.objects.get(name='active'))] new_args = copy.copy(kwargs) rsm_arg_list = {} for arg in arg_list: rsm_arg_list[arg[0]] = arg[1] # All paths that end in a slash and have an HTTP method of GET will return a result set rsm_cand = request.method == 'GET' and request.META['PATH_INFO'][-1] == '/' if rsm_cand: for rsm_arg, qdefault in rsm_arg_list.items(): if request.GET.has_key(rsm_arg): if rsm_arg == STATUS: try: new_args[rsm_arg] = models.StatusName.objects.get(name=request.GET[rsm_arg]) except StatusName.DoesNotExist: new_args[rsm_arg] = qdefault else: try: new_args[rsm_arg] = int(request.GET[rsm_arg]) except: new_args[rsm_arg] = request.GET[rsm_arg] else: new_args[rsm_arg] = qdefault # Check that the new arguments are all in func() if len(inspect.getargspec(func)) > 0: for new_arg in new_args.keys(): if new_arg not in inspect.getargspec(func)[0]: raise Exception("Missing arg " + new_arg + " in " + func.func_name) return func(request, **new_args)
def paramloaded_func(request, **kwargs): """ A decorator for automatically loading URL-based parameters that are in standard form. """ # Init check_safety() new_args = _complete_extid(copy.copy(kwargs)) req_path = request.path_info.split('/') params_intersect = _get_params_intersection(new_args) for qparam, qparam_rel in params_intersect.items(): # If the argument given is None then keep it as None if new_args[qparam] is None: new_args[qparam_rel[0]] = None del new_args[qparam] else: try: query_kwargs = {qparam_rel[2]: new_args[qparam]} res_obj = qparam_rel[1].objects.get(**query_kwargs) new_args[qparam_rel[0]] = res_obj del new_args[qparam] except Exception, e: pass
def paramloaded_func(request, **kwargs): """ A decorator for automatically loading URL-based parameters that are in standard form. """ # Init check_safety() new_args = _complete_extid(copy.copy(kwargs)) req_path = request.path_info.split('/') params_intersect = _get_params_intersection(new_args) for qparam, qparam_rel in params_intersect.items(): # If the argument given is None then keep it as None if new_args[qparam] is None: new_args[qparam_rel[0]] = None del new_args[qparam] else: try: query_kwargs = {qparam_rel[2] : new_args[qparam]} res_obj = qparam_rel[1].objects.get(**query_kwargs) new_args[qparam_rel[0]] = res_obj del new_args[qparam] except Exception, e: pass