-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparameter.py
More file actions
93 lines (71 loc) · 2.04 KB
/
Copy pathparameter.py
File metadata and controls
93 lines (71 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# -*- encoding: utf-8 -*-
class Parameter:
def __init__(self, method, name, yaml={}):
self.method = method
self.name = name
self.yaml = yaml
iN = lambda self, where: self.yaml['in'] == where
def __repr__(self):
return "%s: %s<%s> in %s" % (self.__class__.__name__, self.name, self.yaml.get('type'), self.yaml['in'])
def __getattr__(self, name):
return self.yaml.get(name)
def __nonzero__ (self):
return True
@property
def definition(self):
if self.iN('body') and '$ref' in self.yaml['schema']:
ref = self.yaml['schema']['$ref']
return self.method.path.api.definitions[ref]
return None
@property
def surname(self):
if self.iN('path') and self.ctype != 'std::string':
return "_%s" % self.name
return self.name
@property
def declaration(self):
return '%s %s' % (self.ctype, self.surname)
@property
def signature(self):
return '%s %s' % (self.ctype, self.name)
@property
def retrieve(self):
if self.iN('path') and self.type == 'integer':
return '%s = atoi(%s.c_str());' % (self.declaration, self.name);
if self.iN('header'):
return '%s = request().getenv("HTTP_%s")' % (
self.declaration,
self.name.upper()
)
if self.iN('query') or self.iN('formData'):
name = self.name
if self.isArray:
name += "[]"
return '%s = boost::get<%s >(this->parameter("%s"))' % (
self.declaration,
self.ctype,
name
)
if self.iN('body'):
return '%s; try { %s = this->body(); } catch(cwapper::error) { return; }' % (
self.declaration,
self.name
)
@property
def isArray(self):
return "array" in self.ctype or "vector" in self.ctype
@property
def type(self):
return self.yaml.get('type')
@property
def ctype(self):
if self.type:
return {
'array': { None: 'cwapper::stringarray'},
'integer': { None: 'int', 'int64': 'std::int64_t' },
'string': { None: 'std::string' },
}.get(self.type).get(self.format)
if '$ref' in self.yaml['schema']:
return 'cwapper::data'
if 'items' in self.yaml['schema']:
return 'cwapper::data'