Пример #1
0
    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)
Пример #2
0
  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)
Пример #3
0
        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
Пример #4
0
    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