From 1a978b79f0e62f25579d18be93af8204a8d13c4e Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Mon, 31 Jul 2023 18:05:13 -0700 Subject: [PATCH] add websockets lib, bump version (#116) * add websockets lib, bump version Signed-off-by: Jess Frazelle * use template Signed-off-by: Jess Frazelle * fixes Signed-off-by: Jess Frazelle * I have generated the latest API! --------- Signed-off-by: Jess Frazelle Co-authored-by: github-actions[bot] --- generate/functions-ws.py.jinja2 | 113 +++ generate/functions.py.jinja2 | 169 ++++ generate/generate.py | 727 ++++++------------ kittycad.py.patch.json | 2 +- kittycad/api/ai/create_image_to_3d.py | 4 +- kittycad/api/ai/create_text_to_3d.py | 4 +- kittycad/api/api_calls/get_api_call.py | 5 +- .../api/api_calls/get_api_call_for_user.py | 5 +- .../api/api_calls/get_api_call_metrics.py | 5 +- kittycad/api/api_calls/get_async_operation.py | 5 +- kittycad/api/api_calls/list_api_calls.py | 7 +- .../api/api_calls/list_api_calls_for_user.py | 8 +- .../api/api_calls/list_async_operations.py | 8 +- kittycad/api/api_calls/user_list_api_calls.py | 7 +- .../api_tokens/create_api_token_for_user.py | 4 +- .../api_tokens/delete_api_token_for_user.py | 3 +- .../api/api_tokens/get_api_token_for_user.py | 3 +- .../api_tokens/list_api_tokens_for_user.py | 7 +- kittycad/api/apps/apps_github_callback.py | 4 +- kittycad/api/apps/apps_github_consent.py | 4 +- kittycad/api/apps/apps_github_webhook.py | 4 +- kittycad/api/constant/get_physics_constant.py | 3 +- kittycad/api/executor/create_executor_term.py | 73 +- .../api/executor/create_file_execution.py | 6 +- .../api/file/create_file_center_of_mass.py | 6 +- kittycad/api/file/create_file_conversion.py | 4 +- kittycad/api/file/create_file_density.py | 8 +- kittycad/api/file/create_file_mass.py | 8 +- kittycad/api/file/create_file_surface_area.py | 6 +- kittycad/api/file/create_file_volume.py | 6 +- kittycad/api/hidden/auth_email.py | 4 +- kittycad/api/hidden/auth_email_callback.py | 7 +- kittycad/api/hidden/logout.py | 4 +- kittycad/api/meta/get_ai_plugin_manifest.py | 4 +- kittycad/api/meta/get_metadata.py | 4 +- kittycad/api/meta/get_openai_schema.py | 4 +- kittycad/api/meta/get_schema.py | 4 +- kittycad/api/meta/ping.py | 4 +- kittycad/api/modeling/cmd.py | 4 +- kittycad/api/modeling/cmd_batch.py | 4 +- kittycad/api/modeling/modeling_commands_ws.py | 73 +- .../create_payment_information_for_user.py | 4 +- .../create_payment_intent_for_user.py | 4 +- .../delete_payment_information_for_user.py | 4 +- .../delete_payment_method_for_user.py | 5 +- .../payments/get_payment_balance_for_user.py | 4 +- .../get_payment_information_for_user.py | 4 +- .../api/payments/list_invoices_for_user.py | 4 +- .../payments/list_payment_methods_for_user.py | 4 +- .../update_payment_information_for_user.py | 4 +- ...idate_customer_tax_information_for_user.py | 4 +- .../api/unit/get_angle_unit_conversion.py | 5 +- kittycad/api/unit/get_area_unit_conversion.py | 5 +- .../api/unit/get_current_unit_conversion.py | 5 +- .../api/unit/get_energy_unit_conversion.py | 5 +- .../api/unit/get_force_unit_conversion.py | 5 +- .../api/unit/get_frequency_unit_conversion.py | 5 +- .../api/unit/get_length_unit_conversion.py | 5 +- kittycad/api/unit/get_mass_unit_conversion.py | 5 +- .../api/unit/get_power_unit_conversion.py | 5 +- .../api/unit/get_pressure_unit_conversion.py | 5 +- .../unit/get_temperature_unit_conversion.py | 5 +- .../api/unit/get_torque_unit_conversion.py | 5 +- .../api/unit/get_volume_unit_conversion.py | 5 +- kittycad/api/users/delete_user_self.py | 4 +- kittycad/api/users/get_session_for_user.py | 5 +- kittycad/api/users/get_user.py | 5 +- kittycad/api/users/get_user_extended.py | 5 +- .../api/users/get_user_front_hash_self.py | 4 +- .../api/users/get_user_onboarding_self.py | 4 +- kittycad/api/users/get_user_self.py | 4 +- kittycad/api/users/get_user_self_extended.py | 4 +- kittycad/api/users/list_users.py | 7 +- kittycad/api/users/list_users_extended.py | 7 +- kittycad/api/users/update_user_self.py | 4 +- kittycad/examples_test.py | 52 +- pyproject.toml | 4 +- 77 files changed, 871 insertions(+), 678 deletions(-) create mode 100644 generate/functions-ws.py.jinja2 create mode 100644 generate/functions.py.jinja2 diff --git a/generate/functions-ws.py.jinja2 b/generate/functions-ws.py.jinja2 new file mode 100644 index 000000000..73ce56039 --- /dev/null +++ b/generate/functions-ws.py.jinja2 @@ -0,0 +1,113 @@ +from typing import Any, Dict, Optional, Union, List + +from websockets.sync.client import connect as ws_connect +from websockets.client import connect as ws_connect_async +from websockets.sync.client import ClientConnection +from websockets.client import WebSocketClientProtocol + + +from ...client import Client +from ...models.error import Error +from ...types import Response +{% for import in imports %} +{{import}} +{% endfor %} + + +def _get_kwargs( + {% for arg in args %} + {% if arg.is_optional == False %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} + *, + client: Client, + {% for arg in args %} + {% if arg.is_optional %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} +) -> Dict[str, Any]: + url = "{{url_template}}".format(client.base_url{% for arg in args %}{% if arg.in_url %}, {{arg.name}}={{arg.name}}{% endif %}{% endfor %}) # noqa: E501 + {% for arg in args %} + {% if arg.in_query %} + if {{arg.name}} is not None: + if "?" in url: + url = url + "&{{arg.name}}=" + str({{arg.name}}) + else: + url = url + "?{{arg.name}}=" + str({{arg.name}}) + {% endif %} + {% endfor %} + + + headers: Dict[str, Any] = client.get_headers() + cookies: Dict[str, Any] = client.get_cookies() + + return { + "url": url, + "headers": headers, + "cookies": cookies, + "timeout": client.get_timeout(), + {% if has_request_body %}"content": body,{% endif %} + } + + +def sync( + {% for arg in args %} + {% if arg.is_optional == False %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} + *, + client: Client, + {% for arg in args %} + {% if arg.is_optional %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} +) -> ClientConnection: + {%if docs%}"""{{docs}}""" # noqa: E501{% endif %} + + kwargs = _get_kwargs( + {% for arg in args %} + {{arg.name}}={{arg.name}}, + {% endfor %} + client=client, + ) + + with ws_connect(kwargs["url"].replace("https://", "wss://"), additional_headers=kwargs["headers"]) as websocket: + return websocket # type: ignore + + # Return an error if we got here. + return Error(message="An error occurred while connecting to the websocket.") + + + +async def asyncio( + {% for arg in args %} + {% if arg.is_optional == False %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} + *, + client: Client, + {% for arg in args %} + {% if arg.is_optional %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} +) -> WebSocketClientProtocol: + {%if docs%}"""{{docs}}""" # noqa: E501{% endif %} + + kwargs = _get_kwargs( + {% for arg in args %} + {{arg.name}}={{arg.name}}, + {% endfor %} + client=client, + ) + + async with ws_connect_async(kwargs["url"].replace("https://", "wss://"), extra_headers=kwargs["headers"]) as websocket: + return websocket + + # Return an error if we got here. + return Error(message="An error occurred while connecting to the websocket.") diff --git a/generate/functions.py.jinja2 b/generate/functions.py.jinja2 new file mode 100644 index 000000000..cab386428 --- /dev/null +++ b/generate/functions.py.jinja2 @@ -0,0 +1,169 @@ +from typing import Any, Dict, Optional, Union, List + +import httpx + +from ...client import Client +from ...models.error import Error +from ...types import Response +{% for import in imports %} +{{import}} +{% endfor %} + + +def _get_kwargs( + {% for arg in args %} + {% if arg.is_optional == False %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} + *, + client: Client, + {% for arg in args %} + {% if arg.is_optional %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} +) -> Dict[str, Any]: + url = "{{url_template}}".format(client.base_url, {% for arg in args %}{% if arg.in_url %}{{arg.name}}={{arg.name}},{% endif %}{% endfor %}) # noqa: E501 + {% for arg in args %} + {% if arg.in_query %} + if {{arg.name}} is not None: + if "?" in url: + url = url + "&{{arg.name}}=" + str({{arg.name}}) + else: + url = url + "?{{arg.name}}=" + str({{arg.name}}) + {% endif %} + {% endfor %} + + + headers: Dict[str, Any] = client.get_headers() + cookies: Dict[str, Any] = client.get_cookies() + + return { + "url": url, + "headers": headers, + "cookies": cookies, + "timeout": client.get_timeout(), + {% if has_request_body %}"content": body,{% endif %} + } + + +def _parse_response(*, response: httpx.Response){% if response_type != "" %} -> {{response_type}} {% endif %}: +{{parse_response}} + + +def _build_response( + *, response: httpx.Response +) -> Response[{% if response_type != "" %}{{response_type}}{% else %}Any{% endif %}]: + return Response( + status_code=response.status_code, + content=response.content, + headers=response.headers, + parsed=_parse_response(response=response), + ) + + +def sync_detailed( + {% for arg in args %} + {% if arg.is_optional == False %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} + *, + client: Client, + {% for arg in args %} + {% if arg.is_optional %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} +) -> Response[{% if response_type != "" %}{{response_type}}{% else %}Any{% endif %}]: + kwargs = _get_kwargs( + {% for arg in args %} + {{arg.name}}={{arg.name}}, + {% endfor %} + client=client, + ) + + response = httpx.{{method}}( + verify=client.verify_ssl, + **kwargs, + ) + + return _build_response(response=response) + + +def sync( + {% for arg in args %} + {% if arg.is_optional == False %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} + *, + client: Client, + {% for arg in args %} + {% if arg.is_optional %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} +) {% if response_type != "" %} -> {{response_type}} {% endif %}: + {%if docs%}"""{{docs}}""" # noqa: E501{% endif %} + + return sync_detailed( + {% for arg in args %} + {{arg.name}}={{arg.name}}, + {% endfor %} + client=client, + ).parsed + + +async def asyncio_detailed( + {% for arg in args %} + {% if arg.is_optional == False %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} + *, + client: Client, + {% for arg in args %} + {% if arg.is_optional %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} +) -> Response[{% if response_type != "" %}{{response_type}}{% else %}Any{% endif %}]: + kwargs = _get_kwargs( + {% for arg in args %} + {{arg.name}}={{arg.name}}, + {% endfor %} + client=client, + ) + + async with httpx.AsyncClient(verify=client.verify_ssl) as _client: + response = await _client.{{method}}(**kwargs) + + return _build_response(response=response) + + +async def asyncio( + {% for arg in args %} + {% if arg.is_optional == False %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} + *, + client: Client, + {% for arg in args %} + {% if arg.is_optional %} + {{arg.name}}: {{arg.type}}, + {% endif %} + {% endfor %} +) {% if response_type != "" %} -> {{response_type}} {% endif %}: + {%if docs%}"""{{docs}}""" # noqa: E501{% endif %} + + return ( + await asyncio_detailed( + {% for arg in args %} + {{arg.name}}={{arg.name}}, + {% endfor %} + client=client, + ) + ).parsed diff --git a/generate/generate.py b/generate/generate.py index 49794033c..c9a05ff90 100755 --- a/generate/generate.py +++ b/generate/generate.py @@ -5,10 +5,11 @@ import logging import os import random import re -from typing import Any, Dict, List, Optional, Tuple +from typing import Any, Dict, List, Optional, Tuple, TypedDict import black import isort +import jinja2 import jsonpatch from prance import BaseParser @@ -344,10 +345,7 @@ def generatePath(path: str, name: str, method: str, endpoint: dict, data: dict) tag_name = endpoint["tags"][0].replace("-", "_") path = os.path.join(path, tag_name) file_path = os.path.join(path, file_name) - logging.info("generating type: ", name, " at: ", file_path) - f = open(file_path, "w") - - f.write("from typing import List\n\n") + logging.info("generating path functions: ", name, " at: ", file_path) endpoint_refs = getEndpointRefs(endpoint, data) parameter_refs = getParameterRefs(endpoint) @@ -503,16 +501,8 @@ from kittycad.types import Response """ ) - # This longer example we use for generating tests. - # We only show the short example in the docs since it is much more intuitive to MEs - example = ( - example_imports - + """ - -@pytest.mark.skip -""" - + short_sync_example - + """ + long_example = ( + """ # OR if you need more info (e.g. status_code) """ @@ -549,6 +539,72 @@ async def test_""" + """)""" ) + # Generate the websocket examples. + if "x-dropshot-websocket" in endpoint: + short_sync_example = ( + """def test_""" + + fn_name + + """(): + # Create our client. + client = ClientFromEnv() + + # Connect to the websocket. + websocket = """ + + fn_name + + """.sync(client=client,""" + + params_str + + """) + + # Send a message. + websocket.send("{}") + + # Get the messages. + for message in websocket: + print(message) + + """ + ) + + long_example = ( + """ + +# OR run async +@pytest.mark.asyncio +@pytest.mark.skip +async def test_""" + + fn_name + + """_async(): + # Create our client. + client = ClientFromEnv() + + # Connect to the websocket. + websocket = await """ + + fn_name + + """.asyncio(client=client,""" + + params_str + + """) + + # Send a message. + await websocket.send("{}") + + # Get the messages. + async for message in websocket: + print(message) + """ + ) + + # This longer example we use for generating tests. + # We only show the short example in the docs since it is much more intuitive to MEs + example = ( + example_imports + + """ + +@pytest.mark.skip +""" + + short_sync_example + + long_example + ) + # Make pretty. line_length = 82 short_sync_example = example_imports + short_sync_example @@ -571,156 +627,78 @@ async def test_""" + ".html", } - # Add our imports. - f.write("from typing import Any, Dict, Optional, Union, cast\n") - f.write("\n") - f.write("import httpx\n") - f.write("\n") - f.write("from ...client import Client\n") + # Start defining the template info. + ArgType = TypedDict( + "ArgType", + { + "name": str, + "type": str, + "in_url": bool, + "in_query": bool, + "is_optional": bool, + }, + ) + TemplateType = TypedDict( + "TemplateType", + { + "imports": List[str], + "response_type": str, + "args": List[ArgType], + "url_template": str, + "method": str, + "docs": str, + "parse_response": str, + "has_request_body": bool, + }, + ) + template_info: TemplateType = { + "imports": [], + "response_type": response_type, + "args": [], + "url_template": "{}" + name, + "method": method, + "docs": "", + "parse_response": "", + "has_request_body": False, + } + + if len(endpoint_refs) == 0: + template_info["response_type"] = "" + + if "description" in endpoint: + template_info["docs"] = endpoint["description"] + # Import our references for responses. for ref in endpoint_refs: if ref.startswith("List[") and ref.endswith("]"): ref = ref.replace("List[", "").replace("]", "") if ref != "str" and ref != "dict": - f.write("from ...models." + camel_to_snake(ref) + " import " + ref + "\n") + template_info["imports"].append( + "from ...models." + camel_to_snake(ref) + " import " + ref + ) for ref in parameter_refs: - f.write("from ...models." + camel_to_snake(ref) + " import " + ref + "\n") - for ref in request_body_refs: - f.write("from ...models." + camel_to_snake(ref) + " import " + ref + "\n") - f.write("from ...types import Response\n") - f.write("\n") - - # Define the method. - f.write("def _get_kwargs(\n") - # Iterate over the parameters. - optional_args = [] - if "parameters" in endpoint: - parameters = endpoint["parameters"] - for parameter in parameters: - parameter_name = parameter["name"] - if "type" in parameter["schema"]: - parameter_type = ( - parameter["schema"]["type"] - .replace("string", "str") - .replace("integer", "int") - .replace("number", "float") - ) - elif "$ref" in parameter["schema"]: - parameter_type = parameter["schema"]["$ref"].replace( - "#/components/schemas/", "" - ) - else: - logging.error("parameter: ", parameter) - raise Exception("Unknown parameter type") - if "nullable" in parameter["schema"]: - if parameter["schema"]["nullable"]: - parameter_type = "Optional[" + parameter_type + "] = None" - optional_args.append( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - else: - f.write( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - else: - f.write( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - if request_body_type: - f.write("\tbody: " + request_body_type + ",\n") - f.write("\t*,\n") - f.write("\tclient: Client,\n") - for optional_arg in optional_args: - f.write(optional_arg) - f.write(") -> Dict[str, Any]:\n") - templateUrl = "{}" + name - formatTemplate = ".format(client.base_url" - query_params: List[str] = [] - # Iterate over the parameters. - if "parameters" in endpoint: - parameters = endpoint["parameters"] - for parameter in parameters: - parameter_name = parameter["name"] - if "type" in parameter["schema"]: - parameter_type = parameter["schema"]["type"].replace("string", "str") - elif "$ref" in parameter["schema"]: - parameter_type = parameter["schema"]["$ref"].replace( - "#/components/schemas/", "" - ) - else: - logging.error("parameter: ", parameter) - raise Exception("Unknown parameter type") - if parameter["in"] == "path": - formatTemplate = ( - formatTemplate - + ", " - + clean_parameter_name(parameter_name) - + "=" - + camel_to_snake(parameter_name) - ) - elif parameter["in"] == "query": - query_params.append(parameter_name) - - f.write('\turl = "' + templateUrl + '"' + formatTemplate + ") # noqa: E501\n") - for query_param in query_params: - f.write("\tif " + query_param + " is not None:\n") - f.write("\t\tif '?' in url:\n") - f.write("\t\t\turl = url + '&" + query_param + "='+str(" + query_param + ")\n") - f.write("\t\telse:\n") - f.write("\t\t\turl = url + '?" + query_param + "='+str(" + query_param + ")\n") - - f.write("\n") - f.write("\theaders: Dict[str, Any] = client.get_headers()\n") - f.write("\tcookies: Dict[str, Any] = client.get_cookies()\n") - f.write("\n") - - f.write("\treturn {\n") - f.write('\t\t"url": url,\n') - f.write('\t\t"headers": headers,\n') - f.write('\t\t"cookies": cookies,\n') - f.write('\t\t"timeout": client.get_timeout(),\n') - if request_body_type: - f.write('\t\t"content": body,\n') - f.write("\t}\n") - - # Define the parse reponse. - f.write("\n") - f.write("\n") - - if len(endpoint_refs) > 0: - f.write( - "def _parse_response(*, response: httpx.Response) -> " - + response_type - + ":\n" + template_info["imports"].append( + "from ...models." + camel_to_snake(ref) + " import " + ref + ) + for ref in request_body_refs: + template_info["imports"].append( + "from ...models." + camel_to_snake(ref) + " import " + ref ) - else: - f.write("def _parse_response(*, response: httpx.Response):\n") # Iterate over the responses. + parse_response = io.StringIO() if len(endpoint_refs) > 0: responses = endpoint["responses"] for response_code in responses: response = responses[response_code] if response_code == "default": # This is no content. - f.write("\treturn None\n") + parse_response.write("\treturn None\n") elif response_code == "204" or response_code == "302": # This is no content. - f.write("\treturn None\n") + parse_response.write("\treturn None\n") else: - f.write( + parse_response.write( "\tif response.status_code == " + response_code.replace("XX", "00") + ":\n" @@ -734,41 +712,45 @@ async def test_""" if "$ref" in json: ref = json["$ref"].replace("#/components/schemas/", "") schema = data["components"]["schemas"][ref] - # Let's check if it is a oneOf. + # Let's check if it is a oneOparse_response. if "oneOf" in schema: is_one_of = True # We want to parse each of the possible types. - f.write("\t\tdata = response.json()\n") + parse_response.write("\t\tdata = response.json()\n") for index, one_of in enumerate(schema["oneOf"]): ref = getOneOfRefType(one_of) - f.write("\t\ttry:\n") - f.write( + parse_response.write("\t\ttry:\n") + parse_response.write( "\t\t\tif not isinstance(data, dict):\n" ) - f.write("\t\t\t\traise TypeError()\n") + parse_response.write( + "\t\t\t\traise TypeError()\n" + ) option_name = "option_" + camel_to_snake(ref) - f.write( + parse_response.write( "\t\t\t" + option_name + " = " + ref + ".from_dict(data)\n" ) - f.write("\t\t\treturn " + option_name + "\n") - f.write("\t\texcept ValueError:\n") + parse_response.write( + "\t\t\treturn " + option_name + "\n" + ) + parse_response.write("\t\texcept ValueError:\n") if index == len(schema["oneOf"]) - 1: # On the last one raise the error. - f.write("\t\t\traise\n") + parse_response.write("\t\t\traise\n") else: - f.write("\t\t\tpass\n") - f.write("\t\texcept TypeError:\n") + parse_response.write("\t\t\tpass\n") + parse_response.write("\t\texcept TypeError:\n") if index == len(schema["oneOf"]) - 1: # On the last one raise the error. - f.write("\t\t\traise\n") + parse_response.write("\t\t\traise\n") else: - f.write("\t\t\tpass\n") + parse_response.write("\t\t\tpass\n") else: - f.write( + parse_response.write( "\t\tresponse_" + response_code + " = " @@ -782,16 +764,20 @@ async def test_""" ref = items["$ref"].replace( "#/components/schemas/", "" ) - f.write( + parse_response.write( "\t\tresponse_" + response_code + " = [\n" ) - f.write("\t\t\t" + ref + ".from_dict(item)\n") - f.write("\t\t\tfor item in response.json()\n") - f.write("\t\t]\n") + parse_response.write( + "\t\t\t" + ref + ".from_dict(item)\n" + ) + parse_response.write( + "\t\t\tfor item in response.json()\n" + ) + parse_response.write("\t\t]\n") else: raise Exception("Unknown array type") elif json["type"] == "string": - f.write( + parse_response.write( "\t\tresponse_" + response_code + " = response.text\n" @@ -799,7 +785,7 @@ async def test_""" else: raise Exception("Unknown type", json["type"]) else: - f.write( + parse_response.write( "\t\tresponse_" + response_code + " = response.json()\n" @@ -819,7 +805,7 @@ async def test_""" ref = json["$ref"].replace( "#/components/schemas/", "" ) - f.write( + parse_response.write( "\t\tresponse_" + response_code + " = " @@ -831,330 +817,92 @@ async def test_""" raise Exception("response not supported") if not is_one_of: - f.write("\t\treturn response_" + response_code + "\n") + parse_response.write("\t\treturn response_" + response_code + "\n") # End the method. - f.write("\treturn Error.from_dict(response.json())\n") + parse_response.write("\treturn Error.from_dict(response.json())\n") else: - f.write("\treturn\n") + parse_response.write("\treturn\n") - # Define the build response method. - f.write("\n") - f.write("\n") - if len(endpoint_refs) > 0: - f.write( - "def _build_response(*, response: httpx.Response) -> " - + detailed_response_type - + ":\n" + template_info["parse_response"] = parse_response.getvalue() + + # Iterate over the parameters. + optional_args = [] + if "parameters" in endpoint: + parameters = endpoint["parameters"] + for parameter in parameters: + parameter_name = parameter["name"] + if "type" in parameter["schema"]: + parameter_type = ( + parameter["schema"]["type"] + .replace("string", "str") + .replace("integer", "int") + .replace("number", "float") + ) + elif "$ref" in parameter["schema"]: + parameter_type = parameter["schema"]["$ref"].replace( + "#/components/schemas/", "" + ) + else: + logging.error("parameter: ", parameter) + raise Exception("Unknown parameter type") + if "nullable" in parameter["schema"]: + if parameter["schema"]["nullable"]: + parameter_type = "Optional[" + parameter_type + "] = None" + template_info["args"].append( + { + "name": camel_to_snake(parameter_name), + "type": parameter_type, + "in_url": "in" in parameter and (parameter["in"] == "path"), + "in_query": "in" in parameter + and (parameter["in"] == "query"), + "is_optional": True, + } + ) + else: + template_info["args"].append( + { + "name": camel_to_snake(parameter_name), + "type": parameter_type, + "in_url": "in" in parameter and (parameter["in"] == "path"), + "in_query": "in" in parameter + and (parameter["in"] == "query"), + "is_optional": False, + } + ) + else: + template_info["args"].append( + { + "name": camel_to_snake(parameter_name), + "type": parameter_type, + "in_url": "in" in parameter and (parameter["in"] == "path"), + "in_query": "in" in parameter and (parameter["in"] == "query"), + "is_optional": False, + } + ) + + if request_body_type: + template_info["args"].append( + { + "name": "body", + "type": request_body_type, + "in_url": False, + "in_query": False, + "is_optional": False, + } ) - else: - f.write("def _build_response(*, response: httpx.Response) -> Response[Any]:\n") + template_info["has_request_body"] = True - f.write("\treturn Response(\n") - f.write("\t\tstatus_code=response.status_code,\n") - f.write("\t\tcontent=response.content,\n") - f.write("\t\theaders=response.headers,\n") - f.write("\t\tparsed=_parse_response(response=response),\n") - f.write("\t)\n") - - # Define the sync_detailed method. - f.write("\n") - f.write("\n") - f.write("def sync_detailed(\n") - optional_args = [] - # Iterate over the parameters. - if "parameters" in endpoint: - parameters = endpoint["parameters"] - for parameter in parameters: - parameter_name = parameter["name"] - if "type" in parameter["schema"]: - parameter_type = ( - parameter["schema"]["type"] - .replace("string", "str") - .replace("integer", "int") - .replace("number", "float") - ) - elif "$ref" in parameter["schema"]: - parameter_type = parameter["schema"]["$ref"].replace( - "#/components/schemas/", "" - ) - else: - logging.error("parameter: ", parameter) - raise Exception("Unknown parameter type") - if "nullable" in parameter["schema"]: - if parameter["schema"]["nullable"]: - parameter_type = "Optional[" + parameter_type + "] = None" - optional_args.append( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - else: - f.write( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - else: - f.write( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - if request_body_type: - f.write("\tbody: " + request_body_type + ",\n") - f.write("\t*,\n") - f.write("\tclient: Client,\n") - for optional_arg in optional_args: - f.write(optional_arg) - - if len(endpoint_refs) > 0: - f.write(") -> " + detailed_response_type + ":\n") - else: - f.write(") -> Response[Any]:\n") - - f.write("\tkwargs = _get_kwargs(\n") - params = get_function_parameters(endpoint, request_body_type) - for param in params: - f.write("\t\t" + clean_parameter_name(param) + "=" + param + ",\n") - f.write("\t\tclient=client,\n") - f.write("\t)\n") - f.write("\n") - f.write("\tresponse = httpx." + method + "(\n") - f.write("\t\tverify=client.verify_ssl,\n") - f.write("\t\t**kwargs,\n") - f.write("\t)\n") - f.write("\n") - f.write("\treturn _build_response(response=response)\n") - - # Define the sync method. - f.write("\n") - f.write("\n") - f.write("def sync(\n") - optional_args = [] - # Iterate over the parameters. - if "parameters" in endpoint: - parameters = endpoint["parameters"] - for parameter in parameters: - parameter_name = parameter["name"] - if "type" in parameter["schema"]: - parameter_type = ( - parameter["schema"]["type"] - .replace("string", "str") - .replace("integer", "int") - .replace("number", "float") - ) - elif "$ref" in parameter["schema"]: - parameter_type = parameter["schema"]["$ref"].replace( - "#/components/schemas/", "" - ) - else: - logging.error("parameter: ", parameter) - raise Exception("Unknown parameter type") - if "nullable" in parameter["schema"]: - if parameter["schema"]["nullable"]: - parameter_type = "Optional[" + parameter_type + "] = None" - optional_args.append( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - else: - f.write( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - else: - f.write( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - if request_body_type: - f.write("\tbody: " + request_body_type + ",\n") - f.write("\t*,\n") - f.write("\tclient: Client,\n") - for optional_arg in optional_args: - f.write(optional_arg) - - if len(endpoint_refs) > 0: - f.write(") -> " + response_type + ":\n") - else: - f.write("):\n") - - if "description" in endpoint: - f.write('\t""" ' + endpoint["description"] + ' """ # noqa: E501\n') - f.write("\n") - f.write("\treturn sync_detailed(\n") - params = get_function_parameters(endpoint, request_body_type) - for param in params: - f.write("\t\t" + clean_parameter_name(param) + "=" + param + ",\n") - f.write("\t\tclient=client,\n") - f.write("\t).parsed\n") - - # Define the asyncio_detailed method. - f.write("\n") - f.write("\n") - f.write("async def asyncio_detailed(\n") - optional_args = [] - # Iterate over the parameters. - if "parameters" in endpoint: - parameters = endpoint["parameters"] - for parameter in parameters: - parameter_name = parameter["name"] - if "type" in parameter["schema"]: - parameter_type = ( - parameter["schema"]["type"] - .replace("string", "str") - .replace("integer", "int") - .replace("number", "float") - ) - elif "$ref" in parameter["schema"]: - parameter_type = parameter["schema"]["$ref"].replace( - "#/components/schemas/", "" - ) - else: - logging.error("parameter: ", parameter) - raise Exception("Unknown parameter type") - if "nullable" in parameter["schema"]: - if parameter["schema"]["nullable"]: - parameter_type = "Optional[" + parameter_type + "] = None" - optional_args.append( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - else: - f.write( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - else: - f.write( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - if request_body_type is not None: - f.write("\tbody: " + request_body_type + ",\n") - f.write("\t*,\n") - f.write("\tclient: Client,\n") - for optional_arg in optional_args: - f.write(optional_arg) - - if len(endpoint_refs) > 0: - f.write(") -> " + detailed_response_type + ":\n") - else: - f.write(") -> Response[Any]:\n") - - f.write("\tkwargs = _get_kwargs(\n") - params = get_function_parameters(endpoint, request_body_type) - for param in params: - f.write("\t\t" + clean_parameter_name(param) + "=" + param + ",\n") - f.write("\t\tclient=client,\n") - f.write("\t)\n") - f.write("\n") - f.write("\tasync with httpx.AsyncClient(verify=client.verify_ssl) as _client:\n") - f.write("\t\tresponse = await _client." + method + "(**kwargs)\n") - f.write("\n") - f.write("\treturn _build_response(response=response)\n") - - # Define the asyncio method. - f.write("\n") - f.write("\n") - f.write("async def asyncio(\n") - optional_args = [] - # Iterate over the parameters. - if "parameters" in endpoint: - parameters = endpoint["parameters"] - for parameter in parameters: - parameter_name = parameter["name"] - if "type" in parameter["schema"]: - parameter_type = ( - parameter["schema"]["type"] - .replace("string", "str") - .replace("integer", "int") - .replace("number", "float") - ) - elif "$ref" in parameter["schema"]: - parameter_type = parameter["schema"]["$ref"].replace( - "#/components/schemas/", "" - ) - else: - logging.error("parameter: ", parameter) - raise Exception("Unknown parameter type") - if "nullable" in parameter["schema"]: - if parameter["schema"]["nullable"]: - parameter_type = "Optional[" + parameter_type + "] = None" - optional_args.append( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - else: - f.write( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - else: - f.write( - "\t" - + camel_to_snake(parameter_name) - + ": " - + parameter_type - + ",\n" - ) - if request_body_type: - f.write("\tbody: " + request_body_type + ",\n") - f.write("\t*,\n") - f.write("\tclient: Client,\n") - for optional_arg in optional_args: - f.write(optional_arg) - - if len(endpoint_refs) > 0: - f.write(") -> " + response_type + ":\n") - else: - f.write("):\n") - - if "description" in endpoint: - f.write('\t""" ' + endpoint["description"] + ' """ # noqa: E501\n') - f.write("\n") - f.write("\treturn (\n") - f.write("\t\tawait asyncio_detailed(\n") - params = get_function_parameters(endpoint, request_body_type) - for param in params: - 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") - - # Close the file. - f.close() + # Generate the template for the functions. + environment = jinja2.Environment(loader=jinja2.FileSystemLoader("generate/")) + template_file = "functions.py.jinja2" + if "x-dropshot-websocket" in endpoint: + template_file = "functions-ws.py.jinja2" + template = environment.get_template(template_file) + content = template.render(**template_info) + with open(file_path, mode="w", encoding="utf-8") as message: + message.write(content) + logging.info(f"... wrote {file_path}") return data @@ -1444,7 +1192,9 @@ def generateObjectTypeCode(name: str, schema: dict, type_name: str, data: dict) has_date_time = hasDateTime(schema) if has_date_time: f.write("import datetime\n") - f.write("from typing import Any, Dict, List, Type, TypeVar, Union, cast\n") + f.write( + "from typing import Any, Dict, List, Type, TypeVar, Union, cast, deprecated\n" + ) f.write("\n") f.write("import attr\n") if has_date_time: @@ -1755,6 +1505,9 @@ def renderTypeToDict(f, property_name: str, property_schema: dict, data: dict): def renderTypeInit(f, property_name: str, property_schema: dict, data: dict): property_name = clean_parameter_name(property_name) + # if "deprecated" in property_schema and property_schema["deprecated"]: + # TODO some properties are deprecated, but we still need to support them + # we should show some kind of warning here if "type" in property_schema: property_type = property_schema["type"] diff --git a/kittycad.py.patch.json b/kittycad.py.patch.json index 20694b492..f6aef5ca8 100644 --- a/kittycad.py.patch.json +++ b/kittycad.py.patch.json @@ -1 +1 @@ -[{"op": "add", "path": "/components/schemas/UnitEnergy/enum", "value": ["btu", "electronvolts", "joules", "kilocalories", "kilowatt_hours", "watt_hours"]}, {"op": "add", "path": "/components/schemas/UnitEnergy/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitForce/enum", "value": ["dynes", "kiloponds", "micronewtons", "millinewtons", "newtons", "poundals", "pounds"]}, {"op": "add", "path": "/components/schemas/UnitForce/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitFrequency/enum", "value": ["gigahertz", "hertz", "kilohertz", "megahertz", "microhertz", "millihertz", "nanohertz", "terahertz"]}, {"op": "add", "path": "/components/schemas/UnitFrequency/type", "value": "string"}, {"op": "add", "path": "/components/schemas/AiPluginAuthType/enum", "value": ["none", "user_http", "service_http", "oauth"]}, {"op": "add", "path": "/components/schemas/AiPluginAuthType/type", "value": "string"}, {"op": "add", "path": "/components/schemas/AsyncApiCallType/enum", "value": ["FileConversion", "FileVolume", "FileCenterOfMass", "FileMass", "FileDensity", "FileSurfaceArea"]}, {"op": "add", "path": "/components/schemas/AsyncApiCallType/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitAngle/enum", "value": ["degrees", "radians"]}, {"op": "add", "path": "/components/schemas/UnitAngle/type", "value": "string"}, {"op": "add", "path": "/components/schemas/Direction/enum", "value": ["positive", "negative"]}, {"op": "add", "path": "/components/schemas/Direction/type", "value": "string"}, {"op": "add", "path": "/components/schemas/Method/enum", "value": ["OPTIONS", "GET", "POST", "PUT", "DELETE", "HEAD", "TRACE", "CONNECT", "PATCH", "EXTENSION"]}, {"op": "add", "path": "/components/schemas/Method/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitTorque/enum", "value": ["newton_metres", "pound_foot"]}, {"op": "add", "path": "/components/schemas/UnitTorque/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitArea/enum", "value": ["cm2", "dm2", "ft2", "in2", "km2", "m2", "mm2", "yd2"]}, {"op": "add", "path": "/components/schemas/UnitArea/type", "value": "string"}, {"op": "add", "path": "/components/schemas/AiPluginHttpAuthType/enum", "value": ["basic", "bearer"]}, {"op": "add", "path": "/components/schemas/AiPluginHttpAuthType/type", "value": "string"}, {"op": "add", "path": "/components/schemas/ApiCallQueryGroupBy/enum", "value": ["email", "method", "endpoint", "user_id", "origin", "ip_address"]}, {"op": "add", "path": "/components/schemas/ApiCallQueryGroupBy/type", "value": "string"}, {"op": "add", "path": "/components/schemas/FileImportFormat/enum", "value": ["dae", "fbx", "gltf", "obj", "ply", "step", "stl"]}, {"op": "add", "path": "/components/schemas/FileImportFormat/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitCurrent/enum", "value": ["amperes", "microamperes", "milliamperes", "nanoamperes"]}, {"op": "add", "path": "/components/schemas/UnitCurrent/type", "value": "string"}, {"op": "add", "path": "/components/schemas/InvoiceStatus/enum", "value": ["deleted", "draft", "open", "paid", "uncollectible", "void"]}, {"op": "add", "path": "/components/schemas/InvoiceStatus/type", "value": "string"}, {"op": "add", "path": "/components/schemas/CameraDragInteractionType/enum", "value": ["pan", "rotate", "zoom"]}, {"op": "add", "path": "/components/schemas/CameraDragInteractionType/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitPressure/enum", "value": ["atmospheres", "bars", "hectopascals", "kilopascals", "millibars", "pascals", "psi"]}, {"op": "add", "path": "/components/schemas/UnitPressure/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitVolume/enum", "value": ["cm3", "ft3", "in3", "m3", "yd3", "usfloz", "usgal", "l", "ml"]}, {"op": "add", "path": "/components/schemas/UnitVolume/type", "value": "string"}, {"op": "add", "path": "/components/schemas/PaymentMethodType/enum", "value": ["card"]}, {"op": "add", "path": "/components/schemas/PaymentMethodType/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitMass/enum", "value": ["g", "kg", "lb"]}, {"op": "add", "path": "/components/schemas/UnitMass/type", "value": "string"}, {"op": "add", "path": "/components/schemas/Currency/enum", "value": ["aed", "afn", "all", "amd", "ang", "aoa", "ars", "aud", "awg", "azn", "bam", "bbd", "bdt", "bgn", "bif", "bmd", "bnd", "bob", "brl", "bsd", "bwp", "bzd", "cad", "cdf", "chf", "clp", "cny", "cop", "crc", "cve", "czk", "djf", "dkk", "dop", "dzd", "eek", "egp", "etb", "eur", "fjd", "fkp", "gbp", "gel", "gip", "gmd", "gnf", "gtq", "gyd", "hkd", "hnl", "hrk", "htg", "huf", "idr", "ils", "inr", "isk", "jmd", "jpy", "kes", "kgs", "khr", "kmf", "krw", "kyd", "kzt", "lak", "lbp", "lkr", "lrd", "lsl", "ltl", "lvl", "mad", "mdl", "mga", "mkd", "mnt", "mop", "mro", "mur", "mvr", "mwk", "mxn", "myr", "mzn", "nad", "ngn", "nio", "nok", "npr", "nzd", "pab", "pen", "pgk", "php", "pkr", "pln", "pyg", "qar", "ron", "rsd", "rub", "rwf", "sar", "sbd", "scr", "sek", "sgd", "shp", "sll", "sos", "srd", "std", "svc", "szl", "thb", "tjs", "top", "try", "ttd", "twd", "tzs", "uah", "ugx", "usd", "uyu", "uzs", "vef", "vnd", "vuv", "wst", "xaf", "xcd", "xof", "xpf", "yer", "zar", "zmw"]}, {"op": "add", "path": "/components/schemas/Currency/type", "value": "string"}, {"op": "add", "path": "/components/schemas/CountryCode/enum", "value": ["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "CV", "KH", "CM", "CA", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]}, {"op": "add", "path": "/components/schemas/CountryCode/type", "value": "string"}, {"op": "add", "path": "/components/schemas/CodeLanguage/enum", "value": ["go", "python", "node"]}, {"op": "add", "path": "/components/schemas/CodeLanguage/type", "value": "string"}, {"op": "add", "path": "/components/schemas/ApiCallStatus/enum", "value": ["Queued", "Uploaded", "In Progress", "Completed", "Failed"]}, {"op": "add", "path": "/components/schemas/ApiCallStatus/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitDensity/enum", "value": ["lb:ft3", "kg:m3"]}, {"op": "add", "path": "/components/schemas/UnitDensity/type", "value": "string"}, {"op": "add", "path": "/components/schemas/PhysicsConstantName/enum", "value": ["pi", "c", "speed_of_light", "G", "newtonian_gravitation", "h", "planck_const", "mu_0", "vacuum_permeability", "E_0", "vacuum_permitivity", "Z_0", "vacuum_impedance", "k_e", "coulomb_const", "e", "elementary_charge", "m_e", "electron_mass", "m_p", "proton_mass", "mu_B", "bohr_magneton", "NA", "avogadro_num", "R", "molar_gas_const", "K_B", "boltzmann_const", "F", "faraday_const", "sigma", "stefan_boltzmann_const"]}, {"op": "add", "path": "/components/schemas/PhysicsConstantName/type", "value": "string"}, {"op": "add", "path": "/components/schemas/AiPluginApiType/enum", "value": ["openapi"]}, {"op": "add", "path": "/components/schemas/AiPluginApiType/type", "value": "string"}, {"op": "add", "path": "/components/schemas/OAuth2GrantType/enum", "value": ["urn:ietf:params:oauth:grant-type:device_code"]}, {"op": "add", "path": "/components/schemas/OAuth2GrantType/type", "value": "string"}, {"op": "add", "path": "/components/schemas/AccountProvider/enum", "value": ["google", "github"]}, {"op": "add", "path": "/components/schemas/AccountProvider/type", "value": "string"}, {"op": "add", "path": "/components/schemas/Environment/enum", "value": ["DEVELOPMENT", "PREVIEW", "PRODUCTION"]}, {"op": "add", "path": "/components/schemas/Environment/type", "value": "string"}, {"op": "add", "path": "/components/schemas/FileExportFormat/enum", "value": ["dae", "fbx", "fbxb", "gltf", "obj", "ply", "step", "stl"]}, {"op": "add", "path": "/components/schemas/FileExportFormat/type", "value": "string"}, {"op": "add", "path": "/components/schemas/Axis/enum", "value": ["y", "z"]}, {"op": "add", "path": "/components/schemas/Axis/type", "value": "string"}, {"op": "add", "path": "/components/schemas/Storage/enum", "value": ["binary", "standard", "embedded"]}, {"op": "add", "path": "/components/schemas/Storage/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitTemperature/enum", "value": ["celsius", "fahrenheit", "kelvin", "rankine"]}, {"op": "add", "path": "/components/schemas/UnitTemperature/type", "value": "string"}, {"op": "add", "path": "/components/schemas/CreatedAtSortMode/enum", "value": ["created-at-ascending", "created-at-descending"]}, {"op": "add", "path": "/components/schemas/CreatedAtSortMode/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitPower/enum", "value": ["btu_per_minute", "horsepower", "kilowatts", "metric_horsepower", "microwatts", "milliwatts", "watts"]}, {"op": "add", "path": "/components/schemas/UnitPower/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitLength/enum", "value": ["cm", "ft", "in", "m", "mm", "yd"]}, {"op": "add", "path": "/components/schemas/UnitLength/type", "value": "string"}, {"op": "add", "path": "/paths/~1ping/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.meta import ping\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, Pong\nfrom kittycad.types import Response\n\n\ndef example_ping():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[Pong, Error]] = ping.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Pong = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.meta.ping.html"}}, {"op": "add", "path": "/paths/~1auth~1email/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.hidden import auth_email\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, VerificationToken\nfrom kittycad.models.email_authentication_form import EmailAuthenticationForm\nfrom kittycad.types import Response\n\n\ndef example_auth_email():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[VerificationToken, Error]] = auth_email.sync(\n client=client,\n body=EmailAuthenticationForm(\n email=\"\",\n ),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: VerificationToken = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.hidden.auth_email.html"}}, {"op": "add", "path": "/paths/~1_meta~1info/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.meta import get_metadata\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, Metadata\nfrom kittycad.types import Response\n\n\ndef example_get_metadata():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[Metadata, Error]] = get_metadata.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Metadata = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.meta.get_metadata.html"}}, {"op": "add", "path": "/paths/~1/get/x-python", "value": {"example": "from kittycad.api.meta import get_schema\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.types import Response\n\n\ndef example_get_schema():\n # Create our client.\n client = ClientFromEnv()\n\n get_schema.sync(\n client=client,\n )\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.meta.get_schema.html"}}, {"op": "add", "path": "/paths/~1apps~1github~1callback/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.apps import apps_github_callback\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_apps_github_callback():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = apps_github_callback.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.apps.apps_github_callback.html"}}, {"op": "add", "path": "/paths/~1user~1api-calls~1{id}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import get_api_call_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiCallWithPrice, Error\nfrom kittycad.types import Response\n\n\ndef example_get_api_call_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[ApiCallWithPrice, Error]] = get_api_call_for_user.sync(\n client=client,\n id=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiCallWithPrice = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.get_api_call_for_user.html"}}, {"op": "add", "path": "/paths/~1constant~1physics~1{constant}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.constant import get_physics_constant\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, PhysicsConstant\nfrom kittycad.models.physics_constant_name import PhysicsConstantName\nfrom kittycad.types import Response\n\n\ndef example_get_physics_constant():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[PhysicsConstant, Error]] = get_physics_constant.sync(\n client=client,\n constant=PhysicsConstantName.PI,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: PhysicsConstant = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.constant.get_physics_constant.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1pressure~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_pressure_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitPressureConversion\nfrom kittycad.models.unit_pressure import UnitPressure\nfrom kittycad.types import Response\n\n\ndef example_get_pressure_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitPressureConversion, Error]\n ] = get_pressure_unit_conversion.sync(\n client=client,\n input_unit=UnitPressure.ATMOSPHERES,\n output_unit=UnitPressure.ATMOSPHERES,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitPressureConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_pressure_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1users-extended/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import list_users_extended\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, ExtendedUserResultsPage\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_list_users_extended():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[ExtendedUserResultsPage, Error]\n ] = list_users_extended.sync(\n client=client,\n sort_by=CreatedAtSortMode.CREATED_AT_ASCENDING,\n limit=None, # Optional[int]\n page_token=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ExtendedUserResultsPage = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.list_users_extended.html"}}, {"op": "add", "path": "/paths/~1user~1payment~1invoices/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import list_invoices_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, Invoice\nfrom kittycad.types import Response\n\n\ndef example_list_invoices_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[List[Invoice], Error]] = list_invoices_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: List[Invoice] = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.list_invoices_for_user.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1volume~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_volume_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitVolumeConversion\nfrom kittycad.models.unit_volume import UnitVolume\nfrom kittycad.types import Response\n\n\ndef example_get_volume_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitVolumeConversion, Error]\n ] = get_volume_unit_conversion.sync(\n client=client,\n input_unit=UnitVolume.CM3,\n output_unit=UnitVolume.CM3,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitVolumeConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_volume_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1apps~1github~1consent/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.apps import apps_github_consent\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import AppClientInfo, Error\nfrom kittycad.types import Response\n\n\ndef example_apps_github_consent():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[AppClientInfo, Error]] = apps_github_consent.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: AppClientInfo = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.apps.apps_github_consent.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1angle~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_angle_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitAngleConversion\nfrom kittycad.models.unit_angle import UnitAngle\nfrom kittycad.types import Response\n\n\ndef example_get_angle_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitAngleConversion, Error]\n ] = get_angle_unit_conversion.sync(\n client=client,\n input_unit=UnitAngle.DEGREES,\n output_unit=UnitAngle.DEGREES,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitAngleConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_angle_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1.well-known~1ai-plugin.json/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.meta import get_ai_plugin_manifest\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import AiPluginManifest, Error\nfrom kittycad.types import Response\n\n\ndef example_get_ai_plugin_manifest():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[AiPluginManifest, Error]\n ] = get_ai_plugin_manifest.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: AiPluginManifest = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.meta.get_ai_plugin_manifest.html"}}, {"op": "add", "path": "/paths/~1user/put/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import update_user_self\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, User\nfrom kittycad.models.update_user import UpdateUser\nfrom kittycad.types import Response\n\n\ndef example_update_user_self():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[User, Error]] = update_user_self.sync(\n client=client,\n body=UpdateUser(\n company=\"\",\n discord=\"\",\n first_name=\"\",\n github=\"\",\n last_name=\"\",\n phone=\"\",\n ),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: User = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.update_user_self.html"}}, {"op": "add", "path": "/paths/~1user/delete/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import delete_user_self\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_delete_user_self():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = delete_user_self.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.delete_user_self.html"}}, {"op": "add", "path": "/paths/~1user/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import get_user_self\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, User\nfrom kittycad.types import Response\n\n\ndef example_get_user_self():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[User, Error]] = get_user_self.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: User = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.get_user_self.html"}}, {"op": "add", "path": "/paths/~1modeling~1cmd/post/x-python", "value": {"example": "from kittycad.api.modeling import cmd\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models.modeling_cmd import MovePathPen\nfrom kittycad.models.modeling_cmd_id import ModelingCmdId\nfrom kittycad.models.modeling_cmd_req import ModelingCmdReq\nfrom kittycad.models.point3d import Point3d\nfrom kittycad.types import Response\n\n\ndef example_cmd():\n # Create our client.\n client = ClientFromEnv()\n\n cmd.sync(\n client=client,\n body=ModelingCmdReq(\n cmd=MovePathPen(\n path=ModelingCmdId(\"\"),\n to=Point3d(\n x=3.14,\n y=3.14,\n z=3.14,\n ),\n ),\n cmd_id=ModelingCmdId(\"\"),\n file_id=\"\",\n ),\n )\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.modeling.cmd.html"}}, {"op": "add", "path": "/paths/~1async~1operations~1{id}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import get_async_operation\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import (\n Error,\n FileCenterOfMass,\n FileConversion,\n FileDensity,\n FileMass,\n FileSurfaceArea,\n FileVolume,\n)\nfrom kittycad.types import Response\n\n\ndef example_get_async_operation():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[\n FileConversion,\n FileCenterOfMass,\n FileMass,\n FileVolume,\n FileDensity,\n FileSurfaceArea,\n Error,\n ]\n ] = get_async_operation.sync(\n client=client,\n id=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Union[\n FileConversion,\n FileCenterOfMass,\n FileMass,\n FileVolume,\n FileDensity,\n FileSurfaceArea,\n ] = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.get_async_operation.html"}}, {"op": "add", "path": "/paths/~1file~1surface-area/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.file import create_file_surface_area\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, FileSurfaceArea\nfrom kittycad.models.file_import_format import FileImportFormat\nfrom kittycad.models.unit_area import UnitArea\nfrom kittycad.types import Response\n\n\ndef example_create_file_surface_area():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[FileSurfaceArea, Error]\n ] = create_file_surface_area.sync(\n client=client,\n output_unit=UnitArea.CM2,\n src_format=FileImportFormat.DAE,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: FileSurfaceArea = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.file.create_file_surface_area.html"}}, {"op": "add", "path": "/paths/~1user~1onboarding/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import get_user_onboarding_self\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, Onboarding\nfrom kittycad.types import Response\n\n\ndef example_get_user_onboarding_self():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[Onboarding, Error]] = get_user_onboarding_self.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Onboarding = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.get_user_onboarding_self.html"}}, {"op": "add", "path": "/paths/~1modeling~1cmd_batch/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.modeling import cmd_batch\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, ModelingOutcomes\nfrom kittycad.models.modeling_cmd import MovePathPen\nfrom kittycad.models.modeling_cmd_id import ModelingCmdId\nfrom kittycad.models.modeling_cmd_req import ModelingCmdReq\nfrom kittycad.models.modeling_cmd_req_batch import ModelingCmdReqBatch\nfrom kittycad.models.point3d import Point3d\nfrom kittycad.types import Response\n\n\ndef example_cmd_batch():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[ModelingOutcomes, Error]] = cmd_batch.sync(\n client=client,\n body=ModelingCmdReqBatch(\n cmds={\n \"\": ModelingCmdReq(\n cmd=MovePathPen(\n path=ModelingCmdId(\"\"),\n to=Point3d(\n x=3.14,\n y=3.14,\n z=3.14,\n ),\n ),\n cmd_id=ModelingCmdId(\"\"),\n file_id=\"\",\n )\n },\n file_id=\"\",\n ),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ModelingOutcomes = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.modeling.cmd_batch.html"}}, {"op": "add", "path": "/paths/~1file~1volume/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.file import create_file_volume\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, FileVolume\nfrom kittycad.models.file_import_format import FileImportFormat\nfrom kittycad.models.unit_volume import UnitVolume\nfrom kittycad.types import Response\n\n\ndef example_create_file_volume():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[FileVolume, Error]] = create_file_volume.sync(\n client=client,\n output_unit=UnitVolume.CM3,\n src_format=FileImportFormat.DAE,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: FileVolume = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.file.create_file_volume.html"}}, {"op": "add", "path": "/paths/~1users-extended~1{id}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import get_user_extended\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, ExtendedUser\nfrom kittycad.types import Response\n\n\ndef example_get_user_extended():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[ExtendedUser, Error]] = get_user_extended.sync(\n client=client,\n id=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ExtendedUser = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.get_user_extended.html"}}, {"op": "add", "path": "/paths/~1apps~1github~1webhook/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.apps import apps_github_webhook\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_apps_github_webhook():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = apps_github_webhook.sync(\n client=client,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.apps.apps_github_webhook.html"}}, {"op": "add", "path": "/paths/~1async~1operations/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import list_async_operations\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import AsyncApiCallResultsPage, Error\nfrom kittycad.models.api_call_status import ApiCallStatus\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_list_async_operations():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[AsyncApiCallResultsPage, Error]\n ] = list_async_operations.sync(\n client=client,\n sort_by=CreatedAtSortMode.CREATED_AT_ASCENDING,\n status=ApiCallStatus.QUEUED,\n limit=None, # Optional[int]\n page_token=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: AsyncApiCallResultsPage = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.list_async_operations.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1energy~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_energy_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitEnergyConversion\nfrom kittycad.models.unit_energy import UnitEnergy\nfrom kittycad.types import Response\n\n\ndef example_get_energy_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitEnergyConversion, Error]\n ] = get_energy_unit_conversion.sync(\n client=client,\n input_unit=UnitEnergy.BTU,\n output_unit=UnitEnergy.BTU,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitEnergyConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_energy_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1user~1payment~1balance/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import get_payment_balance_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import CustomerBalance, Error\nfrom kittycad.types import Response\n\n\ndef example_get_payment_balance_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[CustomerBalance, Error]\n ] = get_payment_balance_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: CustomerBalance = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.get_payment_balance_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1api-calls/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import user_list_api_calls\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiCallWithPriceResultsPage, Error\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_user_list_api_calls():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[ApiCallWithPriceResultsPage, Error]\n ] = user_list_api_calls.sync(\n client=client,\n sort_by=CreatedAtSortMode.CREATED_AT_ASCENDING,\n limit=None, # Optional[int]\n page_token=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiCallWithPriceResultsPage = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.user_list_api_calls.html"}}, {"op": "add", "path": "/paths/~1user~1payment~1methods~1{id}/delete/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import delete_payment_method_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_delete_payment_method_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = delete_payment_method_for_user.sync(\n client=client,\n id=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.delete_payment_method_for_user.html"}}, {"op": "add", "path": "/paths/~1api-calls~1{id}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import get_api_call\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiCallWithPrice, Error\nfrom kittycad.types import Response\n\n\ndef example_get_api_call():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[ApiCallWithPrice, Error]] = get_api_call.sync(\n client=client,\n id=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiCallWithPrice = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.get_api_call.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1area~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_area_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitAreaConversion\nfrom kittycad.models.unit_area import UnitArea\nfrom kittycad.types import Response\n\n\ndef example_get_area_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitAreaConversion, Error]\n ] = get_area_unit_conversion.sync(\n client=client,\n input_unit=UnitArea.CM2,\n output_unit=UnitArea.CM2,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitAreaConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_area_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1logout/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.hidden import logout\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_logout():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = logout.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.hidden.logout.html"}}, {"op": "add", "path": "/paths/~1auth~1email~1callback/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.hidden import auth_email_callback\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_auth_email_callback():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = auth_email_callback.sync(\n client=client,\n email=\"\",\n token=\"\",\n callback_url=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.hidden.auth_email_callback.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1length~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_length_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitLengthConversion\nfrom kittycad.models.unit_length import UnitLength\nfrom kittycad.types import Response\n\n\ndef example_get_length_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitLengthConversion, Error]\n ] = get_length_unit_conversion.sync(\n client=client,\n input_unit=UnitLength.CM,\n output_unit=UnitLength.CM,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitLengthConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_length_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1users/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import list_users\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UserResultsPage\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_list_users():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[UserResultsPage, Error]] = list_users.sync(\n client=client,\n sort_by=CreatedAtSortMode.CREATED_AT_ASCENDING,\n limit=None, # Optional[int]\n page_token=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UserResultsPage = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.list_users.html"}}, {"op": "add", "path": "/paths/~1file~1density/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.file import create_file_density\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, FileDensity\nfrom kittycad.models.file_import_format import FileImportFormat\nfrom kittycad.models.unit_density import UnitDensity\nfrom kittycad.models.unit_mass import UnitMass\nfrom kittycad.types import Response\n\n\ndef example_create_file_density():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[FileDensity, Error]] = create_file_density.sync(\n client=client,\n material_mass=3.14,\n material_mass_unit=UnitMass.G,\n output_unit=UnitDensity.LB_FT3,\n src_format=FileImportFormat.DAE,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: FileDensity = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.file.create_file_density.html"}}, {"op": "add", "path": "/paths/~1file~1conversion~1{src_format}~1{output_format}/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.file import (\n create_file_conversion,\n create_file_conversion_with_base64_helper,\n)\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, FileConversion\nfrom kittycad.models.file_export_format import FileExportFormat\nfrom kittycad.models.file_import_format import FileImportFormat\nfrom kittycad.types import Response\n\n\ndef example_create_file_conversion_with_base64_helper():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[FileConversion, Error]\n ] = create_file_conversion_with_base64_helper.sync(\n client=client,\n output_format=FileExportFormat.DAE,\n src_format=FileImportFormat.DAE,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: FileConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.file.create_file_conversion_with_base64_helper.html"}}, {"op": "add", "path": "/paths/~1ws~1modeling~1commands/get/x-python", "value": {"example": "from kittycad.api.modeling import modeling_commands_ws\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.types import Response\n\n\ndef example_modeling_commands_ws():\n # Create our client.\n client = ClientFromEnv()\n\n modeling_commands_ws.sync(\n client=client,\n )\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.modeling.modeling_commands_ws.html"}}, {"op": "add", "path": "/paths/~1user~1payment/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import get_payment_information_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Customer, Error\nfrom kittycad.types import Response\n\n\ndef example_get_payment_information_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[Customer, Error]\n ] = get_payment_information_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Customer = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.get_payment_information_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1payment/put/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import update_payment_information_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Customer, Error\nfrom kittycad.models.billing_info import BillingInfo\nfrom kittycad.types import Response\n\n\ndef example_update_payment_information_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[Customer, Error]\n ] = update_payment_information_for_user.sync(\n client=client,\n body=BillingInfo(\n name=\"\",\n phone=\"\",\n ),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Customer = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.update_payment_information_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1payment/delete/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import delete_payment_information_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_delete_payment_information_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = delete_payment_information_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.delete_payment_information_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1payment/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import create_payment_information_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Customer, Error\nfrom kittycad.models.billing_info import BillingInfo\nfrom kittycad.types import Response\n\n\ndef example_create_payment_information_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[Customer, Error]\n ] = create_payment_information_for_user.sync(\n client=client,\n body=BillingInfo(\n name=\"\",\n phone=\"\",\n ),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Customer = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.create_payment_information_for_user.html"}}, {"op": "add", "path": "/paths/~1api-calls/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import list_api_calls\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiCallWithPriceResultsPage, Error\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_list_api_calls():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[ApiCallWithPriceResultsPage, Error]\n ] = list_api_calls.sync(\n client=client,\n sort_by=CreatedAtSortMode.CREATED_AT_ASCENDING,\n limit=None, # Optional[int]\n page_token=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiCallWithPriceResultsPage = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.list_api_calls.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1mass~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_mass_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitMassConversion\nfrom kittycad.models.unit_mass import UnitMass\nfrom kittycad.types import Response\n\n\ndef example_get_mass_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitMassConversion, Error]\n ] = get_mass_unit_conversion.sync(\n client=client,\n input_unit=UnitMass.G,\n output_unit=UnitMass.G,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitMassConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_mass_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1api-call-metrics/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import get_api_call_metrics\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiCallQueryGroup, Error\nfrom kittycad.models.api_call_query_group_by import ApiCallQueryGroupBy\nfrom kittycad.types import Response\n\n\ndef example_get_api_call_metrics():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[List[ApiCallQueryGroup], Error]\n ] = get_api_call_metrics.sync(\n client=client,\n group_by=ApiCallQueryGroupBy.EMAIL,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: List[ApiCallQueryGroup] = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.get_api_call_metrics.html"}}, {"op": "add", "path": "/paths/~1file~1mass/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.file import create_file_mass\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, FileMass\nfrom kittycad.models.file_import_format import FileImportFormat\nfrom kittycad.models.unit_density import UnitDensity\nfrom kittycad.models.unit_mass import UnitMass\nfrom kittycad.types import Response\n\n\ndef example_create_file_mass():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[FileMass, Error]] = create_file_mass.sync(\n client=client,\n material_density=3.14,\n material_density_unit=UnitDensity.LB_FT3,\n output_unit=UnitMass.G,\n src_format=FileImportFormat.DAE,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: FileMass = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.file.create_file_mass.html"}}, {"op": "add", "path": "/paths/~1openai~1openapi.json/get/x-python", "value": {"example": "from kittycad.api.meta import get_openai_schema\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.types import Response\n\n\ndef example_get_openai_schema():\n # Create our client.\n client = ClientFromEnv()\n\n get_openai_schema.sync(\n client=client,\n )\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.meta.get_openai_schema.html"}}, {"op": "add", "path": "/paths/~1user~1payment~1methods/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import list_payment_methods_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, PaymentMethod\nfrom kittycad.types import Response\n\n\ndef example_list_payment_methods_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[List[PaymentMethod], Error]\n ] = list_payment_methods_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: List[PaymentMethod] = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.list_payment_methods_for_user.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1torque~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_torque_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitTorqueConversion\nfrom kittycad.models.unit_torque import UnitTorque\nfrom kittycad.types import Response\n\n\ndef example_get_torque_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitTorqueConversion, Error]\n ] = get_torque_unit_conversion.sync(\n client=client,\n input_unit=UnitTorque.NEWTON_METRES,\n output_unit=UnitTorque.NEWTON_METRES,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitTorqueConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_torque_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1user~1payment~1tax/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import validate_customer_tax_information_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_validate_customer_tax_information_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = validate_customer_tax_information_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.validate_customer_tax_information_for_user.html"}}, {"op": "add", "path": "/paths/~1ws~1executor~1term/get/x-python", "value": {"example": "from kittycad.api.executor import create_executor_term\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.types import Response\n\n\ndef example_create_executor_term():\n # Create our client.\n client = ClientFromEnv()\n\n create_executor_term.sync(\n client=client,\n )\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.executor.create_executor_term.html"}}, {"op": "add", "path": "/paths/~1ai~1text-to-3d~1{output_format}/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.ai import create_text_to_3d\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, Mesh\nfrom kittycad.models.file_export_format import FileExportFormat\nfrom kittycad.types import Response\n\n\ndef example_create_text_to_3d():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[Mesh, Error]] = create_text_to_3d.sync(\n client=client,\n output_format=FileExportFormat.DAE,\n prompt=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Mesh = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.ai.create_text_to_3d.html"}}, {"op": "add", "path": "/paths/~1user~1extended/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import get_user_self_extended\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, ExtendedUser\nfrom kittycad.types import Response\n\n\ndef example_get_user_self_extended():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[ExtendedUser, Error]] = get_user_self_extended.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ExtendedUser = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.get_user_self_extended.html"}}, {"op": "add", "path": "/paths/~1file~1center-of-mass/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.file import create_file_center_of_mass\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, FileCenterOfMass\nfrom kittycad.models.file_import_format import FileImportFormat\nfrom kittycad.models.unit_length import UnitLength\nfrom kittycad.types import Response\n\n\ndef example_create_file_center_of_mass():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[FileCenterOfMass, Error]\n ] = create_file_center_of_mass.sync(\n client=client,\n output_unit=UnitLength.CM,\n src_format=FileImportFormat.DAE,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: FileCenterOfMass = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.file.create_file_center_of_mass.html"}}, {"op": "add", "path": "/paths/~1ai~1image-to-3d~1{input_format}~1{output_format}/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.ai import create_image_to_3d\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, Mesh\nfrom kittycad.models.file_export_format import FileExportFormat\nfrom kittycad.models.image_type import ImageType\nfrom kittycad.types import Response\n\n\ndef example_create_image_to_3d():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[Mesh, Error]] = create_image_to_3d.sync(\n client=client,\n input_format=ImageType.PNG,\n output_format=FileExportFormat.DAE,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Mesh = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.ai.create_image_to_3d.html"}}, {"op": "add", "path": "/paths/~1file~1execute~1{lang}/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.executor import create_file_execution\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import CodeOutput, Error\nfrom kittycad.models.code_language import CodeLanguage\nfrom kittycad.types import Response\n\n\ndef example_create_file_execution():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[CodeOutput, Error]] = create_file_execution.sync(\n client=client,\n lang=CodeLanguage.GO,\n output=None, # Optional[str]\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: CodeOutput = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.executor.create_file_execution.html"}}, {"op": "add", "path": "/paths/~1user~1api-tokens/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_tokens import create_api_token_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiToken, Error\nfrom kittycad.types import Response\n\n\ndef example_create_api_token_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[ApiToken, Error]] = create_api_token_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiToken = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_tokens.create_api_token_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1api-tokens/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_tokens import list_api_tokens_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiTokenResultsPage, Error\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_list_api_tokens_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[ApiTokenResultsPage, Error]\n ] = list_api_tokens_for_user.sync(\n client=client,\n sort_by=CreatedAtSortMode.CREATED_AT_ASCENDING,\n limit=None, # Optional[int]\n page_token=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiTokenResultsPage = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_tokens.list_api_tokens_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1payment~1intent/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import create_payment_intent_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, PaymentIntent\nfrom kittycad.types import Response\n\n\ndef example_create_payment_intent_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[PaymentIntent, Error]\n ] = create_payment_intent_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: PaymentIntent = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.create_payment_intent_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1session~1{token}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import get_session_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, Session\nfrom kittycad.types import Response\n\n\ndef example_get_session_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[Session, Error]] = get_session_for_user.sync(\n client=client,\n token=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Session = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.get_session_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1api-tokens~1{token}/delete/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_tokens import delete_api_token_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_delete_api_token_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = delete_api_token_for_user.sync(\n client=client,\n token=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_tokens.delete_api_token_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1api-tokens~1{token}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_tokens import get_api_token_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiToken, Error\nfrom kittycad.types import Response\n\n\ndef example_get_api_token_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[ApiToken, Error]] = get_api_token_for_user.sync(\n client=client,\n token=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiToken = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_tokens.get_api_token_for_user.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1temperature~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_temperature_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitTemperatureConversion\nfrom kittycad.models.unit_temperature import UnitTemperature\nfrom kittycad.types import Response\n\n\ndef example_get_temperature_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitTemperatureConversion, Error]\n ] = get_temperature_unit_conversion.sync(\n client=client,\n input_unit=UnitTemperature.CELSIUS,\n output_unit=UnitTemperature.CELSIUS,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitTemperatureConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_temperature_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1frequency~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_frequency_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitFrequencyConversion\nfrom kittycad.models.unit_frequency import UnitFrequency\nfrom kittycad.types import Response\n\n\ndef example_get_frequency_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitFrequencyConversion, Error]\n ] = get_frequency_unit_conversion.sync(\n client=client,\n input_unit=UnitFrequency.GIGAHERTZ,\n output_unit=UnitFrequency.GIGAHERTZ,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitFrequencyConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_frequency_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1users~1{id}~1api-calls/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import list_api_calls_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiCallWithPriceResultsPage, Error\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_list_api_calls_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[ApiCallWithPriceResultsPage, Error]\n ] = list_api_calls_for_user.sync(\n client=client,\n id=\"\",\n sort_by=CreatedAtSortMode.CREATED_AT_ASCENDING,\n limit=None, # Optional[int]\n page_token=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiCallWithPriceResultsPage = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.list_api_calls_for_user.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1power~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_power_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitPowerConversion\nfrom kittycad.models.unit_power import UnitPower\nfrom kittycad.types import Response\n\n\ndef example_get_power_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitPowerConversion, Error]\n ] = get_power_unit_conversion.sync(\n client=client,\n input_unit=UnitPower.BTU_PER_MINUTE,\n output_unit=UnitPower.BTU_PER_MINUTE,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitPowerConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_power_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1users~1{id}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import get_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, User\nfrom kittycad.types import Response\n\n\ndef example_get_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[User, Error]] = get_user.sync(\n client=client,\n id=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: User = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.get_user.html"}}, {"op": "add", "path": "/paths/~1user~1front-hash/get/x-python", "value": {"example": "from kittycad.api.users import get_user_front_hash_self\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.types import Response\n\n\ndef example_get_user_front_hash_self():\n # Create our client.\n client = ClientFromEnv()\n\n get_user_front_hash_self.sync(\n client=client,\n )\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.get_user_front_hash_self.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1force~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_force_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitForceConversion\nfrom kittycad.models.unit_force import UnitForce\nfrom kittycad.types import Response\n\n\ndef example_get_force_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitForceConversion, Error]\n ] = get_force_unit_conversion.sync(\n client=client,\n input_unit=UnitForce.DYNES,\n output_unit=UnitForce.DYNES,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitForceConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_force_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1current~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_current_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitCurrentConversion\nfrom kittycad.models.unit_current import UnitCurrent\nfrom kittycad.types import Response\n\n\ndef example_get_current_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitCurrentConversion, Error]\n ] = get_current_unit_conversion.sync(\n client=client,\n input_unit=UnitCurrent.AMPERES,\n output_unit=UnitCurrent.AMPERES,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitCurrentConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_current_unit_conversion.html"}}, {"op": "add", "path": "/info/x-python", "value": {"client": "# Create a client with your token.\nfrom kittycad import Client\n\nclient = Client(token=\"$TOKEN\")\n\n# - OR -\n\n# Create a new client with your token parsed from the environment variable:\n# `KITTYCAD_API_TOKEN`.\nfrom kittycad import ClientFromEnv\n\nclient = ClientFromEnv()\n\n# NOTE: The python library additionally implements asyncio, however all the code samples we\n# show below use the sync functions for ease of use and understanding.\n# Check out the library docs at:\n# https://python.api.docs.kittycad.io/_autosummary/kittycad.api.html#module-kittycad.api\n# for more details.", "install": "pip install kittycad"}}] \ No newline at end of file +[{"op": "add", "path": "/components/schemas/Environment/enum", "value": ["DEVELOPMENT", "PREVIEW", "PRODUCTION"]}, {"op": "add", "path": "/components/schemas/Environment/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitAngle/enum", "value": ["degrees", "radians"]}, {"op": "add", "path": "/components/schemas/UnitAngle/type", "value": "string"}, {"op": "add", "path": "/components/schemas/PhysicsConstantName/enum", "value": ["pi", "c", "speed_of_light", "G", "newtonian_gravitation", "h", "planck_const", "mu_0", "vacuum_permeability", "E_0", "vacuum_permitivity", "Z_0", "vacuum_impedance", "k_e", "coulomb_const", "e", "elementary_charge", "m_e", "electron_mass", "m_p", "proton_mass", "mu_B", "bohr_magneton", "NA", "avogadro_num", "R", "molar_gas_const", "K_B", "boltzmann_const", "F", "faraday_const", "sigma", "stefan_boltzmann_const"]}, {"op": "add", "path": "/components/schemas/PhysicsConstantName/type", "value": "string"}, {"op": "add", "path": "/components/schemas/Direction/enum", "value": ["positive", "negative"]}, {"op": "add", "path": "/components/schemas/Direction/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitForce/enum", "value": ["dynes", "kiloponds", "micronewtons", "millinewtons", "newtons", "poundals", "pounds"]}, {"op": "add", "path": "/components/schemas/UnitForce/type", "value": "string"}, {"op": "add", "path": "/components/schemas/OAuth2GrantType/enum", "value": ["urn:ietf:params:oauth:grant-type:device_code"]}, {"op": "add", "path": "/components/schemas/OAuth2GrantType/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitTemperature/enum", "value": ["celsius", "fahrenheit", "kelvin", "rankine"]}, {"op": "add", "path": "/components/schemas/UnitTemperature/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitPressure/enum", "value": ["atmospheres", "bars", "hectopascals", "kilopascals", "millibars", "pascals", "psi"]}, {"op": "add", "path": "/components/schemas/UnitPressure/type", "value": "string"}, {"op": "add", "path": "/components/schemas/CodeLanguage/enum", "value": ["go", "python", "node"]}, {"op": "add", "path": "/components/schemas/CodeLanguage/type", "value": "string"}, {"op": "add", "path": "/components/schemas/Method/enum", "value": ["OPTIONS", "GET", "POST", "PUT", "DELETE", "HEAD", "TRACE", "CONNECT", "PATCH", "EXTENSION"]}, {"op": "add", "path": "/components/schemas/Method/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitLength/enum", "value": ["cm", "ft", "in", "m", "mm", "yd"]}, {"op": "add", "path": "/components/schemas/UnitLength/type", "value": "string"}, {"op": "add", "path": "/components/schemas/AccountProvider/enum", "value": ["google", "github"]}, {"op": "add", "path": "/components/schemas/AccountProvider/type", "value": "string"}, {"op": "add", "path": "/components/schemas/CreatedAtSortMode/enum", "value": ["created-at-ascending", "created-at-descending"]}, {"op": "add", "path": "/components/schemas/CreatedAtSortMode/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitVolume/enum", "value": ["cm3", "ft3", "in3", "m3", "yd3", "usfloz", "usgal", "l", "ml"]}, {"op": "add", "path": "/components/schemas/UnitVolume/type", "value": "string"}, {"op": "add", "path": "/components/schemas/CountryCode/enum", "value": ["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "CV", "KH", "CM", "CA", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"]}, {"op": "add", "path": "/components/schemas/CountryCode/type", "value": "string"}, {"op": "add", "path": "/components/schemas/AiPluginHttpAuthType/enum", "value": ["basic", "bearer"]}, {"op": "add", "path": "/components/schemas/AiPluginHttpAuthType/type", "value": "string"}, {"op": "add", "path": "/components/schemas/Axis/enum", "value": ["y", "z"]}, {"op": "add", "path": "/components/schemas/Axis/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitTorque/enum", "value": ["newton_metres", "pound_foot"]}, {"op": "add", "path": "/components/schemas/UnitTorque/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitPower/enum", "value": ["btu_per_minute", "horsepower", "kilowatts", "metric_horsepower", "microwatts", "milliwatts", "watts"]}, {"op": "add", "path": "/components/schemas/UnitPower/type", "value": "string"}, {"op": "add", "path": "/components/schemas/FileImportFormat/enum", "value": ["dae", "fbx", "gltf", "obj", "ply", "step", "stl"]}, {"op": "add", "path": "/components/schemas/FileImportFormat/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitMass/enum", "value": ["g", "kg", "lb"]}, {"op": "add", "path": "/components/schemas/UnitMass/type", "value": "string"}, {"op": "add", "path": "/components/schemas/Currency/enum", "value": ["aed", "afn", "all", "amd", "ang", "aoa", "ars", "aud", "awg", "azn", "bam", "bbd", "bdt", "bgn", "bif", "bmd", "bnd", "bob", "brl", "bsd", "bwp", "bzd", "cad", "cdf", "chf", "clp", "cny", "cop", "crc", "cve", "czk", "djf", "dkk", "dop", "dzd", "eek", "egp", "etb", "eur", "fjd", "fkp", "gbp", "gel", "gip", "gmd", "gnf", "gtq", "gyd", "hkd", "hnl", "hrk", "htg", "huf", "idr", "ils", "inr", "isk", "jmd", "jpy", "kes", "kgs", "khr", "kmf", "krw", "kyd", "kzt", "lak", "lbp", "lkr", "lrd", "lsl", "ltl", "lvl", "mad", "mdl", "mga", "mkd", "mnt", "mop", "mro", "mur", "mvr", "mwk", "mxn", "myr", "mzn", "nad", "ngn", "nio", "nok", "npr", "nzd", "pab", "pen", "pgk", "php", "pkr", "pln", "pyg", "qar", "ron", "rsd", "rub", "rwf", "sar", "sbd", "scr", "sek", "sgd", "shp", "sll", "sos", "srd", "std", "svc", "szl", "thb", "tjs", "top", "try", "ttd", "twd", "tzs", "uah", "ugx", "usd", "uyu", "uzs", "vef", "vnd", "vuv", "wst", "xaf", "xcd", "xof", "xpf", "yer", "zar", "zmw"]}, {"op": "add", "path": "/components/schemas/Currency/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitEnergy/enum", "value": ["btu", "electronvolts", "joules", "kilocalories", "kilowatt_hours", "watt_hours"]}, {"op": "add", "path": "/components/schemas/UnitEnergy/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitDensity/enum", "value": ["lb:ft3", "kg:m3"]}, {"op": "add", "path": "/components/schemas/UnitDensity/type", "value": "string"}, {"op": "add", "path": "/components/schemas/AsyncApiCallType/enum", "value": ["FileConversion", "FileVolume", "FileCenterOfMass", "FileMass", "FileDensity", "FileSurfaceArea"]}, {"op": "add", "path": "/components/schemas/AsyncApiCallType/type", "value": "string"}, {"op": "add", "path": "/components/schemas/AiPluginApiType/enum", "value": ["openapi"]}, {"op": "add", "path": "/components/schemas/AiPluginApiType/type", "value": "string"}, {"op": "add", "path": "/components/schemas/InvoiceStatus/enum", "value": ["deleted", "draft", "open", "paid", "uncollectible", "void"]}, {"op": "add", "path": "/components/schemas/InvoiceStatus/type", "value": "string"}, {"op": "add", "path": "/components/schemas/ApiCallStatus/enum", "value": ["Queued", "Uploaded", "In Progress", "Completed", "Failed"]}, {"op": "add", "path": "/components/schemas/ApiCallStatus/type", "value": "string"}, {"op": "add", "path": "/components/schemas/ApiCallQueryGroupBy/enum", "value": ["email", "method", "endpoint", "user_id", "origin", "ip_address"]}, {"op": "add", "path": "/components/schemas/ApiCallQueryGroupBy/type", "value": "string"}, {"op": "add", "path": "/components/schemas/FileExportFormat/enum", "value": ["dae", "fbx", "fbxb", "gltf", "obj", "ply", "step", "stl"]}, {"op": "add", "path": "/components/schemas/FileExportFormat/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitFrequency/enum", "value": ["gigahertz", "hertz", "kilohertz", "megahertz", "microhertz", "millihertz", "nanohertz", "terahertz"]}, {"op": "add", "path": "/components/schemas/UnitFrequency/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitArea/enum", "value": ["cm2", "dm2", "ft2", "in2", "km2", "m2", "mm2", "yd2"]}, {"op": "add", "path": "/components/schemas/UnitArea/type", "value": "string"}, {"op": "add", "path": "/components/schemas/AiPluginAuthType/enum", "value": ["none", "user_http", "service_http", "oauth"]}, {"op": "add", "path": "/components/schemas/AiPluginAuthType/type", "value": "string"}, {"op": "add", "path": "/components/schemas/Storage/enum", "value": ["binary", "standard", "embedded"]}, {"op": "add", "path": "/components/schemas/Storage/type", "value": "string"}, {"op": "add", "path": "/components/schemas/PaymentMethodType/enum", "value": ["card"]}, {"op": "add", "path": "/components/schemas/PaymentMethodType/type", "value": "string"}, {"op": "add", "path": "/components/schemas/UnitCurrent/enum", "value": ["amperes", "microamperes", "milliamperes", "nanoamperes"]}, {"op": "add", "path": "/components/schemas/UnitCurrent/type", "value": "string"}, {"op": "add", "path": "/components/schemas/CameraDragInteractionType/enum", "value": ["pan", "rotate", "zoom"]}, {"op": "add", "path": "/components/schemas/CameraDragInteractionType/type", "value": "string"}, {"op": "add", "path": "/info/x-python", "value": {"client": "# Create a client with your token.\nfrom kittycad import Client\n\nclient = Client(token=\"$TOKEN\")\n\n# - OR -\n\n# Create a new client with your token parsed from the environment variable:\n# `KITTYCAD_API_TOKEN`.\nfrom kittycad import ClientFromEnv\n\nclient = ClientFromEnv()\n\n# NOTE: The python library additionally implements asyncio, however all the code samples we\n# show below use the sync functions for ease of use and understanding.\n# Check out the library docs at:\n# https://python.api.docs.kittycad.io/_autosummary/kittycad.api.html#module-kittycad.api\n# for more details.", "install": "pip install kittycad"}}, {"op": "add", "path": "/paths/~1async~1operations~1{id}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import get_async_operation\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import (\n Error,\n FileCenterOfMass,\n FileConversion,\n FileDensity,\n FileMass,\n FileSurfaceArea,\n FileVolume,\n)\nfrom kittycad.types import Response\n\n\ndef example_get_async_operation():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[\n FileConversion,\n FileCenterOfMass,\n FileMass,\n FileVolume,\n FileDensity,\n FileSurfaceArea,\n Error,\n ]\n ] = get_async_operation.sync(\n client=client,\n id=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Union[\n FileConversion,\n FileCenterOfMass,\n FileMass,\n FileVolume,\n FileDensity,\n FileSurfaceArea,\n ] = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.get_async_operation.html"}}, {"op": "add", "path": "/paths/~1user~1session~1{token}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import get_session_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, Session\nfrom kittycad.types import Response\n\n\ndef example_get_session_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[Session, Error]] = get_session_for_user.sync(\n client=client,\n token=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Session = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.get_session_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1payment~1methods/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import list_payment_methods_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, PaymentMethod\nfrom kittycad.types import Response\n\n\ndef example_list_payment_methods_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[List[PaymentMethod], Error]\n ] = list_payment_methods_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: List[PaymentMethod] = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.list_payment_methods_for_user.html"}}, {"op": "add", "path": "/paths/~1users~1{id}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import get_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, User\nfrom kittycad.types import Response\n\n\ndef example_get_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[User, Error]] = get_user.sync(\n client=client,\n id=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: User = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.get_user.html"}}, {"op": "add", "path": "/paths/~1user/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import get_user_self\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, User\nfrom kittycad.types import Response\n\n\ndef example_get_user_self():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[User, Error]] = get_user_self.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: User = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.get_user_self.html"}}, {"op": "add", "path": "/paths/~1user/put/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import update_user_self\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, User\nfrom kittycad.models.update_user import UpdateUser\nfrom kittycad.types import Response\n\n\ndef example_update_user_self():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[User, Error]] = update_user_self.sync(\n client=client,\n body=UpdateUser(\n company=\"\",\n discord=\"\",\n first_name=\"\",\n github=\"\",\n last_name=\"\",\n phone=\"\",\n ),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: User = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.update_user_self.html"}}, {"op": "add", "path": "/paths/~1user/delete/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import delete_user_self\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_delete_user_self():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = delete_user_self.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.delete_user_self.html"}}, {"op": "add", "path": "/paths/~1file~1conversion~1{src_format}~1{output_format}/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.file import (\n create_file_conversion,\n create_file_conversion_with_base64_helper,\n)\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, FileConversion\nfrom kittycad.models.file_export_format import FileExportFormat\nfrom kittycad.models.file_import_format import FileImportFormat\nfrom kittycad.types import Response\n\n\ndef example_create_file_conversion_with_base64_helper():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[FileConversion, Error]\n ] = create_file_conversion_with_base64_helper.sync(\n client=client,\n output_format=FileExportFormat.DAE,\n src_format=FileImportFormat.DAE,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: FileConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.file.create_file_conversion_with_base64_helper.html"}}, {"op": "add", "path": "/paths/~1user~1api-tokens~1{token}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_tokens import get_api_token_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiToken, Error\nfrom kittycad.types import Response\n\n\ndef example_get_api_token_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[ApiToken, Error]] = get_api_token_for_user.sync(\n client=client,\n token=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiToken = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_tokens.get_api_token_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1api-tokens~1{token}/delete/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_tokens import delete_api_token_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_delete_api_token_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = delete_api_token_for_user.sync(\n client=client,\n token=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_tokens.delete_api_token_for_user.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1angle~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_angle_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitAngleConversion\nfrom kittycad.models.unit_angle import UnitAngle\nfrom kittycad.types import Response\n\n\ndef example_get_angle_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitAngleConversion, Error]\n ] = get_angle_unit_conversion.sync(\n client=client,\n input_unit=UnitAngle.DEGREES,\n output_unit=UnitAngle.DEGREES,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitAngleConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_angle_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1user~1front-hash/get/x-python", "value": {"example": "from kittycad.api.users import get_user_front_hash_self\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.types import Response\n\n\ndef example_get_user_front_hash_self():\n # Create our client.\n client = ClientFromEnv()\n\n get_user_front_hash_self.sync(\n client=client,\n )\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.get_user_front_hash_self.html"}}, {"op": "add", "path": "/paths/~1user~1payment/put/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import update_payment_information_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Customer, Error\nfrom kittycad.models.billing_info import BillingInfo\nfrom kittycad.types import Response\n\n\ndef example_update_payment_information_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[Customer, Error]\n ] = update_payment_information_for_user.sync(\n client=client,\n body=BillingInfo(\n name=\"\",\n phone=\"\",\n ),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Customer = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.update_payment_information_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1payment/delete/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import delete_payment_information_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_delete_payment_information_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = delete_payment_information_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.delete_payment_information_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1payment/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import get_payment_information_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Customer, Error\nfrom kittycad.types import Response\n\n\ndef example_get_payment_information_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[Customer, Error]\n ] = get_payment_information_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Customer = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.get_payment_information_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1payment/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import create_payment_information_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Customer, Error\nfrom kittycad.models.billing_info import BillingInfo\nfrom kittycad.types import Response\n\n\ndef example_create_payment_information_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[Customer, Error]\n ] = create_payment_information_for_user.sync(\n client=client,\n body=BillingInfo(\n name=\"\",\n phone=\"\",\n ),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Customer = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.create_payment_information_for_user.html"}}, {"op": "add", "path": "/paths/~1users-extended~1{id}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import get_user_extended\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, ExtendedUser\nfrom kittycad.types import Response\n\n\ndef example_get_user_extended():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[ExtendedUser, Error]] = get_user_extended.sync(\n client=client,\n id=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ExtendedUser = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.get_user_extended.html"}}, {"op": "add", "path": "/paths/~1file~1center-of-mass/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.file import create_file_center_of_mass\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, FileCenterOfMass\nfrom kittycad.models.file_import_format import FileImportFormat\nfrom kittycad.models.unit_length import UnitLength\nfrom kittycad.types import Response\n\n\ndef example_create_file_center_of_mass():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[FileCenterOfMass, Error]\n ] = create_file_center_of_mass.sync(\n client=client,\n output_unit=UnitLength.CM,\n src_format=FileImportFormat.DAE,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: FileCenterOfMass = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.file.create_file_center_of_mass.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1power~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_power_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitPowerConversion\nfrom kittycad.models.unit_power import UnitPower\nfrom kittycad.types import Response\n\n\ndef example_get_power_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitPowerConversion, Error]\n ] = get_power_unit_conversion.sync(\n client=client,\n input_unit=UnitPower.BTU_PER_MINUTE,\n output_unit=UnitPower.BTU_PER_MINUTE,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitPowerConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_power_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1user~1payment~1balance/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import get_payment_balance_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import CustomerBalance, Error\nfrom kittycad.types import Response\n\n\ndef example_get_payment_balance_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[CustomerBalance, Error]\n ] = get_payment_balance_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: CustomerBalance = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.get_payment_balance_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1payment~1methods~1{id}/delete/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import delete_payment_method_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_delete_payment_method_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = delete_payment_method_for_user.sync(\n client=client,\n id=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.delete_payment_method_for_user.html"}}, {"op": "add", "path": "/paths/~1api-calls/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import list_api_calls\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiCallWithPriceResultsPage, Error\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_list_api_calls():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[ApiCallWithPriceResultsPage, Error]\n ] = list_api_calls.sync(\n client=client,\n sort_by=CreatedAtSortMode.CREATED_AT_ASCENDING,\n limit=None, # Optional[int]\n page_token=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiCallWithPriceResultsPage = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.list_api_calls.html"}}, {"op": "add", "path": "/paths/~1user~1api-calls~1{id}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import get_api_call_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiCallWithPrice, Error\nfrom kittycad.types import Response\n\n\ndef example_get_api_call_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[ApiCallWithPrice, Error]] = get_api_call_for_user.sync(\n client=client,\n id=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiCallWithPrice = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.get_api_call_for_user.html"}}, {"op": "add", "path": "/paths/~1apps~1github~1webhook/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.apps import apps_github_webhook\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_apps_github_webhook():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = apps_github_webhook.sync(\n client=client,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.apps.apps_github_webhook.html"}}, {"op": "add", "path": "/paths/~1openai~1openapi.json/get/x-python", "value": {"example": "from kittycad.api.meta import get_openai_schema\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.types import Response\n\n\ndef example_get_openai_schema():\n # Create our client.\n client = ClientFromEnv()\n\n get_openai_schema.sync(\n client=client,\n )\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.meta.get_openai_schema.html"}}, {"op": "add", "path": "/paths/~1constant~1physics~1{constant}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.constant import get_physics_constant\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, PhysicsConstant\nfrom kittycad.models.physics_constant_name import PhysicsConstantName\nfrom kittycad.types import Response\n\n\ndef example_get_physics_constant():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[PhysicsConstant, Error]] = get_physics_constant.sync(\n client=client,\n constant=PhysicsConstantName.PI,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: PhysicsConstant = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.constant.get_physics_constant.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1length~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_length_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitLengthConversion\nfrom kittycad.models.unit_length import UnitLength\nfrom kittycad.types import Response\n\n\ndef example_get_length_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitLengthConversion, Error]\n ] = get_length_unit_conversion.sync(\n client=client,\n input_unit=UnitLength.CM,\n output_unit=UnitLength.CM,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitLengthConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_length_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1volume~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_volume_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitVolumeConversion\nfrom kittycad.models.unit_volume import UnitVolume\nfrom kittycad.types import Response\n\n\ndef example_get_volume_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitVolumeConversion, Error]\n ] = get_volume_unit_conversion.sync(\n client=client,\n input_unit=UnitVolume.CM3,\n output_unit=UnitVolume.CM3,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitVolumeConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_volume_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1modeling~1cmd/post/x-python", "value": {"example": "from kittycad.api.modeling import cmd\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models.modeling_cmd import MovePathPen\nfrom kittycad.models.modeling_cmd_id import ModelingCmdId\nfrom kittycad.models.modeling_cmd_req import ModelingCmdReq\nfrom kittycad.models.point3d import Point3d\nfrom kittycad.types import Response\n\n\ndef example_cmd():\n # Create our client.\n client = ClientFromEnv()\n\n cmd.sync(\n client=client,\n body=ModelingCmdReq(\n cmd=MovePathPen(\n path=ModelingCmdId(\"\"),\n to=Point3d(\n x=3.14,\n y=3.14,\n z=3.14,\n ),\n ),\n cmd_id=ModelingCmdId(\"\"),\n file_id=\"\",\n ),\n )\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.modeling.cmd.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1torque~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_torque_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitTorqueConversion\nfrom kittycad.models.unit_torque import UnitTorque\nfrom kittycad.types import Response\n\n\ndef example_get_torque_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitTorqueConversion, Error]\n ] = get_torque_unit_conversion.sync(\n client=client,\n input_unit=UnitTorque.NEWTON_METRES,\n output_unit=UnitTorque.NEWTON_METRES,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitTorqueConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_torque_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1api-calls~1{id}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import get_api_call\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiCallWithPrice, Error\nfrom kittycad.types import Response\n\n\ndef example_get_api_call():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[ApiCallWithPrice, Error]] = get_api_call.sync(\n client=client,\n id=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiCallWithPrice = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.get_api_call.html"}}, {"op": "add", "path": "/paths/~1users~1{id}~1api-calls/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import list_api_calls_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiCallWithPriceResultsPage, Error\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_list_api_calls_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[ApiCallWithPriceResultsPage, Error]\n ] = list_api_calls_for_user.sync(\n client=client,\n id=\"\",\n sort_by=CreatedAtSortMode.CREATED_AT_ASCENDING,\n limit=None, # Optional[int]\n page_token=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiCallWithPriceResultsPage = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.list_api_calls_for_user.html"}}, {"op": "add", "path": "/paths/~1file~1execute~1{lang}/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.executor import create_file_execution\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import CodeOutput, Error\nfrom kittycad.models.code_language import CodeLanguage\nfrom kittycad.types import Response\n\n\ndef example_create_file_execution():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[CodeOutput, Error]] = create_file_execution.sync(\n client=client,\n lang=CodeLanguage.GO,\n output=None, # Optional[str]\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: CodeOutput = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.executor.create_file_execution.html"}}, {"op": "add", "path": "/paths/~1user~1payment~1tax/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import validate_customer_tax_information_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_validate_customer_tax_information_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = validate_customer_tax_information_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.validate_customer_tax_information_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1payment~1intent/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import create_payment_intent_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, PaymentIntent\nfrom kittycad.types import Response\n\n\ndef example_create_payment_intent_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[PaymentIntent, Error]\n ] = create_payment_intent_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: PaymentIntent = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.create_payment_intent_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1onboarding/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import get_user_onboarding_self\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, Onboarding\nfrom kittycad.types import Response\n\n\ndef example_get_user_onboarding_self():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[Onboarding, Error]] = get_user_onboarding_self.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Onboarding = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.get_user_onboarding_self.html"}}, {"op": "add", "path": "/paths/~1modeling~1cmd_batch/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.modeling import cmd_batch\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, ModelingOutcomes\nfrom kittycad.models.modeling_cmd import MovePathPen\nfrom kittycad.models.modeling_cmd_id import ModelingCmdId\nfrom kittycad.models.modeling_cmd_req import ModelingCmdReq\nfrom kittycad.models.modeling_cmd_req_batch import ModelingCmdReqBatch\nfrom kittycad.models.point3d import Point3d\nfrom kittycad.types import Response\n\n\ndef example_cmd_batch():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[ModelingOutcomes, Error]] = cmd_batch.sync(\n client=client,\n body=ModelingCmdReqBatch(\n cmds={\n \"\": ModelingCmdReq(\n cmd=MovePathPen(\n path=ModelingCmdId(\"\"),\n to=Point3d(\n x=3.14,\n y=3.14,\n z=3.14,\n ),\n ),\n cmd_id=ModelingCmdId(\"\"),\n file_id=\"\",\n )\n },\n file_id=\"\",\n ),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ModelingOutcomes = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.modeling.cmd_batch.html"}}, {"op": "add", "path": "/paths/~1file~1density/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.file import create_file_density\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, FileDensity\nfrom kittycad.models.file_import_format import FileImportFormat\nfrom kittycad.models.unit_density import UnitDensity\nfrom kittycad.models.unit_mass import UnitMass\nfrom kittycad.types import Response\n\n\ndef example_create_file_density():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[FileDensity, Error]] = create_file_density.sync(\n client=client,\n material_mass=3.14,\n material_mass_unit=UnitMass.G,\n output_unit=UnitDensity.LB_FT3,\n src_format=FileImportFormat.DAE,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: FileDensity = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.file.create_file_density.html"}}, {"op": "add", "path": "/paths/~1file~1volume/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.file import create_file_volume\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, FileVolume\nfrom kittycad.models.file_import_format import FileImportFormat\nfrom kittycad.models.unit_volume import UnitVolume\nfrom kittycad.types import Response\n\n\ndef example_create_file_volume():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[FileVolume, Error]] = create_file_volume.sync(\n client=client,\n output_unit=UnitVolume.CM3,\n src_format=FileImportFormat.DAE,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: FileVolume = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.file.create_file_volume.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1energy~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_energy_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitEnergyConversion\nfrom kittycad.models.unit_energy import UnitEnergy\nfrom kittycad.types import Response\n\n\ndef example_get_energy_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitEnergyConversion, Error]\n ] = get_energy_unit_conversion.sync(\n client=client,\n input_unit=UnitEnergy.BTU,\n output_unit=UnitEnergy.BTU,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitEnergyConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_energy_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1area~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_area_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitAreaConversion\nfrom kittycad.models.unit_area import UnitArea\nfrom kittycad.types import Response\n\n\ndef example_get_area_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitAreaConversion, Error]\n ] = get_area_unit_conversion.sync(\n client=client,\n input_unit=UnitArea.CM2,\n output_unit=UnitArea.CM2,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitAreaConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_area_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1apps~1github~1callback/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.apps import apps_github_callback\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_apps_github_callback():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = apps_github_callback.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.apps.apps_github_callback.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1current~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_current_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitCurrentConversion\nfrom kittycad.models.unit_current import UnitCurrent\nfrom kittycad.types import Response\n\n\ndef example_get_current_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitCurrentConversion, Error]\n ] = get_current_unit_conversion.sync(\n client=client,\n input_unit=UnitCurrent.AMPERES,\n output_unit=UnitCurrent.AMPERES,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitCurrentConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_current_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1async~1operations/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import list_async_operations\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import AsyncApiCallResultsPage, Error\nfrom kittycad.models.api_call_status import ApiCallStatus\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_list_async_operations():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[AsyncApiCallResultsPage, Error]\n ] = list_async_operations.sync(\n client=client,\n sort_by=CreatedAtSortMode.CREATED_AT_ASCENDING,\n status=ApiCallStatus.QUEUED,\n limit=None, # Optional[int]\n page_token=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: AsyncApiCallResultsPage = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.list_async_operations.html"}}, {"op": "add", "path": "/paths/~1ws~1modeling~1commands/get/x-python", "value": {"example": "from kittycad.api.modeling import modeling_commands_ws\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.types import Response\n\n\ndef example_modeling_commands_ws():\n # Create our client.\n client = ClientFromEnv()\n\n # Connect to the websocket.\n websocket = modeling_commands_ws.sync(\n client=client,\n )\n\n # Send a message.\n websocket.send(\"{}\")\n\n # Get the messages.\n for message in websocket:\n print(message)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.modeling.modeling_commands_ws.html"}}, {"op": "add", "path": "/paths/~1ws~1executor~1term/get/x-python", "value": {"example": "from kittycad.api.executor import create_executor_term\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.types import Response\n\n\ndef example_create_executor_term():\n # Create our client.\n client = ClientFromEnv()\n\n # Connect to the websocket.\n websocket = create_executor_term.sync(\n client=client,\n )\n\n # Send a message.\n websocket.send(\"{}\")\n\n # Get the messages.\n for message in websocket:\n print(message)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.executor.create_executor_term.html"}}, {"op": "add", "path": "/paths/~1apps~1github~1consent/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.apps import apps_github_consent\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import AppClientInfo, Error\nfrom kittycad.types import Response\n\n\ndef example_apps_github_consent():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[AppClientInfo, Error]] = apps_github_consent.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: AppClientInfo = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.apps.apps_github_consent.html"}}, {"op": "add", "path": "/paths/~1logout/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.hidden import logout\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_logout():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = logout.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.hidden.logout.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1frequency~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_frequency_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitFrequencyConversion\nfrom kittycad.models.unit_frequency import UnitFrequency\nfrom kittycad.types import Response\n\n\ndef example_get_frequency_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitFrequencyConversion, Error]\n ] = get_frequency_unit_conversion.sync(\n client=client,\n input_unit=UnitFrequency.GIGAHERTZ,\n output_unit=UnitFrequency.GIGAHERTZ,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitFrequencyConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_frequency_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1/get/x-python", "value": {"example": "from kittycad.api.meta import get_schema\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.types import Response\n\n\ndef example_get_schema():\n # Create our client.\n client = ClientFromEnv()\n\n get_schema.sync(\n client=client,\n )\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.meta.get_schema.html"}}, {"op": "add", "path": "/paths/~1ai~1text-to-3d~1{output_format}/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.ai import create_text_to_3d\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, Mesh\nfrom kittycad.models.file_export_format import FileExportFormat\nfrom kittycad.types import Response\n\n\ndef example_create_text_to_3d():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[Mesh, Error]] = create_text_to_3d.sync(\n client=client,\n output_format=FileExportFormat.DAE,\n prompt=\"\",\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Mesh = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.ai.create_text_to_3d.html"}}, {"op": "add", "path": "/paths/~1users-extended/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import list_users_extended\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, ExtendedUserResultsPage\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_list_users_extended():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[ExtendedUserResultsPage, Error]\n ] = list_users_extended.sync(\n client=client,\n sort_by=CreatedAtSortMode.CREATED_AT_ASCENDING,\n limit=None, # Optional[int]\n page_token=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ExtendedUserResultsPage = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.list_users_extended.html"}}, {"op": "add", "path": "/paths/~1user~1extended/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import get_user_self_extended\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, ExtendedUser\nfrom kittycad.types import Response\n\n\ndef example_get_user_self_extended():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[ExtendedUser, Error]] = get_user_self_extended.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ExtendedUser = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.get_user_self_extended.html"}}, {"op": "add", "path": "/paths/~1ai~1image-to-3d~1{input_format}~1{output_format}/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.ai import create_image_to_3d\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, Mesh\nfrom kittycad.models.file_export_format import FileExportFormat\nfrom kittycad.models.image_type import ImageType\nfrom kittycad.types import Response\n\n\ndef example_create_image_to_3d():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[Mesh, Error]] = create_image_to_3d.sync(\n client=client,\n input_format=ImageType.PNG,\n output_format=FileExportFormat.DAE,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Mesh = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.ai.create_image_to_3d.html"}}, {"op": "add", "path": "/paths/~1user~1api-calls/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import user_list_api_calls\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiCallWithPriceResultsPage, Error\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_user_list_api_calls():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[ApiCallWithPriceResultsPage, Error]\n ] = user_list_api_calls.sync(\n client=client,\n sort_by=CreatedAtSortMode.CREATED_AT_ASCENDING,\n limit=None, # Optional[int]\n page_token=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiCallWithPriceResultsPage = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.user_list_api_calls.html"}}, {"op": "add", "path": "/paths/~1file~1mass/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.file import create_file_mass\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, FileMass\nfrom kittycad.models.file_import_format import FileImportFormat\nfrom kittycad.models.unit_density import UnitDensity\nfrom kittycad.models.unit_mass import UnitMass\nfrom kittycad.types import Response\n\n\ndef example_create_file_mass():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[FileMass, Error]] = create_file_mass.sync(\n client=client,\n material_density=3.14,\n material_density_unit=UnitDensity.LB_FT3,\n output_unit=UnitMass.G,\n src_format=FileImportFormat.DAE,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: FileMass = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.file.create_file_mass.html"}}, {"op": "add", "path": "/paths/~1auth~1email/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.hidden import auth_email\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, VerificationToken\nfrom kittycad.models.email_authentication_form import EmailAuthenticationForm\nfrom kittycad.types import Response\n\n\ndef example_auth_email():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[VerificationToken, Error]] = auth_email.sync(\n client=client,\n body=EmailAuthenticationForm(\n email=\"\",\n ),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: VerificationToken = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.hidden.auth_email.html"}}, {"op": "add", "path": "/paths/~1.well-known~1ai-plugin.json/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.meta import get_ai_plugin_manifest\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import AiPluginManifest, Error\nfrom kittycad.types import Response\n\n\ndef example_get_ai_plugin_manifest():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[AiPluginManifest, Error]\n ] = get_ai_plugin_manifest.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: AiPluginManifest = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.meta.get_ai_plugin_manifest.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1mass~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_mass_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitMassConversion\nfrom kittycad.models.unit_mass import UnitMass\nfrom kittycad.types import Response\n\n\ndef example_get_mass_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitMassConversion, Error]\n ] = get_mass_unit_conversion.sync(\n client=client,\n input_unit=UnitMass.G,\n output_unit=UnitMass.G,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitMassConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_mass_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1temperature~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_temperature_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitTemperatureConversion\nfrom kittycad.models.unit_temperature import UnitTemperature\nfrom kittycad.types import Response\n\n\ndef example_get_temperature_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitTemperatureConversion, Error]\n ] = get_temperature_unit_conversion.sync(\n client=client,\n input_unit=UnitTemperature.CELSIUS,\n output_unit=UnitTemperature.CELSIUS,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitTemperatureConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_temperature_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1user~1payment~1invoices/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.payments import list_invoices_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, Invoice\nfrom kittycad.types import Response\n\n\ndef example_list_invoices_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[List[Invoice], Error]] = list_invoices_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: List[Invoice] = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.list_invoices_for_user.html"}}, {"op": "add", "path": "/paths/~1auth~1email~1callback/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.hidden import auth_email_callback\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.types import Response\n\n\ndef example_auth_email_callback():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = auth_email_callback.sync(\n client=client,\n email=\"\",\n token=\"\",\n callback_url=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Error = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.hidden.auth_email_callback.html"}}, {"op": "add", "path": "/paths/~1file~1surface-area/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.file import create_file_surface_area\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, FileSurfaceArea\nfrom kittycad.models.file_import_format import FileImportFormat\nfrom kittycad.models.unit_area import UnitArea\nfrom kittycad.types import Response\n\n\ndef example_create_file_surface_area():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[FileSurfaceArea, Error]\n ] = create_file_surface_area.sync(\n client=client,\n output_unit=UnitArea.CM2,\n src_format=FileImportFormat.DAE,\n body=bytes(\"some bytes\", \"utf-8\"),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: FileSurfaceArea = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.file.create_file_surface_area.html"}}, {"op": "add", "path": "/paths/~1api-call-metrics/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_calls import get_api_call_metrics\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiCallQueryGroup, Error\nfrom kittycad.models.api_call_query_group_by import ApiCallQueryGroupBy\nfrom kittycad.types import Response\n\n\ndef example_get_api_call_metrics():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[List[ApiCallQueryGroup], Error]\n ] = get_api_call_metrics.sync(\n client=client,\n group_by=ApiCallQueryGroupBy.EMAIL,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: List[ApiCallQueryGroup] = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.get_api_call_metrics.html"}}, {"op": "add", "path": "/paths/~1ping/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.meta import ping\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, Pong\nfrom kittycad.types import Response\n\n\ndef example_ping():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[Pong, Error]] = ping.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Pong = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.meta.ping.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1force~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_force_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitForceConversion\nfrom kittycad.models.unit_force import UnitForce\nfrom kittycad.types import Response\n\n\ndef example_get_force_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitForceConversion, Error]\n ] = get_force_unit_conversion.sync(\n client=client,\n input_unit=UnitForce.DYNES,\n output_unit=UnitForce.DYNES,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitForceConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_force_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1unit~1conversion~1pressure~1{input_unit}~1{output_unit}/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.unit import get_pressure_unit_conversion\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UnitPressureConversion\nfrom kittycad.models.unit_pressure import UnitPressure\nfrom kittycad.types import Response\n\n\ndef example_get_pressure_unit_conversion():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[UnitPressureConversion, Error]\n ] = get_pressure_unit_conversion.sync(\n client=client,\n input_unit=UnitPressure.ATMOSPHERES,\n output_unit=UnitPressure.ATMOSPHERES,\n value=3.14,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UnitPressureConversion = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_pressure_unit_conversion.html"}}, {"op": "add", "path": "/paths/~1user~1api-tokens/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_tokens import list_api_tokens_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiTokenResultsPage, Error\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_list_api_tokens_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[ApiTokenResultsPage, Error]\n ] = list_api_tokens_for_user.sync(\n client=client,\n sort_by=CreatedAtSortMode.CREATED_AT_ASCENDING,\n limit=None, # Optional[int]\n page_token=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiTokenResultsPage = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_tokens.list_api_tokens_for_user.html"}}, {"op": "add", "path": "/paths/~1user~1api-tokens/post/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.api_tokens import create_api_token_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiToken, Error\nfrom kittycad.types import Response\n\n\ndef example_create_api_token_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[ApiToken, Error]] = create_api_token_for_user.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: ApiToken = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_tokens.create_api_token_for_user.html"}}, {"op": "add", "path": "/paths/~1_meta~1info/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.meta import get_metadata\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, Metadata\nfrom kittycad.types import Response\n\n\ndef example_get_metadata():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[Metadata, Error]] = get_metadata.sync(\n client=client,\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: Metadata = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.meta.get_metadata.html"}}, {"op": "add", "path": "/paths/~1users/get/x-python", "value": {"example": "from typing import Any, List, Optional, Union\n\nfrom kittycad.api.users import list_users\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, UserResultsPage\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_list_users():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[UserResultsPage, Error]] = list_users.sync(\n client=client,\n sort_by=CreatedAtSortMode.CREATED_AT_ASCENDING,\n limit=None, # Optional[int]\n page_token=None, # Optional[str]\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: UserResultsPage = result\n print(body)\n", "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.list_users.html"}}] \ No newline at end of file diff --git a/kittycad/api/ai/create_image_to_3d.py b/kittycad/api/ai/create_image_to_3d.py index 87d7cc238..cabf93a34 100644 --- a/kittycad/api/ai/create_image_to_3d.py +++ b/kittycad/api/ai/create_image_to_3d.py @@ -18,7 +18,9 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/ai/image-to-3d/{input_format}/{output_format}".format( - client.base_url, input_format=input_format, output_format=output_format + client.base_url, + input_format=input_format, + output_format=output_format, ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() diff --git a/kittycad/api/ai/create_text_to_3d.py b/kittycad/api/ai/create_text_to_3d.py index 8dda9b4f0..472415cb6 100644 --- a/kittycad/api/ai/create_text_to_3d.py +++ b/kittycad/api/ai/create_text_to_3d.py @@ -16,8 +16,10 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/ai/text-to-3d/{output_format}".format( - client.base_url, output_format=output_format + client.base_url, + output_format=output_format, ) # noqa: E501 + if prompt is not None: if "?" in url: url = url + "&prompt=" + str(prompt) diff --git a/kittycad/api/api_calls/get_api_call.py b/kittycad/api/api_calls/get_api_call.py index 556a6d22f..b140be1d4 100644 --- a/kittycad/api/api_calls/get_api_call.py +++ b/kittycad/api/api_calls/get_api_call.py @@ -13,7 +13,10 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/api-calls/{id}".format(client.base_url, id=id) # noqa: E501 + url = "{}/api-calls/{id}".format( + client.base_url, + id=id, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/api_calls/get_api_call_for_user.py b/kittycad/api/api_calls/get_api_call_for_user.py index 93c52b28e..b0ff01b9f 100644 --- a/kittycad/api/api_calls/get_api_call_for_user.py +++ b/kittycad/api/api_calls/get_api_call_for_user.py @@ -13,7 +13,10 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/api-calls/{id}".format(client.base_url, id=id) # noqa: E501 + url = "{}/user/api-calls/{id}".format( + client.base_url, + id=id, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/api_calls/get_api_call_metrics.py b/kittycad/api/api_calls/get_api_call_metrics.py index 7a57321d9..86f4892d0 100644 --- a/kittycad/api/api_calls/get_api_call_metrics.py +++ b/kittycad/api/api_calls/get_api_call_metrics.py @@ -14,7 +14,10 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/api-call-metrics".format(client.base_url) # noqa: E501 + url = "{}/api-call-metrics".format( + client.base_url, + ) # noqa: E501 + if group_by is not None: if "?" in url: url = url + "&group_by=" + str(group_by) diff --git a/kittycad/api/api_calls/get_async_operation.py b/kittycad/api/api_calls/get_async_operation.py index 95aa73ec8..46179a9d1 100644 --- a/kittycad/api/api_calls/get_async_operation.py +++ b/kittycad/api/api_calls/get_async_operation.py @@ -18,7 +18,10 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/async/operations/{id}".format(client.base_url, id=id) # noqa: E501 + url = "{}/async/operations/{id}".format( + client.base_url, + id=id, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/api_calls/list_api_calls.py b/kittycad/api/api_calls/list_api_calls.py index e0be435d9..45071e281 100644 --- a/kittycad/api/api_calls/list_api_calls.py +++ b/kittycad/api/api_calls/list_api_calls.py @@ -16,17 +16,22 @@ def _get_kwargs( limit: Optional[int] = None, page_token: Optional[str] = None, ) -> Dict[str, Any]: - url = "{}/api-calls".format(client.base_url) # noqa: E501 + url = "{}/api-calls".format( + client.base_url, + ) # noqa: E501 + if limit is not None: if "?" in url: url = url + "&limit=" + str(limit) else: url = url + "?limit=" + str(limit) + if page_token is not None: if "?" in url: url = url + "&page_token=" + str(page_token) else: url = url + "?page_token=" + str(page_token) + if sort_by is not None: if "?" in url: url = url + "&sort_by=" + str(sort_by) diff --git a/kittycad/api/api_calls/list_api_calls_for_user.py b/kittycad/api/api_calls/list_api_calls_for_user.py index a29b32bcc..beb575684 100644 --- a/kittycad/api/api_calls/list_api_calls_for_user.py +++ b/kittycad/api/api_calls/list_api_calls_for_user.py @@ -17,17 +17,23 @@ def _get_kwargs( limit: Optional[int] = None, page_token: Optional[str] = None, ) -> Dict[str, Any]: - url = "{}/users/{id}/api-calls".format(client.base_url, id=id) # noqa: E501 + url = "{}/users/{id}/api-calls".format( + client.base_url, + id=id, + ) # noqa: E501 + if limit is not None: if "?" in url: url = url + "&limit=" + str(limit) else: url = url + "?limit=" + str(limit) + if page_token is not None: if "?" in url: url = url + "&page_token=" + str(page_token) else: url = url + "?page_token=" + str(page_token) + if sort_by is not None: if "?" in url: url = url + "&sort_by=" + str(sort_by) diff --git a/kittycad/api/api_calls/list_async_operations.py b/kittycad/api/api_calls/list_async_operations.py index 40e790444..fd1a2664b 100644 --- a/kittycad/api/api_calls/list_async_operations.py +++ b/kittycad/api/api_calls/list_async_operations.py @@ -18,22 +18,28 @@ def _get_kwargs( limit: Optional[int] = None, page_token: Optional[str] = None, ) -> Dict[str, Any]: - url = "{}/async/operations".format(client.base_url) # noqa: E501 + url = "{}/async/operations".format( + client.base_url, + ) # noqa: E501 + if limit is not None: if "?" in url: url = url + "&limit=" + str(limit) else: url = url + "?limit=" + str(limit) + if page_token is not None: if "?" in url: url = url + "&page_token=" + str(page_token) else: url = url + "?page_token=" + str(page_token) + if sort_by is not None: if "?" in url: url = url + "&sort_by=" + str(sort_by) else: url = url + "?sort_by=" + str(sort_by) + if status is not None: if "?" in url: url = url + "&status=" + str(status) diff --git a/kittycad/api/api_calls/user_list_api_calls.py b/kittycad/api/api_calls/user_list_api_calls.py index eac4d11ba..a6a1cec93 100644 --- a/kittycad/api/api_calls/user_list_api_calls.py +++ b/kittycad/api/api_calls/user_list_api_calls.py @@ -16,17 +16,22 @@ def _get_kwargs( limit: Optional[int] = None, page_token: Optional[str] = None, ) -> Dict[str, Any]: - url = "{}/user/api-calls".format(client.base_url) # noqa: E501 + url = "{}/user/api-calls".format( + client.base_url, + ) # noqa: E501 + if limit is not None: if "?" in url: url = url + "&limit=" + str(limit) else: url = url + "?limit=" + str(limit) + if page_token is not None: if "?" in url: url = url + "&page_token=" + str(page_token) else: url = url + "?page_token=" + str(page_token) + if sort_by is not None: if "?" in url: url = url + "&sort_by=" + str(sort_by) diff --git a/kittycad/api/api_tokens/create_api_token_for_user.py b/kittycad/api/api_tokens/create_api_token_for_user.py index 51ccafb06..6b7c3d972 100644 --- a/kittycad/api/api_tokens/create_api_token_for_user.py +++ b/kittycad/api/api_tokens/create_api_token_for_user.py @@ -12,7 +12,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/api-tokens".format(client.base_url) # noqa: E501 + url = "{}/user/api-tokens".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/api_tokens/delete_api_token_for_user.py b/kittycad/api/api_tokens/delete_api_token_for_user.py index 15f67f9db..c3dd8345f 100644 --- a/kittycad/api/api_tokens/delete_api_token_for_user.py +++ b/kittycad/api/api_tokens/delete_api_token_for_user.py @@ -13,7 +13,8 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/user/api-tokens/{token}".format( - client.base_url, token=token + client.base_url, + token=token, ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() diff --git a/kittycad/api/api_tokens/get_api_token_for_user.py b/kittycad/api/api_tokens/get_api_token_for_user.py index d683d3190..b26130194 100644 --- a/kittycad/api/api_tokens/get_api_token_for_user.py +++ b/kittycad/api/api_tokens/get_api_token_for_user.py @@ -14,7 +14,8 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/user/api-tokens/{token}".format( - client.base_url, token=token + client.base_url, + token=token, ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() diff --git a/kittycad/api/api_tokens/list_api_tokens_for_user.py b/kittycad/api/api_tokens/list_api_tokens_for_user.py index 28ccf9c65..2f355fe2c 100644 --- a/kittycad/api/api_tokens/list_api_tokens_for_user.py +++ b/kittycad/api/api_tokens/list_api_tokens_for_user.py @@ -16,17 +16,22 @@ def _get_kwargs( limit: Optional[int] = None, page_token: Optional[str] = None, ) -> Dict[str, Any]: - url = "{}/user/api-tokens".format(client.base_url) # noqa: E501 + url = "{}/user/api-tokens".format( + client.base_url, + ) # noqa: E501 + if limit is not None: if "?" in url: url = url + "&limit=" + str(limit) else: url = url + "?limit=" + str(limit) + if page_token is not None: if "?" in url: url = url + "&page_token=" + str(page_token) else: url = url + "?page_token=" + str(page_token) + if sort_by is not None: if "?" in url: url = url + "&sort_by=" + str(sort_by) diff --git a/kittycad/api/apps/apps_github_callback.py b/kittycad/api/apps/apps_github_callback.py index b82a6cf73..90953b092 100644 --- a/kittycad/api/apps/apps_github_callback.py +++ b/kittycad/api/apps/apps_github_callback.py @@ -11,7 +11,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/apps/github/callback".format(client.base_url) # noqa: E501 + url = "{}/apps/github/callback".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/apps/apps_github_consent.py b/kittycad/api/apps/apps_github_consent.py index 400bab7b9..e2ccfa94f 100644 --- a/kittycad/api/apps/apps_github_consent.py +++ b/kittycad/api/apps/apps_github_consent.py @@ -12,7 +12,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/apps/github/consent".format(client.base_url) # noqa: E501 + url = "{}/apps/github/consent".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/apps/apps_github_webhook.py b/kittycad/api/apps/apps_github_webhook.py index 94ff3e58c..0713325b7 100644 --- a/kittycad/api/apps/apps_github_webhook.py +++ b/kittycad/api/apps/apps_github_webhook.py @@ -12,7 +12,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/apps/github/webhook".format(client.base_url) # noqa: E501 + url = "{}/apps/github/webhook".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/constant/get_physics_constant.py b/kittycad/api/constant/get_physics_constant.py index 4e307be71..b658ec8b8 100644 --- a/kittycad/api/constant/get_physics_constant.py +++ b/kittycad/api/constant/get_physics_constant.py @@ -15,7 +15,8 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/constant/physics/{constant}".format( - client.base_url, constant=constant + client.base_url, + constant=constant, ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() diff --git a/kittycad/api/executor/create_executor_term.py b/kittycad/api/executor/create_executor_term.py index 3fc3641c6..32912f893 100644 --- a/kittycad/api/executor/create_executor_term.py +++ b/kittycad/api/executor/create_executor_term.py @@ -1,9 +1,10 @@ from typing import Any, Dict -import httpx +from websockets.client import WebSocketClientProtocol, connect as ws_connect_async +from websockets.sync.client import ClientConnection, connect as ws_connect from ...client import Client -from ...types import Response +from ...models.error import Error def _get_kwargs( @@ -23,68 +24,40 @@ def _get_kwargs( } -def _parse_response(*, response: httpx.Response): - return - - -def _build_response(*, response: httpx.Response) -> Response[Any]: - return Response( - status_code=response.status_code, - content=response.content, - headers=response.headers, - parsed=_parse_response(response=response), - ) - - -def sync_detailed( - *, - client: Client, -) -> Response[Any]: - kwargs = _get_kwargs( - client=client, - ) - - response = httpx.get( - verify=client.verify_ssl, - **kwargs, - ) - - return _build_response(response=response) - - def sync( *, client: Client, -): +) -> ClientConnection: """Attach to a docker container to create an interactive terminal.""" # noqa: E501 - return sync_detailed( - client=client, - ).parsed - - -async def asyncio_detailed( - *, - client: Client, -) -> Response[Any]: kwargs = _get_kwargs( client=client, ) - async with httpx.AsyncClient(verify=client.verify_ssl) as _client: - response = await _client.get(**kwargs) + with ws_connect( + kwargs["url"].replace("https://", "wss://"), + additional_headers=kwargs["headers"], + ) as websocket: + return websocket # type: ignore - return _build_response(response=response) + # Return an error if we got here. + return Error(message="An error occurred while connecting to the websocket.") async def asyncio( *, client: Client, -): +) -> WebSocketClientProtocol: """Attach to a docker container to create an interactive terminal.""" # noqa: E501 - return ( - await asyncio_detailed( - client=client, - ) - ).parsed + kwargs = _get_kwargs( + client=client, + ) + + async with ws_connect_async( + kwargs["url"].replace("https://", "wss://"), extra_headers=kwargs["headers"] + ) as websocket: + return websocket + + # Return an error if we got here. + return Error(message="An error occurred while connecting to the websocket.") diff --git a/kittycad/api/executor/create_file_execution.py b/kittycad/api/executor/create_file_execution.py index 265cc3861..d7b017b8b 100644 --- a/kittycad/api/executor/create_file_execution.py +++ b/kittycad/api/executor/create_file_execution.py @@ -16,7 +16,11 @@ def _get_kwargs( client: Client, output: Optional[str] = None, ) -> Dict[str, Any]: - url = "{}/file/execute/{lang}".format(client.base_url, lang=lang) # noqa: E501 + url = "{}/file/execute/{lang}".format( + client.base_url, + lang=lang, + ) # noqa: E501 + if output is not None: if "?" in url: url = url + "&output=" + str(output) diff --git a/kittycad/api/file/create_file_center_of_mass.py b/kittycad/api/file/create_file_center_of_mass.py index cc5ab8ac0..2a71f1468 100644 --- a/kittycad/api/file/create_file_center_of_mass.py +++ b/kittycad/api/file/create_file_center_of_mass.py @@ -17,12 +17,16 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/file/center-of-mass".format(client.base_url) # noqa: E501 + url = "{}/file/center-of-mass".format( + client.base_url, + ) # noqa: E501 + if output_unit is not None: if "?" in url: url = url + "&output_unit=" + str(output_unit) else: url = url + "?output_unit=" + str(output_unit) + if src_format is not None: if "?" in url: url = url + "&src_format=" + str(src_format) diff --git a/kittycad/api/file/create_file_conversion.py b/kittycad/api/file/create_file_conversion.py index 305bed911..ceb49f472 100644 --- a/kittycad/api/file/create_file_conversion.py +++ b/kittycad/api/file/create_file_conversion.py @@ -18,7 +18,9 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/file/conversion/{src_format}/{output_format}".format( - client.base_url, output_format=output_format, src_format=src_format + client.base_url, + output_format=output_format, + src_format=src_format, ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() diff --git a/kittycad/api/file/create_file_density.py b/kittycad/api/file/create_file_density.py index 44982556d..3a7d25df8 100644 --- a/kittycad/api/file/create_file_density.py +++ b/kittycad/api/file/create_file_density.py @@ -20,22 +20,28 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/file/density".format(client.base_url) # noqa: E501 + url = "{}/file/density".format( + client.base_url, + ) # noqa: E501 + if material_mass is not None: if "?" in url: url = url + "&material_mass=" + str(material_mass) else: url = url + "?material_mass=" + str(material_mass) + if material_mass_unit is not None: if "?" in url: url = url + "&material_mass_unit=" + str(material_mass_unit) else: url = url + "?material_mass_unit=" + str(material_mass_unit) + if output_unit is not None: if "?" in url: url = url + "&output_unit=" + str(output_unit) else: url = url + "?output_unit=" + str(output_unit) + if src_format is not None: if "?" in url: url = url + "&src_format=" + str(src_format) diff --git a/kittycad/api/file/create_file_mass.py b/kittycad/api/file/create_file_mass.py index 49354ddd9..92769b933 100644 --- a/kittycad/api/file/create_file_mass.py +++ b/kittycad/api/file/create_file_mass.py @@ -20,22 +20,28 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/file/mass".format(client.base_url) # noqa: E501 + url = "{}/file/mass".format( + client.base_url, + ) # noqa: E501 + if material_density is not None: if "?" in url: url = url + "&material_density=" + str(material_density) else: url = url + "?material_density=" + str(material_density) + if material_density_unit is not None: if "?" in url: url = url + "&material_density_unit=" + str(material_density_unit) else: url = url + "?material_density_unit=" + str(material_density_unit) + if output_unit is not None: if "?" in url: url = url + "&output_unit=" + str(output_unit) else: url = url + "?output_unit=" + str(output_unit) + if src_format is not None: if "?" in url: url = url + "&src_format=" + str(src_format) diff --git a/kittycad/api/file/create_file_surface_area.py b/kittycad/api/file/create_file_surface_area.py index 34de1af6f..433bcf9ef 100644 --- a/kittycad/api/file/create_file_surface_area.py +++ b/kittycad/api/file/create_file_surface_area.py @@ -17,12 +17,16 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/file/surface-area".format(client.base_url) # noqa: E501 + url = "{}/file/surface-area".format( + client.base_url, + ) # noqa: E501 + if output_unit is not None: if "?" in url: url = url + "&output_unit=" + str(output_unit) else: url = url + "?output_unit=" + str(output_unit) + if src_format is not None: if "?" in url: url = url + "&src_format=" + str(src_format) diff --git a/kittycad/api/file/create_file_volume.py b/kittycad/api/file/create_file_volume.py index b63f4f687..e497f6501 100644 --- a/kittycad/api/file/create_file_volume.py +++ b/kittycad/api/file/create_file_volume.py @@ -17,12 +17,16 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/file/volume".format(client.base_url) # noqa: E501 + url = "{}/file/volume".format( + client.base_url, + ) # noqa: E501 + if output_unit is not None: if "?" in url: url = url + "&output_unit=" + str(output_unit) else: url = url + "?output_unit=" + str(output_unit) + if src_format is not None: if "?" in url: url = url + "&src_format=" + str(src_format) diff --git a/kittycad/api/hidden/auth_email.py b/kittycad/api/hidden/auth_email.py index 55b0e9f63..4487132a8 100644 --- a/kittycad/api/hidden/auth_email.py +++ b/kittycad/api/hidden/auth_email.py @@ -14,7 +14,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/auth/email".format(client.base_url) # noqa: E501 + url = "{}/auth/email".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/hidden/auth_email_callback.py b/kittycad/api/hidden/auth_email_callback.py index eb5326387..0a60803b6 100644 --- a/kittycad/api/hidden/auth_email_callback.py +++ b/kittycad/api/hidden/auth_email_callback.py @@ -14,17 +14,22 @@ def _get_kwargs( client: Client, callback_url: Optional[str] = None, ) -> Dict[str, Any]: - url = "{}/auth/email/callback".format(client.base_url) # noqa: E501 + url = "{}/auth/email/callback".format( + client.base_url, + ) # noqa: E501 + if callback_url is not None: if "?" in url: url = url + "&callback_url=" + str(callback_url) else: url = url + "?callback_url=" + str(callback_url) + if email is not None: if "?" in url: url = url + "&email=" + str(email) else: url = url + "?email=" + str(email) + if token is not None: if "?" in url: url = url + "&token=" + str(token) diff --git a/kittycad/api/hidden/logout.py b/kittycad/api/hidden/logout.py index fd9c5aea5..b8e3bbae9 100644 --- a/kittycad/api/hidden/logout.py +++ b/kittycad/api/hidden/logout.py @@ -11,7 +11,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/logout".format(client.base_url) # noqa: E501 + url = "{}/logout".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/meta/get_ai_plugin_manifest.py b/kittycad/api/meta/get_ai_plugin_manifest.py index 14e8176c3..a7f6cf90b 100644 --- a/kittycad/api/meta/get_ai_plugin_manifest.py +++ b/kittycad/api/meta/get_ai_plugin_manifest.py @@ -12,7 +12,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/.well-known/ai-plugin.json".format(client.base_url) # noqa: E501 + url = "{}/.well-known/ai-plugin.json".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/meta/get_metadata.py b/kittycad/api/meta/get_metadata.py index 8769ac7aa..8add017f6 100644 --- a/kittycad/api/meta/get_metadata.py +++ b/kittycad/api/meta/get_metadata.py @@ -12,7 +12,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/_meta/info".format(client.base_url) # noqa: E501 + url = "{}/_meta/info".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/meta/get_openai_schema.py b/kittycad/api/meta/get_openai_schema.py index 19623cd2d..72a38e14c 100644 --- a/kittycad/api/meta/get_openai_schema.py +++ b/kittycad/api/meta/get_openai_schema.py @@ -11,7 +11,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/openai/openapi.json".format(client.base_url) # noqa: E501 + url = "{}/openai/openapi.json".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/meta/get_schema.py b/kittycad/api/meta/get_schema.py index c307f44a6..7b9788435 100644 --- a/kittycad/api/meta/get_schema.py +++ b/kittycad/api/meta/get_schema.py @@ -11,7 +11,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/".format(client.base_url) # noqa: E501 + url = "{}/".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/meta/ping.py b/kittycad/api/meta/ping.py index 4fc71a20d..81c5a4d62 100644 --- a/kittycad/api/meta/ping.py +++ b/kittycad/api/meta/ping.py @@ -12,7 +12,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/ping".format(client.base_url) # noqa: E501 + url = "{}/ping".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/modeling/cmd.py b/kittycad/api/modeling/cmd.py index 2bfcc4c45..ae6dfe7eb 100644 --- a/kittycad/api/modeling/cmd.py +++ b/kittycad/api/modeling/cmd.py @@ -13,7 +13,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/modeling/cmd".format(client.base_url) # noqa: E501 + url = "{}/modeling/cmd".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/modeling/cmd_batch.py b/kittycad/api/modeling/cmd_batch.py index 6ea2494c1..5411d5e4a 100644 --- a/kittycad/api/modeling/cmd_batch.py +++ b/kittycad/api/modeling/cmd_batch.py @@ -14,7 +14,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/modeling/cmd_batch".format(client.base_url) # noqa: E501 + url = "{}/modeling/cmd_batch".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/modeling/modeling_commands_ws.py b/kittycad/api/modeling/modeling_commands_ws.py index bf9b25607..abd5a1601 100644 --- a/kittycad/api/modeling/modeling_commands_ws.py +++ b/kittycad/api/modeling/modeling_commands_ws.py @@ -1,9 +1,10 @@ from typing import Any, Dict -import httpx +from websockets.client import WebSocketClientProtocol, connect as ws_connect_async +from websockets.sync.client import ClientConnection, connect as ws_connect from ...client import Client -from ...types import Response +from ...models.error import Error def _get_kwargs( @@ -23,68 +24,40 @@ def _get_kwargs( } -def _parse_response(*, response: httpx.Response): - return - - -def _build_response(*, response: httpx.Response) -> Response[Any]: - return Response( - status_code=response.status_code, - content=response.content, - headers=response.headers, - parsed=_parse_response(response=response), - ) - - -def sync_detailed( - *, - client: Client, -) -> Response[Any]: - kwargs = _get_kwargs( - client=client, - ) - - response = httpx.get( - verify=client.verify_ssl, - **kwargs, - ) - - return _build_response(response=response) - - def sync( *, client: Client, -): +) -> ClientConnection: """Pass those commands to the engine via websocket, and pass responses back to the client. Basically, this is a websocket proxy between the frontend/client and the engine.""" # noqa: E501 - return sync_detailed( - client=client, - ).parsed - - -async def asyncio_detailed( - *, - client: Client, -) -> Response[Any]: kwargs = _get_kwargs( client=client, ) - async with httpx.AsyncClient(verify=client.verify_ssl) as _client: - response = await _client.get(**kwargs) + with ws_connect( + kwargs["url"].replace("https://", "wss://"), + additional_headers=kwargs["headers"], + ) as websocket: + return websocket # type: ignore - return _build_response(response=response) + # Return an error if we got here. + return Error(message="An error occurred while connecting to the websocket.") async def asyncio( *, client: Client, -): +) -> WebSocketClientProtocol: """Pass those commands to the engine via websocket, and pass responses back to the client. Basically, this is a websocket proxy between the frontend/client and the engine.""" # noqa: E501 - return ( - await asyncio_detailed( - client=client, - ) - ).parsed + kwargs = _get_kwargs( + client=client, + ) + + async with ws_connect_async( + kwargs["url"].replace("https://", "wss://"), extra_headers=kwargs["headers"] + ) as websocket: + return websocket + + # Return an error if we got here. + return Error(message="An error occurred while connecting to the websocket.") diff --git a/kittycad/api/payments/create_payment_information_for_user.py b/kittycad/api/payments/create_payment_information_for_user.py index 207937bb7..a29c97371 100644 --- a/kittycad/api/payments/create_payment_information_for_user.py +++ b/kittycad/api/payments/create_payment_information_for_user.py @@ -14,7 +14,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/payment".format(client.base_url) # noqa: E501 + url = "{}/user/payment".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/payments/create_payment_intent_for_user.py b/kittycad/api/payments/create_payment_intent_for_user.py index fb2b39a80..c212b22f1 100644 --- a/kittycad/api/payments/create_payment_intent_for_user.py +++ b/kittycad/api/payments/create_payment_intent_for_user.py @@ -12,7 +12,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/payment/intent".format(client.base_url) # noqa: E501 + url = "{}/user/payment/intent".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/payments/delete_payment_information_for_user.py b/kittycad/api/payments/delete_payment_information_for_user.py index 4ce884a4b..159f523a2 100644 --- a/kittycad/api/payments/delete_payment_information_for_user.py +++ b/kittycad/api/payments/delete_payment_information_for_user.py @@ -11,7 +11,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/payment".format(client.base_url) # noqa: E501 + url = "{}/user/payment".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/payments/delete_payment_method_for_user.py b/kittycad/api/payments/delete_payment_method_for_user.py index 354b250b1..52f69e264 100644 --- a/kittycad/api/payments/delete_payment_method_for_user.py +++ b/kittycad/api/payments/delete_payment_method_for_user.py @@ -12,7 +12,10 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/payment/methods/{id}".format(client.base_url, id=id) # noqa: E501 + url = "{}/user/payment/methods/{id}".format( + client.base_url, + id=id, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/payments/get_payment_balance_for_user.py b/kittycad/api/payments/get_payment_balance_for_user.py index 551191640..4de88e376 100644 --- a/kittycad/api/payments/get_payment_balance_for_user.py +++ b/kittycad/api/payments/get_payment_balance_for_user.py @@ -12,7 +12,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/payment/balance".format(client.base_url) # noqa: E501 + url = "{}/user/payment/balance".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/payments/get_payment_information_for_user.py b/kittycad/api/payments/get_payment_information_for_user.py index f913f7364..44f5692e5 100644 --- a/kittycad/api/payments/get_payment_information_for_user.py +++ b/kittycad/api/payments/get_payment_information_for_user.py @@ -12,7 +12,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/payment".format(client.base_url) # noqa: E501 + url = "{}/user/payment".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/payments/list_invoices_for_user.py b/kittycad/api/payments/list_invoices_for_user.py index 75b62c369..2af14491d 100644 --- a/kittycad/api/payments/list_invoices_for_user.py +++ b/kittycad/api/payments/list_invoices_for_user.py @@ -12,7 +12,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/payment/invoices".format(client.base_url) # noqa: E501 + url = "{}/user/payment/invoices".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/payments/list_payment_methods_for_user.py b/kittycad/api/payments/list_payment_methods_for_user.py index 4b70f76f7..f23fc4d9c 100644 --- a/kittycad/api/payments/list_payment_methods_for_user.py +++ b/kittycad/api/payments/list_payment_methods_for_user.py @@ -12,7 +12,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/payment/methods".format(client.base_url) # noqa: E501 + url = "{}/user/payment/methods".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/payments/update_payment_information_for_user.py b/kittycad/api/payments/update_payment_information_for_user.py index 4086935b9..e4ab3a8c7 100644 --- a/kittycad/api/payments/update_payment_information_for_user.py +++ b/kittycad/api/payments/update_payment_information_for_user.py @@ -14,7 +14,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/payment".format(client.base_url) # noqa: E501 + url = "{}/user/payment".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/payments/validate_customer_tax_information_for_user.py b/kittycad/api/payments/validate_customer_tax_information_for_user.py index 657a3b034..fab999d0a 100644 --- a/kittycad/api/payments/validate_customer_tax_information_for_user.py +++ b/kittycad/api/payments/validate_customer_tax_information_for_user.py @@ -11,7 +11,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/payment/tax".format(client.base_url) # noqa: E501 + url = "{}/user/payment/tax".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/unit/get_angle_unit_conversion.py b/kittycad/api/unit/get_angle_unit_conversion.py index 8e093515a..08703bb66 100644 --- a/kittycad/api/unit/get_angle_unit_conversion.py +++ b/kittycad/api/unit/get_angle_unit_conversion.py @@ -17,8 +17,11 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/unit/conversion/angle/{input_unit}/{output_unit}".format( - client.base_url, input_unit=input_unit, output_unit=output_unit + client.base_url, + input_unit=input_unit, + output_unit=output_unit, ) # noqa: E501 + if value is not None: if "?" in url: url = url + "&value=" + str(value) diff --git a/kittycad/api/unit/get_area_unit_conversion.py b/kittycad/api/unit/get_area_unit_conversion.py index b6b18c070..1ae8b2e43 100644 --- a/kittycad/api/unit/get_area_unit_conversion.py +++ b/kittycad/api/unit/get_area_unit_conversion.py @@ -17,8 +17,11 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/unit/conversion/area/{input_unit}/{output_unit}".format( - client.base_url, input_unit=input_unit, output_unit=output_unit + client.base_url, + input_unit=input_unit, + output_unit=output_unit, ) # noqa: E501 + if value is not None: if "?" in url: url = url + "&value=" + str(value) diff --git a/kittycad/api/unit/get_current_unit_conversion.py b/kittycad/api/unit/get_current_unit_conversion.py index b3854c97a..f5fde0e2d 100644 --- a/kittycad/api/unit/get_current_unit_conversion.py +++ b/kittycad/api/unit/get_current_unit_conversion.py @@ -17,8 +17,11 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/unit/conversion/current/{input_unit}/{output_unit}".format( - client.base_url, input_unit=input_unit, output_unit=output_unit + client.base_url, + input_unit=input_unit, + output_unit=output_unit, ) # noqa: E501 + if value is not None: if "?" in url: url = url + "&value=" + str(value) diff --git a/kittycad/api/unit/get_energy_unit_conversion.py b/kittycad/api/unit/get_energy_unit_conversion.py index b51bff747..e64c61da2 100644 --- a/kittycad/api/unit/get_energy_unit_conversion.py +++ b/kittycad/api/unit/get_energy_unit_conversion.py @@ -17,8 +17,11 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/unit/conversion/energy/{input_unit}/{output_unit}".format( - client.base_url, input_unit=input_unit, output_unit=output_unit + client.base_url, + input_unit=input_unit, + output_unit=output_unit, ) # noqa: E501 + if value is not None: if "?" in url: url = url + "&value=" + str(value) diff --git a/kittycad/api/unit/get_force_unit_conversion.py b/kittycad/api/unit/get_force_unit_conversion.py index c1b81605c..1aa100ab0 100644 --- a/kittycad/api/unit/get_force_unit_conversion.py +++ b/kittycad/api/unit/get_force_unit_conversion.py @@ -17,8 +17,11 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/unit/conversion/force/{input_unit}/{output_unit}".format( - client.base_url, input_unit=input_unit, output_unit=output_unit + client.base_url, + input_unit=input_unit, + output_unit=output_unit, ) # noqa: E501 + if value is not None: if "?" in url: url = url + "&value=" + str(value) diff --git a/kittycad/api/unit/get_frequency_unit_conversion.py b/kittycad/api/unit/get_frequency_unit_conversion.py index 0bd4f9ecb..9ffc58c91 100644 --- a/kittycad/api/unit/get_frequency_unit_conversion.py +++ b/kittycad/api/unit/get_frequency_unit_conversion.py @@ -17,8 +17,11 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/unit/conversion/frequency/{input_unit}/{output_unit}".format( - client.base_url, input_unit=input_unit, output_unit=output_unit + client.base_url, + input_unit=input_unit, + output_unit=output_unit, ) # noqa: E501 + if value is not None: if "?" in url: url = url + "&value=" + str(value) diff --git a/kittycad/api/unit/get_length_unit_conversion.py b/kittycad/api/unit/get_length_unit_conversion.py index 4d324e753..29ae76ce6 100644 --- a/kittycad/api/unit/get_length_unit_conversion.py +++ b/kittycad/api/unit/get_length_unit_conversion.py @@ -17,8 +17,11 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/unit/conversion/length/{input_unit}/{output_unit}".format( - client.base_url, input_unit=input_unit, output_unit=output_unit + client.base_url, + input_unit=input_unit, + output_unit=output_unit, ) # noqa: E501 + if value is not None: if "?" in url: url = url + "&value=" + str(value) diff --git a/kittycad/api/unit/get_mass_unit_conversion.py b/kittycad/api/unit/get_mass_unit_conversion.py index 3d1255c7a..3f743ce73 100644 --- a/kittycad/api/unit/get_mass_unit_conversion.py +++ b/kittycad/api/unit/get_mass_unit_conversion.py @@ -17,8 +17,11 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/unit/conversion/mass/{input_unit}/{output_unit}".format( - client.base_url, input_unit=input_unit, output_unit=output_unit + client.base_url, + input_unit=input_unit, + output_unit=output_unit, ) # noqa: E501 + if value is not None: if "?" in url: url = url + "&value=" + str(value) diff --git a/kittycad/api/unit/get_power_unit_conversion.py b/kittycad/api/unit/get_power_unit_conversion.py index ac977f2ac..f9c75f44d 100644 --- a/kittycad/api/unit/get_power_unit_conversion.py +++ b/kittycad/api/unit/get_power_unit_conversion.py @@ -17,8 +17,11 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/unit/conversion/power/{input_unit}/{output_unit}".format( - client.base_url, input_unit=input_unit, output_unit=output_unit + client.base_url, + input_unit=input_unit, + output_unit=output_unit, ) # noqa: E501 + if value is not None: if "?" in url: url = url + "&value=" + str(value) diff --git a/kittycad/api/unit/get_pressure_unit_conversion.py b/kittycad/api/unit/get_pressure_unit_conversion.py index 0ed320a18..1eb6f25ad 100644 --- a/kittycad/api/unit/get_pressure_unit_conversion.py +++ b/kittycad/api/unit/get_pressure_unit_conversion.py @@ -17,8 +17,11 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/unit/conversion/pressure/{input_unit}/{output_unit}".format( - client.base_url, input_unit=input_unit, output_unit=output_unit + client.base_url, + input_unit=input_unit, + output_unit=output_unit, ) # noqa: E501 + if value is not None: if "?" in url: url = url + "&value=" + str(value) diff --git a/kittycad/api/unit/get_temperature_unit_conversion.py b/kittycad/api/unit/get_temperature_unit_conversion.py index 821815dc8..8b22b53c7 100644 --- a/kittycad/api/unit/get_temperature_unit_conversion.py +++ b/kittycad/api/unit/get_temperature_unit_conversion.py @@ -17,8 +17,11 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/unit/conversion/temperature/{input_unit}/{output_unit}".format( - client.base_url, input_unit=input_unit, output_unit=output_unit + client.base_url, + input_unit=input_unit, + output_unit=output_unit, ) # noqa: E501 + if value is not None: if "?" in url: url = url + "&value=" + str(value) diff --git a/kittycad/api/unit/get_torque_unit_conversion.py b/kittycad/api/unit/get_torque_unit_conversion.py index 496d4c023..f0406e79e 100644 --- a/kittycad/api/unit/get_torque_unit_conversion.py +++ b/kittycad/api/unit/get_torque_unit_conversion.py @@ -17,8 +17,11 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/unit/conversion/torque/{input_unit}/{output_unit}".format( - client.base_url, input_unit=input_unit, output_unit=output_unit + client.base_url, + input_unit=input_unit, + output_unit=output_unit, ) # noqa: E501 + if value is not None: if "?" in url: url = url + "&value=" + str(value) diff --git a/kittycad/api/unit/get_volume_unit_conversion.py b/kittycad/api/unit/get_volume_unit_conversion.py index 0b6f5cf07..8711169a5 100644 --- a/kittycad/api/unit/get_volume_unit_conversion.py +++ b/kittycad/api/unit/get_volume_unit_conversion.py @@ -17,8 +17,11 @@ def _get_kwargs( client: Client, ) -> Dict[str, Any]: url = "{}/unit/conversion/volume/{input_unit}/{output_unit}".format( - client.base_url, input_unit=input_unit, output_unit=output_unit + client.base_url, + input_unit=input_unit, + output_unit=output_unit, ) # noqa: E501 + if value is not None: if "?" in url: url = url + "&value=" + str(value) diff --git a/kittycad/api/users/delete_user_self.py b/kittycad/api/users/delete_user_self.py index 3ed3a7b68..836b59333 100644 --- a/kittycad/api/users/delete_user_self.py +++ b/kittycad/api/users/delete_user_self.py @@ -11,7 +11,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user".format(client.base_url) # noqa: E501 + url = "{}/user".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/users/get_session_for_user.py b/kittycad/api/users/get_session_for_user.py index 4d0b53116..629a31ad7 100644 --- a/kittycad/api/users/get_session_for_user.py +++ b/kittycad/api/users/get_session_for_user.py @@ -13,7 +13,10 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/session/{token}".format(client.base_url, token=token) # noqa: E501 + url = "{}/user/session/{token}".format( + client.base_url, + token=token, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/users/get_user.py b/kittycad/api/users/get_user.py index 9b9b27f2b..0497b7252 100644 --- a/kittycad/api/users/get_user.py +++ b/kittycad/api/users/get_user.py @@ -13,7 +13,10 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/users/{id}".format(client.base_url, id=id) # noqa: E501 + url = "{}/users/{id}".format( + client.base_url, + id=id, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/users/get_user_extended.py b/kittycad/api/users/get_user_extended.py index f20f0b904..44ce69869 100644 --- a/kittycad/api/users/get_user_extended.py +++ b/kittycad/api/users/get_user_extended.py @@ -13,7 +13,10 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/users-extended/{id}".format(client.base_url, id=id) # noqa: E501 + url = "{}/users-extended/{id}".format( + client.base_url, + id=id, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/users/get_user_front_hash_self.py b/kittycad/api/users/get_user_front_hash_self.py index 11eff4edb..e2eda71e4 100644 --- a/kittycad/api/users/get_user_front_hash_self.py +++ b/kittycad/api/users/get_user_front_hash_self.py @@ -11,7 +11,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/front-hash".format(client.base_url) # noqa: E501 + url = "{}/user/front-hash".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/users/get_user_onboarding_self.py b/kittycad/api/users/get_user_onboarding_self.py index 219c56b5e..db56949b6 100644 --- a/kittycad/api/users/get_user_onboarding_self.py +++ b/kittycad/api/users/get_user_onboarding_self.py @@ -12,7 +12,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/onboarding".format(client.base_url) # noqa: E501 + url = "{}/user/onboarding".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/users/get_user_self.py b/kittycad/api/users/get_user_self.py index 35e76cf60..b7c58c9cf 100644 --- a/kittycad/api/users/get_user_self.py +++ b/kittycad/api/users/get_user_self.py @@ -12,7 +12,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user".format(client.base_url) # noqa: E501 + url = "{}/user".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/users/get_user_self_extended.py b/kittycad/api/users/get_user_self_extended.py index a36f17c9b..5d663247b 100644 --- a/kittycad/api/users/get_user_self_extended.py +++ b/kittycad/api/users/get_user_self_extended.py @@ -12,7 +12,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user/extended".format(client.base_url) # noqa: E501 + url = "{}/user/extended".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/api/users/list_users.py b/kittycad/api/users/list_users.py index a10a8a7e8..4da2aab96 100644 --- a/kittycad/api/users/list_users.py +++ b/kittycad/api/users/list_users.py @@ -16,17 +16,22 @@ def _get_kwargs( limit: Optional[int] = None, page_token: Optional[str] = None, ) -> Dict[str, Any]: - url = "{}/users".format(client.base_url) # noqa: E501 + url = "{}/users".format( + client.base_url, + ) # noqa: E501 + if limit is not None: if "?" in url: url = url + "&limit=" + str(limit) else: url = url + "?limit=" + str(limit) + if page_token is not None: if "?" in url: url = url + "&page_token=" + str(page_token) else: url = url + "?page_token=" + str(page_token) + if sort_by is not None: if "?" in url: url = url + "&sort_by=" + str(sort_by) diff --git a/kittycad/api/users/list_users_extended.py b/kittycad/api/users/list_users_extended.py index cbcfc383b..05043587e 100644 --- a/kittycad/api/users/list_users_extended.py +++ b/kittycad/api/users/list_users_extended.py @@ -16,17 +16,22 @@ def _get_kwargs( limit: Optional[int] = None, page_token: Optional[str] = None, ) -> Dict[str, Any]: - url = "{}/users-extended".format(client.base_url) # noqa: E501 + url = "{}/users-extended".format( + client.base_url, + ) # noqa: E501 + if limit is not None: if "?" in url: url = url + "&limit=" + str(limit) else: url = url + "?limit=" + str(limit) + if page_token is not None: if "?" in url: url = url + "&page_token=" + str(page_token) else: url = url + "?page_token=" + str(page_token) + if sort_by is not None: if "?" in url: url = url + "&sort_by=" + str(sort_by) diff --git a/kittycad/api/users/update_user_self.py b/kittycad/api/users/update_user_self.py index 9fcc991b4..8bf2ef538 100644 --- a/kittycad/api/users/update_user_self.py +++ b/kittycad/api/users/update_user_self.py @@ -14,7 +14,9 @@ def _get_kwargs( *, client: Client, ) -> Dict[str, Any]: - url = "{}/user".format(client.base_url) # noqa: E501 + url = "{}/user".format( + client.base_url, + ) # noqa: E501 headers: Dict[str, Any] = client.get_headers() cookies: Dict[str, Any] = client.get_cookies() diff --git a/kittycad/examples_test.py b/kittycad/examples_test.py index bf345892a..6bde0e28a 100644 --- a/kittycad/examples_test.py +++ b/kittycad/examples_test.py @@ -3817,14 +3817,17 @@ def test_create_executor_term(): # Create our client. client = ClientFromEnv() - create_executor_term.sync( + # Connect to the websocket. + websocket = create_executor_term.sync( client=client, ) - # OR if you need more info (e.g. status_code) - create_executor_term.sync_detailed( - client=client, - ) + # Send a message. + websocket.send("{}") + + # Get the messages. + for message in websocket: + print(message) # OR run async @@ -3834,14 +3837,17 @@ async def test_create_executor_term_async(): # Create our client. client = ClientFromEnv() - await create_executor_term.asyncio( + # Connect to the websocket. + websocket = await create_executor_term.asyncio( client=client, ) - # OR run async with more info - await create_executor_term.asyncio_detailed( - client=client, - ) + # Send a message. + await websocket.send("{}") + + # Get the messages. + async for message in websocket: + print(message) @pytest.mark.skip @@ -3849,14 +3855,17 @@ def test_modeling_commands_ws(): # Create our client. client = ClientFromEnv() - modeling_commands_ws.sync( + # Connect to the websocket. + websocket = modeling_commands_ws.sync( client=client, ) - # OR if you need more info (e.g. status_code) - modeling_commands_ws.sync_detailed( - client=client, - ) + # Send a message. + websocket.send("{}") + + # Get the messages. + for message in websocket: + print(message) # OR run async @@ -3866,11 +3875,14 @@ async def test_modeling_commands_ws_async(): # Create our client. client = ClientFromEnv() - await modeling_commands_ws.asyncio( + # Connect to the websocket. + websocket = await modeling_commands_ws.asyncio( client=client, ) - # OR run async with more info - await modeling_commands_ws.asyncio_detailed( - client=client, - ) + # Send a message. + await websocket.send("{}") + + # Get the messages. + async for message in websocket: + print(message) diff --git a/pyproject.toml b/pyproject.toml index 9c600d147..d609eac6b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "kittycad" -version = "0.4.4" +version = "0.4.5" description = "A client library for accessing KittyCAD" authors = [] @@ -16,11 +16,13 @@ attrs = ">=20.1.0,<24.0.0" httpx = ">=0.15.4,<0.25.0" python = "^3.8" python-dateutil = "^2.8.0" +websockets = "^11.0.3" [tool.poetry.dev-dependencies] autoclasstoc = "^1.6.0" black = "^23.7.0" isort = "^5.12.0" +jinja2 = "^3.1.2" jsonpatch = "^1.32" mypy = "^1.2.0" openapi-parser = "^0.2.6"