Refactor _load_swagger_meta

factor out _handle_endpoint
pull/1018/head
Richard van der Hoff 7 years ago
parent 70ec3237b6
commit 726a8c2f61

@ -23,7 +23,6 @@ file instead.
from batesian.units import Units
from collections import OrderedDict
import logging
import inspect
import json
import os
import re
@ -371,18 +370,38 @@ def get_example_for_response(response):
class MatrixUnits(Units):
def _load_swagger_meta(self, api, group_name):
endpoints = []
base_path = api.get("basePath", "")
for path in api["paths"]:
for method in api["paths"][path]:
single_api = api["paths"][path][method]
full_path = api.get("basePath", "").rstrip("/") + path
logger.info(" ------- Endpoint: %s %s ------- " % (method, path))
try:
endpoint = self._handle_endpoint(
api["paths"][path][method], method,
base_path.rstrip("/") + path)
endpoints.append(endpoint)
except Exception as e:
raise Exception(
"Error handling endpoint %s %s: %s" % (method, path, e),
)
return {
"base": api.get("basePath").rstrip("/"),
"group": group_name,
"endpoints": endpoints,
}
def _handle_endpoint(self, endpoint_swagger, method, path):
endpoint = {
"title": single_api.get("summary", ""),
"deprecated": single_api.get("deprecated", False),
"desc": single_api.get("description", single_api.get("summary", "")),
"title": endpoint_swagger.get("summary", ""),
"deprecated": endpoint_swagger.get("deprecated", False),
"desc": endpoint_swagger.get("description",
endpoint_swagger.get("summary", "")),
"method": method.upper(),
"path": full_path.strip(),
"requires_auth": "security" in single_api,
"rate_limited": 429 in single_api.get("responses", {}),
"path": path.strip(),
"requires_auth": "security" in endpoint_swagger,
"rate_limited": 429 in endpoint_swagger.get("responses", {}),
"req_param_by_loc": {},
"req_body_tables": [],
"res_headers": [],
@ -392,13 +411,10 @@ class MatrixUnits(Units):
"req": "",
}
}
logger.info(" ------- Endpoint: %s %s ------- " % (method, path))
path_template = api.get("basePath", "").rstrip("/") + path
path_template = path
example_query_params = []
example_body = ""
for param in single_api.get("parameters", []):
for param in endpoint_swagger.get("parameters", []):
# even body params should have names, otherwise the active docs don't work.
param_name = param["name"]
@ -448,10 +464,9 @@ class MatrixUnits(Units):
except Exception, e:
raise Exception("Error handling parameter %s" % param_name, e)
# endfor[param]
good_response = None
for code in sorted(single_api.get("responses", {}).keys()):
res = single_api["responses"][code]
for code in sorted(endpoint_swagger.get("responses", {}).keys()):
res = endpoint_swagger["responses"][code]
if not good_response and code == 200:
good_response = res
description = res.get("description", "")
@ -470,32 +485,27 @@ class MatrixUnits(Units):
)
if "headers" in good_response:
headers = []
for (header_name, header) in good_response["headers"].iteritems():
for (header_name, header) in good_response[
"headers"].iteritems():
headers.append({
"key": header_name,
"type": header["type"],
"desc": header["description"],
})
endpoint["res_headers"] = headers
query_string = "" if len(example_query_params) == 0 else "?"+urllib.urlencode(example_query_params)
query_string = "" if len(
example_query_params) == 0 else "?" + urllib.urlencode(
example_query_params)
if example_body:
endpoint["example"]["req"] = "%s %s%s HTTP/1.1\nContent-Type: application/json\n\n%s" % (
endpoint["example"][
"req"] = "%s %s%s HTTP/1.1\nContent-Type: application/json\n\n%s" % (
method.upper(), path_template, query_string, example_body
)
else:
endpoint["example"]["req"] = "%s %s%s HTTP/1.1\n\n" % (
method.upper(), path_template, query_string
)
endpoints.append(endpoint)
return {
"base": api.get("basePath").rstrip("/"),
"group": group_name,
"endpoints": endpoints,
}
return endpoint
def _handle_body_param(self, param, endpoint_data):
"""Update endpoint_data object with the details of the body param

Loading…
Cancel
Save