From 003d0cadb82d4e72bdab62b816d5ab42f0075967 Mon Sep 17 00:00:00 2001 From: "zoo-github-actions-auth[bot]" Date: Tue, 16 Dec 2025 16:37:12 +0000 Subject: [PATCH 1/2] YOYO NEW API SPEC! --- spec.json | 286 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 281 insertions(+), 5 deletions(-) diff --git a/spec.json b/spec.json index f768b946c..1b9d6553a 100644 --- a/spec.json +++ b/spec.json @@ -17996,6 +17996,100 @@ } } }, + "/user/features": { + "get": { + "tags": [ + "users" + ], + "summary": "List user-visible feature flags enabled for the authenticated user.", + "description": "Returns only features that are marked as safe for exposure to clients and currently resolved to `true` for the requesting user (including org overrides).", + "operationId": "user_features_get", + "responses": { + "200": { + "description": "successful operation", + "headers": { + "Access-Control-Allow-Credentials": { + "description": "Access-Control-Allow-Credentials header.", + "style": "simple", + "schema": { + "nullable": true, + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "description": "Access-Control-Allow-Headers header. This is a comma-separated list of headers.", + "style": "simple", + "schema": { + "nullable": true, + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "description": "Access-Control-Allow-Methods header.", + "style": "simple", + "schema": { + "nullable": true, + "type": "string" + } + }, + "Access-Control-Allow-Origin": { + "description": "Access-Control-Allow-Origin header.", + "style": "simple", + "schema": { + "nullable": true, + "type": "string" + } + }, + "Content-Location": { + "description": "The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.", + "style": "simple", + "schema": { + "nullable": true, + "type": "string" + } + }, + "Location": { + "description": "The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.", + "style": "simple", + "schema": { + "nullable": true, + "type": "string" + } + }, + "Set-Cookie": { + "description": "Set-Cookie header.", + "style": "simple", + "schema": { + "nullable": true, + "type": "string" + } + }, + "X-Api-Call-Id": { + "description": "ID for this request. We return it so that users can report this to us and help us debug their problems.", + "style": "simple", + "required": true, + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserFeatureList" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/Error" + }, + "5XX": { + "$ref": "#/components/responses/Error" + } + } + } + }, "/user/form": { "put": { "tags": [ @@ -23323,6 +23417,14 @@ "minimum": 0 } }, + { + "in": "query", + "name": "order_independent_transparency", + "description": "Enables nicer visuals for transparent surfaces. This slows down rendering, so it's off by default.", + "schema": { + "type": "boolean" + } + }, { "in": "query", "name": "pool", @@ -23392,6 +23494,17 @@ "schema": { "type": "boolean" } + }, + { + "in": "query", + "name": "pr", + "description": "Optional PR number for preview pools. If provided, takes precedence over pool=pr-{id}.", + "schema": { + "nullable": true, + "type": "integer", + "format": "uint64", + "minimum": 0 + } } ], "requestBody": { @@ -26738,11 +26851,6 @@ "type": "number", "format": "money-usd" }, - "deleted": { - "description": "Always true for a deleted object.", - "default": false, - "type": "boolean" - }, "id": { "description": "Unique identifier for the object.", "type": "string" @@ -29958,6 +30066,14 @@ "description": "The form for a public inquiry submission.", "type": "object", "properties": { + "cad_platforms": { + "nullable": true, + "description": "The CAD platforms (used for pilot inquiries).", + "type": "array", + "items": { + "type": "string" + } + }, "company": { "nullable": true, "description": "The company name.", @@ -29985,6 +30101,11 @@ } ] }, + "job_title": { + "nullable": true, + "description": "The job title (used for pilot inquiries).", + "type": "string" + }, "last_name": { "description": "The last name of the user.", "type": "string" @@ -29993,6 +30114,11 @@ "description": "The message content.", "type": "string" }, + "num_cad_users": { + "nullable": true, + "description": "The number of CAD users (used for pilot inquiries).", + "type": "string" + }, "phone": { "nullable": true, "description": "The phone number of the user.", @@ -30010,6 +30136,13 @@ "InquiryType": { "description": "The type of inquiry.", "oneOf": [ + { + "description": "Inquiries related to pilots (on the enterprise page).", + "type": "string", + "enum": [ + "pilot_inquiry" + ] + }, { "description": "General inquiry about the service or product.", "type": "string", @@ -30320,6 +30453,13 @@ "enum": [ "void" ] + }, + { + "description": "Unknown.", + "type": "string", + "enum": [ + "unknown" + ] } ] }, @@ -31252,6 +31392,13 @@ "enum": [ "bye" ] + }, + { + "description": "Interrupt the current prompt that is being processed.", + "type": "string", + "enum": [ + "interrupt" + ] } ] }, @@ -33740,6 +33887,15 @@ "type": "number", "format": "float" }, + "backface_color": { + "nullable": true, + "description": "Color of the backface", + "allOf": [ + { + "$ref": "#/components/schemas/Color" + } + ] + }, "color": { "description": "Color of the new material", "allOf": [ @@ -36122,6 +36278,26 @@ "required": [ "type" ] + }, + { + "description": "Render transparent surfaces more accurately, but this might make rendering slower. Because it can interfere with runtime performance, it defaults to false.", + "type": "object", + "properties": { + "enabled": { + "nullable": true, + "description": "Enables or disables OIT. If not given, toggles it.", + "type": "boolean" + }, + "type": { + "type": "string", + "enum": [ + "set_order_independent_transparency" + ] + } + }, + "required": [ + "type" + ] } ] }, @@ -38810,6 +38986,24 @@ "data", "type" ] + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/SetOrderIndependentTransparency" + }, + "type": { + "type": "string", + "enum": [ + "set_order_independent_transparency" + ] + } + }, + "required": [ + "data", + "type" + ] } ] }, @@ -41034,6 +41228,13 @@ "enum": [ "year" ] + }, + { + "description": "Don't use.", + "type": "string", + "enum": [ + "unknown" + ] } ] }, @@ -42161,6 +42362,19 @@ "description": "The response from the `SetObjectTransform` command.", "type": "object" }, + "SetOrderIndependentTransparency": { + "description": "The response from the 'SetOrderIndependentTransparency'.", + "type": "object", + "properties": { + "enabled": { + "description": "Is it now enabled, or disabled?", + "type": "boolean" + } + }, + "required": [ + "enabled" + ] + }, "SetSceneUnits": { "description": "The response from the `SetSceneUnits` endpoint.", "type": "object" @@ -42564,6 +42778,25 @@ "email" ] }, + "SubscriptionActionType": { + "description": "Indicates which kind of Stripe intent requires customer action during subscription creation.", + "oneOf": [ + { + "description": "The client secret belongs to a PaymentIntent (initial invoice payment).", + "type": "string", + "enum": [ + "payment_intent" + ] + }, + { + "description": "The client secret belongs to a SetupIntent (trial or setup-only flow).", + "type": "string", + "enum": [ + "setup_intent" + ] + } + ] + }, "SubscriptionTierFeature": { "description": "A subscription tier feature.", "type": "object", @@ -46180,6 +46413,35 @@ "payment_methods_summary" ] }, + "UserFeatureEntry": { + "description": "Enabled features surfaced to end users.", + "type": "object", + "properties": { + "id": { + "description": "Stable identifier for the feature flag (snake_case).", + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "UserFeatureList": { + "description": "User features response payload.", + "type": "object", + "properties": { + "features": { + "description": "Features that are active and safe to expose to the current user.", + "type": "array", + "items": { + "$ref": "#/components/schemas/UserFeatureEntry" + } + } + }, + "required": [ + "features" + ] + }, "UserIdentifier": { "type": "string" }, @@ -46775,6 +47037,20 @@ "description": "A struct of Zoo product subscriptions.", "type": "object", "properties": { + "action_client_secret": { + "nullable": true, + "description": "Client secret to complete SCA/3DS for the current subscription change, when applicable.", + "type": "string" + }, + "action_type": { + "nullable": true, + "description": "Type of intent associated with `action_client_secret`.", + "allOf": [ + { + "$ref": "#/components/schemas/SubscriptionActionType" + } + ] + }, "modeling_app": { "description": "A modeling app subscription.", "allOf": [ From 4fdeac3797c1f2a6dbdd35c128bca43f44d0b0f8 Mon Sep 17 00:00:00 2001 From: "zoo-github-actions-auth[bot]" Date: Tue, 16 Dec 2025 16:37:52 +0000 Subject: [PATCH 2/2] I have generated the latest API! --- kittycad.py.patch.json | 22 ++-- kittycad/__init__.py | 105 ++++++++++++++++ kittycad/models/__init__.py | 4 + kittycad/models/coupon.py | 2 - kittycad/models/inquiry_form.py | 8 +- kittycad/models/inquiry_type.py | 4 + kittycad/models/invoice_status.py | 4 + kittycad/models/ml_copilot_system_command.py | 4 + kittycad/models/modeling_cmd.py | 13 ++ kittycad/models/ok_modeling_cmd_response.py | 12 ++ kittycad/models/plan_interval.py | 4 + .../set_order_independent_transparency.py | 7 ++ kittycad/models/subscription_action_type.py | 16 +++ kittycad/models/user_feature_entry.py | 7 ++ kittycad/models/user_feature_list.py | 10 ++ kittycad/models/zoo_product_subscriptions.py | 7 ++ kittycad/tests/test_examples.py | 117 ++++++++---------- 17 files changed, 268 insertions(+), 78 deletions(-) create mode 100644 kittycad/models/set_order_independent_transparency.py create mode 100644 kittycad/models/subscription_action_type.py create mode 100644 kittycad/models/user_feature_entry.py create mode 100644 kittycad/models/user_feature_list.py diff --git a/kittycad.py.patch.json b/kittycad.py.patch.json index e2b202d0f..9cfd2437c 100644 --- a/kittycad.py.patch.json +++ b/kittycad.py.patch.json @@ -179,7 +179,7 @@ "op": "add", "path": "/paths/~1file~1conversion/post/x-python", "value": { - "example": "from kittycad.models.conversion_params import ConversionParams\nfrom kittycad.models.output_format3d import OptionStl\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.stl_storage import StlStorage\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(OptionStl(\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=StlStorage.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", + "example": "from kittycad.models.conversion_params import ConversionParams\nfrom kittycad.models.output_format3d import OptionFbx\nfrom kittycad.models.fbx_storage import FbxStorage\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(OptionFbx(\n storage=FbxStorage.ASCII,\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", "libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.file" } }, @@ -699,7 +699,7 @@ "op": "add", "path": "/paths/~1org~1saml~1idp/put/x-python", "value": { - "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=\"\",\n idp_metadata_source=IdpMetadataSource(OptionUrl(\n url=\"\",\n )),\n technical_contact_email=\"\",\n ))\n\n\n body: SamlIdentityProvider = result\n print(body)\n\n", + "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=\"\",\n idp_metadata_source=IdpMetadataSource(OptionBase64EncodedXml(\n data=Base64Data(b\"\"),\n )),\n technical_contact_email=\"\",\n ))\n\n\n body: SamlIdentityProvider = result\n print(body)\n\n", "libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.orgs" } }, @@ -1031,11 +1031,19 @@ "libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.users" } }, + { + "op": "add", + "path": "/paths/~1user~1features/get/x-python", + "value": { + "example": "from kittycad.models import UserFeatureList\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_user_features_get():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n result: UserFeatureList = client.users.user_features_get()\n\n\n body: UserFeatureList = result\n print(body)\n\n", + "libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.users" + } + }, { "op": "add", "path": "/paths/~1user~1form/put/x-python", "value": { - "example": "from kittycad.models.inquiry_form import InquiryForm\nfrom kittycad.models.inquiry_type import InquiryType\ndef example_put_user_form_self():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n client.users.put_user_form_self(body=InquiryForm(\n email=\"\",\n first_name=\"\",\n inquiry_type=InquiryType.GENERAL_INQUIRY,\n last_name=\"\",\n message=\"\",\n ))\n\n", + "example": "from kittycad.models.inquiry_form import InquiryForm\nfrom kittycad.models.inquiry_type import InquiryType\ndef example_put_user_form_self():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n client.users.put_user_form_self(body=InquiryForm(\n email=\"\",\n first_name=\"\",\n inquiry_type=InquiryType.PILOT_INQUIRY,\n last_name=\"\",\n message=\"\",\n ))\n\n", "libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.users" } }, @@ -1251,7 +1259,7 @@ "op": "add", "path": "/paths/~1website~1form/put/x-python", "value": { - "example": "from kittycad.models.inquiry_form import InquiryForm\nfrom kittycad.models.inquiry_type import InquiryType\ndef example_put_public_form():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n client.users.put_public_form(body=InquiryForm(\n email=\"\",\n first_name=\"\",\n inquiry_type=InquiryType.GENERAL_INQUIRY,\n last_name=\"\",\n message=\"\",\n ))\n\n", + "example": "from kittycad.models.inquiry_form import InquiryForm\nfrom kittycad.models.inquiry_type import InquiryType\ndef example_put_public_form():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n client.users.put_public_form(body=InquiryForm(\n email=\"\",\n first_name=\"\",\n inquiry_type=InquiryType.PILOT_INQUIRY,\n last_name=\"\",\n message=\"\",\n ))\n\n", "libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.users" } }, @@ -1275,7 +1283,7 @@ "op": "add", "path": "/paths/~1ws~1ml~1copilot/get/x-python", "value": { - "example": "from kittycad.models import MlCopilotClientMessage\nfrom kittycad.models.ml_copilot_client_message import OptionUser\nfrom kittycad.models.ml_copilot_tool import MlCopilotTool\nfrom typing import List\nfrom kittycad.models.source_range_prompt import SourceRangePrompt\nfrom kittycad.models.source_range import SourceRange\nfrom kittycad.models.source_position import SourcePosition\nfrom kittycad.models.source_position import SourcePosition\nfrom typing import List\nfrom kittycad.models import MlCopilotServerMessage\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_ml_copilot_ws():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n # Connect to the websocket.\n with client.ml.ml_copilot_ws(conversation_id=None,\n replay=None) as websocket:\n\n # Send a message.\n websocket.send(MlCopilotClientMessage(OptionUser(\ncontent=\"\",\n\ncurrent_files={\"\": b\"\"},\n\nforced_tools=[MlCopilotTool.EDIT_KCL_CODE],\n\nsource_ranges=[SourceRangePrompt(\nprompt=\"\",\n\nrange=SourceRange(\nend=SourcePosition(\ncolumn=10,\n\nline=10,\n),\n\nstart=SourcePosition(\ncolumn=10,\n\nline=10,\n),\n),\n)],\n)))\n\n # Get a message.\n message = websocket.recv()\n print(message)\n\n ", + "example": "from kittycad.models import MlCopilotClientMessage\nfrom kittycad.models.ml_copilot_client_message import OptionHeaders\nfrom kittycad.models import MlCopilotServerMessage\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_ml_copilot_ws():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n # Connect to the websocket.\n with client.ml.ml_copilot_ws(conversation_id=None,\n replay=None) as websocket:\n\n # Send a message.\n websocket.send(MlCopilotClientMessage(OptionHeaders(\nheaders={\"\": \"\"},\n)))\n\n # Get a message.\n message = websocket.recv()\n print(message)\n\n ", "libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.ml" } }, @@ -1283,7 +1291,7 @@ "op": "add", "path": "/paths/~1ws~1ml~1reasoning~1{id}/get/x-python", "value": { - "example": "from kittycad.models import MlCopilotClientMessage\nfrom kittycad.models.ml_copilot_client_message import OptionSystem\nfrom kittycad.models.ml_copilot_system_command import MlCopilotSystemCommand\nfrom kittycad.models import MlCopilotServerMessage\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_ml_reasoning_ws():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n # Connect to the websocket.\n with client.ml.ml_reasoning_ws(id=\"\") as websocket:\n\n # Send a message.\n websocket.send(MlCopilotClientMessage(OptionSystem(\ncommand=MlCopilotSystemCommand.NEW,\n)))\n\n # Get a message.\n message = websocket.recv()\n print(message)\n\n ", + "example": "from kittycad.models import MlCopilotClientMessage\nfrom kittycad.models.ml_copilot_client_message import OptionHeaders\nfrom kittycad.models import MlCopilotServerMessage\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_ml_reasoning_ws():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n # Connect to the websocket.\n with client.ml.ml_reasoning_ws(id=\"\") as websocket:\n\n # Send a message.\n websocket.send(MlCopilotClientMessage(OptionHeaders(\nheaders={\"\": \"\"},\n)))\n\n # Get a message.\n message = websocket.recv()\n print(message)\n\n ", "libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.ml" } }, @@ -1291,7 +1299,7 @@ "op": "add", "path": "/paths/~1ws~1modeling~1commands/get/x-python", "value": { - "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=\"\",\n),\n)))\n\n # Get a message.\n message = websocket.recv()\n print(message)\n\n ", + "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 order_independent_transparency=False,\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,\n pr=None) as websocket:\n\n # Send a message.\n websocket.send(WebSocketRequest(OptionTrickleIce(\ncandidate=RtcIceCandidateInit(\ncandidate=\"\",\n),\n)))\n\n # Get a message.\n message = websocket.recv()\n print(message)\n\n ", "libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.modeling" } } diff --git a/kittycad/__init__.py b/kittycad/__init__.py index 7fd29a882..7a26ed12f 100644 --- a/kittycad/__init__.py +++ b/kittycad/__init__.py @@ -171,6 +171,7 @@ from .models.update_user import UpdateUser from .models.user import User from .models.user_admin_details import UserAdminDetails +from .models.user_feature_list import UserFeatureList from .models.user_identifier import UserIdentifier from .models.user_org_info import UserOrgInfo from .models.user_org_role import UserOrgRole @@ -11447,6 +11448,33 @@ def get_user_self_extended( # Validate into a Pydantic model (works for BaseModel and RootModel) return ExtendedUser.model_validate(json_data) + def user_features_get( + self, + ) -> UserFeatureList: + """Returns only features that are marked as safe for exposure to clients and currently resolved to `true` for the requesting user (including org overrides).""" + + url = "{}/user/features".format(self.client.base_url) + + _client = self.client.get_http_client() + + response = _client.get( + url=url, + headers=self.client.get_headers(), + ) + + if not response.is_success: + from kittycad.response_helpers import raise_for_status + + raise_for_status(response) + + if not response.content: + return None # type: ignore + + json_data = response.json() + + # Validate into a Pydantic model (works for BaseModel and RootModel) + return UserFeatureList.model_validate(json_data) + def put_user_form_self( self, body: InquiryForm, @@ -12230,6 +12258,33 @@ async def get_user_self_extended( # Validate into a Pydantic model (works for BaseModel and RootModel) return ExtendedUser.model_validate(json_data) + async def user_features_get( + self, + ) -> UserFeatureList: + """Returns only features that are marked as safe for exposure to clients and currently resolved to `true` for the requesting user (including org overrides).""" + + url = "{}/user/features".format(self.client.base_url) + + _client = self.client.get_http_client() + + response = await _client.get( + url=url, + headers=self.client.get_headers(), + ) + + if not response.is_success: + from kittycad.response_helpers import raise_for_status + + raise_for_status(response) + + if not response.content: + return None # type: ignore + + json_data = response.json() + + # Validate into a Pydantic model (works for BaseModel and RootModel) + return UserFeatureList.model_validate(json_data) + async def put_user_form_self( self, body: InquiryForm, @@ -13256,6 +13311,7 @@ def modeling_commands_ws( self, api_call_id: Optional[str] = None, fps: Optional[int] = None, + order_independent_transparency: Optional[bool] = None, pool: Optional[str] = None, post_effect: Optional[PostEffectType] = None, replay: Optional[str] = None, @@ -13264,6 +13320,7 @@ def modeling_commands_ws( video_res_height: Optional[int] = None, video_res_width: Optional[int] = None, webrtc: Optional[bool] = None, + pr: Optional[int] = None, recv_timeout: Optional[float] = None, ws_factory: Optional[Callable[..., ClientConnectionSync]] = None, ) -> "WebSocketModelingCommandsWs": @@ -13274,6 +13331,7 @@ def modeling_commands_ws( return WebSocketModelingCommandsWs( api_call_id=api_call_id, fps=fps, + order_independent_transparency=order_independent_transparency, pool=pool, post_effect=post_effect, replay=replay, @@ -13282,6 +13340,7 @@ def modeling_commands_ws( video_res_height=video_res_height, video_res_width=video_res_width, webrtc=webrtc, + pr=pr, recv_timeout=recv_timeout, ws_factory=ws_factory, client=self.client, @@ -13298,6 +13357,7 @@ async def modeling_commands_ws( self, api_call_id: Optional[str] = None, fps: Optional[int] = None, + order_independent_transparency: Optional[bool] = None, pool: Optional[str] = None, post_effect: Optional[PostEffectType] = None, replay: Optional[str] = None, @@ -13306,6 +13366,7 @@ async def modeling_commands_ws( video_res_height: Optional[int] = None, video_res_width: Optional[int] = None, webrtc: Optional[bool] = None, + pr: Optional[int] = None, ): """Open a websocket which accepts modeling commands. @@ -13319,6 +13380,7 @@ async def modeling_commands_ws( *, api_call_id: Optional[str] = None, fps: Optional[int] = None, + order_independent_transparency: Optional[bool] = None, pool: Optional[str] = None, post_effect: Optional[PostEffectType] = None, replay: Optional[str] = None, @@ -13327,6 +13389,7 @@ async def modeling_commands_ws( video_res_height: Optional[int] = None, video_res_width: Optional[int] = None, webrtc: Optional[bool] = None, + pr: Optional[int] = None, ) -> ClientConnectionAsync: """Open a websocket which accepts modeling commands.""" @@ -13344,6 +13407,20 @@ async def modeling_commands_ws( else: url = url + "?fps=" + str(fps) + if order_independent_transparency is not None: + if "?" in url: + url = ( + url + + "&order_independent_transparency=" + + str(order_independent_transparency).lower() + ) + else: + url = ( + url + + "?order_independent_transparency=" + + str(order_independent_transparency).lower() + ) + if pool is not None: if "?" in url: url = url + "&pool=" + str(pool) @@ -13392,6 +13469,12 @@ async def modeling_commands_ws( else: url = url + "?webrtc=" + str(webrtc).lower() + if pr is not None: + if "?" in url: + url = url + "&pr=" + str(pr) + else: + url = url + "?pr=" + str(pr) + return await ws_connect_async( url.replace("http", "ws"), extra_headers=self.client.get_headers(), @@ -13631,6 +13714,7 @@ def __init__( self, api_call_id: Optional[str] = None, fps: Optional[int] = None, + order_independent_transparency: Optional[bool] = None, pool: Optional[str] = None, post_effect: Optional[PostEffectType] = None, replay: Optional[str] = None, @@ -13639,6 +13723,7 @@ def __init__( video_res_height: Optional[int] = None, video_res_width: Optional[int] = None, webrtc: Optional[bool] = None, + pr: Optional[int] = None, recv_timeout: Optional[float] = None, ws_factory: Optional[Callable[..., ClientConnectionSync]] = None, *, @@ -13660,6 +13745,20 @@ def __init__( else: url = url + "?fps=" + str(fps) + if order_independent_transparency is not None: + if "?" in url: + url = ( + url + + "&order_independent_transparency=" + + str(order_independent_transparency).lower() + ) + else: + url = ( + url + + "?order_independent_transparency=" + + str(order_independent_transparency).lower() + ) + if pool is not None: if "?" in url: url = url + "&pool=" + str(pool) @@ -13708,6 +13807,12 @@ def __init__( else: url = url + "?webrtc=" + str(webrtc).lower() + if pr is not None: + if "?" in url: + url = url + "&pr=" + str(pr) + else: + url = url + "?pr=" + str(pr) + headers = client.get_headers() factory = ws_factory or ws_connect self.ws = factory( diff --git a/kittycad/models/__init__.py b/kittycad/models/__init__.py index f2659ad77..85b3cec79 100644 --- a/kittycad/models/__init__.py +++ b/kittycad/models/__init__.py @@ -324,6 +324,7 @@ from .set_grid_reference_plane import SetGridReferencePlane from .set_grid_scale import SetGridScale from .set_object_transform import SetObjectTransform +from .set_order_independent_transparency import SetOrderIndependentTransparency from .set_scene_units import SetSceneUnits from .set_selection_filter import SetSelectionFilter from .set_selection_type import SetSelectionType @@ -352,6 +353,7 @@ from .storage_provider import StorageProvider from .store_coupon_params import StoreCouponParams from .subscribe import Subscribe +from .subscription_action_type import SubscriptionActionType from .subscription_tier_feature import SubscriptionTierFeature from .subscription_tier_price import SubscriptionTierPrice from .subscription_tier_type import SubscriptionTierType @@ -413,6 +415,8 @@ from .update_user import UpdateUser from .user import User from .user_admin_details import UserAdminDetails +from .user_feature_entry import UserFeatureEntry +from .user_feature_list import UserFeatureList from .user_identifier import UserIdentifier from .user_org_info import UserOrgInfo from .user_org_role import UserOrgRole diff --git a/kittycad/models/coupon.py b/kittycad/models/coupon.py index 26e89ef14..4979a7fda 100644 --- a/kittycad/models/coupon.py +++ b/kittycad/models/coupon.py @@ -8,8 +8,6 @@ class Coupon(KittyCadBaseModel): amount_off: Optional[float] = None - deleted: bool = False - id: Optional[str] = None metadata: Dict[str, str] = {} diff --git a/kittycad/models/inquiry_form.py b/kittycad/models/inquiry_form.py index 778bea0a8..a9438a5eb 100644 --- a/kittycad/models/inquiry_form.py +++ b/kittycad/models/inquiry_form.py @@ -1,4 +1,4 @@ -from typing import Optional +from typing import List, Optional from ..models.inquiry_type import InquiryType from .base import KittyCadBaseModel @@ -7,6 +7,8 @@ class InquiryForm(KittyCadBaseModel): """The form for a public inquiry submission.""" + cad_platforms: Optional[List[str]] = None + company: Optional[str] = None email: str @@ -17,8 +19,12 @@ class InquiryForm(KittyCadBaseModel): inquiry_type: InquiryType + job_title: Optional[str] = None + last_name: str message: str + num_cad_users: Optional[str] = None + phone: Optional[str] = None diff --git a/kittycad/models/inquiry_type.py b/kittycad/models/inquiry_type.py index aa80d5dd5..f99f3e11a 100644 --- a/kittycad/models/inquiry_type.py +++ b/kittycad/models/inquiry_type.py @@ -4,6 +4,10 @@ class InquiryType(str, Enum): """The type of inquiry.""" # noqa: E501 + """# Inquiries related to pilots (on the enterprise page).""" # noqa: E501 + + PILOT_INQUIRY = "pilot_inquiry" + """# General inquiry about the service or product.""" # noqa: E501 GENERAL_INQUIRY = "general_inquiry" diff --git a/kittycad/models/invoice_status.py b/kittycad/models/invoice_status.py index cfda60d62..33ed8d38c 100644 --- a/kittycad/models/invoice_status.py +++ b/kittycad/models/invoice_status.py @@ -24,5 +24,9 @@ class InvoiceStatus(str, Enum): VOID = "void" + """# Unknown.""" # noqa: E501 + + UNKNOWN = "unknown" + def __str__(self) -> str: return str(self.value) diff --git a/kittycad/models/ml_copilot_system_command.py b/kittycad/models/ml_copilot_system_command.py index cbfba0720..3fed1b142 100644 --- a/kittycad/models/ml_copilot_system_command.py +++ b/kittycad/models/ml_copilot_system_command.py @@ -12,5 +12,9 @@ class MlCopilotSystemCommand(str, Enum): BYE = "bye" + """# Interrupt the current prompt that is being processed.""" # noqa: E501 + + INTERRUPT = "interrupt" + def __str__(self) -> str: return str(self.value) diff --git a/kittycad/models/modeling_cmd.py b/kittycad/models/modeling_cmd.py index 1085b4beb..41ba14f11 100644 --- a/kittycad/models/modeling_cmd.py +++ b/kittycad/models/modeling_cmd.py @@ -643,6 +643,8 @@ class OptionObjectSetMaterialParamsPbr(KittyCadBaseModel): ambient_occlusion: float + backface_color: Optional[Color] = None + color: Color metalness: float @@ -1452,6 +1454,16 @@ class OptionSetGridAutoScale(KittyCadBaseModel): type: Literal["set_grid_auto_scale"] = "set_grid_auto_scale" +class OptionSetOrderIndependentTransparency(KittyCadBaseModel): + """Render transparent surfaces more accurately, but this might make rendering slower. Because it can interfere with runtime performance, it defaults to false.""" + + enabled: Optional[bool] = None + + type: Literal["set_order_independent_transparency"] = ( + "set_order_independent_transparency" + ) + + ModelingCmd = RootModel[ Annotated[ Union[ @@ -1589,6 +1601,7 @@ class OptionSetGridAutoScale(KittyCadBaseModel): OptionSetGridReferencePlane, OptionSetGridScale, OptionSetGridAutoScale, + OptionSetOrderIndependentTransparency, ], Field(discriminator="type"), ] diff --git a/kittycad/models/ok_modeling_cmd_response.py b/kittycad/models/ok_modeling_cmd_response.py index 022165c9c..a7a9e6708 100644 --- a/kittycad/models/ok_modeling_cmd_response.py +++ b/kittycad/models/ok_modeling_cmd_response.py @@ -120,6 +120,7 @@ from ..models.set_grid_reference_plane import SetGridReferencePlane from ..models.set_grid_scale import SetGridScale from ..models.set_object_transform import SetObjectTransform +from ..models.set_order_independent_transparency import SetOrderIndependentTransparency from ..models.set_scene_units import SetSceneUnits from ..models.set_selection_filter import SetSelectionFilter from ..models.set_selection_type import SetSelectionType @@ -1289,6 +1290,16 @@ class OptionSetGridAutoScale(KittyCadBaseModel): type: Literal["set_grid_auto_scale"] = "set_grid_auto_scale" +class OptionSetOrderIndependentTransparency(KittyCadBaseModel): + """""" + + data: SetOrderIndependentTransparency + + type: Literal["set_order_independent_transparency"] = ( + "set_order_independent_transparency" + ) + + OkModelingCmdResponse = RootModel[ Annotated[ Union[ @@ -1434,6 +1445,7 @@ class OptionSetGridAutoScale(KittyCadBaseModel): OptionBooleanSubtract, OptionSetGridScale, OptionSetGridAutoScale, + OptionSetOrderIndependentTransparency, ], Field(discriminator="type"), ] diff --git a/kittycad/models/plan_interval.py b/kittycad/models/plan_interval.py index f0d1421c4..1ab599fe0 100644 --- a/kittycad/models/plan_interval.py +++ b/kittycad/models/plan_interval.py @@ -20,5 +20,9 @@ class PlanInterval(str, Enum): YEAR = "year" + """# Don't use.""" # noqa: E501 + + UNKNOWN = "unknown" + def __str__(self) -> str: return str(self.value) diff --git a/kittycad/models/set_order_independent_transparency.py b/kittycad/models/set_order_independent_transparency.py new file mode 100644 index 000000000..034571b46 --- /dev/null +++ b/kittycad/models/set_order_independent_transparency.py @@ -0,0 +1,7 @@ +from .base import KittyCadBaseModel + + +class SetOrderIndependentTransparency(KittyCadBaseModel): + """The response from the 'SetOrderIndependentTransparency'.""" + + enabled: bool diff --git a/kittycad/models/subscription_action_type.py b/kittycad/models/subscription_action_type.py new file mode 100644 index 000000000..45be9fdd6 --- /dev/null +++ b/kittycad/models/subscription_action_type.py @@ -0,0 +1,16 @@ +from enum import Enum + + +class SubscriptionActionType(str, Enum): + """Indicates which kind of Stripe intent requires customer action during subscription creation.""" # noqa: E501 + + """# The client secret belongs to a PaymentIntent (initial invoice payment).""" # noqa: E501 + + PAYMENT_INTENT = "payment_intent" + + """# The client secret belongs to a SetupIntent (trial or setup-only flow).""" # noqa: E501 + + SETUP_INTENT = "setup_intent" + + def __str__(self) -> str: + return str(self.value) diff --git a/kittycad/models/user_feature_entry.py b/kittycad/models/user_feature_entry.py new file mode 100644 index 000000000..57d74f81c --- /dev/null +++ b/kittycad/models/user_feature_entry.py @@ -0,0 +1,7 @@ +from .base import KittyCadBaseModel + + +class UserFeatureEntry(KittyCadBaseModel): + """Enabled features surfaced to end users.""" + + id: str diff --git a/kittycad/models/user_feature_list.py b/kittycad/models/user_feature_list.py new file mode 100644 index 000000000..52e04b819 --- /dev/null +++ b/kittycad/models/user_feature_list.py @@ -0,0 +1,10 @@ +from typing import List + +from ..models.user_feature_entry import UserFeatureEntry +from .base import KittyCadBaseModel + + +class UserFeatureList(KittyCadBaseModel): + """User features response payload.""" + + features: List[UserFeatureEntry] diff --git a/kittycad/models/zoo_product_subscriptions.py b/kittycad/models/zoo_product_subscriptions.py index d2d367bbc..935077324 100644 --- a/kittycad/models/zoo_product_subscriptions.py +++ b/kittycad/models/zoo_product_subscriptions.py @@ -1,8 +1,15 @@ +from typing import Optional + from ..models.modeling_app_subscription_tier import ModelingAppSubscriptionTier +from ..models.subscription_action_type import SubscriptionActionType from .base import KittyCadBaseModel class ZooProductSubscriptions(KittyCadBaseModel): """A struct of Zoo product subscriptions.""" + action_client_secret: Optional[str] = None + + action_type: Optional[SubscriptionActionType] = None + modeling_app: ModelingAppSubscriptionTier diff --git a/kittycad/tests/test_examples.py b/kittycad/tests/test_examples.py index 5b893adc6..48e0f0d84 100644 --- a/kittycad/tests/test_examples.py +++ b/kittycad/tests/test_examples.py @@ -69,6 +69,7 @@ UnitVolumeConversion, User, UserAdminDetails, + UserFeatureList, UserOrgInfo, VerificationTokenResponse, WebSocketRequest, @@ -78,8 +79,7 @@ from kittycad.models.api_call_query_group_by import ApiCallQueryGroupBy from kittycad.models.api_call_status import ApiCallStatus from kittycad.models.api_token_uuid import ApiTokenUuid -from kittycad.models.axis import Axis -from kittycad.models.axis_direction_pair import AxisDirectionPair +from kittycad.models.base64data import Base64Data from kittycad.models.billing_info import BillingInfo from kittycad.models.code_language import CodeLanguage from kittycad.models.code_option import CodeOption @@ -89,42 +89,41 @@ from kittycad.models.create_shortlink_request import CreateShortlinkRequest from kittycad.models.created_at_sort_mode import CreatedAtSortMode from kittycad.models.crm_data import CrmData -from kittycad.models.direction import Direction from kittycad.models.email_authentication_form import EmailAuthenticationForm from kittycad.models.event import Event, OptionModelingAppEvent +from kittycad.models.fbx_storage import FbxStorage from kittycad.models.file_export_format import FileExportFormat from kittycad.models.file_import_format import FileImportFormat -from kittycad.models.idp_metadata_source import IdpMetadataSource, OptionUrl +from kittycad.models.idp_metadata_source import ( + IdpMetadataSource, + OptionBase64EncodedXml, + OptionUrl, +) from kittycad.models.input_format3d import InputFormat3d, OptionSldprt from kittycad.models.inquiry_form import InquiryForm from kittycad.models.inquiry_type import InquiryType from kittycad.models.kcl_code_completion_params import KclCodeCompletionParams from kittycad.models.kcl_code_completion_request import KclCodeCompletionRequest -from kittycad.models.ml_copilot_client_message import OptionSystem, OptionUser -from kittycad.models.ml_copilot_system_command import MlCopilotSystemCommand -from kittycad.models.ml_copilot_tool import MlCopilotTool +from kittycad.models.ml_copilot_client_message import OptionHeaders from kittycad.models.ml_feedback import MlFeedback from kittycad.models.modeling_app_event_type import ModelingAppEventType from kittycad.models.org_dataset_source import OrgDatasetSource from kittycad.models.org_details import OrgDetails -from kittycad.models.output_format3d import OptionStl, OutputFormat3d +from kittycad.models.output_format3d import OptionFbx, OutputFormat3d from kittycad.models.plan_interval import PlanInterval from kittycad.models.post_effect_type import PostEffectType from kittycad.models.privacy_settings import PrivacySettings from kittycad.models.rtc_ice_candidate_init import RtcIceCandidateInit from kittycad.models.saml_identity_provider_create import SamlIdentityProviderCreate -from kittycad.models.selection import OptionDefaultScene, Selection from kittycad.models.service_account_uuid import ServiceAccountUuid from kittycad.models.session_uuid import SessionUuid from kittycad.models.source_position import SourcePosition from kittycad.models.source_range import SourceRange from kittycad.models.source_range_prompt import SourceRangePrompt -from kittycad.models.stl_storage import StlStorage from kittycad.models.storage_provider import StorageProvider from kittycad.models.store_coupon_params import StoreCouponParams from kittycad.models.subscribe import Subscribe from kittycad.models.subscription_tier_price import OptionPerUser, SubscriptionTierPrice -from kittycad.models.system import System from kittycad.models.text_to_cad_create_body import TextToCadCreateBody from kittycad.models.text_to_cad_iteration_body import TextToCadIterationBody from kittycad.models.text_to_cad_multi_file_iteration_body import ( @@ -627,20 +626,8 @@ def test_create_file_conversion_options(): result: FileConversion = client.file.create_file_conversion_options( body=ConversionParams( output_format=OutputFormat3d( - OptionStl( - coords=System( - forward=AxisDirectionPair( - axis=Axis.Y, - direction=Direction.POSITIVE, - ), - up=AxisDirectionPair( - axis=Axis.Y, - direction=Direction.POSITIVE, - ), - ), - selection=Selection(OptionDefaultScene()), - storage=StlStorage.ASCII, - units=UnitLength.CM, + OptionFbx( + storage=FbxStorage.ASCII, ) ), src_format=InputFormat3d( @@ -668,20 +655,8 @@ async def test_create_file_conversion_options_async(): result: FileConversion = await client.file.create_file_conversion_options( body=ConversionParams( output_format=OutputFormat3d( - OptionStl( - coords=System( - forward=AxisDirectionPair( - axis=Axis.Y, - direction=Direction.POSITIVE, - ), - up=AxisDirectionPair( - axis=Axis.Y, - direction=Direction.POSITIVE, - ), - ), - selection=Selection(OptionDefaultScene()), - storage=StlStorage.ASCII, - units=UnitLength.CM, + OptionFbx( + storage=FbxStorage.ASCII, ) ), src_format=InputFormat3d( @@ -2184,8 +2159,8 @@ def test_update_org_saml_idp(): body=SamlIdentityProviderCreate( idp_entity_id="", idp_metadata_source=IdpMetadataSource( - OptionUrl( - url="", + OptionBase64EncodedXml( + data=Base64Data(b""), ) ), technical_contact_email="", @@ -2206,8 +2181,8 @@ async def test_update_org_saml_idp_async(): body=SamlIdentityProviderCreate( idp_entity_id="", idp_metadata_source=IdpMetadataSource( - OptionUrl( - url="", + OptionBase64EncodedXml( + data=Base64Data(b""), ) ), technical_contact_email="", @@ -3113,6 +3088,25 @@ async def test_get_user_self_extended_async(): result: ExtendedUser = await client.users.get_user_self_extended() +@pytest.mark.skip +def test_user_features_get(): + client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable + + result: UserFeatureList = client.users.user_features_get() + + body: UserFeatureList = result + print(body) + + +# OR run async +@pytest.mark.asyncio +@pytest.mark.skip +async def test_user_features_get_async(): + client = AsyncKittyCAD() # Uses KITTYCAD_API_TOKEN environment variable + + result: UserFeatureList = await client.users.user_features_get() + + @pytest.mark.skip def test_put_user_form_self(): client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable @@ -3121,7 +3115,7 @@ def test_put_user_form_self(): body=InquiryForm( email="", first_name="", - inquiry_type=InquiryType.GENERAL_INQUIRY, + inquiry_type=InquiryType.PILOT_INQUIRY, last_name="", message="", ) @@ -3138,7 +3132,7 @@ async def test_put_user_form_self_async(): body=InquiryForm( email="", first_name="", - inquiry_type=InquiryType.GENERAL_INQUIRY, + inquiry_type=InquiryType.PILOT_INQUIRY, last_name="", message="", ) @@ -3957,7 +3951,7 @@ def test_put_public_form(): body=InquiryForm( email="", first_name="", - inquiry_type=InquiryType.GENERAL_INQUIRY, + inquiry_type=InquiryType.PILOT_INQUIRY, last_name="", message="", ) @@ -3974,7 +3968,7 @@ async def test_put_public_form_async(): body=InquiryForm( email="", first_name="", - inquiry_type=InquiryType.GENERAL_INQUIRY, + inquiry_type=InquiryType.PILOT_INQUIRY, last_name="", message="", ) @@ -4045,25 +4039,8 @@ def test_ml_copilot_ws(): # Send a message. websocket.send( MlCopilotClientMessage( - OptionUser( - content="", - current_files={"": b""}, - forced_tools=[MlCopilotTool.EDIT_KCL_CODE], - source_ranges=[ - SourceRangePrompt( - prompt="", - range=SourceRange( - end=SourcePosition( - column=10, - line=10, - ), - start=SourcePosition( - column=10, - line=10, - ), - ), - ) - ], + OptionHeaders( + headers={"": ""}, ) ) ) @@ -4099,8 +4076,8 @@ def test_ml_reasoning_ws(): # Send a message. websocket.send( MlCopilotClientMessage( - OptionSystem( - command=MlCopilotSystemCommand.NEW, + OptionHeaders( + headers={"": ""}, ) ) ) @@ -4134,6 +4111,7 @@ def test_modeling_commands_ws(): # Connect to the websocket. with client.modeling.modeling_commands_ws( fps=10, + order_independent_transparency=False, post_effect=PostEffectType.PHOSPHOR, show_grid=False, unlocked_framerate=False, @@ -4143,6 +4121,7 @@ def test_modeling_commands_ws(): api_call_id=None, pool=None, replay=None, + pr=None, ) as websocket: # Send a message. websocket.send( @@ -4169,6 +4148,7 @@ async def test_modeling_commands_ws_async(): # Connect to the websocket. websocket = await client.modeling.modeling_commands_ws( fps=10, + order_independent_transparency=False, post_effect=PostEffectType.PHOSPHOR, show_grid=False, unlocked_framerate=False, @@ -4178,6 +4158,7 @@ async def test_modeling_commands_ws_async(): api_call_id=None, pool=None, replay=None, + pr=None, ) # Send a message.