Skip to content

Commit eb54852

Browse files
Update api spec (#527)
* YOYO NEW API SPEC! * I have generated the latest API! --------- Co-authored-by: zoo-github-actions-auth[bot] <zoo-github-actions-auth[bot]@users.noreply.github.com>
1 parent b955162 commit eb54852

19 files changed

+1398
-45
lines changed

kittycad.py.patch.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@
179179
"op": "add",
180180
"path": "/paths/~1file~1conversion/post/x-python",
181181
"value": {
182-
"example": "from kittycad.models.conversion_params import ConversionParams\nfrom kittycad.models.output_format3d import OptionPly\nfrom kittycad.models.system import System\nfrom kittycad.models.axis_direction_pair import AxisDirectionPair\nfrom kittycad.models.axis import Axis\nfrom kittycad.models.direction import Direction\nfrom kittycad.models.axis_direction_pair import AxisDirectionPair\nfrom kittycad.models.axis import Axis\nfrom kittycad.models.direction import Direction\nfrom kittycad.models.selection import OptionMeshByIndex\nfrom kittycad.models.selection import Selection\nfrom kittycad.models.ply_storage import PlyStorage\nfrom kittycad.models.unit_length import UnitLength\nfrom kittycad.models.output_format3d import OutputFormat3d\nfrom kittycad.models.input_format3d import OptionGltf\nfrom kittycad.models.input_format3d import InputFormat3d\nfrom pathlib import Path\nfrom typing import Dict\nfrom kittycad._io_types import SyncUpload\nfrom kittycad.models import FileConversion\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_create_file_conversion_options():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n result: FileConversion = client.file.create_file_conversion_options(body=ConversionParams(\n output_format=OutputFormat3d(OptionPly(\n coords=System(\n forward=AxisDirectionPair(\n axis=Axis.Y,\n direction=Direction.POSITIVE,\n ),\n up=AxisDirectionPair(\n axis=Axis.Y,\n direction=Direction.POSITIVE,\n ),\n ),\n selection=Selection(OptionMeshByIndex(\n index=10,\n )),\n storage=PlyStorage.ASCII,\n units=UnitLength.CM,\n )),\n src_format=InputFormat3d(OptionGltf()),\n ),\n file_attachments={\n \"main.kcl\": Path(\"path/to/main.kcl\"),\n \"helper.kcl\": Path(\"path/to/helper.kcl\"),\n })\n\n\n body: FileConversion = result\n print(body)\n\n",
182+
"example": "from kittycad.models.conversion_params import ConversionParams\nfrom kittycad.models.output_format3d import OptionPly\nfrom kittycad.models.system import System\nfrom kittycad.models.axis_direction_pair import AxisDirectionPair\nfrom kittycad.models.axis import Axis\nfrom kittycad.models.direction import Direction\nfrom kittycad.models.axis_direction_pair import AxisDirectionPair\nfrom kittycad.models.axis import Axis\nfrom kittycad.models.direction import Direction\nfrom kittycad.models.selection import OptionDefaultScene\nfrom kittycad.models.selection import Selection\nfrom kittycad.models.ply_storage import PlyStorage\nfrom kittycad.models.unit_length import UnitLength\nfrom kittycad.models.output_format3d import OutputFormat3d\nfrom kittycad.models.input_format3d import OptionSldprt\nfrom kittycad.models.input_format3d import InputFormat3d\nfrom pathlib import Path\nfrom typing import Dict\nfrom kittycad._io_types import SyncUpload\nfrom kittycad.models import FileConversion\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_create_file_conversion_options():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n result: FileConversion = client.file.create_file_conversion_options(body=ConversionParams(\n output_format=OutputFormat3d(OptionPly(\n coords=System(\n forward=AxisDirectionPair(\n axis=Axis.Y,\n direction=Direction.POSITIVE,\n ),\n up=AxisDirectionPair(\n axis=Axis.Y,\n direction=Direction.POSITIVE,\n ),\n ),\n selection=Selection(OptionDefaultScene()),\n storage=PlyStorage.ASCII,\n units=UnitLength.CM,\n )),\n src_format=InputFormat3d(OptionSldprt(\n split_closed_faces=False,\n )),\n ),\n file_attachments={\n \"main.kcl\": Path(\"path/to/main.kcl\"),\n \"helper.kcl\": Path(\"path/to/helper.kcl\"),\n })\n\n\n body: FileConversion = result\n print(body)\n\n",
183183
"libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.file"
184184
}
185185
},
@@ -571,15 +571,15 @@
571571
"op": "add",
572572
"path": "/paths/~1org~1saml~1idp/post/x-python",
573573
"value": {
574-
"example": "from kittycad.models.saml_identity_provider_create import SamlIdentityProviderCreate\nfrom kittycad.models.idp_metadata_source import OptionBase64EncodedXml\nfrom kittycad.models.base64data import Base64Data\nfrom kittycad.models.idp_metadata_source import IdpMetadataSource\nfrom kittycad.models import SamlIdentityProvider\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_create_org_saml_idp():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n result: SamlIdentityProvider = client.orgs.create_org_saml_idp(body=SamlIdentityProviderCreate(\n idp_entity_id=\"<string>\",\n idp_metadata_source=IdpMetadataSource(OptionBase64EncodedXml(\n data=Base64Data(b\"<bytes>\"),\n )),\n technical_contact_email=\"<string>\",\n ))\n\n\n body: SamlIdentityProvider = result\n print(body)\n\n",
574+
"example": "from kittycad.models.saml_identity_provider_create import SamlIdentityProviderCreate\nfrom kittycad.models.idp_metadata_source import OptionUrl\nfrom kittycad.models.idp_metadata_source import IdpMetadataSource\nfrom kittycad.models import SamlIdentityProvider\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_create_org_saml_idp():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n result: SamlIdentityProvider = client.orgs.create_org_saml_idp(body=SamlIdentityProviderCreate(\n idp_entity_id=\"<string>\",\n idp_metadata_source=IdpMetadataSource(OptionUrl(\n url=\"<string>\",\n )),\n technical_contact_email=\"<string>\",\n ))\n\n\n body: SamlIdentityProvider = result\n print(body)\n\n",
575575
"libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.orgs"
576576
}
577577
},
578578
{
579579
"op": "add",
580580
"path": "/paths/~1org~1saml~1idp/put/x-python",
581581
"value": {
582-
"example": "from kittycad.models.saml_identity_provider_create import SamlIdentityProviderCreate\nfrom kittycad.models.idp_metadata_source import OptionBase64EncodedXml\nfrom kittycad.models.base64data import Base64Data\nfrom kittycad.models.idp_metadata_source import IdpMetadataSource\nfrom kittycad.models import SamlIdentityProvider\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_update_org_saml_idp():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n result: SamlIdentityProvider = client.orgs.update_org_saml_idp(body=SamlIdentityProviderCreate(\n idp_entity_id=\"<string>\",\n idp_metadata_source=IdpMetadataSource(OptionBase64EncodedXml(\n data=Base64Data(b\"<bytes>\"),\n )),\n technical_contact_email=\"<string>\",\n ))\n\n\n body: SamlIdentityProvider = result\n print(body)\n\n",
582+
"example": "from kittycad.models.saml_identity_provider_create import SamlIdentityProviderCreate\nfrom kittycad.models.idp_metadata_source import OptionUrl\nfrom kittycad.models.idp_metadata_source import IdpMetadataSource\nfrom kittycad.models import SamlIdentityProvider\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_update_org_saml_idp():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n result: SamlIdentityProvider = client.orgs.update_org_saml_idp(body=SamlIdentityProviderCreate(\n idp_entity_id=\"<string>\",\n idp_metadata_source=IdpMetadataSource(OptionUrl(\n url=\"<string>\",\n )),\n technical_contact_email=\"<string>\",\n ))\n\n\n body: SamlIdentityProvider = result\n print(body)\n\n",
583583
"libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.orgs"
584584
}
585585
},
@@ -1163,7 +1163,7 @@
11631163
"op": "add",
11641164
"path": "/paths/~1ws~1modeling~1commands/get/x-python",
11651165
"value": {
1166-
"example": "from kittycad.models.post_effect_type import PostEffectType\nfrom kittycad.models import WebSocketRequest\nfrom kittycad.models.web_socket_request import OptionHeaders\nfrom kittycad.models import WebSocketResponse\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_modeling_commands_ws():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n # Connect to the websocket.\n with client.modeling.modeling_commands_ws(fps=10,\n post_effect=PostEffectType.PHOSPHOR,\n show_grid=False,\n unlocked_framerate=False,\n video_res_height=10,\n video_res_width=10,\n webrtc=False,\n api_call_id=None,\n pool=None,\n replay=None) as websocket:\n\n # Send a message.\n websocket.send(WebSocketRequest(OptionHeaders(\nheaders={\"<string>\": \"<string>\"},\n)))\n\n # Get a message.\n message = websocket.recv()\n print(message)\n\n ",
1166+
"example": "from kittycad.models.post_effect_type import PostEffectType\nfrom kittycad.models import WebSocketRequest\nfrom kittycad.models.web_socket_request import OptionTrickleIce\nfrom kittycad.models.rtc_ice_candidate_init import RtcIceCandidateInit\nfrom kittycad.models import WebSocketResponse\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_modeling_commands_ws():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n # Connect to the websocket.\n with client.modeling.modeling_commands_ws(fps=10,\n post_effect=PostEffectType.PHOSPHOR,\n show_grid=False,\n unlocked_framerate=False,\n video_res_height=10,\n video_res_width=10,\n webrtc=False,\n api_call_id=None,\n pool=None,\n replay=None) as websocket:\n\n # Send a message.\n websocket.send(WebSocketRequest(OptionTrickleIce(\ncandidate=RtcIceCandidateInit(\ncandidate=\"<string>\",\n),\n)))\n\n # Get a message.\n message = websocket.recv()\n print(message)\n\n ",
11671167
"libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.modeling"
11681168
}
11691169
}

