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