0001-utils-try-to-guess-type-of-params-38328.patch
passerelle/utils/api.py | ||
---|---|---|
147 | 147 |
return {} |
148 | 148 | |
149 | 149 |
def get_params(self): |
150 | ||
151 |
def type_to_str(value): |
|
152 |
if isinstance(value, bool): |
|
153 |
return 'boolean' |
|
154 |
elif isinstance(value, int): |
|
155 |
return 'integer' |
|
156 |
elif isinstance(value, float): |
|
157 |
return 'float' |
|
158 | ||
150 | 159 |
params = [] |
151 | 160 |
defaults = dict(zip( |
152 | 161 |
reversed(inspect.getargspec(self.func).args), |
... | ... | |
155 | 164 |
if param == 'post_data': |
156 | 165 |
continue |
157 | 166 |
param_info = {'name': param} |
158 |
if self.parameters and param in self.parameters and self.parameters[param].get('description'): |
|
159 |
param_info['description'] = self.parameters[param].get('description') |
|
167 |
if self.parameters and param in self.parameters: |
|
168 |
info = self.parameters[param] |
|
169 |
if info.get('description'): |
|
170 |
param_info['description'] = info['description'] |
|
171 |
if 'type' in info: |
|
172 |
typ = info['type'] |
|
173 |
if typ == 'int': |
|
174 |
param_info['type'] = 'integer' |
|
175 |
elif typ == 'bool': |
|
176 |
param_info['type'] = 'boolean' |
|
177 |
else: |
|
178 |
param_info['type'] = typ |
|
179 |
elif 'example_value' in info: |
|
180 |
typ = type_to_str(info['example_value']) |
|
181 |
if typ: |
|
182 |
param_info['type'] = typ |
|
183 |
# ajouter example_value |
|
160 | 184 |
if param in defaults: |
161 | 185 |
param_info['optional'] = True |
162 | 186 |
param_info['default_value'] = defaults[param] |
187 |
if 'type' not in param_info: |
|
188 |
typ = type_to_str(defaults[param]) |
|
189 |
if typ: |
|
190 |
param_info['type'] = typ |
|
163 | 191 |
params.append(param_info) |
164 | 192 |
return params |
passerelle/views.py | ||
---|---|---|
318 | 318 |
continue |
319 | 319 |
if not d.get(key): |
320 | 320 |
d[key] = other_params[key] |
321 |
if self.endpoint.endpoint_info.parameters:
|
|
321 |
for parameter_info in self.endpoint.endpoint_info.get_params():
|
|
322 | 322 |
# check and convert parameter values |
323 |
for parameter, parameter_info in self.endpoint.endpoint_info.parameters.items():
|
|
324 |
if parameter not in d:
|
|
325 |
continue
|
|
326 |
if parameter_info.get('type') == 'bool':
|
|
327 |
if d[parameter].lower() in ('true', 'on'):
|
|
328 |
d[parameter] = True
|
|
329 |
elif d[parameter].lower() in ('false', 'off'):
|
|
330 |
d[parameter] = False
|
|
331 |
else:
|
|
332 |
raise InvalidParameterValue(parameter)
|
|
333 |
elif parameter_info.get('type') == 'int':
|
|
334 |
try:
|
|
335 |
d[parameter] = int(d[parameter])
|
|
336 |
except ValueError:
|
|
337 |
raise InvalidParameterValue(parameter)
|
|
338 |
elif parameter_info.get('type') == 'float':
|
|
339 |
d[parameter] = d[parameter].replace(',', '.')
|
|
340 |
try:
|
|
341 |
d[parameter] = float(d[parameter])
|
|
342 |
except ValueError:
|
|
343 |
raise InvalidParameterValue(parameter)
|
|
323 |
parameter = parameter_info['name']
|
|
324 |
if parameter not in d: |
|
325 |
continue |
|
326 |
if parameter_info.get('type') in ('bool', 'boolean'):
|
|
327 |
if d[parameter].lower() in ('true', 'on'): |
|
328 |
d[parameter] = True |
|
329 |
elif d[parameter].lower() in ('false', 'off'): |
|
330 |
d[parameter] = False |
|
331 |
else: |
|
332 |
raise InvalidParameterValue(parameter) |
|
333 |
elif parameter_info.get('type') in ('int', 'integer'):
|
|
334 |
try: |
|
335 |
d[parameter] = int(d[parameter]) |
|
336 |
except ValueError: |
|
337 |
raise InvalidParameterValue(parameter) |
|
338 |
elif parameter_info.get('type') == 'float': |
|
339 |
d[parameter] = d[parameter].replace(',', '.') |
|
340 |
try: |
|
341 |
d[parameter] = float(d[parameter]) |
|
342 |
except ValueError: |
|
343 |
raise InvalidParameterValue(parameter) |
|
344 | 344 | |
345 | 345 |
if request.method == 'POST' and self.endpoint.endpoint_info.post: |
346 | 346 |
request_body = self.endpoint.endpoint_info.post.get('request_body', {}) |
347 |
- |