1
|
|
|
# -*- coding: utf-8 -*- |
2
|
|
|
from pyramid.httpexceptions import ( |
3
|
|
|
HTTPBadRequest, |
4
|
|
|
HTTPNotFound |
5
|
|
|
) |
6
|
|
|
|
7
|
|
|
import colander |
8
|
|
|
|
9
|
|
|
from oe_utils.validation import ValidationFailure |
10
|
|
|
|
11
|
|
|
|
12
|
|
|
def get_resource(data_manager, resource_id, detail="No details provided."): |
13
|
|
|
resource = data_manager.get(resource_id) |
14
|
|
|
if not resource: |
15
|
|
|
raise HTTPNotFound(detail=detail) |
16
|
|
|
return resource |
17
|
|
|
|
18
|
|
|
|
19
|
|
|
def get_json_from_request(request): |
20
|
|
|
try: |
21
|
|
|
return request.json_body |
22
|
|
|
except AttributeError as e: |
23
|
|
|
raise HTTPBadRequest(detail="Request bevat geen json body. \n%s" % e) |
24
|
|
|
except ValueError as e: |
25
|
|
|
raise HTTPBadRequest(detail="Request bevat incorrecte json body. \n%s" % e) |
26
|
|
|
|
27
|
|
|
|
28
|
|
|
def validate(request, json_data, mapping_schema): |
29
|
|
|
validaton_schema = mapping_schema.bind(request=request) |
30
|
|
|
try: |
31
|
|
|
return validaton_schema.deserialize(json_data) |
32
|
|
|
except colander.Invalid as e: |
33
|
|
|
raise ValidationFailure('Fouten bij het valideren van request.', e.asdict()) |
34
|
|
|
|
35
|
|
|
|
36
|
|
|
class RouteConfigArgs: |
37
|
|
|
def __init__(self, response_schemas, schema=None, permission=None, tags=None): |
38
|
|
|
self.tags = tags |
39
|
|
|
self.response_schemas = response_schemas |
40
|
|
|
self.schema = schema |
41
|
|
|
self.permission = permission |
42
|
|
|
|
43
|
|
|
|
44
|
|
|
class RouteConfig: |
45
|
|
|
def __init__(self, service, get_args=None, post_args=None, put_args=None, delete_args=None): |
46
|
|
|
self.service = service |
47
|
|
|
self.get_args = get_args |
48
|
|
|
self.post_args = post_args |
49
|
|
|
self.put_args = put_args |
50
|
|
|
self.delete_args = delete_args |
51
|
|
|
|
52
|
|
|
@property |
53
|
|
|
def post(self): |
54
|
|
|
return self.service.post(**self.post_args.__dict__) |
55
|
|
|
|
56
|
|
|
@property |
57
|
|
|
def get(self): |
58
|
|
|
return self.service.get(**self.get_args.__dict__) |
59
|
|
|
|
60
|
|
|
@property |
61
|
|
|
def put(self): |
62
|
|
|
return self.service.put(**self.put_args.__dict__) |
63
|
|
|
|
64
|
|
|
@property |
65
|
|
|
def delete(self): |
66
|
|
|
return self.service.delete(**self.delete_args.__dict__) |
67
|
|
|
|
68
|
|
|
@property |
69
|
|
|
def get_validation_scheme(self): |
70
|
|
|
return self.get_args.schema.__class_schema_nodes__[-1] |
71
|
|
|
|
72
|
|
|
@property |
73
|
|
|
def put_validation_scheme(self): |
74
|
|
|
return self.put_args.schema.__class_schema_nodes__[-1] |
75
|
|
|
|
76
|
|
|
@property |
77
|
|
|
def post_validation_scheme(self): |
78
|
|
|
return self.post_args.schema.__class_schema_nodes__[-1] |
79
|
|
|
|