1
2 import json
3
4 import sqlalchemy.orm.exc
5
6 from flask_restful.reqparse import Argument, RequestParser
7
8 from .exceptions import ObjectNotFoundError, MalformedRequest
9 from .schemas import AllowedMethodSchema
10
11
13 - def __init__(self, method, doc, require_auth=True, params=None):
18
19
22
23
25 """
26 :type query: sqlalchemy.Query
27 :param str msg: message used in error when object not found
28 :param Any data: any serializable data to include into error
29 :raises ObjectNotFoundError: when query failed to return anything
30 """
31 try:
32 return query.one()
33 except sqlalchemy.orm.exc.NoResultFound:
34 raise ObjectNotFoundError(msg=msg, data=data)
35
36
38 try:
39 return json.loads(raw)
40 except ValueError:
41 raise MalformedRequest(data_on_error or
42 "Failed to deserialize json string")
43
44
46 try:
47 result = schema.loads(json_string)
48 except ValueError as err:
49 raise MalformedRequest(
50 msg="Failed to parse request: {}".format(err),
51 data={"request_string": json_string}
52 )
53
54 if result.errors:
55 raise MalformedRequest(
56 msg="Failed to parse request: Validation Error",
57 data={
58 "validation_errors": result.errors
59 }
60 )
61
62 return result
63
64
66 return schema().dump(obj)[0]
67
68
71
72
73 data = {u"error": unicode(error)}
74 if self.help:
75 data["help"] = self.help
76 raise MalformedRequest(
77 "Failed to validate query parameter: {}".format(self.name),
78 data=data
79 )
80
81
83 return RequestParser(argument_class=MyArg)
84
85
87 """
88 :param str value: value to convert
89 :rtype: bool
90 :raises ValueError:
91 """
92 true_values = ["true", "yes", "1"]
93 false_values = ["false", "no", "0"]
94 value = str(value).strip().lower()
95
96 if value in true_values:
97 return True
98 elif value in false_values:
99 return False
100
101 raise ValueError("Value `{}` doesn't belong to either true of false sets. "
102 "Allowed values: {} and {}"
103 .format(value, true_values, false_values))
104