kittycad/models/__init__.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,13 @@
66
from .address_details import AddressDetails
77
from .adjacency_info import AdjacencyInfo
88
from .angle import Angle
9+
from .annotation_basic_dimension import AnnotationBasicDimension
10+
from .annotation_feature_control import AnnotationFeatureControl
11+
from .annotation_feature_tag import AnnotationFeatureTag
912
from .annotation_line_end import AnnotationLineEnd
1013
from .annotation_line_end_options import AnnotationLineEndOptions
14+
from .annotation_mbd_basic_dimension import AnnotationMbdBasicDimension
15+
from .annotation_mbd_control_frame import AnnotationMbdControlFrame
1116
from .annotation_options import AnnotationOptions
1217
from .annotation_text_alignment_x import AnnotationTextAlignmentX
1318
from .annotation_text_alignment_y import AnnotationTextAlignmentY
@@ -75,6 +80,7 @@
7580
from .customer_balance import CustomerBalance
7681
from .cut_strategy import CutStrategy
7782
from .cut_type import CutType
83+
from .cut_type_v2 import CutTypeV2
7884
from .default_camera_center_to_scene import DefaultCameraCenterToScene
7985
from .default_camera_center_to_selection import DefaultCameraCenterToSelection
8086
from .default_camera_focus_on import DefaultCameraFocusOn
@@ -136,6 +142,8 @@
136142
from .extended_user_results_page import ExtendedUserResultsPage
137143
from .extrude import Extrude
138144
from .extrude_method import ExtrudeMethod
145+
from .extrude_reference import ExtrudeReference
146+
from .extrude_to_reference import ExtrudeToReference
139147
from .extruded_face_info import ExtrudedFaceInfo
140148
from .extrusion_face_cap_type import ExtrusionFaceCapType
141149
from .extrusion_face_info import ExtrusionFaceInfo
@@ -188,6 +196,7 @@
188196
from .make_offset_path import MakeOffsetPath
189197
from .make_plane import MakePlane
190198
from .mass import Mass
199+
from .mbd_symbol import MbdSymbol
191200
from .method import Method
192201
from .ml_copilot_client_message import MlCopilotClientMessage
193202
from .ml_copilot_server_message import MlCopilotServerMessage
@@ -310,6 +319,7 @@
310319
from .side_face import SideFace
311320
from .sketch_mode_disable import SketchModeDisable
312321
from .solid2d_add_hole import Solid2dAddHole
322+
from .solid3d_cut_edges import Solid3dCutEdges
313323
from .solid3d_fillet_edge import Solid3dFilletEdge
314324
from .solid3d_get_adjacency_info import Solid3dGetAdjacencyInfo
315325
from .solid3d_get_all_edge_faces import Solid3dGetAllEdgeFaces
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from ..models.annotation_mbd_basic_dimension import AnnotationMbdBasicDimension
2+
from ..models.point2d import Point2d
3+
from .base import KittyCadBaseModel
4+
5+
6+
class AnnotationBasicDimension(KittyCadBaseModel):
7+
"""Parameters for defining an MBD Basic Dimension Annotation state which is measured between two positions in 3D"""
8+
9+
dimension: AnnotationMbdBasicDimension
10+
11+
font_point_size: int
12+
13+
font_scale: float
14+
15+
from_entity_id: str
16+
17+
from_entity_pos: Point2d
18+
19+
offset: Point2d
20+
21+
plane_id: str
22+
23+
precision: int
24+
25+
to_entity_id: str
26+
27+
to_entity_pos: Point2d
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from typing import Optional
2+
3+
from ..models.annotation_line_end import AnnotationLineEnd
4+
from ..models.annotation_mbd_basic_dimension import AnnotationMbdBasicDimension
5+
from ..models.annotation_mbd_control_frame import AnnotationMbdControlFrame
6+
from ..models.point2d import Point2d
7+
from .base import KittyCadBaseModel
8+
9+
10+
class AnnotationFeatureControl(KittyCadBaseModel):
11+
"""Parameters for defining an MBD Feature Control Annotation state"""
12+
13+
control_frame: Optional[AnnotationMbdControlFrame] = None
14+
15+
defined_datum: Optional[str] = None
16+
17+
dimension: Optional[AnnotationMbdBasicDimension] = None
18+
19+
entity_id: str
20+
21+
entity_pos: Point2d
22+
23+
font_point_size: int
24+
25+
font_scale: float
26+
27+
leader_type: AnnotationLineEnd
28+
29+
offset: Point2d
30+
31+
plane_id: str
32+
33+
precision: int
34+
35+
prefix: Optional[str] = None
36+
37+
suffix: Optional[str] = None
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from ..models.annotation_line_end import AnnotationLineEnd
2+
from ..models.point2d import Point2d
3+
from .base import KittyCadBaseModel
4+
5+
6+
class AnnotationFeatureTag(KittyCadBaseModel):
7+
"""Parameters for defining an MBD Feature Tag Annotation state"""
8+
9+
entity_id: str
10+
11+
entity_pos: Point2d
12+
13+
font_point_size: int
14+
15+
font_scale: float
16+
17+
key: str
18+
19+
leader_type: AnnotationLineEnd
20+
21+
offset: Point2d
22+
23+
plane_id: str
24+
25+
show_key: bool
26+
27+
value: str

