Update api spec (#93)

* YOYO NEW API SPEC!

* update

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* fix

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* fix

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* I have generated the latest API!

---------

Signed-off-by: Jess Frazelle <github@jessfraz.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This commit is contained in:
Jess Frazelle
2023-05-23 14:24:13 -07:00
committed by GitHub
parent 42f173783f
commit c111c3813f
105 changed files with 2109 additions and 1155 deletions

View File

@ -269,7 +269,11 @@ def generateTypeAndExamplePython(
) = generateTypeAndExamplePython("", prop, data, None)
example_imports = example_imports + prop_imports
parameter_example = parameter_example + (
"\n" + property_name + "=" + prop_example + ",\n"
"\n"
+ clean_parameter_name(property_name)
+ "="
+ prop_example
+ ",\n"
)
parameter_example = parameter_example + ")"
@ -298,6 +302,8 @@ def generateTypeAndExamplePython(
break
return generateTypeAndExamplePython(name, schema["oneOf"][0], data, None)
elif "allOf" in schema and len(schema["allOf"]) == 1:
return generateTypeAndExamplePython(name, schema["allOf"][0], data, None)
elif "$ref" in schema:
parameter_type = schema["$ref"].replace("#/components/schemas/", "")
# Get the schema for the reference.
@ -381,14 +387,17 @@ from kittycad.types import Response
if "nullable" in parameter["schema"] and parameter["schema"]["nullable"]:
parameter_type = "Optional[" + parameter_type + "]"
optional_args.append(
camel_to_snake(parameter_name)
clean_parameter_name(parameter_name)
+ "= None, # "
+ parameter_type
+ "\n"
)
else:
params_str += (
camel_to_snake(parameter_name) + "=" + parameter_example + ",\n"
clean_parameter_name(parameter_name)
+ "="
+ parameter_example
+ ",\n"
)
for optional_arg in optional_args:
@ -429,7 +438,9 @@ from kittycad.types import Response
+ endpoint_ref.replace("List[", "").replace("]", "")
+ "\n"
)
example_imports = example_imports + "from typing import Union, Any, Optional\n"
example_imports = (
example_imports + "from typing import Union, Any, Optional, List\n"
)
example_variable = "result: " + response_type + " = "
example_imports = example_imports + "from kittycad.types import Response\n"
@ -638,7 +649,7 @@ async def test_"""
formatTemplate = (
formatTemplate
+ ", "
+ parameter_name
+ clean_parameter_name(parameter_name)
+ "="
+ camel_to_snake(parameter_name)
)
@ -894,7 +905,7 @@ async def test_"""
f.write("\tkwargs = _get_kwargs(\n")
params = get_function_parameters(endpoint, request_body_type)
for param in params:
f.write("\t\t" + param + "=" + param + ",\n")
f.write("\t\t" + clean_parameter_name(param) + "=" + param + ",\n")
f.write("\t\tclient=client,\n")
f.write("\t)\n")
f.write("\n")
@ -973,7 +984,7 @@ async def test_"""
f.write("\treturn sync_detailed(\n")
params = get_function_parameters(endpoint, request_body_type)
for param in params:
f.write("\t\t" + param + "=" + param + ",\n")
f.write("\t\t" + clean_parameter_name(param) + "=" + param + ",\n")
f.write("\t\tclient=client,\n")
f.write("\t).parsed\n")
@ -1042,7 +1053,7 @@ async def test_"""
f.write("\tkwargs = _get_kwargs(\n")
params = get_function_parameters(endpoint, request_body_type)
for param in params:
f.write("\t\t" + param + "=" + param + ",\n")
f.write("\t\t" + clean_parameter_name(param) + "=" + param + ",\n")
f.write("\t\tclient=client,\n")
f.write("\t)\n")
f.write("\n")
@ -1120,7 +1131,7 @@ async def test_"""
f.write("\t\tawait asyncio_detailed(\n")
params = get_function_parameters(endpoint, request_body_type)
for param in params:
f.write("\t\t" + param + "=" + param + ",\n")
f.write("\t\t" + clean_parameter_name(param) + "=" + param + ",\n")
f.write("\t\t\tclient=client,\n")
f.write("\t\t)\n")
f.write("\t).parsed\n")
@ -1439,8 +1450,14 @@ def generateObjectTypeCode(name: str, schema: dict, type_name: str, data: dict)
# Iternate over the properties.
for property_name in schema["properties"]:
# Write the property.
f.write("\t\tif " + property_name + " is not UNSET:\n")
f.write("\t\t\tfield_dict['" + property_name + "'] = " + property_name + "\n")
f.write("\t\tif " + clean_parameter_name(property_name) + " is not UNSET:\n")
f.write(
"\t\t\tfield_dict['"
+ property_name
+ "'] = "
+ clean_parameter_name(property_name)
+ "\n"
)
f.write("\n")
f.write("\t\treturn field_dict\n")
@ -1468,7 +1485,13 @@ def generateObjectTypeCode(name: str, schema: dict, type_name: str, data: dict)
# Iternate over the properties.
for property_name in schema["properties"]:
# Write the property.
f.write("\t\t\t" + property_name + "= " + property_name + ",\n")
f.write(
"\t\t\t"
+ clean_parameter_name(property_name)
+ "= "
+ clean_parameter_name(property_name)
+ ",\n"
)
# Close the class.
f.write("\t\t)\n")
@ -1531,25 +1554,51 @@ def renderTypeToDict(f, property_name: str, property_schema: dict, data: dict):
):
f.write("\t\t" + property_name + ": Union[Unset, str] = UNSET\n")
f.write(
"\t\tif not isinstance(self." + property_name + ", Unset):\n"
"\t\tif not isinstance(self."
+ clean_parameter_name(property_name)
+ ", Unset):\n"
)
f.write(
"\t\t\t"
+ property_name
+ clean_parameter_name(property_name)
+ " = self."
+ property_name
+ clean_parameter_name(property_name)
+ ".isoformat()\n"
)
# return early
return
f.write("\t\t" + property_name + " = self." + property_name + "\n")
f.write(
"\t\t"
+ clean_parameter_name(property_name)
+ " = self."
+ clean_parameter_name(property_name)
+ "\n"
)
elif property_type == "integer":
f.write("\t\t" + property_name + " = self." + property_name + "\n")
f.write(
"\t\t"
+ clean_parameter_name(property_name)
+ " = self."
+ clean_parameter_name(property_name)
+ "\n"
)
elif property_type == "number":
f.write("\t\t" + property_name + " = self." + property_name + "\n")
f.write(
"\t\t"
+ clean_parameter_name(property_name)
+ " = self."
+ clean_parameter_name(property_name)
+ "\n"
)
elif property_type == "boolean":
f.write("\t\t" + property_name + " = self." + property_name + "\n")
f.write(
"\t\t"
+ clean_parameter_name(property_name)
+ " = self."
+ clean_parameter_name(property_name)
+ "\n"
)
elif property_type == "array":
if "items" in property_schema:
if "$ref" in property_schema["items"]:
@ -1594,14 +1643,40 @@ def renderTypeToDict(f, property_name: str, property_schema: dict, data: dict):
+ property_type
+ "]] = UNSET\n"
)
f.write("\t\tif not isinstance(self." + property_name + ", Unset):\n")
f.write("\t\t\t" + property_name + " = self." + property_name + "\n")
f.write(
"\t\tif not isinstance(self."
+ clean_parameter_name(property_name)
+ ", Unset):\n"
)
f.write(
"\t\t\t"
+ clean_parameter_name(property_name)
+ " = self."
+ clean_parameter_name(property_name)
+ "\n"
)
else:
f.write("\t\t" + property_name + " = self." + property_name + "\n")
f.write(
"\t\t"
+ clean_parameter_name(property_name)
+ " = self."
+ clean_parameter_name(property_name)
+ "\n"
)
elif "$ref" in property_schema:
ref = property_schema["$ref"].replace("#/components/schemas/", "")
f.write("\t\tif not isinstance(self." + property_name + ", Unset):\n")
f.write("\t\t\t" + property_name + " = self." + property_name + "\n")
f.write(
"\t\tif not isinstance(self."
+ clean_parameter_name(property_name)
+ ", Unset):\n"
)
f.write(
"\t\t\t"
+ clean_parameter_name(property_name)
+ " = self."
+ clean_parameter_name(property_name)
+ "\n"
)
elif "allOf" in property_schema:
thing = property_schema["allOf"][0]
if "$ref" in thing:
@ -1610,15 +1685,32 @@ def renderTypeToDict(f, property_name: str, property_schema: dict, data: dict):
return renderTypeToDict(
f, property_name, data["components"]["schemas"][ref], data
)
f.write("\t\tif not isinstance(self." + property_name + ", Unset):\n")
f.write("\t\t\t" + property_name + " = self." + property_name + "\n")
f.write(
"\t\tif not isinstance(self."
+ clean_parameter_name(property_name)
+ ", Unset):\n"
)
f.write(
"\t\t\t"
+ clean_parameter_name(property_name)
+ " = self."
+ clean_parameter_name(property_name)
+ "\n"
)
else:
raise Exception("unknown allOf type: ", property_schema)
else:
f.write("\t\t" + property_name + " = self." + property_name + "\n")
f.write(
"\t\t"
+ clean_parameter_name(property_name)
+ " = self."
+ clean_parameter_name(property_name)
+ "\n"
)
def renderTypeInit(f, property_name: str, property_schema: dict, data: dict):
property_name = clean_parameter_name(property_name)
if "type" in property_schema:
property_type = property_schema["type"]
@ -1726,22 +1818,30 @@ def renderTypeFromDict(f, property_name: str, property_schema: dict, data: dict)
):
f.write(
"\t\t_"
+ property_name
+ clean_parameter_name(property_name)
+ ' = d.pop("'
+ property_name
+ '", UNSET)\n'
)
f.write(
"\t\t" + property_name + ": Union[Unset, datetime.datetime]\n"
"\t\t"
+ clean_parameter_name(property_name)
+ ": Union[Unset, datetime.datetime]\n"
)
f.write(
"\t\tif isinstance(_"
+ clean_parameter_name(property_name)
+ ", Unset):\n"
)
f.write(
"\t\t\t" + clean_parameter_name(property_name) + " = UNSET\n"
)
f.write("\t\tif isinstance(_" + property_name + ", Unset):\n")
f.write("\t\t\t" + property_name + " = UNSET\n")
f.write("\t\telse:\n")
f.write(
"\t\t\t"
+ property_name
+ clean_parameter_name(property_name)
+ " = isoparse(_"
+ property_name
+ clean_parameter_name(property_name)
+ ")\n"
)
f.write("\n")
@ -1749,22 +1849,38 @@ def renderTypeFromDict(f, property_name: str, property_schema: dict, data: dict)
return
f.write(
"\t\t" + property_name + ' = d.pop("' + property_name + '", UNSET)\n'
"\t\t"
+ clean_parameter_name(property_name)
+ ' = d.pop("'
+ property_name
+ '", UNSET)\n'
)
f.write("\n")
elif property_type == "integer":
f.write(
"\t\t" + property_name + ' = d.pop("' + property_name + '", UNSET)\n'
"\t\t"
+ clean_parameter_name(property_name)
+ ' = d.pop("'
+ property_name
+ '", UNSET)\n'
)
f.write("\n")
elif property_type == "number":
f.write(
"\t\t" + property_name + ' = d.pop("' + property_name + '", UNSET)\n'
"\t\t"
+ clean_parameter_name(property_name)
+ ' = d.pop("'
+ property_name
+ '", UNSET)\n'
)
f.write("\n")
elif property_type == "boolean":
f.write(
"\t\t" + property_name + ' = d.pop("' + property_name + '", UNSET)\n'
"\t\t"
+ clean_parameter_name(property_name)
+ ' = d.pop("'
+ property_name
+ '", UNSET)\n'
)
f.write("\n")
elif property_type == "array":
@ -1808,7 +1924,7 @@ def renderTypeFromDict(f, property_name: str, property_schema: dict, data: dict)
f.write(
"\t\t"
+ property_name
+ clean_parameter_name(property_name)
+ " = cast(List["
+ property_type
+ '], d.pop("'
@ -1818,62 +1934,70 @@ def renderTypeFromDict(f, property_name: str, property_schema: dict, data: dict)
f.write("\n")
else:
f.write(
"\t\t" + property_name + ' = d.pop("' + property_name + '", UNSET)\n'
"\t\t"
+ clean_parameter_name(property_name)
+ ' = d.pop("'
+ property_name
+ '", UNSET)\n'
)
elif "$ref" in property_schema:
ref = property_schema["$ref"].replace("#/components/schemas/", "")
# Get the type for the reference.
ref_schema = data["components"]["schemas"][ref]
f.write("\t\t_" + property_name + ' = d.pop("' + property_name + '", UNSET)\n')
f.write("\t\t" + property_name + ": Union[Unset, " + ref + "]\n")
f.write("\t\tif isinstance(_" + property_name + ", Unset):\n")
f.write("\t\t\t" + property_name + " = UNSET\n")
f.write(
"\t\t_"
+ clean_parameter_name(property_name)
+ ' = d.pop("'
+ property_name
+ '", UNSET)\n'
)
f.write(
"\t\t"
+ clean_parameter_name(property_name)
+ ": Union[Unset, "
+ ref
+ "]\n"
)
f.write(
"\t\tif isinstance(_" + clean_parameter_name(property_name) + ", Unset):\n"
)
f.write("\t\t\t" + clean_parameter_name(property_name) + " = UNSET\n")
f.write("\t\telse:\n")
nested_objects = False
if "oneOf" in ref_schema and len(ref_schema["oneOf"]) > 0:
# Check if the nested_object is a object.
for one_of in ref_schema["oneOf"]:
if "type" in one_of and one_of["type"] == "object":
nested_objects = True
break
if nested_objects:
if isNestedObjectOneOf(ref_schema):
f.write(
"\t\t\t"
+ property_name
+ clean_parameter_name(property_name)
+ " = _"
+ property_name
+ clean_parameter_name(property_name)
+ " # type: ignore[arg-type]\n"
)
else:
f.write(
"\t\t\t" + property_name + " = " + ref + "(_" + property_name + ")\n"
"\t\t\t"
+ clean_parameter_name(property_name)
+ " = "
+ ref
+ "(_"
+ clean_parameter_name(property_name)
+ ")\n"
)
f.write("\n")
elif "allOf" in property_schema:
if len(property_schema["allOf"]) != 1:
print(property_schema)
raise Exception("Unknown allOf")
thing = property_schema["allOf"][0]
if "$ref" in thing:
ref = thing["$ref"].replace("#/components/schemas/", "")
if ref == "Uuid":
return renderTypeFromDict(
f, property_name, data["components"]["schemas"][ref], data
)
f.write(
"\t\t_" + property_name + ' = d.pop("' + property_name + '", UNSET)\n'
)
f.write("\t\t" + property_name + ": Union[Unset, " + ref + "]\n")
f.write("\t\tif isinstance(_" + property_name + ", Unset):\n")
f.write("\t\t\t" + property_name + " = UNSET\n")
f.write("\t\telse:\n")
f.write(
"\t\t\t" + property_name + " = " + ref + "(_" + property_name + ")\n"
)
f.write("\n")
else:
raise Exception("unknown allOf type: ", property_schema)
renderTypeFromDict(f, property_name, thing, data)
else:
f.write("\t\t" + property_name + ' = d.pop("' + property_name + '", UNSET)\n')
f.write(
"\t\t"
+ clean_parameter_name(property_name)
+ ' = d.pop("'
+ property_name
+ '", UNSET)\n'
)
def hasDateTime(schema: dict) -> bool:
@ -2089,6 +2213,10 @@ def to_camel_case(s: str):
return "".join([s[0].lower(), s[1:]])
def clean_parameter_name(name: str):
return camel_to_snake(name).replace("from", "from_")
def camel_to_snake(name: str):
name = re.sub("(.)([A-Z][a-z]+)", r"\1_\2", name)
return re.sub("([a-z0-9])([A-Z])", r"\1_\2", name).lower().replace("-", "_")