From 167b84cc7fa7e5802a9f3de24811dc8daa17e37a Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Fri, 6 May 2016 16:30:07 +0100 Subject: [PATCH] Another go at formatting examples Let's try to avoid parsing the JSON, as it will reorder the examples. --- templating/matrix_templates/units.py | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/templating/matrix_templates/units.py b/templating/matrix_templates/units.py index d0f24157..94ba5775 100644 --- a/templating/matrix_templates/units.py +++ b/templating/matrix_templates/units.py @@ -99,10 +99,11 @@ def get_json_schema_object_fields(obj, enforce_title=False, obj["title"] = 'NO_TITLE' additionalProps = obj.get("additionalProperties") - if additionalProps: + props = obj.get("properties") + if additionalProps and not props: + # not "really" an object, just a KV store additionalProps = inherit_parents(additionalProps) - # not "really" an object, just a KV store logger.debug("%s is a pseudo-object", obj.get("title")) key_type = additionalProps.get("x-pattern", "string") @@ -127,7 +128,6 @@ def get_json_schema_object_fields(obj, enforce_title=False, logger.debug("%s done: returning %s", obj.get("title"), tables) return tables - props = obj.get("properties") if not props: props = obj.get("patternProperties") if props: @@ -277,12 +277,6 @@ def get_example_for_schema(schema): """Returns a python object representing a suitable example for this object""" if 'example' in schema: example = schema['example'] - if isinstance(example, basestring): - try: - example = json.loads(example) - except ValueError: - # not json, just use the string - pass return example if 'properties' in schema: res = {} @@ -298,9 +292,13 @@ def get_example_for_schema(schema): def get_example_for_param(param): if 'x-example' in param: return param['x-example'] - if 'schema' not in param: + schema = param.get('schema') + if not schema: return None - return get_example_for_schema(param['schema']) + if 'example' in schema: + return schema['example'] + return json.dumps(get_example_for_schema(param['schema']), + indent=2) class MatrixUnits(Units): def _load_swagger_meta(self, api, group_name): @@ -386,7 +384,7 @@ class MatrixUnits(Units): "{%s}" % param["name"], urllib.quote(example) ) elif param["in"] == "body": - body = json.dumps(example, indent=2) + body = example elif param["in"] == "query": if type(example) == list: for value in example: @@ -486,9 +484,9 @@ class MatrixUnits(Units): try: req_body_tables = get_tables_for_schema(param["schema"]) except Exception, e: - logger.warning("Error decoding body of API endpoint %s %s: %s", - endpoint_data["method"], endpoint_data["path"], - e.args[0]) + logger.warning("Error decoding body of API endpoint %s %s" % + (endpoint_data["method"], endpoint_data["path"]), + exc_info=1) return # put the top-level parameters into 'req_param_by_loc', and the others