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