kittycad/models/annotation_line_end.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,7 @@ class AnnotationLineEnd(str, Enum):
88

99
ARROW = "arrow"
1010

11+
DOT = "dot"
12+
1113
def __str__(self) -> str:
1214
return str(self.value)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from typing import Optional
2+
3+
from ..models.mbd_symbol import MbdSymbol
4+
from .base import KittyCadBaseModel
5+
6+
7+
class AnnotationMbdBasicDimension(KittyCadBaseModel):
8+
"""Parameters for defining an MBD basic dimension"""
9+
10+
dimension: Optional[float] = None
11+
12+
symbol: Optional[MbdSymbol] = None
13+
14+
tolerance: float
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from typing import Optional
2+
3+
from ..models.mbd_symbol import MbdSymbol
4+
from .base import KittyCadBaseModel
5+
6+
7+
class AnnotationMbdControlFrame(KittyCadBaseModel):
8+
"""Parameters for defining an MBD Geometric control frame"""
9+
10+
diameter_symbol: Optional[MbdSymbol] = None
11+
12+
modifier: Optional[MbdSymbol] = None
13+
14+
primary_datum: Optional[str] = None
15+
16+
secondary_datum: Optional[str] = None
17+
18+
symbol: MbdSymbol
19+
20+
tertiary_datum: Optional[str] = None
21+
22+
tolerance: float

