|
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
|
|
|
|