diff --git a/generate/functions-ws.py.jinja2 b/generate/functions-ws.py.jinja2 index 8933b65c4..84a65fd35 100644 --- a/generate/functions-ws.py.jinja2 +++ b/generate/functions-ws.py.jinja2 @@ -183,15 +183,15 @@ class WebSocket: def send(self, data:{% for arg in args %}{%if arg.name == "body" %}{{arg.type}}{% endif %}{% endfor %}): """Send data to the websocket.""" - self.ws.send(json.dumps(data.model_dump())) + self.ws.send(json.dumps(data.model_dump(mode="json"))) def send_binary(self, data:{% for arg in args %}{%if arg.name == "body" %}{{arg.type}}{% endif %}{% endfor %}): """Send data as bson to the websocket.""" - self.ws.send(bson.encode(data.model_dump())) + self.ws.send(bson.encode(data.model_dump(mode="json"))) # type: ignore def recv(self) -> {{response_type}}: """Receive data from the websocket.""" - message = self.ws.recv() + message = self.ws.recv(timeout=60) return {{response_type}}(**json.loads(message)) def close(self): diff --git a/generate/generate.py b/generate/generate.py index 94562638b..93b1c9743 100755 --- a/generate/generate.py +++ b/generate/generate.py @@ -2056,13 +2056,13 @@ def getTypeName(schema: dict) -> str: ): return "datetime.datetime" elif schema["format"] == "byte": - return "Base64Bytes" + return "Base64Data" elif schema["format"] == "uuid": return "UUID" elif schema["format"] == "url": return "AnyUrl" elif schema["format"] == "phone": - return "PhoneNumber" + return "str" return "str" elif schema["type"] == "number": return "float" diff --git a/generate/object.py.jinja2 b/generate/object.py.jinja2 index 1336b5950..9cbb4d80d 100644 --- a/generate/object.py.jinja2 +++ b/generate/object.py.jinja2 @@ -4,6 +4,7 @@ from uuid import UUID from pydantic import BaseModel, Base64Bytes, AnyUrl from pydantic_extra_types.phone_numbers import PhoneNumber +from .base64data import Base64Data {% for import in imports %} {{ import }} diff --git a/generate/run.sh b/generate/run.sh index 0b819dcdf..e78243354 100755 --- a/generate/run.sh +++ b/generate/run.sh @@ -5,11 +5,14 @@ set -o pipefail # Fix for ci. git config --global --add safe.directory /home/user/src +git add kittycad/models/base64data.py git add kittycad/models/empty.py + # Cleanup old stuff. rm -rf kittycad/models rm -rf kittycad/api +git checkout kittycad/models/base64data.py git checkout kittycad/models/empty.py # Generate new. diff --git a/generate/union-type.py.jinja2 b/generate/union-type.py.jinja2 index e64a984c9..fd5a54ce9 100644 --- a/generate/union-type.py.jinja2 +++ b/generate/union-type.py.jinja2 @@ -1,61 +1,10 @@ from typing import Dict, Any, Union, Type, TypeVar -from typing_extensions import Self -import attr -from ..types import UNSET, Unset +from pydantic import RootModel -from pydantic import GetCoreSchemaHandler -from pydantic_core import CoreSchema, core_schema -GY = TypeVar("GY", bound="{{name}}") - -@attr.s(auto_attribs=True) -class {{name}}: - {% if description %} - """{{description}}""" - {% endif %} - type: Union[ +{{name}} = RootModel[Union[ {% for type in types %} {{type.name}}, {% endfor %} - ] + ]] - def __init__(self, - type: Union[ - {% for type in types %} - {{type.name}}, - {% endfor %} - ]): - self.type = type - - def model_dump(self) -> Dict[str, Any]: - {% for type in types %}{% if loop.first %} - if isinstance(self.type, {{type.name}}): - {{type.var0}} : {{type.name}} = self.type - return {{type.var0}}.model_dump() - {% else %}elif isinstance(self.type, {{type.name}}): - {{type.var0}} : {{type.name}} = self.type - return {{type.var0}}.model_dump() - {% endif %}{% endfor %} - raise Exception("Unknown type") - - @classmethod - def from_dict(cls: Type[GY], d: Dict[str, Any]) -> GY: - {% for type in types %}{% if loop.first %} - if d.get("{{type.check}}") == {{type.value}}: - {{type.var1}} : {{type.name}} = {{type.name}}(**d) - return cls(type={{type.var1}}) - {% else %}elif d.get("{{type.check}}") == {{type.value}}: - {{type.var1}} : {{type.name}} = {{type.name}}(**d) - return cls(type={{type.var1}}) - {% endif %}{% endfor %} - raise Exception("Unknown type") - - @classmethod - def __get_pydantic_core_schema__( - cls, source_type: Any, handler: GetCoreSchemaHandler - ) -> CoreSchema: - return core_schema.no_info_after_validator_function(cls, handler(Union[ - {% for type in types %} - {{type.name}}, - {% endfor %} - ])) diff --git a/kittycad.py.patch.json b/kittycad.py.patch.json index 2a38819b7..6db786f0d 100644 --- a/kittycad.py.patch.json +++ b/kittycad.py.patch.json @@ -1,74 +1,82 @@ [ { "op": "add", - "path": "/paths/~1user~1payment/post/x-python", + "path": "/info/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "client": "# Create a client with your token.\nfrom kittycad.client 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.client 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/~1user~1payment/get/x-python", + "path": "/paths/~1apps~1github~1consent/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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/~1user~1payment/delete/x-python", + "path": "/paths/~1ws~1modeling~1commands/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.modeling import modeling_commands_ws\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, WebSocketRequest, WebSocketResponse\nfrom kittycad.models.rtc_sdp_type import RtcSdpType\nfrom kittycad.models.rtc_session_description import RtcSessionDescription\nfrom kittycad.models.web_socket_request import sdp_offer\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 with modeling_commands_ws.WebSocket(\n client=client,\n fps=10,\n unlocked_framerate=False,\n video_res_height=10,\n video_res_width=10,\n webrtc=False,\n ) as websocket:\n # Send a message.\n websocket.send(\n WebSocketRequest(\n sdp_offer(\n offer=RtcSessionDescription(\n sdp=\"\",\n type=RtcSdpType.UNSPECIFIED,\n ),\n )\n )\n )\n\n # Get a message.\n message = websocket.recv()\n print(message)\n", + "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.modeling.modeling_commands_ws.html" } }, { "op": "add", - "path": "/paths/~1user~1payment/put/x-python", + "path": "/paths/~1unit~1conversion~1angle~1{input_unit}~1{output_unit}/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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~1api-tokens~1{token}/get/x-python", + "path": "/paths/~1ai-prompts/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.ai import list_ai_prompts\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import AiPromptResultsPage, Error\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_list_ai_prompts():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[AiPromptResultsPage, Error]] = list_ai_prompts.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: AiPromptResultsPage = result\n print(body)\n", + "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.ai.list_ai_prompts.html" } }, { "op": "add", - "path": "/paths/~1user~1api-tokens~1{token}/delete/x-python", + "path": "/paths/~1ai-prompts~1{id}/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.ai import get_ai_prompt\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import AiPrompt, Error\nfrom kittycad.types import Response\n\n\ndef example_get_ai_prompt():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[AiPrompt, Error]] = get_ai_prompt.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: AiPrompt = result\n print(body)\n", + "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.ai.get_ai_prompt.html" } }, { "op": "add", - "path": "/paths/~1user~1session~1{token}/get/x-python", + "path": "/paths/~1ai~1text-to-cad~1{output_format}/post/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.ai import create_text_to_cad\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, TextToCad\nfrom kittycad.models.file_export_format import FileExportFormat\nfrom kittycad.models.text_to_cad_create_body import TextToCadCreateBody\nfrom kittycad.types import Response\n\n\ndef example_create_text_to_cad():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[TextToCad, Error]] = create_text_to_cad.sync(\n client=client,\n output_format=FileExportFormat.FBX,\n body=TextToCadCreateBody(\n prompt=\"\",\n ),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: TextToCad = result\n print(body)\n", + "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.ai.create_text_to_cad.html" } }, { "op": "add", - "path": "/paths/~1ping/get/x-python", + "path": "/paths/~1internal~1discord~1api-token~1{discord_id}/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.meta import internal_get_api_token_for_discord_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiToken, Error\nfrom kittycad.types import Response\n\n\ndef example_internal_get_api_token_for_discord_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[ApiToken, Error]\n ] = internal_get_api_token_for_discord_user.sync(\n client=client,\n discord_id=\"\",\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.meta.internal_get_api_token_for_discord_user.html" } }, { "op": "add", - "path": "/paths/~1.well-known~1ai-plugin.json/get/x-python", + "path": "/paths/~1unit~1conversion~1mass~1{input_unit}~1{output_unit}/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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/~1user/put/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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" } }, { @@ -89,66 +97,10 @@ }, { "op": "add", - "path": "/paths/~1user/put/x-python", + "path": "/paths/~1user~1api-tokens/post/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~1async~1operations~1{id}/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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 TextToCad,\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 TextToCad,\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 TextToCad,\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~1api-calls/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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~1intent/post/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~1auth~1email~1callback/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~1user~1payment~1methods/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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~1area~1{input_unit}~1{output_unit}/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~1unit~1conversion~1angle~1{input_unit}~1{output_unit}/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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" } }, { @@ -161,10 +113,74 @@ }, { "op": "add", - "path": "/paths/~1user~1api-tokens/post/x-python", + "path": "/paths/~1user~1api-tokens~1{token}/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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, Tuple, 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~1payment/delete/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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, Tuple, 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/~1user~1payment/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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, Tuple, 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/~1.well-known~1ai-plugin.json/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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/~1file~1center-of-mass/post/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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.FBX,\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/~1user~1payment~1methods/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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" } }, { @@ -175,14 +191,6 @@ "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.file.create_file_mass.html" } }, - { - "op": "add", - "path": "/paths/~1file~1volume/post/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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.FBX,\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/~1user~1api-calls~1{id}/get/x-python", @@ -193,58 +201,18 @@ }, { "op": "add", - "path": "/paths/~1api-calls/get/x-python", + "path": "/paths/~1user~1payment~1intent/post/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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/~1file~1execute~1{lang}/post/x-python", + "path": "/paths/~1user~1api-calls/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~1ws~1modeling~1commands/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.modeling import modeling_commands_ws\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, WebSocketRequest, WebSocketResponse\nfrom kittycad.models.rtc_sdp_type import RtcSdpType\nfrom kittycad.models.rtc_session_description import RtcSessionDescription\nfrom kittycad.models.web_socket_request import sdp_offer\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 with modeling_commands_ws.WebSocket(\n client=client,\n fps=10,\n unlocked_framerate=False,\n video_res_height=10,\n video_res_width=10,\n webrtc=False,\n ) as websocket:\n # Send a message.\n websocket.send(\n WebSocketRequest(\n sdp_offer(\n offer=RtcSessionDescription(\n sdp=\"\",\n type=RtcSdpType.UNSPECIFIED,\n ),\n )\n )\n )\n\n # Get a message.\n message = websocket.recv()\n print(message)\n", - "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.modeling.modeling_commands_ws.html" - } - }, - { - "op": "add", - "path": "/paths/~1ai~1text-to-cad~1{output_format}/post/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.ai import create_text_to_cad\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, TextToCad\nfrom kittycad.models.file_export_format import FileExportFormat\nfrom kittycad.models.text_to_cad_create_body import TextToCadCreateBody\nfrom kittycad.types import Response\n\n\ndef example_create_text_to_cad():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[TextToCad, Error]] = create_text_to_cad.sync(\n client=client,\n output_format=FileExportFormat.FBX,\n body=TextToCadCreateBody(\n prompt=\"\",\n ),\n )\n\n if isinstance(result, Error) or result == None:\n print(result)\n raise Exception(\"Error in response\")\n\n body: TextToCad = result\n print(body)\n", - "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.ai.create_text_to_cad.html" - } - }, - { - "op": "add", - "path": "/paths/~1apps~1github~1consent/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~1auth~1email/post/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~1api-call-metrics/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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" } }, { @@ -257,34 +225,26 @@ }, { "op": "add", - "path": "/paths/~1unit~1conversion~1energy~1{input_unit}~1{output_unit}/get/x-python", + "path": "/paths/~1_meta~1info/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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/~1apps~1github~1webhook/post/x-python", + "path": "/paths/~1file~1density/post/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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.FBX,\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/~1user~1payment~1methods~1{id}/delete/x-python", + "path": "/paths/~1auth~1email~1callback/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~1unit~1conversion~1mass~1{input_unit}~1{output_unit}/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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" } }, { @@ -297,34 +257,34 @@ }, { "op": "add", - "path": "/paths/~1_meta~1info/get/x-python", + "path": "/paths/~1unit~1conversion~1length~1{input_unit}~1{output_unit}/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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/~1ai-prompts/get/x-python", + "path": "/paths/~1apps~1github~1webhook/post/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.ai import list_ai_prompts\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import AiPromptResultsPage, Error\nfrom kittycad.models.created_at_sort_mode import CreatedAtSortMode\nfrom kittycad.types import Response\n\n\ndef example_list_ai_prompts():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[AiPromptResultsPage, Error]] = list_ai_prompts.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: AiPromptResultsPage = result\n print(body)\n", - "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.ai.list_ai_prompts.html" + "example": "from typing import Any, List, Optional, Tuple, 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/~1user~1onboarding/get/x-python", + "path": "/paths/~1file~1execute~1{lang}/post/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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/~1internal~1discord~1api-token~1{discord_id}/get/x-python", + "path": "/paths/~1async~1operations~1{id}/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.meta import internal_get_api_token_for_discord_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import ApiToken, Error\nfrom kittycad.types import Response\n\n\ndef example_internal_get_api_token_for_discord_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[ApiToken, Error]\n ] = internal_get_api_token_for_discord_user.sync(\n client=client,\n discord_id=\"\",\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.meta.internal_get_api_token_for_discord_user.html" + "example": "from typing import Any, List, Optional, Tuple, 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 TextToCad,\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 TextToCad,\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 TextToCad,\n ] = result\n print(body)\n", + "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.api_calls.get_async_operation.html" } }, { @@ -335,14 +295,6 @@ "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.ai.list_text_to_cad_models_for_user.html" } }, - { - "op": "add", - "path": "/paths/~1file~1conversion~1{src_format}~1{output_format}/post/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.file import create_file_conversion\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():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[FileConversion, Error]] = create_file_conversion.sync(\n client=client,\n output_format=FileExportFormat.FBX,\n src_format=FileImportFormat.FBX,\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.html" - } - }, { "op": "add", "path": "/paths/~1users/get/x-python", @@ -353,66 +305,66 @@ }, { "op": "add", - "path": "/paths/~1user~1text-to-cad~1{id}/get/x-python", + "path": "/paths/~1file~1conversion~1{src_format}~1{output_format}/post/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.ai import get_text_to_cad_model_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, TextToCad\nfrom kittycad.types import Response\n\n\ndef example_get_text_to_cad_model_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[TextToCad, Error]\n ] = get_text_to_cad_model_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: TextToCad = result\n print(body)\n", - "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.ai.get_text_to_cad_model_for_user.html" + "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.file import create_file_conversion\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():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[FileConversion, Error]] = create_file_conversion.sync(\n client=client,\n output_format=FileExportFormat.FBX,\n src_format=FileImportFormat.FBX,\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.html" } }, { "op": "add", - "path": "/paths/~1user~1text-to-cad~1{id}/post/x-python", + "path": "/paths/~1user~1payment~1methods~1{id}/delete/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.ai import create_text_to_cad_model_feedback\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.models.ai_feedback import AiFeedback\nfrom kittycad.types import Response\n\n\ndef example_create_text_to_cad_model_feedback():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = create_text_to_cad_model_feedback.sync(\n client=client,\n id=\"\",\n feedback=AiFeedback.THUMBS_UP,\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.ai.create_text_to_cad_model_feedback.html" + "example": "from typing import Any, List, Optional, Tuple, 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", + "path": "/paths/~1unit~1conversion~1volume~1{input_unit}~1{output_unit}/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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~1callback/get/x-python", + "path": "/paths/~1user~1payment~1balance/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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/~1unit~1conversion~1length~1{input_unit}~1{output_unit}/get/x-python", + "path": "/paths/~1async~1operations/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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~1power~1{input_unit}~1{output_unit}/get/x-python", + "path": "/paths/~1unit~1conversion~1current~1{input_unit}~1{output_unit}/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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/~1users~1{id}~1api-calls/get/x-python", + "path": "/paths/~1auth~1email/post/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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/~1users-extended~1{id}/get/x-python", + "path": "/paths/~1ping/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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" } }, { @@ -425,10 +377,114 @@ }, { "op": "add", - "path": "/paths/~1unit~1conversion~1volume~1{input_unit}~1{output_unit}/get/x-python", + "path": "/paths/~1user~1extended/get/x-python", "value": { - "example": "from typing import Any, List, Optional, Tuple, 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" + "example": "from typing import Any, List, Optional, Tuple, 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/~1user~1payment~1tax/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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~1text-to-cad~1{id}/post/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.ai import create_text_to_cad_model_feedback\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error\nfrom kittycad.models.ai_feedback import AiFeedback\nfrom kittycad.types import Response\n\n\ndef example_create_text_to_cad_model_feedback():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Error] = create_text_to_cad_model_feedback.sync(\n client=client,\n id=\"\",\n feedback=AiFeedback.THUMBS_UP,\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.ai.create_text_to_cad_model_feedback.html" + } + }, + { + "op": "add", + "path": "/paths/~1user~1text-to-cad~1{id}/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.ai import get_text_to_cad_model_for_user\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import Error, TextToCad\nfrom kittycad.types import Response\n\n\ndef example_get_text_to_cad_model_for_user():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[\n Union[TextToCad, Error]\n ] = get_text_to_cad_model_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: TextToCad = result\n print(body)\n", + "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.ai.get_text_to_cad_model_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 # Connect to the websocket.\n with create_executor_term.sync(\n client=client,\n ) as websocket:\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/~1users-extended~1{id}/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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/~1users~1{id}/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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/~1file~1volume/post/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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.FBX,\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/~1api-calls~1{id}/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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~1force~1{input_unit}~1{output_unit}/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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/~1logout/post/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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/~1user~1session~1{token}/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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/~1unit~1conversion~1energy~1{input_unit}~1{output_unit}/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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/~1users~1{id}~1api-calls/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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" } }, { @@ -447,46 +503,6 @@ "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.payments.list_invoices_for_user.html" } }, - { - "op": "add", - "path": "/paths/~1file~1center-of-mass/post/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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.FBX,\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~1pressure~1{input_unit}~1{output_unit}/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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~1extended/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~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 with create_executor_term.sync(\n client=client,\n ) as websocket:\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/~1ai-prompts~1{id}/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, Union\n\nfrom kittycad.api.ai import get_ai_prompt\nfrom kittycad.client import ClientFromEnv\nfrom kittycad.models import AiPrompt, Error\nfrom kittycad.types import Response\n\n\ndef example_get_ai_prompt():\n # Create our client.\n client = ClientFromEnv()\n\n result: Optional[Union[AiPrompt, Error]] = get_ai_prompt.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: AiPrompt = result\n print(body)\n", - "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.ai.get_ai_prompt.html" - } - }, { "op": "add", "path": "/paths/~1file~1surface-area/post/x-python", @@ -495,22 +511,6 @@ "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.file.create_file_surface_area.html" } }, - { - "op": "add", - "path": "/paths/~1logout/post/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~1async~1operations/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~1users-extended/get/x-python", @@ -519,54 +519,6 @@ "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.users.list_users_extended.html" } }, - { - "op": "add", - "path": "/paths/~1users~1{id}/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~1unit~1conversion~1force~1{input_unit}~1{output_unit}/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~1file~1density/post/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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.FBX,\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/~1user~1payment~1tax/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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~1balance/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~1unit~1conversion~1current~1{input_unit}~1{output_unit}/get/x-python", - "value": { - "example": "from typing import Any, List, Optional, Tuple, 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/~1unit~1conversion~1frequency~1{input_unit}~1{output_unit}/get/x-python", @@ -575,6 +527,38 @@ "libDocsLink": "https://python.api.docs.kittycad.io/_autosummary/kittycad.api.unit.get_frequency_unit_conversion.html" } }, + { + "op": "add", + "path": "/paths/~1api-calls/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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~1onboarding/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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/~1apps~1github~1callback/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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~1pressure~1{input_unit}~1{output_unit}/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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/~1openai~1openapi.json/get/x-python", @@ -585,10 +569,26 @@ }, { "op": "add", - "path": "/info/x-python", + "path": "/paths/~1unit~1conversion~1area~1{input_unit}~1{output_unit}/get/x-python", "value": { - "client": "# Create a client with your token.\nfrom kittycad.client 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.client 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" + "example": "from typing import Any, List, Optional, Tuple, 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/~1unit~1conversion~1power~1{input_unit}~1{output_unit}/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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/~1api-call-metrics/get/x-python", + "value": { + "example": "from typing import Any, List, Optional, Tuple, 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" } } ] \ No newline at end of file diff --git a/kittycad/api/modeling/modeling_commands_ws.py b/kittycad/api/modeling/modeling_commands_ws.py index d35cbafb5..c9144b4dd 100644 --- a/kittycad/api/modeling/modeling_commands_ws.py +++ b/kittycad/api/modeling/modeling_commands_ws.py @@ -157,15 +157,15 @@ class WebSocket: def send(self, data: WebSocketRequest): """Send data to the websocket.""" - self.ws.send(json.dumps(data.model_dump())) + self.ws.send(json.dumps(data.model_dump(mode="json"))) def send_binary(self, data: WebSocketRequest): """Send data as bson to the websocket.""" - self.ws.send(bson.encode(data.model_dump())) + self.ws.send(bson.encode(data.model_dump(mode="json"))) # type: ignore def recv(self) -> WebSocketResponse: """Receive data from the websocket.""" - message = self.ws.recv() + message = self.ws.recv(timeout=60) return WebSocketResponse(**json.loads(message)) def close(self): diff --git a/kittycad/client_test.py b/kittycad/client_test.py index 65576a7cd..82fbb5b2e 100644 --- a/kittycad/client_test.py +++ b/kittycad/client_test.py @@ -151,7 +151,7 @@ def test_file_convert_stl(): # Make sure the bytes are not empty. for key, value in fc.outputs.items(): - assert len(value) > 0 + assert len(value.get_decoded()) > 0 @pytest.mark.asyncio @@ -190,7 +190,7 @@ async def test_file_convert_stl_async(): # Make sure the bytes are not empty. for key, value in fc.outputs.items(): - assert len(value) > 0 + assert len(value.get_decoded()) > 0 @pytest.mark.asyncio @@ -229,7 +229,7 @@ async def test_file_convert_obj_async(): # Make sure the bytes are not empty. for key, value in fc.outputs.items(): - assert len(value) > 0 + assert len(value.get_decoded()) > 0 def test_file_mass(): diff --git a/kittycad/models/api_call_query_group.py b/kittycad/models/api_call_query_group.py index 15d3e3cf9..558fd6b3d 100644 --- a/kittycad/models/api_call_query_group.py +++ b/kittycad/models/api_call_query_group.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class ApiCallQueryGroup(BaseModel): """A response for a query on the API call table that is grouped by something.""" diff --git a/kittycad/models/app_client_info.py b/kittycad/models/app_client_info.py index 685dfb20d..f2b5d160f 100644 --- a/kittycad/models/app_client_info.py +++ b/kittycad/models/app_client_info.py @@ -3,6 +3,7 @@ from typing import Optional from pydantic import BaseModel + class AppClientInfo(BaseModel): """Information about a third party app client.""" diff --git a/kittycad/models/async_api_call_output.py b/kittycad/models/async_api_call_output.py index 71c3e70fb..c353353a7 100644 --- a/kittycad/models/async_api_call_output.py +++ b/kittycad/models/async_api_call_output.py @@ -1,9 +1,7 @@ import datetime -from typing import Any, Dict, Optional, Type, TypeVar, Union +from typing import Dict, Optional, Union -import attr -from pydantic import Base64Bytes, BaseModel, GetCoreSchemaHandler -from pydantic_core import CoreSchema, core_schema +from pydantic import BaseModel, RootModel from ..models.ai_feedback import AiFeedback from ..models.api_call_status import ApiCallStatus @@ -18,6 +16,7 @@ from ..models.unit_length import UnitLength from ..models.unit_mass import UnitMass from ..models.unit_volume import UnitVolume from ..models.uuid import Uuid +from .base64data import Base64Data class file_conversion(BaseModel): @@ -35,7 +34,7 @@ class file_conversion(BaseModel): output_format_options: Optional[OutputFormat] = None - outputs: Optional[Dict[str, Base64Bytes]] = None + outputs: Optional[Dict[str, Base64Data]] = None src_format: FileImportFormat @@ -217,7 +216,7 @@ class text_to_cad(BaseModel): output_format: FileExportFormat - outputs: Optional[Dict[str, Base64Bytes]] = None + outputs: Optional[Dict[str, Base64Data]] = None prompt: str @@ -232,15 +231,8 @@ class text_to_cad(BaseModel): user_id: Uuid -GY = TypeVar("GY", bound="AsyncApiCallOutput") - - -@attr.s(auto_attribs=True) -class AsyncApiCallOutput: - - """The output from the async API call.""" - - type: Union[ +AsyncApiCallOutput = RootModel[ + Union[ file_conversion, file_center_of_mass, file_mass, @@ -249,87 +241,4 @@ class AsyncApiCallOutput: file_surface_area, text_to_cad, ] - - def __init__( - self, - type: Union[ - file_conversion, - file_center_of_mass, - file_mass, - file_volume, - file_density, - file_surface_area, - text_to_cad, - ], - ): - self.type = type - - def model_dump(self) -> Dict[str, Any]: - if isinstance(self.type, file_conversion): - SB: file_conversion = self.type - return SB.model_dump() - elif isinstance(self.type, file_center_of_mass): - SA: file_center_of_mass = self.type - return SA.model_dump() - elif isinstance(self.type, file_mass): - PI: file_mass = self.type - return PI.model_dump() - elif isinstance(self.type, file_volume): - FB: file_volume = self.type - return FB.model_dump() - elif isinstance(self.type, file_density): - KC: file_density = self.type - return KC.model_dump() - elif isinstance(self.type, file_surface_area): - LB: file_surface_area = self.type - return LB.model_dump() - elif isinstance(self.type, text_to_cad): - TL: text_to_cad = self.type - return TL.model_dump() - - raise Exception("Unknown type") - - @classmethod - def from_dict(cls: Type[GY], d: Dict[str, Any]) -> GY: - if d.get("type") == "file_conversion": - NP: file_conversion = file_conversion(**d) - return cls(type=NP) - elif d.get("type") == "file_center_of_mass": - GO: file_center_of_mass = file_center_of_mass(**d) - return cls(type=GO) - elif d.get("type") == "file_mass": - UZ: file_mass = file_mass(**d) - return cls(type=UZ) - elif d.get("type") == "file_volume": - QP: file_volume = file_volume(**d) - return cls(type=QP) - elif d.get("type") == "file_density": - HX: file_density = file_density(**d) - return cls(type=HX) - elif d.get("type") == "file_surface_area": - NE: file_surface_area = file_surface_area(**d) - return cls(type=NE) - elif d.get("type") == "text_to_cad": - MN: text_to_cad = text_to_cad(**d) - return cls(type=MN) - - raise Exception("Unknown type") - - @classmethod - def __get_pydantic_core_schema__( - cls, source_type: Any, handler: GetCoreSchemaHandler - ) -> CoreSchema: - return core_schema.no_info_after_validator_function( - cls, - handler( - Union[ - file_conversion, - file_center_of_mass, - file_mass, - file_volume, - file_density, - file_surface_area, - text_to_cad, - ] - ), - ) +] diff --git a/kittycad/models/base64data.py b/kittycad/models/base64data.py new file mode 100644 index 000000000..0c266701a --- /dev/null +++ b/kittycad/models/base64data.py @@ -0,0 +1,45 @@ +import base64 +import binascii +from typing import Any + +from pydantic import GetCoreSchemaHandler +from pydantic_core import CoreSchema, core_schema + + +class Base64Data: + def __init__(self, data: bytes): + """ + Initializes the object. + + If the provided data is already in base64 encoded format, it will store it. + If the data is a regular byte string, it will encode and then store it. + """ + if self.is_base64(data): + self._data = str(data, "utf-8") + else: + encoded = base64.b64encode(data) + self._data = str(encoded, "utf-8") + + @staticmethod + def is_base64(data: bytes) -> bool: + """Checks if given data is base64 encoded.""" + try: + str_data = str(data, "utf-8") + _ = base64.urlsafe_b64decode(str_data.strip("=") + "===") + return True + except binascii.Error: + return False + + def get_encoded(self) -> str: + """Returns the stored base64 encoded data.""" + return self._data + + def get_decoded(self) -> bytes: + """Returns the decoded byte string.""" + return base64.urlsafe_b64decode(self._data.strip("=") + "===") + + @classmethod + def __get_pydantic_core_schema__( + cls, source_type: Any, handler: GetCoreSchemaHandler + ) -> CoreSchema: + return core_schema.no_info_after_validator_function(cls, handler(bytes)) diff --git a/kittycad/models/billing_info.py b/kittycad/models/billing_info.py index 63a5e62e8..d01579fb4 100644 --- a/kittycad/models/billing_info.py +++ b/kittycad/models/billing_info.py @@ -1,7 +1,6 @@ from typing import Optional from pydantic import BaseModel -from pydantic_extra_types.phone_number import PhoneNumber from ..models.new_address import NewAddress @@ -13,4 +12,4 @@ class BillingInfo(BaseModel): name: Optional[str] = None - phone: Optional[PhoneNumber] = None + phone: Optional[str] = None diff --git a/kittycad/models/cache_metadata.py b/kittycad/models/cache_metadata.py index 1a9ad9df5..e6b55c7ba 100644 --- a/kittycad/models/cache_metadata.py +++ b/kittycad/models/cache_metadata.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class CacheMetadata(BaseModel): """Metadata about our cache. diff --git a/kittycad/models/client_metrics.py b/kittycad/models/client_metrics.py index 3ce9b3a77..ae9d22824 100644 --- a/kittycad/models/client_metrics.py +++ b/kittycad/models/client_metrics.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class ClientMetrics(BaseModel): """ClientMetrics contains information regarding the state of the peer.""" diff --git a/kittycad/models/cluster.py b/kittycad/models/cluster.py index dc2167b7d..883c183af 100644 --- a/kittycad/models/cluster.py +++ b/kittycad/models/cluster.py @@ -3,6 +3,7 @@ from typing import List, Optional from pydantic import BaseModel + class Cluster(BaseModel): """Cluster information.""" diff --git a/kittycad/models/color.py b/kittycad/models/color.py index 17426888d..83ff105e1 100644 --- a/kittycad/models/color.py +++ b/kittycad/models/color.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class Color(BaseModel): """An RGBA color""" diff --git a/kittycad/models/coupon.py b/kittycad/models/coupon.py index b660b1e5a..f3d60169e 100644 --- a/kittycad/models/coupon.py +++ b/kittycad/models/coupon.py @@ -3,6 +3,7 @@ from typing import Optional from pydantic import BaseModel + class Coupon(BaseModel): """The resource representing a Coupon.""" diff --git a/kittycad/models/customer.py b/kittycad/models/customer.py index 43bd67419..56eea0e3c 100644 --- a/kittycad/models/customer.py +++ b/kittycad/models/customer.py @@ -2,7 +2,6 @@ import datetime from typing import Dict, Optional from pydantic import BaseModel -from pydantic_extra_types.phone_number import PhoneNumber from ..models.currency import Currency from ..models.new_address import NewAddress @@ -29,4 +28,4 @@ class Customer(BaseModel): name: Optional[str] = None - phone: Optional[PhoneNumber] = None + phone: Optional[str] = None diff --git a/kittycad/models/device_auth_request_form.py b/kittycad/models/device_auth_request_form.py index a768e46b0..c38c560d0 100644 --- a/kittycad/models/device_auth_request_form.py +++ b/kittycad/models/device_auth_request_form.py @@ -3,6 +3,7 @@ from uuid import UUID from pydantic import BaseModel + class DeviceAuthRequestForm(BaseModel): """The request parameters for the OAuth 2.0 Device Authorization Grant flow.""" diff --git a/kittycad/models/device_auth_verify_params.py b/kittycad/models/device_auth_verify_params.py index 738bfef1f..9d7ed5759 100644 --- a/kittycad/models/device_auth_verify_params.py +++ b/kittycad/models/device_auth_verify_params.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class DeviceAuthVerifyParams(BaseModel): """The request parameters to verify the `user_code` for the OAuth 2.0 Device Authorization Grant.""" diff --git a/kittycad/models/email_authentication_form.py b/kittycad/models/email_authentication_form.py index d52004b0f..2635d10e6 100644 --- a/kittycad/models/email_authentication_form.py +++ b/kittycad/models/email_authentication_form.py @@ -3,6 +3,7 @@ from typing import Optional from pydantic import BaseModel + class EmailAuthenticationForm(BaseModel): """The body of the form for email authentication.""" diff --git a/kittycad/models/entity_get_all_child_uuids.py b/kittycad/models/entity_get_all_child_uuids.py index 037d58afd..e99bafc18 100644 --- a/kittycad/models/entity_get_all_child_uuids.py +++ b/kittycad/models/entity_get_all_child_uuids.py @@ -4,6 +4,7 @@ from uuid import UUID from pydantic import BaseModel + class EntityGetAllChildUuids(BaseModel): """The response from the `EntityGetAllChildUuids` command.""" diff --git a/kittycad/models/entity_get_child_uuid.py b/kittycad/models/entity_get_child_uuid.py index 82c92f975..82e4c5b4d 100644 --- a/kittycad/models/entity_get_child_uuid.py +++ b/kittycad/models/entity_get_child_uuid.py @@ -3,6 +3,7 @@ from uuid import UUID from pydantic import BaseModel + class EntityGetChildUuid(BaseModel): """The response from the `EntityGetChildUuid` command.""" diff --git a/kittycad/models/entity_get_num_children.py b/kittycad/models/entity_get_num_children.py index 2d7a9e3b9..a0af9e8e7 100644 --- a/kittycad/models/entity_get_num_children.py +++ b/kittycad/models/entity_get_num_children.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class EntityGetNumChildren(BaseModel): """The response from the `EntityGetNumChildren` command.""" diff --git a/kittycad/models/entity_get_parent_id.py b/kittycad/models/entity_get_parent_id.py index 2d02be126..5a97729a8 100644 --- a/kittycad/models/entity_get_parent_id.py +++ b/kittycad/models/entity_get_parent_id.py @@ -3,6 +3,7 @@ from uuid import UUID from pydantic import BaseModel + class EntityGetParentId(BaseModel): """The response from the `EntityGetParentId` command.""" diff --git a/kittycad/models/error.py b/kittycad/models/error.py index ee365a29c..c03411638 100644 --- a/kittycad/models/error.py +++ b/kittycad/models/error.py @@ -3,6 +3,7 @@ from typing import Optional from pydantic import BaseModel + class Error(BaseModel): """Error information from a response.""" diff --git a/kittycad/models/export_file.py b/kittycad/models/export_file.py index c38f594f9..3104c9b29 100644 --- a/kittycad/models/export_file.py +++ b/kittycad/models/export_file.py @@ -1,10 +1,12 @@ -from pydantic import Base64Bytes, BaseModel +from pydantic import BaseModel + +from .base64data import Base64Data class ExportFile(BaseModel): """A file to be exported to the client.""" - contents: Base64Bytes + contents: Base64Data name: str diff --git a/kittycad/models/extended_user.py b/kittycad/models/extended_user.py index 9c9e6080e..f9129b9da 100644 --- a/kittycad/models/extended_user.py +++ b/kittycad/models/extended_user.py @@ -2,7 +2,6 @@ import datetime from typing import Optional from pydantic import BaseModel -from pydantic_extra_types.phone_number import PhoneNumber from ..models.uuid import Uuid @@ -39,7 +38,7 @@ class ExtendedUser(BaseModel): name: Optional[str] = None - phone: Optional[PhoneNumber] = None + phone: Optional[str] = None stripe_id: Optional[str] = None diff --git a/kittycad/models/file_conversion.py b/kittycad/models/file_conversion.py index 74e86b119..e7288ad13 100644 --- a/kittycad/models/file_conversion.py +++ b/kittycad/models/file_conversion.py @@ -1,7 +1,7 @@ import datetime from typing import Dict, Optional -from pydantic import Base64Bytes, BaseModel +from pydantic import BaseModel from ..models.api_call_status import ApiCallStatus from ..models.file_export_format import FileExportFormat @@ -9,6 +9,7 @@ from ..models.file_import_format import FileImportFormat from ..models.input_format import InputFormat from ..models.output_format import OutputFormat from ..models.uuid import Uuid +from .base64data import Base64Data class FileConversion(BaseModel): @@ -26,7 +27,7 @@ class FileConversion(BaseModel): output_format_options: Optional[OutputFormat] = None - outputs: Optional[Dict[str, Base64Bytes]] = None + outputs: Optional[Dict[str, Base64Data]] = None src_format: FileImportFormat diff --git a/kittycad/models/file_system_metadata.py b/kittycad/models/file_system_metadata.py index 7771cb443..986453bc9 100644 --- a/kittycad/models/file_system_metadata.py +++ b/kittycad/models/file_system_metadata.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class FileSystemMetadata(BaseModel): """Metadata about our file system. diff --git a/kittycad/models/gateway.py b/kittycad/models/gateway.py index b15860f7d..74fea63ba 100644 --- a/kittycad/models/gateway.py +++ b/kittycad/models/gateway.py @@ -3,6 +3,7 @@ from typing import Optional from pydantic import BaseModel + class Gateway(BaseModel): """Gateway information.""" diff --git a/kittycad/models/highlight_set_entity.py b/kittycad/models/highlight_set_entity.py index 9e2e4f6cb..9708572b9 100644 --- a/kittycad/models/highlight_set_entity.py +++ b/kittycad/models/highlight_set_entity.py @@ -4,6 +4,7 @@ from uuid import UUID from pydantic import BaseModel + class HighlightSetEntity(BaseModel): """The response from the `HighlightSetEntity` command.""" diff --git a/kittycad/models/ice_server.py b/kittycad/models/ice_server.py index c3788a837..58f8e1edd 100644 --- a/kittycad/models/ice_server.py +++ b/kittycad/models/ice_server.py @@ -3,6 +3,7 @@ from typing import List, Optional from pydantic import BaseModel + class IceServer(BaseModel): """Representation of an ICE server used for STUN/TURN Used to initiate WebRTC connections based on """ diff --git a/kittycad/models/import_file.py b/kittycad/models/import_file.py index 65174f76c..6d1cd40a2 100644 --- a/kittycad/models/import_file.py +++ b/kittycad/models/import_file.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class ImportFile(BaseModel): """File to import into the current model""" diff --git a/kittycad/models/import_files.py b/kittycad/models/import_files.py index f6c77c5ee..de2b52512 100644 --- a/kittycad/models/import_files.py +++ b/kittycad/models/import_files.py @@ -3,6 +3,7 @@ from uuid import UUID from pydantic import BaseModel + class ImportFiles(BaseModel): """Data from importing the files""" diff --git a/kittycad/models/input_format.py b/kittycad/models/input_format.py index b104df4ec..a3c6240f3 100644 --- a/kittycad/models/input_format.py +++ b/kittycad/models/input_format.py @@ -1,8 +1,6 @@ -from typing import Any, Dict, Type, TypeVar, Union +from typing import Union -import attr -from pydantic import BaseModel, GetCoreSchemaHandler -from pydantic_core import CoreSchema, core_schema +from pydantic import BaseModel, RootModel from ..models.system import System from ..models.unit_length import UnitLength @@ -62,15 +60,8 @@ class stl(BaseModel): units: UnitLength -GY = TypeVar("GY", bound="InputFormat") - - -@attr.s(auto_attribs=True) -class InputFormat: - - """Input format specifier.""" - - type: Union[ +InputFormat = RootModel[ + Union[ fbx, gltf, obj, @@ -79,87 +70,4 @@ class InputFormat: step, stl, ] - - def __init__( - self, - type: Union[ - fbx, - gltf, - obj, - ply, - sldprt, - step, - stl, - ], - ): - self.type = type - - def model_dump(self) -> Dict[str, Any]: - if isinstance(self.type, fbx): - JV: fbx = self.type - return JV.model_dump() - elif isinstance(self.type, gltf): - FV: gltf = self.type - return FV.model_dump() - elif isinstance(self.type, obj): - OY: obj = self.type - return OY.model_dump() - elif isinstance(self.type, ply): - TM: ply = self.type - return TM.model_dump() - elif isinstance(self.type, sldprt): - AH: sldprt = self.type - return AH.model_dump() - elif isinstance(self.type, step): - JR: step = self.type - return JR.model_dump() - elif isinstance(self.type, stl): - HK: stl = self.type - return HK.model_dump() - - raise Exception("Unknown type") - - @classmethod - def from_dict(cls: Type[GY], d: Dict[str, Any]) -> GY: - if d.get("type") == "fbx": - IO: fbx = fbx(**d) - return cls(type=IO) - elif d.get("type") == "gltf": - LE: gltf = gltf(**d) - return cls(type=LE) - elif d.get("type") == "obj": - HO: obj = obj(**d) - return cls(type=HO) - elif d.get("type") == "ply": - BS: ply = ply(**d) - return cls(type=BS) - elif d.get("type") == "sldprt": - EG: sldprt = sldprt(**d) - return cls(type=EG) - elif d.get("type") == "step": - LY: step = step(**d) - return cls(type=LY) - elif d.get("type") == "stl": - VR: stl = stl(**d) - return cls(type=VR) - - raise Exception("Unknown type") - - @classmethod - def __get_pydantic_core_schema__( - cls, source_type: Any, handler: GetCoreSchemaHandler - ) -> CoreSchema: - return core_schema.no_info_after_validator_function( - cls, - handler( - Union[ - fbx, - gltf, - obj, - ply, - sldprt, - step, - stl, - ] - ), - ) +] diff --git a/kittycad/models/jetstream_api_stats.py b/kittycad/models/jetstream_api_stats.py index e155a27a7..0eb6853d1 100644 --- a/kittycad/models/jetstream_api_stats.py +++ b/kittycad/models/jetstream_api_stats.py @@ -3,6 +3,7 @@ from typing import Optional from pydantic import BaseModel + class JetstreamApiStats(BaseModel): """Jetstream API statistics.""" diff --git a/kittycad/models/jetstream_config.py b/kittycad/models/jetstream_config.py index dd2e310f6..542ff62fd 100644 --- a/kittycad/models/jetstream_config.py +++ b/kittycad/models/jetstream_config.py @@ -3,6 +3,7 @@ from typing import Optional from pydantic import BaseModel + class JetstreamConfig(BaseModel): """Jetstream configuration.""" diff --git a/kittycad/models/leaf_node.py b/kittycad/models/leaf_node.py index 2315d2e6e..4e87a9c5e 100644 --- a/kittycad/models/leaf_node.py +++ b/kittycad/models/leaf_node.py @@ -3,6 +3,7 @@ from typing import Optional from pydantic import BaseModel + class LeafNode(BaseModel): """Leaf node information.""" diff --git a/kittycad/models/meta_cluster_info.py b/kittycad/models/meta_cluster_info.py index 97e08a8fa..47360caf0 100644 --- a/kittycad/models/meta_cluster_info.py +++ b/kittycad/models/meta_cluster_info.py @@ -3,6 +3,7 @@ from typing import Optional from pydantic import BaseModel + class MetaClusterInfo(BaseModel): """Jetstream statistics.""" diff --git a/kittycad/models/modeling_cmd.py b/kittycad/models/modeling_cmd.py index ca530cc84..4ffb07afc 100644 --- a/kittycad/models/modeling_cmd.py +++ b/kittycad/models/modeling_cmd.py @@ -1,9 +1,7 @@ -from typing import Any, Dict, List, Optional, Type, TypeVar, Union +from typing import List, Optional, Union from uuid import UUID -import attr -from pydantic import BaseModel, GetCoreSchemaHandler -from pydantic_core import CoreSchema, core_schema +from pydantic import BaseModel, RootModel from ..models.annotation_options import AnnotationOptions from ..models.annotation_type import AnnotationType @@ -724,15 +722,8 @@ class curve_set_constraint(BaseModel): type: str = "curve_set_constraint" -GY = TypeVar("GY", bound="ModelingCmd") - - -@attr.s(auto_attribs=True) -class ModelingCmd: - - """Commands that the KittyCAD engine can execute.""" - - type: Union[ +ModelingCmd = RootModel[ + Union[ start_path, move_path_pen, extend_path, @@ -805,605 +796,4 @@ class ModelingCmd: get_sketch_mode_plane, curve_set_constraint, ] - - def __init__( - self, - type: Union[ - start_path, - move_path_pen, - extend_path, - extrude, - close_path, - camera_drag_start, - camera_drag_move, - camera_drag_end, - default_camera_look_at, - default_camera_zoom, - default_camera_enable_sketch_mode, - default_camera_disable_sketch_mode, - default_camera_focus_on, - export, - entity_get_parent_id, - entity_get_num_children, - entity_get_child_uuid, - entity_get_all_child_uuids, - edit_mode_enter, - edit_mode_exit, - select_with_point, - select_clear, - select_add, - select_remove, - select_replace, - select_get, - highlight_set_entity, - highlight_set_entities, - new_annotation, - update_annotation, - object_visible, - object_bring_to_front, - get_entity_type, - solid2d_add_hole, - solid3d_get_all_edge_faces, - solid3d_get_all_opposite_edges, - solid3d_get_opposite_edge, - solid3d_get_next_adjacent_edge, - solid3d_get_prev_adjacent_edge, - send_object, - entity_set_opacity, - entity_fade, - make_plane, - plane_set_color, - set_tool, - mouse_move, - mouse_click, - sketch_mode_enable, - sketch_mode_disable, - curve_get_type, - curve_get_control_points, - take_snapshot, - make_axes_gizmo, - path_get_info, - path_get_curve_uuids_for_vertices, - path_get_vertex_uuids, - handle_mouse_drag_start, - handle_mouse_drag_move, - handle_mouse_drag_end, - remove_scene_objects, - plane_intersect_and_project, - curve_get_end_points, - reconfigure_stream, - import_files, - mass, - density, - volume, - center_of_mass, - surface_area, - get_sketch_mode_plane, - curve_set_constraint, - ], - ): - self.type = type - - def model_dump(self) -> Dict[str, Any]: - if isinstance(self.type, start_path): - ON: start_path = self.type - return ON.model_dump() - elif isinstance(self.type, move_path_pen): - US: move_path_pen = self.type - return US.model_dump() - elif isinstance(self.type, extend_path): - FH: extend_path = self.type - return FH.model_dump() - elif isinstance(self.type, extrude): - BB: extrude = self.type - return BB.model_dump() - elif isinstance(self.type, close_path): - TV: close_path = self.type - return TV.model_dump() - elif isinstance(self.type, camera_drag_start): - CE: camera_drag_start = self.type - return CE.model_dump() - elif isinstance(self.type, camera_drag_move): - LT: camera_drag_move = self.type - return LT.model_dump() - elif isinstance(self.type, camera_drag_end): - YY: camera_drag_end = self.type - return YY.model_dump() - elif isinstance(self.type, default_camera_look_at): - FZ: default_camera_look_at = self.type - return FZ.model_dump() - elif isinstance(self.type, default_camera_zoom): - NN: default_camera_zoom = self.type - return NN.model_dump() - elif isinstance(self.type, default_camera_enable_sketch_mode): - VI: default_camera_enable_sketch_mode = self.type - return VI.model_dump() - elif isinstance(self.type, default_camera_disable_sketch_mode): - QF: default_camera_disable_sketch_mode = self.type - return QF.model_dump() - elif isinstance(self.type, default_camera_focus_on): - OJ: default_camera_focus_on = self.type - return OJ.model_dump() - elif isinstance(self.type, export): - YF: export = self.type - return YF.model_dump() - elif isinstance(self.type, entity_get_parent_id): - LK: entity_get_parent_id = self.type - return LK.model_dump() - elif isinstance(self.type, entity_get_num_children): - WB: entity_get_num_children = self.type - return WB.model_dump() - elif isinstance(self.type, entity_get_child_uuid): - HC: entity_get_child_uuid = self.type - return HC.model_dump() - elif isinstance(self.type, entity_get_all_child_uuids): - PV: entity_get_all_child_uuids = self.type - return PV.model_dump() - elif isinstance(self.type, edit_mode_enter): - TP: edit_mode_enter = self.type - return TP.model_dump() - elif isinstance(self.type, edit_mode_exit): - OM: edit_mode_exit = self.type - return OM.model_dump() - elif isinstance(self.type, select_with_point): - RS: select_with_point = self.type - return RS.model_dump() - elif isinstance(self.type, select_clear): - MP: select_clear = self.type - return MP.model_dump() - elif isinstance(self.type, select_add): - RO: select_add = self.type - return RO.model_dump() - elif isinstance(self.type, select_remove): - BA: select_remove = self.type - return BA.model_dump() - elif isinstance(self.type, select_replace): - CB: select_replace = self.type - return CB.model_dump() - elif isinstance(self.type, select_get): - TO: select_get = self.type - return TO.model_dump() - elif isinstance(self.type, highlight_set_entity): - EO: highlight_set_entity = self.type - return EO.model_dump() - elif isinstance(self.type, highlight_set_entities): - QO: highlight_set_entities = self.type - return QO.model_dump() - elif isinstance(self.type, new_annotation): - IZ: new_annotation = self.type - return IZ.model_dump() - elif isinstance(self.type, update_annotation): - NK: update_annotation = self.type - return NK.model_dump() - elif isinstance(self.type, object_visible): - QE: object_visible = self.type - return QE.model_dump() - elif isinstance(self.type, object_bring_to_front): - KT: object_bring_to_front = self.type - return KT.model_dump() - elif isinstance(self.type, get_entity_type): - GU: get_entity_type = self.type - return GU.model_dump() - elif isinstance(self.type, solid2d_add_hole): - UP: solid2d_add_hole = self.type - return UP.model_dump() - elif isinstance(self.type, solid3d_get_all_edge_faces): - DJ: solid3d_get_all_edge_faces = self.type - return DJ.model_dump() - elif isinstance(self.type, solid3d_get_all_opposite_edges): - TR: solid3d_get_all_opposite_edges = self.type - return TR.model_dump() - elif isinstance(self.type, solid3d_get_opposite_edge): - JF: solid3d_get_opposite_edge = self.type - return JF.model_dump() - elif isinstance(self.type, solid3d_get_next_adjacent_edge): - EL: solid3d_get_next_adjacent_edge = self.type - return EL.model_dump() - elif isinstance(self.type, solid3d_get_prev_adjacent_edge): - LF: solid3d_get_prev_adjacent_edge = self.type - return LF.model_dump() - elif isinstance(self.type, send_object): - GN: send_object = self.type - return GN.model_dump() - elif isinstance(self.type, entity_set_opacity): - VJ: entity_set_opacity = self.type - return VJ.model_dump() - elif isinstance(self.type, entity_fade): - YW: entity_fade = self.type - return YW.model_dump() - elif isinstance(self.type, make_plane): - NO: make_plane = self.type - return NO.model_dump() - elif isinstance(self.type, plane_set_color): - RG: plane_set_color = self.type - return RG.model_dump() - elif isinstance(self.type, set_tool): - LD: set_tool = self.type - return LD.model_dump() - elif isinstance(self.type, mouse_move): - TN: mouse_move = self.type - return TN.model_dump() - elif isinstance(self.type, mouse_click): - UG: mouse_click = self.type - return UG.model_dump() - elif isinstance(self.type, sketch_mode_enable): - NZ: sketch_mode_enable = self.type - return NZ.model_dump() - elif isinstance(self.type, sketch_mode_disable): - LO: sketch_mode_disable = self.type - return LO.model_dump() - elif isinstance(self.type, curve_get_type): - OW: curve_get_type = self.type - return OW.model_dump() - elif isinstance(self.type, curve_get_control_points): - PQ: curve_get_control_points = self.type - return PQ.model_dump() - elif isinstance(self.type, take_snapshot): - OU: take_snapshot = self.type - return OU.model_dump() - elif isinstance(self.type, make_axes_gizmo): - XI: make_axes_gizmo = self.type - return XI.model_dump() - elif isinstance(self.type, path_get_info): - PS: path_get_info = self.type - return PS.model_dump() - elif isinstance(self.type, path_get_curve_uuids_for_vertices): - XL: path_get_curve_uuids_for_vertices = self.type - return XL.model_dump() - elif isinstance(self.type, path_get_vertex_uuids): - FT: path_get_vertex_uuids = self.type - return FT.model_dump() - elif isinstance(self.type, handle_mouse_drag_start): - SC: handle_mouse_drag_start = self.type - return SC.model_dump() - elif isinstance(self.type, handle_mouse_drag_move): - JA: handle_mouse_drag_move = self.type - return JA.model_dump() - elif isinstance(self.type, handle_mouse_drag_end): - UK: handle_mouse_drag_end = self.type - return UK.model_dump() - elif isinstance(self.type, remove_scene_objects): - MT: remove_scene_objects = self.type - return MT.model_dump() - elif isinstance(self.type, plane_intersect_and_project): - TF: plane_intersect_and_project = self.type - return TF.model_dump() - elif isinstance(self.type, curve_get_end_points): - JD: curve_get_end_points = self.type - return JD.model_dump() - elif isinstance(self.type, reconfigure_stream): - BH: reconfigure_stream = self.type - return BH.model_dump() - elif isinstance(self.type, import_files): - CN: import_files = self.type - return CN.model_dump() - elif isinstance(self.type, mass): - SO: mass = self.type - return SO.model_dump() - elif isinstance(self.type, density): - AM: density = self.type - return AM.model_dump() - elif isinstance(self.type, volume): - SG: volume = self.type - return SG.model_dump() - elif isinstance(self.type, center_of_mass): - SY: center_of_mass = self.type - return SY.model_dump() - elif isinstance(self.type, surface_area): - WS: surface_area = self.type - return WS.model_dump() - elif isinstance(self.type, get_sketch_mode_plane): - MK: get_sketch_mode_plane = self.type - return MK.model_dump() - elif isinstance(self.type, curve_set_constraint): - FY: curve_set_constraint = self.type - return FY.model_dump() - - raise Exception("Unknown type") - - @classmethod - def from_dict(cls: Type[GY], d: Dict[str, Any]) -> GY: - if d.get("type") == "start_path": - PC: start_path = start_path(**d) - return cls(type=PC) - elif d.get("type") == "move_path_pen": - KQ: move_path_pen = move_path_pen(**d) - return cls(type=KQ) - elif d.get("type") == "extend_path": - NH: extend_path = extend_path(**d) - return cls(type=NH) - elif d.get("type") == "extrude": - PJ: extrude = extrude(**d) - return cls(type=PJ) - elif d.get("type") == "close_path": - CR: close_path = close_path(**d) - return cls(type=CR) - elif d.get("type") == "camera_drag_start": - MS: camera_drag_start = camera_drag_start(**d) - return cls(type=MS) - elif d.get("type") == "camera_drag_move": - ED: camera_drag_move = camera_drag_move(**d) - return cls(type=ED) - elif d.get("type") == "camera_drag_end": - DO: camera_drag_end = camera_drag_end(**d) - return cls(type=DO) - elif d.get("type") == "default_camera_look_at": - GL: default_camera_look_at = default_camera_look_at(**d) - return cls(type=GL) - elif d.get("type") == "default_camera_zoom": - OH: default_camera_zoom = default_camera_zoom(**d) - return cls(type=OH) - elif d.get("type") == "default_camera_enable_sketch_mode": - ET: default_camera_enable_sketch_mode = default_camera_enable_sketch_mode( - **d - ) - return cls(type=ET) - elif d.get("type") == "default_camera_disable_sketch_mode": - DI: default_camera_disable_sketch_mode = default_camera_disable_sketch_mode( - **d - ) - return cls(type=DI) - elif d.get("type") == "default_camera_focus_on": - UF: default_camera_focus_on = default_camera_focus_on(**d) - return cls(type=UF) - elif d.get("type") == "export": - PY: export = export(**d) - return cls(type=PY) - elif d.get("type") == "entity_get_parent_id": - AR: entity_get_parent_id = entity_get_parent_id(**d) - return cls(type=AR) - elif d.get("type") == "entity_get_num_children": - KK: entity_get_num_children = entity_get_num_children(**d) - return cls(type=KK) - elif d.get("type") == "entity_get_child_uuid": - FM: entity_get_child_uuid = entity_get_child_uuid(**d) - return cls(type=FM) - elif d.get("type") == "entity_get_all_child_uuids": - QI: entity_get_all_child_uuids = entity_get_all_child_uuids(**d) - return cls(type=QI) - elif d.get("type") == "edit_mode_enter": - CF: edit_mode_enter = edit_mode_enter(**d) - return cls(type=CF) - elif d.get("type") == "edit_mode_exit": - EN: edit_mode_exit = edit_mode_exit(**d) - return cls(type=EN) - elif d.get("type") == "select_with_point": - LR: select_with_point = select_with_point(**d) - return cls(type=LR) - elif d.get("type") == "select_clear": - WF: select_clear = select_clear(**d) - return cls(type=WF) - elif d.get("type") == "select_add": - DN: select_add = select_add(**d) - return cls(type=DN) - elif d.get("type") == "select_remove": - OR: select_remove = select_remove(**d) - return cls(type=OR) - elif d.get("type") == "select_replace": - LC: select_replace = select_replace(**d) - return cls(type=LC) - elif d.get("type") == "select_get": - ZP: select_get = select_get(**d) - return cls(type=ZP) - elif d.get("type") == "highlight_set_entity": - NY: highlight_set_entity = highlight_set_entity(**d) - return cls(type=NY) - elif d.get("type") == "highlight_set_entities": - KX: highlight_set_entities = highlight_set_entities(**d) - return cls(type=KX) - elif d.get("type") == "new_annotation": - WO: new_annotation = new_annotation(**d) - return cls(type=WO) - elif d.get("type") == "update_annotation": - UQ: update_annotation = update_annotation(**d) - return cls(type=UQ) - elif d.get("type") == "object_visible": - XH: object_visible = object_visible(**d) - return cls(type=XH) - elif d.get("type") == "object_bring_to_front": - BV: object_bring_to_front = object_bring_to_front(**d) - return cls(type=BV) - elif d.get("type") == "get_entity_type": - SS: get_entity_type = get_entity_type(**d) - return cls(type=SS) - elif d.get("type") == "solid2d_add_hole": - AZ: solid2d_add_hole = solid2d_add_hole(**d) - return cls(type=AZ) - elif d.get("type") == "solid3d_get_all_edge_faces": - WJ: solid3d_get_all_edge_faces = solid3d_get_all_edge_faces(**d) - return cls(type=WJ) - elif d.get("type") == "solid3d_get_all_opposite_edges": - YD: solid3d_get_all_opposite_edges = solid3d_get_all_opposite_edges(**d) - return cls(type=YD) - elif d.get("type") == "solid3d_get_opposite_edge": - VP: solid3d_get_opposite_edge = solid3d_get_opposite_edge(**d) - return cls(type=VP) - elif d.get("type") == "solid3d_get_next_adjacent_edge": - ZG: solid3d_get_next_adjacent_edge = solid3d_get_next_adjacent_edge(**d) - return cls(type=ZG) - elif d.get("type") == "solid3d_get_prev_adjacent_edge": - CS: solid3d_get_prev_adjacent_edge = solid3d_get_prev_adjacent_edge(**d) - return cls(type=CS) - elif d.get("type") == "send_object": - GD: send_object = send_object(**d) - return cls(type=GD) - elif d.get("type") == "entity_set_opacity": - OX: entity_set_opacity = entity_set_opacity(**d) - return cls(type=OX) - elif d.get("type") == "entity_fade": - QX: entity_fade = entity_fade(**d) - return cls(type=QX) - elif d.get("type") == "make_plane": - VX: make_plane = make_plane(**d) - return cls(type=VX) - elif d.get("type") == "plane_set_color": - IT: plane_set_color = plane_set_color(**d) - return cls(type=IT) - elif d.get("type") == "set_tool": - UA: set_tool = set_tool(**d) - return cls(type=UA) - elif d.get("type") == "mouse_move": - MZ: mouse_move = mouse_move(**d) - return cls(type=MZ) - elif d.get("type") == "mouse_click": - CY: mouse_click = mouse_click(**d) - return cls(type=CY) - elif d.get("type") == "sketch_mode_enable": - LI: sketch_mode_enable = sketch_mode_enable(**d) - return cls(type=LI) - elif d.get("type") == "sketch_mode_disable": - XJ: sketch_mode_disable = sketch_mode_disable(**d) - return cls(type=XJ) - elif d.get("type") == "curve_get_type": - JQ: curve_get_type = curve_get_type(**d) - return cls(type=JQ) - elif d.get("type") == "curve_get_control_points": - IM: curve_get_control_points = curve_get_control_points(**d) - return cls(type=IM) - elif d.get("type") == "take_snapshot": - KL: take_snapshot = take_snapshot(**d) - return cls(type=KL) - elif d.get("type") == "make_axes_gizmo": - PO: make_axes_gizmo = make_axes_gizmo(**d) - return cls(type=PO) - elif d.get("type") == "path_get_info": - WR: path_get_info = path_get_info(**d) - return cls(type=WR) - elif d.get("type") == "path_get_curve_uuids_for_vertices": - ZX: path_get_curve_uuids_for_vertices = path_get_curve_uuids_for_vertices( - **d - ) - return cls(type=ZX) - elif d.get("type") == "path_get_vertex_uuids": - NX: path_get_vertex_uuids = path_get_vertex_uuids(**d) - return cls(type=NX) - elif d.get("type") == "handle_mouse_drag_start": - TX: handle_mouse_drag_start = handle_mouse_drag_start(**d) - return cls(type=TX) - elif d.get("type") == "handle_mouse_drag_move": - SK: handle_mouse_drag_move = handle_mouse_drag_move(**d) - return cls(type=SK) - elif d.get("type") == "handle_mouse_drag_end": - CX: handle_mouse_drag_end = handle_mouse_drag_end(**d) - return cls(type=CX) - elif d.get("type") == "remove_scene_objects": - LJ: remove_scene_objects = remove_scene_objects(**d) - return cls(type=LJ) - elif d.get("type") == "plane_intersect_and_project": - HF: plane_intersect_and_project = plane_intersect_and_project(**d) - return cls(type=HF) - elif d.get("type") == "curve_get_end_points": - RZ: curve_get_end_points = curve_get_end_points(**d) - return cls(type=RZ) - elif d.get("type") == "reconfigure_stream": - SX: reconfigure_stream = reconfigure_stream(**d) - return cls(type=SX) - elif d.get("type") == "import_files": - GS: import_files = import_files(**d) - return cls(type=GS) - elif d.get("type") == "mass": - ZS: mass = mass(**d) - return cls(type=ZS) - elif d.get("type") == "density": - GK: density = density(**d) - return cls(type=GK) - elif d.get("type") == "volume": - QZ: volume = volume(**d) - return cls(type=QZ) - elif d.get("type") == "center_of_mass": - YK: center_of_mass = center_of_mass(**d) - return cls(type=YK) - elif d.get("type") == "surface_area": - SL: surface_area = surface_area(**d) - return cls(type=SL) - elif d.get("type") == "get_sketch_mode_plane": - TU: get_sketch_mode_plane = get_sketch_mode_plane(**d) - return cls(type=TU) - elif d.get("type") == "curve_set_constraint": - FD: curve_set_constraint = curve_set_constraint(**d) - return cls(type=FD) - - raise Exception("Unknown type") - - @classmethod - def __get_pydantic_core_schema__( - cls, source_type: Any, handler: GetCoreSchemaHandler - ) -> CoreSchema: - return core_schema.no_info_after_validator_function( - cls, - handler( - Union[ - start_path, - move_path_pen, - extend_path, - extrude, - close_path, - camera_drag_start, - camera_drag_move, - camera_drag_end, - default_camera_look_at, - default_camera_zoom, - default_camera_enable_sketch_mode, - default_camera_disable_sketch_mode, - default_camera_focus_on, - export, - entity_get_parent_id, - entity_get_num_children, - entity_get_child_uuid, - entity_get_all_child_uuids, - edit_mode_enter, - edit_mode_exit, - select_with_point, - select_clear, - select_add, - select_remove, - select_replace, - select_get, - highlight_set_entity, - highlight_set_entities, - new_annotation, - update_annotation, - object_visible, - object_bring_to_front, - get_entity_type, - solid2d_add_hole, - solid3d_get_all_edge_faces, - solid3d_get_all_opposite_edges, - solid3d_get_opposite_edge, - solid3d_get_next_adjacent_edge, - solid3d_get_prev_adjacent_edge, - send_object, - entity_set_opacity, - entity_fade, - make_plane, - plane_set_color, - set_tool, - mouse_move, - mouse_click, - sketch_mode_enable, - sketch_mode_disable, - curve_get_type, - curve_get_control_points, - take_snapshot, - make_axes_gizmo, - path_get_info, - path_get_curve_uuids_for_vertices, - path_get_vertex_uuids, - handle_mouse_drag_start, - handle_mouse_drag_move, - handle_mouse_drag_end, - remove_scene_objects, - plane_intersect_and_project, - curve_get_end_points, - reconfigure_stream, - import_files, - mass, - density, - volume, - center_of_mass, - surface_area, - get_sketch_mode_plane, - curve_set_constraint, - ] - ), - ) +] diff --git a/kittycad/models/mouse_click.py b/kittycad/models/mouse_click.py index 9026ecf12..ed77bc793 100644 --- a/kittycad/models/mouse_click.py +++ b/kittycad/models/mouse_click.py @@ -4,6 +4,7 @@ from uuid import UUID from pydantic import BaseModel + class MouseClick(BaseModel): """The response from the `MouseClick` command.""" diff --git a/kittycad/models/o_auth2_client_info.py b/kittycad/models/o_auth2_client_info.py index 25976196a..f024f5335 100644 --- a/kittycad/models/o_auth2_client_info.py +++ b/kittycad/models/o_auth2_client_info.py @@ -3,6 +3,7 @@ from typing import Optional from pydantic import BaseModel + class OAuth2ClientInfo(BaseModel): """Information about an OAuth 2.0 client.""" diff --git a/kittycad/models/ok_modeling_cmd_response.py b/kittycad/models/ok_modeling_cmd_response.py index 636634b3e..608abcf09 100644 --- a/kittycad/models/ok_modeling_cmd_response.py +++ b/kittycad/models/ok_modeling_cmd_response.py @@ -1,8 +1,6 @@ -from typing import Any, Dict, Type, TypeVar, Union +from typing import Union -import attr -from pydantic import BaseModel, GetCoreSchemaHandler -from pydantic_core import CoreSchema, core_schema +from pydantic import BaseModel, RootModel from ..models.center_of_mass import CenterOfMass from ..models.curve_get_control_points import CurveGetControlPoints @@ -282,15 +280,8 @@ class get_sketch_mode_plane(BaseModel): type: str = "get_sketch_mode_plane" -GY = TypeVar("GY", bound="OkModelingCmdResponse") - - -@attr.s(auto_attribs=True) -class OkModelingCmdResponse: - - """A successful response from a modeling command. This can be one of several types of responses, depending on the command.""" - - type: Union[ +OkModelingCmdResponse = RootModel[ + Union[ empty, export, select_with_point, @@ -323,281 +314,4 @@ class OkModelingCmdResponse: center_of_mass, get_sketch_mode_plane, ] - - def __init__( - self, - type: Union[ - empty, - export, - select_with_point, - highlight_set_entity, - entity_get_child_uuid, - entity_get_num_children, - entity_get_parent_id, - entity_get_all_child_uuids, - select_get, - get_entity_type, - solid3d_get_all_edge_faces, - solid3d_get_all_opposite_edges, - solid3d_get_opposite_edge, - solid3d_get_prev_adjacent_edge, - solid3d_get_next_adjacent_edge, - mouse_click, - curve_get_type, - curve_get_control_points, - take_snapshot, - path_get_info, - path_get_curve_uuids_for_vertices, - path_get_vertex_uuids, - plane_intersect_and_project, - curve_get_end_points, - import_files, - mass, - volume, - density, - surface_area, - center_of_mass, - get_sketch_mode_plane, - ], - ): - self.type = type - - def model_dump(self) -> Dict[str, Any]: - if isinstance(self.type, empty): - TZ: empty = self.type - return TZ.model_dump() - elif isinstance(self.type, export): - RQ: export = self.type - return RQ.model_dump() - elif isinstance(self.type, select_with_point): - CM: select_with_point = self.type - return CM.model_dump() - elif isinstance(self.type, highlight_set_entity): - WP: highlight_set_entity = self.type - return WP.model_dump() - elif isinstance(self.type, entity_get_child_uuid): - LN: entity_get_child_uuid = self.type - return LN.model_dump() - elif isinstance(self.type, entity_get_num_children): - MG: entity_get_num_children = self.type - return MG.model_dump() - elif isinstance(self.type, entity_get_parent_id): - BF: entity_get_parent_id = self.type - return BF.model_dump() - elif isinstance(self.type, entity_get_all_child_uuids): - MB: entity_get_all_child_uuids = self.type - return MB.model_dump() - elif isinstance(self.type, select_get): - FJ: select_get = self.type - return FJ.model_dump() - elif isinstance(self.type, get_entity_type): - SF: get_entity_type = self.type - return SF.model_dump() - elif isinstance(self.type, solid3d_get_all_edge_faces): - BM: solid3d_get_all_edge_faces = self.type - return BM.model_dump() - elif isinstance(self.type, solid3d_get_all_opposite_edges): - NC: solid3d_get_all_opposite_edges = self.type - return NC.model_dump() - elif isinstance(self.type, solid3d_get_opposite_edge): - FF: solid3d_get_opposite_edge = self.type - return FF.model_dump() - elif isinstance(self.type, solid3d_get_prev_adjacent_edge): - FS: solid3d_get_prev_adjacent_edge = self.type - return FS.model_dump() - elif isinstance(self.type, solid3d_get_next_adjacent_edge): - EQ: solid3d_get_next_adjacent_edge = self.type - return EQ.model_dump() - elif isinstance(self.type, mouse_click): - MD: mouse_click = self.type - return MD.model_dump() - elif isinstance(self.type, curve_get_type): - UJ: curve_get_type = self.type - return UJ.model_dump() - elif isinstance(self.type, curve_get_control_points): - DL: curve_get_control_points = self.type - return DL.model_dump() - elif isinstance(self.type, take_snapshot): - PT: take_snapshot = self.type - return PT.model_dump() - elif isinstance(self.type, path_get_info): - VF: path_get_info = self.type - return VF.model_dump() - elif isinstance(self.type, path_get_curve_uuids_for_vertices): - WH: path_get_curve_uuids_for_vertices = self.type - return WH.model_dump() - elif isinstance(self.type, path_get_vertex_uuids): - UY: path_get_vertex_uuids = self.type - return UY.model_dump() - elif isinstance(self.type, plane_intersect_and_project): - SM: plane_intersect_and_project = self.type - return SM.model_dump() - elif isinstance(self.type, curve_get_end_points): - CG: curve_get_end_points = self.type - return CG.model_dump() - elif isinstance(self.type, import_files): - ZB: import_files = self.type - return ZB.model_dump() - elif isinstance(self.type, mass): - FX: mass = self.type - return FX.model_dump() - elif isinstance(self.type, volume): - KU: volume = self.type - return KU.model_dump() - elif isinstance(self.type, density): - FA: density = self.type - return FA.model_dump() - elif isinstance(self.type, surface_area): - JG: surface_area = self.type - return JG.model_dump() - elif isinstance(self.type, center_of_mass): - RY: center_of_mass = self.type - return RY.model_dump() - elif isinstance(self.type, get_sketch_mode_plane): - AD: get_sketch_mode_plane = self.type - return AD.model_dump() - - raise Exception("Unknown type") - - @classmethod - def from_dict(cls: Type[GY], d: Dict[str, Any]) -> GY: - if d.get("type") == "empty": - AX: empty = empty(**d) - return cls(type=AX) - elif d.get("type") == "export": - ZL: export = export(**d) - return cls(type=ZL) - elif d.get("type") == "select_with_point": - OS: select_with_point = select_with_point(**d) - return cls(type=OS) - elif d.get("type") == "highlight_set_entity": - XO: highlight_set_entity = highlight_set_entity(**d) - return cls(type=XO) - elif d.get("type") == "entity_get_child_uuid": - KR: entity_get_child_uuid = entity_get_child_uuid(**d) - return cls(type=KR) - elif d.get("type") == "entity_get_num_children": - UE: entity_get_num_children = entity_get_num_children(**d) - return cls(type=UE) - elif d.get("type") == "entity_get_parent_id": - UU: entity_get_parent_id = entity_get_parent_id(**d) - return cls(type=UU) - elif d.get("type") == "entity_get_all_child_uuids": - TB: entity_get_all_child_uuids = entity_get_all_child_uuids(**d) - return cls(type=TB) - elif d.get("type") == "select_get": - HB: select_get = select_get(**d) - return cls(type=HB) - elif d.get("type") == "get_entity_type": - DU: get_entity_type = get_entity_type(**d) - return cls(type=DU) - elif d.get("type") == "solid3d_get_all_edge_faces": - TY: solid3d_get_all_edge_faces = solid3d_get_all_edge_faces(**d) - return cls(type=TY) - elif d.get("type") == "solid3d_get_all_opposite_edges": - GP: solid3d_get_all_opposite_edges = solid3d_get_all_opposite_edges(**d) - return cls(type=GP) - elif d.get("type") == "solid3d_get_opposite_edge": - YO: solid3d_get_opposite_edge = solid3d_get_opposite_edge(**d) - return cls(type=YO) - elif d.get("type") == "solid3d_get_prev_adjacent_edge": - WN: solid3d_get_prev_adjacent_edge = solid3d_get_prev_adjacent_edge(**d) - return cls(type=WN) - elif d.get("type") == "solid3d_get_next_adjacent_edge": - UW: solid3d_get_next_adjacent_edge = solid3d_get_next_adjacent_edge(**d) - return cls(type=UW) - elif d.get("type") == "mouse_click": - HD: mouse_click = mouse_click(**d) - return cls(type=HD) - elif d.get("type") == "curve_get_type": - RU: curve_get_type = curve_get_type(**d) - return cls(type=RU) - elif d.get("type") == "curve_get_control_points": - QT: curve_get_control_points = curve_get_control_points(**d) - return cls(type=QT) - elif d.get("type") == "take_snapshot": - HR: take_snapshot = take_snapshot(**d) - return cls(type=HR) - elif d.get("type") == "path_get_info": - VM: path_get_info = path_get_info(**d) - return cls(type=VM) - elif d.get("type") == "path_get_curve_uuids_for_vertices": - DQ: path_get_curve_uuids_for_vertices = path_get_curve_uuids_for_vertices( - **d - ) - return cls(type=DQ) - elif d.get("type") == "path_get_vertex_uuids": - PD: path_get_vertex_uuids = path_get_vertex_uuids(**d) - return cls(type=PD) - elif d.get("type") == "plane_intersect_and_project": - JL: plane_intersect_and_project = plane_intersect_and_project(**d) - return cls(type=JL) - elif d.get("type") == "curve_get_end_points": - QA: curve_get_end_points = curve_get_end_points(**d) - return cls(type=QA) - elif d.get("type") == "import_files": - AU: import_files = import_files(**d) - return cls(type=AU) - elif d.get("type") == "mass": - BL: mass = mass(**d) - return cls(type=BL) - elif d.get("type") == "volume": - PZ: volume = volume(**d) - return cls(type=PZ) - elif d.get("type") == "density": - GE: density = density(**d) - return cls(type=GE) - elif d.get("type") == "surface_area": - HH: surface_area = surface_area(**d) - return cls(type=HH) - elif d.get("type") == "center_of_mass": - AE: center_of_mass = center_of_mass(**d) - return cls(type=AE) - elif d.get("type") == "get_sketch_mode_plane": - AB: get_sketch_mode_plane = get_sketch_mode_plane(**d) - return cls(type=AB) - - raise Exception("Unknown type") - - @classmethod - def __get_pydantic_core_schema__( - cls, source_type: Any, handler: GetCoreSchemaHandler - ) -> CoreSchema: - return core_schema.no_info_after_validator_function( - cls, - handler( - Union[ - empty, - export, - select_with_point, - highlight_set_entity, - entity_get_child_uuid, - entity_get_num_children, - entity_get_parent_id, - entity_get_all_child_uuids, - select_get, - get_entity_type, - solid3d_get_all_edge_faces, - solid3d_get_all_opposite_edges, - solid3d_get_opposite_edge, - solid3d_get_prev_adjacent_edge, - solid3d_get_next_adjacent_edge, - mouse_click, - curve_get_type, - curve_get_control_points, - take_snapshot, - path_get_info, - path_get_curve_uuids_for_vertices, - path_get_vertex_uuids, - plane_intersect_and_project, - curve_get_end_points, - import_files, - mass, - volume, - density, - surface_area, - center_of_mass, - get_sketch_mode_plane, - ] - ), - ) +] diff --git a/kittycad/models/ok_web_socket_response_data.py b/kittycad/models/ok_web_socket_response_data.py index 25da67582..686962f02 100644 --- a/kittycad/models/ok_web_socket_response_data.py +++ b/kittycad/models/ok_web_socket_response_data.py @@ -1,8 +1,6 @@ -from typing import Any, Dict, List, Type, TypeVar, Union +from typing import List, Union -import attr -from pydantic import BaseModel, GetCoreSchemaHandler -from pydantic_core import CoreSchema, core_schema +from pydantic import BaseModel, RootModel from ..models.ice_server import IceServer from ..models.ok_modeling_cmd_response import OkModelingCmdResponse @@ -93,15 +91,8 @@ class metrics_request(BaseModel): type: str = "metrics_request" -GY = TypeVar("GY", bound="OkWebSocketResponseData") - - -@attr.s(auto_attribs=True) -class OkWebSocketResponseData: - - """The websocket messages this server sends.""" - - type: Union[ +OkWebSocketResponseData = RootModel[ + Union[ ice_server_info, trickle_ice, sdp_answer, @@ -109,79 +100,4 @@ class OkWebSocketResponseData: export, metrics_request, ] - - def __init__( - self, - type: Union[ - ice_server_info, - trickle_ice, - sdp_answer, - modeling, - export, - metrics_request, - ], - ): - self.type = type - - def model_dump(self) -> Dict[str, Any]: - if isinstance(self.type, ice_server_info): - VY: ice_server_info = self.type - return VY.model_dump() - elif isinstance(self.type, trickle_ice): - MC: trickle_ice = self.type - return MC.model_dump() - elif isinstance(self.type, sdp_answer): - BR: sdp_answer = self.type - return BR.model_dump() - elif isinstance(self.type, modeling): - OK: modeling = self.type - return OK.model_dump() - elif isinstance(self.type, export): - OP: export = self.type - return OP.model_dump() - elif isinstance(self.type, metrics_request): - LV: metrics_request = self.type - return LV.model_dump() - - raise Exception("Unknown type") - - @classmethod - def from_dict(cls: Type[GY], d: Dict[str, Any]) -> GY: - if d.get("type") == "ice_server_info": - DW: ice_server_info = ice_server_info(**d) - return cls(type=DW) - elif d.get("type") == "trickle_ice": - AV: trickle_ice = trickle_ice(**d) - return cls(type=AV) - elif d.get("type") == "sdp_answer": - WM: sdp_answer = sdp_answer(**d) - return cls(type=WM) - elif d.get("type") == "modeling": - MU: modeling = modeling(**d) - return cls(type=MU) - elif d.get("type") == "export": - WW: export = export(**d) - return cls(type=WW) - elif d.get("type") == "metrics_request": - II: metrics_request = metrics_request(**d) - return cls(type=II) - - raise Exception("Unknown type") - - @classmethod - def __get_pydantic_core_schema__( - cls, source_type: Any, handler: GetCoreSchemaHandler - ) -> CoreSchema: - return core_schema.no_info_after_validator_function( - cls, - handler( - Union[ - ice_server_info, - trickle_ice, - sdp_answer, - modeling, - export, - metrics_request, - ] - ), - ) +] diff --git a/kittycad/models/onboarding.py b/kittycad/models/onboarding.py index 6cdda6292..a0e150974 100644 --- a/kittycad/models/onboarding.py +++ b/kittycad/models/onboarding.py @@ -3,6 +3,7 @@ from typing import Optional from pydantic import BaseModel + class Onboarding(BaseModel): """Onboarding details""" diff --git a/kittycad/models/output_file.py b/kittycad/models/output_file.py index 73f665705..946f8f39b 100644 --- a/kittycad/models/output_file.py +++ b/kittycad/models/output_file.py @@ -3,6 +3,7 @@ from typing import Optional from pydantic import BaseModel + class OutputFile(BaseModel): """Output file contents.""" diff --git a/kittycad/models/output_format.py b/kittycad/models/output_format.py index 1378c512a..8efcfd2ba 100644 --- a/kittycad/models/output_format.py +++ b/kittycad/models/output_format.py @@ -1,8 +1,6 @@ -from typing import Any, Dict, Type, TypeVar, Union +from typing import Union -import attr -from pydantic import BaseModel, GetCoreSchemaHandler -from pydantic_core import CoreSchema, core_schema +from pydantic import BaseModel, RootModel from ..models.fbx_storage import FbxStorage from ..models.gltf_presentation import GltfPresentation @@ -78,15 +76,8 @@ class stl(BaseModel): units: UnitLength -GY = TypeVar("GY", bound="OutputFormat") - - -@attr.s(auto_attribs=True) -class OutputFormat: - - """Output format specifier.""" - - type: Union[ +OutputFormat = RootModel[ + Union[ fbx, gltf, obj, @@ -94,79 +85,4 @@ class OutputFormat: step, stl, ] - - def __init__( - self, - type: Union[ - fbx, - gltf, - obj, - ply, - step, - stl, - ], - ): - self.type = type - - def model_dump(self) -> Dict[str, Any]: - if isinstance(self.type, fbx): - FC: fbx = self.type - return FC.model_dump() - elif isinstance(self.type, gltf): - EI: gltf = self.type - return EI.model_dump() - elif isinstance(self.type, obj): - JE: obj = self.type - return JE.model_dump() - elif isinstance(self.type, ply): - JW: ply = self.type - return JW.model_dump() - elif isinstance(self.type, step): - AS: step = self.type - return AS.model_dump() - elif isinstance(self.type, stl): - YQ: stl = self.type - return YQ.model_dump() - - raise Exception("Unknown type") - - @classmethod - def from_dict(cls: Type[GY], d: Dict[str, Any]) -> GY: - if d.get("type") == "fbx": - OA: fbx = fbx(**d) - return cls(type=OA) - elif d.get("type") == "gltf": - CQ: gltf = gltf(**d) - return cls(type=CQ) - elif d.get("type") == "obj": - RD: obj = obj(**d) - return cls(type=RD) - elif d.get("type") == "ply": - KZ: ply = ply(**d) - return cls(type=KZ) - elif d.get("type") == "step": - IU: step = step(**d) - return cls(type=IU) - elif d.get("type") == "stl": - NQ: stl = stl(**d) - return cls(type=NQ) - - raise Exception("Unknown type") - - @classmethod - def __get_pydantic_core_schema__( - cls, source_type: Any, handler: GetCoreSchemaHandler - ) -> CoreSchema: - return core_schema.no_info_after_validator_function( - cls, - handler( - Union[ - fbx, - gltf, - obj, - ply, - step, - stl, - ] - ), - ) +] diff --git a/kittycad/models/path_get_curve_uuids_for_vertices.py b/kittycad/models/path_get_curve_uuids_for_vertices.py index c16aa9920..46ca92532 100644 --- a/kittycad/models/path_get_curve_uuids_for_vertices.py +++ b/kittycad/models/path_get_curve_uuids_for_vertices.py @@ -4,6 +4,7 @@ from uuid import UUID from pydantic import BaseModel + class PathGetCurveUuidsForVertices(BaseModel): """The response from the `PathGetCurveUuidsForVertices` command.""" diff --git a/kittycad/models/path_get_vertex_uuids.py b/kittycad/models/path_get_vertex_uuids.py index 9dd91c6b9..443284fc7 100644 --- a/kittycad/models/path_get_vertex_uuids.py +++ b/kittycad/models/path_get_vertex_uuids.py @@ -4,6 +4,7 @@ from uuid import UUID from pydantic import BaseModel + class PathGetVertexUuids(BaseModel): """The response from the `PathGetVertexUuids` command.""" diff --git a/kittycad/models/path_segment.py b/kittycad/models/path_segment.py index 07d7cc325..700711c95 100644 --- a/kittycad/models/path_segment.py +++ b/kittycad/models/path_segment.py @@ -1,8 +1,6 @@ -from typing import Any, Dict, Optional, Type, TypeVar, Union +from typing import Optional, Union -import attr -from pydantic import BaseModel, GetCoreSchemaHandler -from pydantic_core import CoreSchema, core_schema +from pydantic import BaseModel, RootModel from ..models.angle import Angle from ..models.point2d import Point2d @@ -73,86 +71,12 @@ class tangential_arc_to(BaseModel): type: str = "tangential_arc_to" -GY = TypeVar("GY", bound="PathSegment") - - -@attr.s(auto_attribs=True) -class PathSegment: - - """A segment of a path. Paths are composed of many segments.""" - - type: Union[ +PathSegment = RootModel[ + Union[ line, arc, bezier, tangential_arc, tangential_arc_to, ] - - def __init__( - self, - type: Union[ - line, - arc, - bezier, - tangential_arc, - tangential_arc_to, - ], - ): - self.type = type - - def model_dump(self) -> Dict[str, Any]: - if isinstance(self.type, line): - EW: line = self.type - return EW.model_dump() - elif isinstance(self.type, arc): - BT: arc = self.type - return BT.model_dump() - elif isinstance(self.type, bezier): - AG: bezier = self.type - return AG.model_dump() - elif isinstance(self.type, tangential_arc): - EA: tangential_arc = self.type - return EA.model_dump() - elif isinstance(self.type, tangential_arc_to): - VW: tangential_arc_to = self.type - return VW.model_dump() - - raise Exception("Unknown type") - - @classmethod - def from_dict(cls: Type[GY], d: Dict[str, Any]) -> GY: - if d.get("type") == "line": - BU: line = line(**d) - return cls(type=BU) - elif d.get("type") == "arc": - GR: arc = arc(**d) - return cls(type=GR) - elif d.get("type") == "bezier": - EJ: bezier = bezier(**d) - return cls(type=EJ) - elif d.get("type") == "tangential_arc": - LQ: tangential_arc = tangential_arc(**d) - return cls(type=LQ) - elif d.get("type") == "tangential_arc_to": - DP: tangential_arc_to = tangential_arc_to(**d) - return cls(type=DP) - - raise Exception("Unknown type") - - @classmethod - def __get_pydantic_core_schema__( - cls, source_type: Any, handler: GetCoreSchemaHandler - ) -> CoreSchema: - return core_schema.no_info_after_validator_function( - cls, - handler( - Union[ - line, - arc, - bezier, - tangential_arc, - tangential_arc_to, - ] - ), - ) +] diff --git a/kittycad/models/payment_intent.py b/kittycad/models/payment_intent.py index 898aff479..8c99d20fa 100644 --- a/kittycad/models/payment_intent.py +++ b/kittycad/models/payment_intent.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class PaymentIntent(BaseModel): """A payment intent response.""" diff --git a/kittycad/models/payment_method_card_checks.py b/kittycad/models/payment_method_card_checks.py index f144a7a56..90c8ac03c 100644 --- a/kittycad/models/payment_method_card_checks.py +++ b/kittycad/models/payment_method_card_checks.py @@ -3,6 +3,7 @@ from typing import Optional from pydantic import BaseModel + class PaymentMethodCardChecks(BaseModel): """Card checks.""" diff --git a/kittycad/models/point2d.py b/kittycad/models/point2d.py index ca4b15a70..dbb6ea30f 100644 --- a/kittycad/models/point2d.py +++ b/kittycad/models/point2d.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class Point2d(BaseModel): """A point in 2D space""" diff --git a/kittycad/models/point3d.py b/kittycad/models/point3d.py index 16f842118..6713b702d 100644 --- a/kittycad/models/point3d.py +++ b/kittycad/models/point3d.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class Point3d(BaseModel): """A point in 3D space""" diff --git a/kittycad/models/pong.py b/kittycad/models/pong.py index 3f31d7b11..558f45531 100644 --- a/kittycad/models/pong.py +++ b/kittycad/models/pong.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class Pong(BaseModel): """The response from the `/ping` endpoint.""" diff --git a/kittycad/models/raw_file.py b/kittycad/models/raw_file.py index 61bc11551..9f974fe17 100644 --- a/kittycad/models/raw_file.py +++ b/kittycad/models/raw_file.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class RawFile(BaseModel): """A raw file with unencoded contents to be passed over binary websockets.""" diff --git a/kittycad/models/rtc_ice_candidate_init.py b/kittycad/models/rtc_ice_candidate_init.py index 253605268..b1e546012 100644 --- a/kittycad/models/rtc_ice_candidate_init.py +++ b/kittycad/models/rtc_ice_candidate_init.py @@ -3,6 +3,7 @@ from typing import Optional from pydantic import BaseModel + class RtcIceCandidateInit(BaseModel): """ICECandidateInit is used to serialize ice candidates""" diff --git a/kittycad/models/select_get.py b/kittycad/models/select_get.py index 6b5627cce..7db252319 100644 --- a/kittycad/models/select_get.py +++ b/kittycad/models/select_get.py @@ -4,6 +4,7 @@ from uuid import UUID from pydantic import BaseModel + class SelectGet(BaseModel): """The response from the `SelectGet` command.""" diff --git a/kittycad/models/select_with_point.py b/kittycad/models/select_with_point.py index ca5fbe218..d15208229 100644 --- a/kittycad/models/select_with_point.py +++ b/kittycad/models/select_with_point.py @@ -4,6 +4,7 @@ from uuid import UUID from pydantic import BaseModel + class SelectWithPoint(BaseModel): """The response from the `SelectWithPoint` command.""" diff --git a/kittycad/models/selection.py b/kittycad/models/selection.py index be392baaa..0f3a14fad 100644 --- a/kittycad/models/selection.py +++ b/kittycad/models/selection.py @@ -1,8 +1,6 @@ -from typing import Any, Dict, Type, TypeVar, Union +from typing import Union -import attr -from pydantic import BaseModel, GetCoreSchemaHandler -from pydantic_core import CoreSchema, core_schema +from pydantic import BaseModel, RootModel @@ -44,86 +42,12 @@ class mesh_by_name(BaseModel): type: str = "mesh_by_name" -GY = TypeVar("GY", bound="Selection") - - -@attr.s(auto_attribs=True) -class Selection: - - """Data item selection.""" - - type: Union[ +Selection = RootModel[ + Union[ default_scene, scene_by_index, scene_by_name, mesh_by_index, mesh_by_name, ] - - def __init__( - self, - type: Union[ - default_scene, - scene_by_index, - scene_by_name, - mesh_by_index, - mesh_by_name, - ], - ): - self.type = type - - def model_dump(self) -> Dict[str, Any]: - if isinstance(self.type, default_scene): - JO: default_scene = self.type - return JO.model_dump() - elif isinstance(self.type, scene_by_index): - TE: scene_by_index = self.type - return TE.model_dump() - elif isinstance(self.type, scene_by_name): - WY: scene_by_name = self.type - return WY.model_dump() - elif isinstance(self.type, mesh_by_index): - QV: mesh_by_index = self.type - return QV.model_dump() - elif isinstance(self.type, mesh_by_name): - BP: mesh_by_name = self.type - return BP.model_dump() - - raise Exception("Unknown type") - - @classmethod - def from_dict(cls: Type[GY], d: Dict[str, Any]) -> GY: - if d.get("type") == "default_scene": - OF: default_scene = default_scene(**d) - return cls(type=OF) - elif d.get("type") == "scene_by_index": - OV: scene_by_index = scene_by_index(**d) - return cls(type=OV) - elif d.get("type") == "scene_by_name": - FK: scene_by_name = scene_by_name(**d) - return cls(type=FK) - elif d.get("type") == "mesh_by_index": - PE: mesh_by_index = mesh_by_index(**d) - return cls(type=PE) - elif d.get("type") == "mesh_by_name": - FP: mesh_by_name = mesh_by_name(**d) - return cls(type=FP) - - raise Exception("Unknown type") - - @classmethod - def __get_pydantic_core_schema__( - cls, source_type: Any, handler: GetCoreSchemaHandler - ) -> CoreSchema: - return core_schema.no_info_after_validator_function( - cls, - handler( - Union[ - default_scene, - scene_by_index, - scene_by_name, - mesh_by_index, - mesh_by_name, - ] - ), - ) +] diff --git a/kittycad/models/solid3d_get_all_edge_faces.py b/kittycad/models/solid3d_get_all_edge_faces.py index 556a5fa77..6a2442c42 100644 --- a/kittycad/models/solid3d_get_all_edge_faces.py +++ b/kittycad/models/solid3d_get_all_edge_faces.py @@ -4,6 +4,7 @@ from uuid import UUID from pydantic import BaseModel + class Solid3dGetAllEdgeFaces(BaseModel): """The response from the `Solid3dGetAllEdgeFaces` command.""" diff --git a/kittycad/models/solid3d_get_all_opposite_edges.py b/kittycad/models/solid3d_get_all_opposite_edges.py index ecef1a52f..d83d5c83e 100644 --- a/kittycad/models/solid3d_get_all_opposite_edges.py +++ b/kittycad/models/solid3d_get_all_opposite_edges.py @@ -4,6 +4,7 @@ from uuid import UUID from pydantic import BaseModel + class Solid3dGetAllOppositeEdges(BaseModel): """The response from the `Solid3dGetAllOppositeEdges` command.""" diff --git a/kittycad/models/solid3d_get_next_adjacent_edge.py b/kittycad/models/solid3d_get_next_adjacent_edge.py index 916027813..49e08b573 100644 --- a/kittycad/models/solid3d_get_next_adjacent_edge.py +++ b/kittycad/models/solid3d_get_next_adjacent_edge.py @@ -4,6 +4,7 @@ from uuid import UUID from pydantic import BaseModel + class Solid3dGetNextAdjacentEdge(BaseModel): """The response from the `Solid3dGetNextAdjacentEdge` command.""" diff --git a/kittycad/models/solid3d_get_opposite_edge.py b/kittycad/models/solid3d_get_opposite_edge.py index d9fb4c2b6..2bb0f1f34 100644 --- a/kittycad/models/solid3d_get_opposite_edge.py +++ b/kittycad/models/solid3d_get_opposite_edge.py @@ -3,6 +3,7 @@ from uuid import UUID from pydantic import BaseModel + class Solid3dGetOppositeEdge(BaseModel): """The response from the `Solid3dGetOppositeEdge` command.""" diff --git a/kittycad/models/solid3d_get_prev_adjacent_edge.py b/kittycad/models/solid3d_get_prev_adjacent_edge.py index f058adfd0..51f90cf43 100644 --- a/kittycad/models/solid3d_get_prev_adjacent_edge.py +++ b/kittycad/models/solid3d_get_prev_adjacent_edge.py @@ -4,6 +4,7 @@ from uuid import UUID from pydantic import BaseModel + class Solid3dGetPrevAdjacentEdge(BaseModel): """The response from the `Solid3dGetPrevAdjacentEdge` command.""" diff --git a/kittycad/models/take_snapshot.py b/kittycad/models/take_snapshot.py index ed68eb242..9e63564f6 100644 --- a/kittycad/models/take_snapshot.py +++ b/kittycad/models/take_snapshot.py @@ -1,8 +1,10 @@ -from pydantic import Base64Bytes, BaseModel +from pydantic import BaseModel + +from .base64data import Base64Data class TakeSnapshot(BaseModel): """The response from the `TakeSnapshot` command.""" - contents: Base64Bytes + contents: Base64Data diff --git a/kittycad/models/text_to_cad.py b/kittycad/models/text_to_cad.py index 96a3ee3c6..6873fcaca 100644 --- a/kittycad/models/text_to_cad.py +++ b/kittycad/models/text_to_cad.py @@ -1,12 +1,13 @@ import datetime from typing import Dict, Optional -from pydantic import Base64Bytes, BaseModel +from pydantic import BaseModel from ..models.ai_feedback import AiFeedback from ..models.api_call_status import ApiCallStatus from ..models.file_export_format import FileExportFormat from ..models.uuid import Uuid +from .base64data import Base64Data class TextToCad(BaseModel): @@ -26,7 +27,7 @@ class TextToCad(BaseModel): output_format: FileExportFormat - outputs: Optional[Dict[str, Base64Bytes]] = None + outputs: Optional[Dict[str, Base64Data]] = None prompt: str diff --git a/kittycad/models/text_to_cad_create_body.py b/kittycad/models/text_to_cad_create_body.py index 9a9345ecd..2948315b2 100644 --- a/kittycad/models/text_to_cad_create_body.py +++ b/kittycad/models/text_to_cad_create_body.py @@ -2,6 +2,7 @@ from pydantic import BaseModel + class TextToCadCreateBody(BaseModel): """Body for generating models from text.""" diff --git a/kittycad/models/update_user.py b/kittycad/models/update_user.py index 4df335445..2bd0e8c59 100644 --- a/kittycad/models/update_user.py +++ b/kittycad/models/update_user.py @@ -1,7 +1,7 @@ from typing import Optional from pydantic import BaseModel -from pydantic_extra_types.phone_number import PhoneNumber + class UpdateUser(BaseModel): @@ -17,4 +17,4 @@ class UpdateUser(BaseModel): last_name: Optional[str] = None - phone: Optional[PhoneNumber] = None + phone: Optional[str] = None diff --git a/kittycad/models/user.py b/kittycad/models/user.py index 5b82657a8..2db76585e 100644 --- a/kittycad/models/user.py +++ b/kittycad/models/user.py @@ -2,7 +2,6 @@ import datetime from typing import Optional from pydantic import BaseModel -from pydantic_extra_types.phone_number import PhoneNumber from ..models.uuid import Uuid @@ -32,6 +31,6 @@ class User(BaseModel): name: Optional[str] = None - phone: Optional[PhoneNumber] = None + phone: Optional[str] = None updated_at: datetime.datetime diff --git a/kittycad/models/web_socket_request.py b/kittycad/models/web_socket_request.py index 312141678..320a032db 100644 --- a/kittycad/models/web_socket_request.py +++ b/kittycad/models/web_socket_request.py @@ -1,8 +1,6 @@ -from typing import Any, Dict, List, Type, TypeVar, Union +from typing import List, Union -import attr -from pydantic import BaseModel, GetCoreSchemaHandler -from pydantic_core import CoreSchema, core_schema +from pydantic import BaseModel, RootModel from ..models.client_metrics import ClientMetrics from ..models.modeling_cmd import ModelingCmd @@ -60,15 +58,8 @@ class metrics_response(BaseModel): type: str = "metrics_response" -GY = TypeVar("GY", bound="WebSocketRequest") - - -@attr.s(auto_attribs=True) -class WebSocketRequest: - - """The websocket messages the server receives.""" - - type: Union[ +WebSocketRequest = RootModel[ + Union[ trickle_ice, sdp_offer, modeling_cmd_req, @@ -76,79 +67,4 @@ class WebSocketRequest: ping, metrics_response, ] - - def __init__( - self, - type: Union[ - trickle_ice, - sdp_offer, - modeling_cmd_req, - modeling_cmd_batch_req, - ping, - metrics_response, - ], - ): - self.type = type - - def model_dump(self) -> Dict[str, Any]: - if isinstance(self.type, trickle_ice): - WI: trickle_ice = self.type - return WI.model_dump() - elif isinstance(self.type, sdp_offer): - YR: sdp_offer = self.type - return YR.model_dump() - elif isinstance(self.type, modeling_cmd_req): - XK: modeling_cmd_req = self.type - return XK.model_dump() - elif isinstance(self.type, modeling_cmd_batch_req): - OB: modeling_cmd_batch_req = self.type - return OB.model_dump() - elif isinstance(self.type, ping): - QQ: ping = self.type - return QQ.model_dump() - elif isinstance(self.type, metrics_response): - WX: metrics_response = self.type - return WX.model_dump() - - raise Exception("Unknown type") - - @classmethod - def from_dict(cls: Type[GY], d: Dict[str, Any]) -> GY: - if d.get("type") == "trickle_ice": - QL: trickle_ice = trickle_ice(**d) - return cls(type=QL) - elif d.get("type") == "sdp_offer": - ME: sdp_offer = sdp_offer(**d) - return cls(type=ME) - elif d.get("type") == "modeling_cmd_req": - EB: modeling_cmd_req = modeling_cmd_req(**d) - return cls(type=EB) - elif d.get("type") == "modeling_cmd_batch_req": - VK: modeling_cmd_batch_req = modeling_cmd_batch_req(**d) - return cls(type=VK) - elif d.get("type") == "ping": - ZC: ping = ping(**d) - return cls(type=ZC) - elif d.get("type") == "metrics_response": - BE: metrics_response = metrics_response(**d) - return cls(type=BE) - - raise Exception("Unknown type") - - @classmethod - def __get_pydantic_core_schema__( - cls, source_type: Any, handler: GetCoreSchemaHandler - ) -> CoreSchema: - return core_schema.no_info_after_validator_function( - cls, - handler( - Union[ - trickle_ice, - sdp_offer, - modeling_cmd_req, - modeling_cmd_batch_req, - ping, - metrics_response, - ] - ), - ) +] diff --git a/kittycad/models/web_socket_response.py b/kittycad/models/web_socket_response.py index 7fe12b551..5163fdb72 100644 --- a/kittycad/models/web_socket_response.py +++ b/kittycad/models/web_socket_response.py @@ -1,65 +1,13 @@ -from typing import Any, Dict, Type, TypeVar, Union +from typing import Union -import attr -from pydantic import GetCoreSchemaHandler -from pydantic_core import CoreSchema, core_schema +from pydantic import RootModel from .failure_web_socket_response import FailureWebSocketResponse from .success_web_socket_response import SuccessWebSocketResponse -GY = TypeVar("GY", bound="WebSocketResponse") - - -@attr.s(auto_attribs=True) -class WebSocketResponse: - - """Websocket responses can either be successful or unsuccessful. Slightly different schemas in either case.""" - - type: Union[ +WebSocketResponse = RootModel[ + Union[ SuccessWebSocketResponse, FailureWebSocketResponse, ] - - def __init__( - self, - type: Union[ - SuccessWebSocketResponse, - FailureWebSocketResponse, - ], - ): - self.type = type - - def model_dump(self) -> Dict[str, Any]: - if isinstance(self.type, SuccessWebSocketResponse): - HV: SuccessWebSocketResponse = self.type - return HV.model_dump() - elif isinstance(self.type, FailureWebSocketResponse): - CL: FailureWebSocketResponse = self.type - return CL.model_dump() - - raise Exception("Unknown type") - - @classmethod - def from_dict(cls: Type[GY], d: Dict[str, Any]) -> GY: - if d.get("success") is True: - CD: SuccessWebSocketResponse = SuccessWebSocketResponse(**d) - return cls(type=CD) - elif d.get("success") is False: - ZO: FailureWebSocketResponse = FailureWebSocketResponse(**d) - return cls(type=ZO) - - raise Exception("Unknown type") - - @classmethod - def __get_pydantic_core_schema__( - cls, source_type: Any, handler: GetCoreSchemaHandler - ) -> CoreSchema: - return core_schema.no_info_after_validator_function( - cls, - handler( - Union[ - SuccessWebSocketResponse, - FailureWebSocketResponse, - ] - ), - ) +]