diff --git a/api_builder.py b/api_builder.py index 5e43be1..624e7f0 100644 --- a/api_builder.py +++ b/api_builder.py @@ -32,13 +32,46 @@ def mkname(method, name, params): return name -def mkparam(param): - param = inflection.underscore(param) - if param in reserved: - return "{}_".format(param) +def mkparam(param, data): + if '$ref' in param: + keys = param['$ref'][2:].split("/") + param = data + for key in keys: + param = param[key] + name = param["name"] + name = inflection.underscore(name) + if name in reserved: + name = "{}_".format(name) + param["name"] = name return param +def mkkwargs(params): + for param in params: + name = param['name'] + if param['required']: + yield name + for param in params: + name = param['name'] + if not param['required']: + yield "{}=None".format(name) + + +def getparams(params, where): + ps = [] + for param in params: + if param['in'] == where: + ps.append(param['name']) + return ps + + +def mkparams(params, where): + ps = getparams(params, where) + if not ps: + return None + return '{{\n{}\n }}'.format(',\n'.join(' "{}": {}'.format(p, p) for p in ps)) + + def pretty_print(name, data): info = data['info'] r = re.compile('\\/\\{([^\\}]*)\\}') @@ -50,13 +83,19 @@ def pretty_print(name, data): for method, body in fns.items(): method = method.lower() fmt = r2.sub('{}', path) - params = [mkparam(param) for param in r.findall(path)] + paramdef = [mkparam(param, data) for param in body.get('parameters', [])] name = r.sub('', path).replace("/", "_").replace('-', '_')[1:] + params = [p["name"] for p in paramdef] name = mkname(method, name, params) - params = ", {}".format(", ".join(params)) if params else '' + params = ", {}".format(", ".join(mkkwargs(paramdef))) if params else '' print(' def {}(self{}):'.format(name, params)) - print(' """{}"""'.format(', '.join(body['tags']))) - print(' return self.{}("{}"{})\n'.format(method, fmt, params)) + print(' """{}"""'.format(body.get("summary", ""))) + print(' data = {}'.format(mkparams(paramdef, 'body'))) + print(' params = {}'.format(mkparams(paramdef, 'query'))) + tpl = ' return self.{}("{}"{}, data=data, params=params)\n' + args = getparams(paramdef, 'path') + args = '.format({})'.format(', '.join(args)) if args else '' + print(tpl.format(method, fmt, args)) def generate(name, url): diff --git a/prelude.py b/prelude.py index b564ba6..d7d9e0b 100644 --- a/prelude.py +++ b/prelude.py @@ -30,7 +30,8 @@ class Client(): # we pass the scheme as string, but have it as attributes in requests fn = requests.__getattribute__(scheme) - res = fn(url, headers=headers, json=data, params=params, auth=self.auth) + res = fn(url, headers=headers, json=data, params=params, + verify=self.verify, auth=self.auth) res.raise_for_status()