kittycad/models/annotation_options.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
from typing import Optional
22

3+
from ..models.annotation_basic_dimension import AnnotationBasicDimension
4+
from ..models.annotation_feature_control import AnnotationFeatureControl
5+
from ..models.annotation_feature_tag import AnnotationFeatureTag
36
from ..models.annotation_line_end_options import AnnotationLineEndOptions
47
from ..models.annotation_text_options import AnnotationTextOptions
58
from ..models.color import Color
@@ -12,6 +15,12 @@ class AnnotationOptions(KittyCadBaseModel):
1215

1316
color: Optional[Color] = None
1417

18+
dimension: Optional[AnnotationBasicDimension] = None
19+
20+
feature_control: Optional[AnnotationFeatureControl] = None
21+
22+
feature_tag: Optional[AnnotationFeatureTag] = None
23+
1524
line_ends: Optional[AnnotationLineEndOptions] = None
1625

1726
line_width: Optional[float] = None

kittycad/models/cut_type_v2.py

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
from typing import Optional, Union
2+
3+
from pydantic import RootModel, model_serializer, model_validator
4+
5+
from ..models.angle import Angle
6+
from ..models.length_unit import LengthUnit
7+
from .base import KittyCadBaseModel
8+
9+
10+
class Fillet(KittyCadBaseModel):
11+
"""Round off an edge."""
12+
13+
radius: LengthUnit
14+
15+
second_length: Optional[LengthUnit] = None
16+
17+
@model_validator(mode="before")
18+
@classmethod
19+
def _unwrap(cls, data):
20+
if (
21+
isinstance(data, dict)
22+
and "fillet" in data
23+
and isinstance(data["fillet"], dict)
24+
):
25+
return data["fillet"]
26+
27+
return data
28+
29+
@model_serializer(mode="wrap")
30+
def _wrap(self, handler, info):
31+
payload = handler(self, info)
32+
33+
return {"fillet": payload}
34+
35+
36+
class Chamfer(KittyCadBaseModel):
37+
"""Cut away an edge."""
38+
39+
angle: Optional[Angle] = None
40+
41+
distance: LengthUnit
42+
43+
second_distance: Optional[LengthUnit] = None
44+
45+
swap: bool
46+
47+
@model_validator(mode="before")
48+
@classmethod
49+
def _unwrap(cls, data):
50+
if (
51+
isinstance(data, dict)
52+
and "chamfer" in data
53+
and isinstance(data["chamfer"], dict)
54+
):
55+
return data["chamfer"]
56+
57+
return data
58+
59+
@model_serializer(mode="wrap")
60+
def _wrap(self, handler, info):
61+
payload = handler(self, info)
62+
63+
return {"chamfer": payload}
64+
65+
66+
class Custom(KittyCadBaseModel):
67+
"""A custom cut profile."""
68+
69+
path: str
70+
71+
@model_validator(mode="before")
72+
@classmethod
73+
def _unwrap(cls, data):
74+
if (
75+
isinstance(data, dict)
76+
and "custom" in data
77+
and isinstance(data["custom"], dict)
78+
):
79+
return data["custom"]
80+
81+
return data
82+
83+
@model_serializer(mode="wrap")
84+
def _wrap(self, handler, info):
85+
payload = handler(self, info)
86+
87+
return {"custom": payload}
88+
89+
90+
CutTypeV2 = RootModel[
91+
Union[
92+
Fillet,
93+
Chamfer,
94+
Custom,
95+
]
96+
]

0 commit comments

Comments
 (0)