Esempio n. 1
0
 def _requires_url_attribute_check(self, request, *args, **kwargs):
     if param in kwargs:
         return fn(self, request, *args, **kwargs)
     else:
         return api_error(
             "{0} requests to {1} should contain {2} in the url".format(
                 fn.__name__, request.build_absolute_uri(), param))
Esempio n. 2
0
        def _check(self, request, *args, **kwargs):
            for param, type_ in types.items():
                try:
                    kwargs[param] = type_(kwargs[param])

                    if type_ == bool:
                        if kwargs[param].lower() == "true":
                            kwargs[param] = True
                        elif kwargs[param].lower() == "false":
                            kwargs[param] = False
                        else:
                            kwargs[param] = type_(param)

                except KeyError:
                    # If there isn't a parameter to type check we assume
                    # that the default was declared as a default parameter
                    # to the function
                    pass

                except ValueError:
                    return api_error(
                        "{0} parameter must be of type {1}".format(
                            param,
                            type_
                            )
                        )

            return fn(self, request, *args, **kwargs)
Esempio n. 3
0
 def _check(self, request, *args, **kwargs):
     if param in kwargs and not func(kwargs[param]):
         return api_error(
             "{0} {1}".format(param, description),
             "Parameter Error"
             )
     else:
         return fn(self, request, *args, **kwargs)
Esempio n. 4
0
 def _requires_parameters_check(self, request, *args, **kwargs):
     if set(params) <= set(request.REQUEST):
         return fn(self, request, *args, **kwargs)
     else:
         return api_error(
             "{0} reqs to {1} should contain the {2} parameter".format(
                 fn.__name__, request.build_absolute_uri(),
                 set(params) - set(request.REQUEST)))
Esempio n. 5
0
 def _transform(self, request, *args, **kwargs):
     if param in kwargs:
         try:
             kwargs[param] = func(kwargs[param])
         except:
             return api_error(
                 "the {0} parameter could not be parsed".format(param),
                 "Parameter Error")
     return fn(self, request, *args, **kwargs)
Esempio n. 6
0
 def _transform(self, request, *args, **kwargs):
     if param in kwargs:
         try:
             kwargs[param] = func(kwargs[param])
         except:
             return api_error(
                 "the {0} parameter could not be parsed".format(param),
                 "Parameter Error"
                 )
     return fn(self, request, *args, **kwargs)
Esempio n. 7
0
 def _check(self, request, *args, **kwargs):
     if param in kwargs:
         return fn(self, request, *args, **kwargs)
     else:
         return api_error(
             "{0} requests to {1} should contain {2} in the url".format(
                 fn.__name__,
                 request.build_absolute_uri(),
                 param
                 )
             )
Esempio n. 8
0
 def _check(self, request, *args, **kwargs):
     if set(params) <= set(request.REQUEST):
         return fn(self, request, *args, **kwargs)
     else:
         return api_error(
             "{0} reqs to {1} should contain the {2} parameter".format(
                 fn.__name__,
                 request.build_absolute_uri(),
                 set(params) - set(request.REQUEST)
                 )
             )
Esempio n. 9
0
        def _check(self, request, *args, **kwargs):
            if "If-Range" in request.META:
                newest_id = request.META["If-Range"]
            elif "_if_range" in request.REQUEST:
                newest_id = request.REQUEST["_if_range"]
            else:
                return fn(self, request, *args, **kwargs)

            # Force newest_id to be a string
            newest_id = str(newest_id)

            # Call the underlying function and get the response
            response = fn(self, request, *args, **kwargs)

            # Convert to JSON
            response = json.loads(response.content)

            # Grab the full list of elements out of the response
            if "error" in response:
                return api_error(
                    response["error"]["message"],
                    error_type=response["error"]["type"])

            elements = value_for_keypath(response, keypath)

            meta_info = {
                k: v
                for k, v in response.items()
                if k != "data"
                }

            # Get the index of the element which is the "newest"
            # element (newest) is passed in, in the list so we
            # can slice the list and only return elements newer
            # than that
            idx = find(
                newest_id,
                [
                    str(elm[element_key])
                    for elm
                    in elements
                    ]
                )[0]
            
            set_value_for_keypath(response, keypath, elements[:idx])
            
            return api_out(response["data"], meta_info)