fix new spec bs

Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
Jess Frazelle
2024-04-05 13:12:19 -07:00
parent 12864cdb44
commit f3e7f4f229
17 changed files with 1175 additions and 863 deletions

View File

@ -478,11 +478,16 @@ from kittycad.types import Response
for endpoint_ref in endpoint_refs: for endpoint_ref in endpoint_refs:
if endpoint_ref == "Error": if endpoint_ref == "Error":
continue continue
example_imports = example_imports + ( # For some reason, PrivacySettings is showing up twice so we want to skip
"""from kittycad.models import """ # it here. Obviously this is a hack and we should fix the root cause.
+ endpoint_ref.replace("List[", "").replace("]", "") # When this happens again with another struct there might be a more obvious
+ "\n" # solution, but alas, I am lazy.
) if endpoint_ref != "PrivacySettings":
example_imports = example_imports + (
"""from kittycad.models import """
+ endpoint_ref.replace("List[", "").replace("]", "")
+ "\n"
)
example_imports = ( example_imports = (
example_imports + "from typing import Union, Any, Optional, List, Tuple\n" example_imports + "from typing import Union, Any, Optional, List, Tuple\n"
) )
@ -1677,8 +1682,9 @@ def getRefs(schema: dict) -> List[str]:
# do nothing # do nothing
pass pass
else: else:
logging.error("unsupported type: ", schema) # This is likely an empty object like above but with a description
raise Exception("unsupported type: ", schema) # so we will just skip it.
pass
elif type_name == "array": elif type_name == "array":
if "items" in schema: if "items" in schema:
schema_refs = getRefs(schema["items"]) schema_refs = getRefs(schema["items"])

File diff suppressed because it is too large Load Diff

View File

@ -41,9 +41,9 @@ def _get_kwargs(
def _parse_response(*, response: httpx.Response) -> Optional[Union[CodeOutput, Error]]: def _parse_response(*, response: httpx.Response) -> Optional[Union[CodeOutput, Error]]:
if response.status_code == 200: if response.status_code == 201:
response_200 = CodeOutput(**response.json()) response_201 = CodeOutput(**response.json())
return response_200 return response_201
if response.status_code == 400: if response.status_code == 400:
response_4XX = Error(**response.json()) response_4XX = Error(**response.json())
return response_4XX return response_4XX

View File

@ -4,10 +4,12 @@ import httpx
from ...client import Client from ...client import Client
from ...models.error import Error from ...models.error import Error
from ...models.event import Event
from ...types import Response from ...types import Response
def _get_kwargs( def _get_kwargs(
body: Event,
*, *,
client: Client, client: Client,
) -> Dict[str, Any]: ) -> Dict[str, Any]:
@ -23,6 +25,7 @@ def _get_kwargs(
"headers": headers, "headers": headers,
"cookies": cookies, "cookies": cookies,
"timeout": client.get_timeout(), "timeout": client.get_timeout(),
"content": body.model_dump_json(),
} }
@ -47,10 +50,12 @@ def _build_response(*, response: httpx.Response) -> Response[Optional[Error]]:
def sync_detailed( def sync_detailed(
body: Event,
*, *,
client: Client, client: Client,
) -> Response[Optional[Error]]: ) -> Response[Optional[Error]]:
kwargs = _get_kwargs( kwargs = _get_kwargs(
body=body,
client=client, client=client,
) )
@ -63,21 +68,25 @@ def sync_detailed(
def sync( def sync(
body: Event,
*, *,
client: Client, client: Client,
) -> Optional[Error]: ) -> Optional[Error]:
"""We collect anonymous telemetry data for improving our product.""" # noqa: E501 """We collect anonymous telemetry data for improving our product.""" # noqa: E501
return sync_detailed( return sync_detailed(
body=body,
client=client, client=client,
).parsed ).parsed
async def asyncio_detailed( async def asyncio_detailed(
body: Event,
*, *,
client: Client, client: Client,
) -> Response[Optional[Error]]: ) -> Response[Optional[Error]]:
kwargs = _get_kwargs( kwargs = _get_kwargs(
body=body,
client=client, client=client,
) )
@ -88,6 +97,7 @@ async def asyncio_detailed(
async def asyncio( async def asyncio(
body: Event,
*, *,
client: Client, client: Client,
) -> Optional[Error]: ) -> Optional[Error]:
@ -95,6 +105,7 @@ async def asyncio(
return ( return (
await asyncio_detailed( await asyncio_detailed(
body=body,
client=client, client=client,
) )
).parsed ).parsed

View File

@ -1,23 +1,26 @@
import json import json
from typing import Any, Dict, Iterator from typing import Any, Dict, Iterator, Optional
import bson import bson
from websockets.client import WebSocketClientProtocol, connect as ws_connect_async from websockets.client import WebSocketClientProtocol, connect as ws_connect_async
from websockets.sync.client import ClientConnection, connect as ws_connect from websockets.sync.client import ClientConnection, connect as ws_connect
from ...client import Client from ...client import Client
from ...models.post_effect_type import PostEffectType
from ...models.web_socket_request import WebSocketRequest from ...models.web_socket_request import WebSocketRequest
from ...models.web_socket_response import WebSocketResponse from ...models.web_socket_response import WebSocketResponse
def _get_kwargs( def _get_kwargs(
fps: int, fps: int,
post_effect: PostEffectType,
unlocked_framerate: bool, unlocked_framerate: bool,
video_res_height: int, video_res_height: int,
video_res_width: int, video_res_width: int,
webrtc: bool, webrtc: bool,
*, *,
client: Client, client: Client,
pool: Optional[str] = None,
) -> Dict[str, Any]: ) -> Dict[str, Any]:
url = "{}/ws/modeling/commands".format(client.base_url) # noqa: E501 url = "{}/ws/modeling/commands".format(client.base_url) # noqa: E501
@ -28,6 +31,20 @@ def _get_kwargs(
else: else:
url = url + "?fps=" + str(fps) url = url + "?fps=" + str(fps)
if pool is not None:
if "?" in url:
url = url + "&pool=" + str(pool)
else:
url = url + "?pool=" + str(pool)
if post_effect is not None:
if "?" in url:
url = url + "&post_effect=" + str(post_effect)
else:
url = url + "?post_effect=" + str(post_effect)
if unlocked_framerate is not None: if unlocked_framerate is not None:
if "?" in url: if "?" in url:
@ -69,17 +86,21 @@ def _get_kwargs(
def sync( def sync(
fps: int, fps: int,
post_effect: PostEffectType,
unlocked_framerate: bool, unlocked_framerate: bool,
video_res_height: int, video_res_height: int,
video_res_width: int, video_res_width: int,
webrtc: bool, webrtc: bool,
*, *,
client: Client, client: Client,
pool: Optional[str] = None,
) -> ClientConnection: ) -> ClientConnection:
"""Pass those commands to the engine via websocket, and pass responses back to the client. Basically, this is a websocket proxy between the frontend/client and the engine.""" # noqa: E501 """Pass those commands to the engine via websocket, and pass responses back to the client. Basically, this is a websocket proxy between the frontend/client and the engine.""" # noqa: E501
kwargs = _get_kwargs( kwargs = _get_kwargs(
fps=fps, fps=fps,
pool=pool,
post_effect=post_effect,
unlocked_framerate=unlocked_framerate, unlocked_framerate=unlocked_framerate,
video_res_height=video_res_height, video_res_height=video_res_height,
video_res_width=video_res_width, video_res_width=video_res_width,
@ -92,17 +113,21 @@ def sync(
async def asyncio( async def asyncio(
fps: int, fps: int,
post_effect: PostEffectType,
unlocked_framerate: bool, unlocked_framerate: bool,
video_res_height: int, video_res_height: int,
video_res_width: int, video_res_width: int,
webrtc: bool, webrtc: bool,
*, *,
client: Client, client: Client,
pool: Optional[str] = None,
) -> WebSocketClientProtocol: ) -> WebSocketClientProtocol:
"""Pass those commands to the engine via websocket, and pass responses back to the client. Basically, this is a websocket proxy between the frontend/client and the engine.""" # noqa: E501 """Pass those commands to the engine via websocket, and pass responses back to the client. Basically, this is a websocket proxy between the frontend/client and the engine.""" # noqa: E501
kwargs = _get_kwargs( kwargs = _get_kwargs(
fps=fps, fps=fps,
pool=pool,
post_effect=post_effect,
unlocked_framerate=unlocked_framerate, unlocked_framerate=unlocked_framerate,
video_res_height=video_res_height, video_res_height=video_res_height,
video_res_width=video_res_width, video_res_width=video_res_width,
@ -126,14 +151,18 @@ class WebSocket:
def __init__( def __init__(
self, self,
fps: int, fps: int,
post_effect: PostEffectType,
unlocked_framerate: bool, unlocked_framerate: bool,
video_res_height: int, video_res_height: int,
video_res_width: int, video_res_width: int,
webrtc: bool, webrtc: bool,
client: Client, client: Client,
pool: Optional[str] = None,
): ):
self.ws = sync( self.ws = sync(
fps, fps,
pool,
post_effect,
unlocked_framerate, unlocked_framerate,
video_res_height, video_res_height,
video_res_width, video_res_width,

View File

@ -187,7 +187,6 @@ from kittycad.models import (
PaymentIntent, PaymentIntent,
PaymentMethod, PaymentMethod,
Pong, Pong,
PrivacySettings,
SamlIdentityProvider, SamlIdentityProvider,
ServiceAccount, ServiceAccount,
ServiceAccountResultsPage, ServiceAccountResultsPage,
@ -222,11 +221,13 @@ from kittycad.models.billing_info import BillingInfo
from kittycad.models.code_language import CodeLanguage from kittycad.models.code_language import CodeLanguage
from kittycad.models.created_at_sort_mode import CreatedAtSortMode from kittycad.models.created_at_sort_mode import CreatedAtSortMode
from kittycad.models.email_authentication_form import EmailAuthenticationForm from kittycad.models.email_authentication_form import EmailAuthenticationForm
from kittycad.models.event import modeling_app_event
from kittycad.models.file_export_format import FileExportFormat from kittycad.models.file_export_format import FileExportFormat
from kittycad.models.file_import_format import FileImportFormat from kittycad.models.file_import_format import FileImportFormat
from kittycad.models.idp_metadata_source import base64_encoded_xml from kittycad.models.idp_metadata_source import base64_encoded_xml
from kittycad.models.kcl_code_completion_params import KclCodeCompletionParams from kittycad.models.kcl_code_completion_params import KclCodeCompletionParams
from kittycad.models.kcl_code_completion_request import KclCodeCompletionRequest from kittycad.models.kcl_code_completion_request import KclCodeCompletionRequest
from kittycad.models.modeling_app_event_type import ModelingAppEventType
from kittycad.models.modeling_app_individual_subscription_tier import ( from kittycad.models.modeling_app_individual_subscription_tier import (
ModelingAppIndividualSubscriptionTier, ModelingAppIndividualSubscriptionTier,
) )
@ -235,6 +236,8 @@ from kittycad.models.modeling_app_organization_subscription_tier import (
) )
from kittycad.models.org_details import OrgDetails from kittycad.models.org_details import OrgDetails
from kittycad.models.plan_interval import PlanInterval 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_sdp_type import RtcSdpType from kittycad.models.rtc_sdp_type import RtcSdpType
from kittycad.models.rtc_session_description import RtcSessionDescription from kittycad.models.rtc_session_description import RtcSessionDescription
from kittycad.models.saml_identity_provider_create import SamlIdentityProviderCreate from kittycad.models.saml_identity_provider_create import SamlIdentityProviderCreate
@ -1279,6 +1282,13 @@ def test_create_event():
result: Optional[Error] = create_event.sync( result: Optional[Error] = create_event.sync(
client=client, client=client,
body=modeling_app_event(
created_at="<string>",
event_type=ModelingAppEventType.SUCCESSFUL_COMPILE_BEFORE_CLOSE,
project_name="<string>",
source_id="<uuid>",
user_id="<string>",
),
) )
if isinstance(result, Error) or result is None: if isinstance(result, Error) or result is None:
@ -1291,6 +1301,13 @@ def test_create_event():
# OR if you need more info (e.g. status_code) # OR if you need more info (e.g. status_code)
response: Response[Optional[Error]] = create_event.sync_detailed( response: Response[Optional[Error]] = create_event.sync_detailed(
client=client, client=client,
body=modeling_app_event(
created_at="<string>",
event_type=ModelingAppEventType.SUCCESSFUL_COMPILE_BEFORE_CLOSE,
project_name="<string>",
source_id="<uuid>",
user_id="<string>",
),
) )
@ -1303,11 +1320,25 @@ async def test_create_event_async():
result: Optional[Error] = await create_event.asyncio( result: Optional[Error] = await create_event.asyncio(
client=client, client=client,
body=modeling_app_event(
created_at="<string>",
event_type=ModelingAppEventType.SUCCESSFUL_COMPILE_BEFORE_CLOSE,
project_name="<string>",
source_id="<uuid>",
user_id="<string>",
),
) )
# OR run async with more info # OR run async with more info
response: Response[Optional[Error]] = await create_event.asyncio_detailed( response: Response[Optional[Error]] = await create_event.asyncio_detailed(
client=client, client=client,
body=modeling_app_event(
created_at="<string>",
event_type=ModelingAppEventType.SUCCESSFUL_COMPILE_BEFORE_CLOSE,
project_name="<string>",
source_id="<uuid>",
user_id="<string>",
),
) )
@ -6732,10 +6763,12 @@ def test_modeling_commands_ws():
with modeling_commands_ws.WebSocket( with modeling_commands_ws.WebSocket(
client=client, client=client,
fps=10, fps=10,
post_effect=PostEffectType.PHOSPHOR,
unlocked_framerate=False, unlocked_framerate=False,
video_res_height=10, video_res_height=10,
video_res_width=10, video_res_width=10,
webrtc=False, webrtc=False,
pool=None, # Optional[str]
) as websocket: ) as websocket:
# Send a message. # Send a message.
@ -6766,10 +6799,12 @@ async def test_modeling_commands_ws_async():
websocket = await modeling_commands_ws.asyncio( websocket = await modeling_commands_ws.asyncio(
client=client, client=client,
fps=10, fps=10,
post_effect=PostEffectType.PHOSPHOR,
unlocked_framerate=False, unlocked_framerate=False,
video_res_height=10, video_res_height=10,
video_res_width=10, video_res_width=10,
webrtc=False, webrtc=False,
pool=None, # Optional[str]
) )
# Send a message. # Send a message.

View File

@ -56,6 +56,7 @@ from .curve_get_type import CurveGetType
from .curve_type import CurveType from .curve_type import CurveType
from .customer import Customer from .customer import Customer
from .customer_balance import CustomerBalance from .customer_balance import CustomerBalance
from .default_camera_focus_on import DefaultCameraFocusOn
from .default_camera_get_settings import DefaultCameraGetSettings from .default_camera_get_settings import DefaultCameraGetSettings
from .default_camera_zoom import DefaultCameraZoom from .default_camera_zoom import DefaultCameraZoom
from .density import Density from .density import Density
@ -80,6 +81,7 @@ from .entity_type import EntityType
from .environment import Environment from .environment import Environment
from .error import Error from .error import Error
from .error_code import ErrorCode from .error_code import ErrorCode
from .event import Event
from .export import Export from .export import Export
from .export_file import ExportFile from .export_file import ExportFile
from .extended_user import ExtendedUser from .extended_user import ExtendedUser
@ -102,6 +104,7 @@ from .file_system_metadata import FileSystemMetadata
from .file_volume import FileVolume from .file_volume import FileVolume
from .gateway import Gateway from .gateway import Gateway
from .get_entity_type import GetEntityType from .get_entity_type import GetEntityType
from .get_num_objects import GetNumObjects
from .get_sketch_mode_plane import GetSketchModePlane from .get_sketch_mode_plane import GetSketchModePlane
from .global_axis import GlobalAxis from .global_axis import GlobalAxis
from .gltf_presentation import GltfPresentation from .gltf_presentation import GltfPresentation
@ -112,6 +115,7 @@ from .idp_metadata_source import IdpMetadataSource
from .image_format import ImageFormat from .image_format import ImageFormat
from .import_file import ImportFile from .import_file import ImportFile
from .import_files import ImportFiles from .import_files import ImportFiles
from .imported_geometry import ImportedGeometry
from .input_format import InputFormat from .input_format import InputFormat
from .invoice import Invoice from .invoice import Invoice
from .invoice_line_item import InvoiceLineItem from .invoice_line_item import InvoiceLineItem
@ -130,6 +134,7 @@ from .mass import Mass
from .meta_cluster_info import MetaClusterInfo from .meta_cluster_info import MetaClusterInfo
from .metadata import Metadata from .metadata import Metadata
from .method import Method from .method import Method
from .modeling_app_event_type import ModelingAppEventType
from .modeling_app_individual_subscription_tier import ( from .modeling_app_individual_subscription_tier import (
ModelingAppIndividualSubscriptionTier, ModelingAppIndividualSubscriptionTier,
) )
@ -174,6 +179,7 @@ from .ply_storage import PlyStorage
from .point2d import Point2d from .point2d import Point2d
from .point3d import Point3d from .point3d import Point3d
from .pong import Pong from .pong import Pong
from .post_effect_type import PostEffectType
from .privacy_settings import PrivacySettings from .privacy_settings import PrivacySettings
from .raw_file import RawFile from .raw_file import RawFile
from .rtc_ice_candidate_init import RtcIceCandidateInit from .rtc_ice_candidate_init import RtcIceCandidateInit

View File

@ -0,0 +1,9 @@
from pydantic import BaseModel, ConfigDict
class DefaultCameraFocusOn(BaseModel):
"""The response from the `DefaultCameraFocusOn` command."""
model_config = ConfigDict(protected_namespaces=())

34
kittycad/models/event.py Normal file
View File

@ -0,0 +1,34 @@
import datetime
from typing import Literal, Optional, Union
from pydantic import BaseModel, ConfigDict, Field, RootModel
from typing_extensions import Annotated
from ..models.modeling_app_event_type import ModelingAppEventType
class modeling_app_event(BaseModel):
"""An event related to modeling app files"""
attachment_uri: Optional[str] = None
created_at: datetime.datetime
event_type: ModelingAppEventType
last_compiled_at: Optional[datetime.datetime] = None
project_description: Optional[str] = None
project_name: str
source_id: str
type: Literal["modeling_app_event"] = "modeling_app_event"
user_id: str
model_config = ConfigDict(protected_namespaces=())
Event = RootModel[Annotated[Union[modeling_app_event,], Field(discriminator="type")]]

View File

@ -0,0 +1,11 @@
from pydantic import BaseModel, ConfigDict
class GetNumObjects(BaseModel):
"""The response from the `GetNumObjects` command."""
num_objects: int
model_config = ConfigDict(protected_namespaces=())

View File

@ -0,0 +1,14 @@
from typing import List
from pydantic import BaseModel, ConfigDict
class ImportedGeometry(BaseModel):
"""Data from importing the files"""
id: str
value: List[str]
model_config = ConfigDict(protected_namespaces=())

View File

@ -0,0 +1,11 @@
from enum import Enum
class ModelingAppEventType(str, Enum):
"""Type for modeling-app events""" # noqa: E501
"""# This event is sent before the modeling app or project is closed. The attachment should contain the contents of the most recent successful compile. """ # noqa: E501
SUCCESSFUL_COMPILE_BEFORE_CLOSE = "successful_compile_before_close"
def __str__(self) -> str:
return str(self.value)

View File

@ -3,6 +3,7 @@ from typing import List, Literal, Optional, Union
from pydantic import BaseModel, ConfigDict, Field, RootModel from pydantic import BaseModel, ConfigDict, Field, RootModel
from typing_extensions import Annotated from typing_extensions import Annotated
from ..models.angle import Angle
from ..models.annotation_options import AnnotationOptions from ..models.annotation_options import AnnotationOptions
from ..models.annotation_type import AnnotationType from ..models.annotation_type import AnnotationType
from ..models.camera_drag_interaction_type import CameraDragInteractionType from ..models.camera_drag_interaction_type import CameraDragInteractionType
@ -63,7 +64,7 @@ class extend_path(BaseModel):
class extrude(BaseModel): class extrude(BaseModel):
"""Command for extruding a solid.""" """Command for extruding a solid 2d."""
cap: bool cap: bool
@ -76,6 +77,42 @@ class extrude(BaseModel):
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())
class revolve(BaseModel):
"""Command for revolving a solid 2d."""
angle: Angle
axis: Point3d
axis_is_2d: bool
origin: Point3d
target: ModelingCmdId
tolerance: LengthUnit
type: Literal["revolve"] = "revolve"
model_config = ConfigDict(protected_namespaces=())
class revolve_about_edge(BaseModel):
"""Command for revolving a solid 2d about a brep edge"""
angle: Angle
edge_id: str
target: ModelingCmdId
tolerance: LengthUnit
type: Literal["revolve_about_edge"] = "revolve_about_edge"
model_config = ConfigDict(protected_namespaces=())
class close_path(BaseModel): class close_path(BaseModel):
"""Closes a path, converting it to a 2D solid.""" """Closes a path, converting it to a 2D solid."""
@ -221,8 +258,6 @@ class export(BaseModel):
format: OutputFormat format: OutputFormat
source_unit: UnitLength
type: Literal["export"] = "export" type: Literal["export"] = "export"
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())
@ -285,7 +320,7 @@ class entity_get_distance(BaseModel):
class entity_linear_pattern(BaseModel): class entity_linear_pattern(BaseModel):
"""Create a linear pattern using this entity (currently only valid for 3D solids).""" """Create a linear pattern using this entity."""
axis: Point3d axis: Point3d
@ -301,7 +336,7 @@ class entity_linear_pattern(BaseModel):
class entity_circular_pattern(BaseModel): class entity_circular_pattern(BaseModel):
"""Create a circular pattern using this entity (currently only valid for 3D solids).""" """Create a circular pattern using this entity."""
arc_degrees: float arc_degrees: float
@ -320,6 +355,24 @@ class entity_circular_pattern(BaseModel):
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())
class entity_make_helix(BaseModel):
"""Create a helix using the input cylinder and other specified parameters."""
cylinder_id: str
is_clockwise: bool
length: LengthUnit
revolutions: float
start_angle: Angle
type: Literal["entity_make_helix"] = "entity_make_helix"
model_config = ConfigDict(protected_namespaces=())
class edit_mode_enter(BaseModel): class edit_mode_enter(BaseModel):
"""Enter edit mode""" """Enter edit mode"""
@ -362,6 +415,14 @@ class select_remove(BaseModel):
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())
class scene_clear_all(BaseModel):
"""Removes all of the Objects in the scene"""
type: Literal["scene_clear_all"] = "scene_clear_all"
model_config = ConfigDict(protected_namespaces=())
class select_replace(BaseModel): class select_replace(BaseModel):
"""Replaces current selection with these entities (by UUID).""" """Replaces current selection with these entities (by UUID)."""
@ -764,6 +825,36 @@ class enable_sketch_mode(BaseModel):
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())
class set_background_color(BaseModel):
"""Set the background color of the scene."""
color: Color
type: Literal["set_background_color"] = "set_background_color"
model_config = ConfigDict(protected_namespaces=())
class set_current_tool_properties(BaseModel):
"""Set the properties of the tool lines for the scene."""
color: Optional[Color] = None
type: Literal["set_current_tool_properties"] = "set_current_tool_properties"
model_config = ConfigDict(protected_namespaces=())
class set_default_system_properties(BaseModel):
"""Set the default system properties used when a specific property isn't set."""
color: Optional[Color] = None
type: Literal["set_default_system_properties"] = "set_default_system_properties"
model_config = ConfigDict(protected_namespaces=())
class curve_get_type(BaseModel): class curve_get_type(BaseModel):
"""Get type of the given curve.""" """Get type of the given curve."""
@ -951,8 +1042,6 @@ class mass(BaseModel):
output_unit: UnitMass output_unit: UnitMass
source_unit: UnitLength
type: Literal["mass"] = "mass" type: Literal["mass"] = "mass"
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())
@ -969,8 +1058,6 @@ class density(BaseModel):
output_unit: UnitDensity output_unit: UnitDensity
source_unit: UnitLength
type: Literal["density"] = "density" type: Literal["density"] = "density"
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())
@ -983,8 +1070,6 @@ class volume(BaseModel):
output_unit: UnitVolume output_unit: UnitVolume
source_unit: UnitLength
type: Literal["volume"] = "volume" type: Literal["volume"] = "volume"
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())
@ -997,8 +1082,6 @@ class center_of_mass(BaseModel):
output_unit: UnitLength output_unit: UnitLength
source_unit: UnitLength
type: Literal["center_of_mass"] = "center_of_mass" type: Literal["center_of_mass"] = "center_of_mass"
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())
@ -1011,8 +1094,6 @@ class surface_area(BaseModel):
output_unit: UnitArea output_unit: UnitArea
source_unit: UnitLength
type: Literal["surface_area"] = "surface_area" type: Literal["surface_area"] = "surface_area"
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())
@ -1102,6 +1183,14 @@ class select_get(BaseModel):
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())
class get_num_objects(BaseModel):
"""Get the number of objects in the scene"""
type: Literal["get_num_objects"] = "get_num_objects"
model_config = ConfigDict(protected_namespaces=())
ModelingCmd = RootModel[ ModelingCmd = RootModel[
Annotated[ Annotated[
Union[ Union[
@ -1109,6 +1198,8 @@ ModelingCmd = RootModel[
move_path_pen, move_path_pen,
extend_path, extend_path,
extrude, extrude,
revolve,
revolve_about_edge,
close_path, close_path,
camera_drag_start, camera_drag_start,
camera_drag_move, camera_drag_move,
@ -1127,10 +1218,12 @@ ModelingCmd = RootModel[
entity_get_distance, entity_get_distance,
entity_linear_pattern, entity_linear_pattern,
entity_circular_pattern, entity_circular_pattern,
entity_make_helix,
edit_mode_enter, edit_mode_enter,
select_with_point, select_with_point,
select_add, select_add,
select_remove, select_remove,
scene_clear_all,
select_replace, select_replace,
highlight_set_entity, highlight_set_entity,
highlight_set_entities, highlight_set_entities,
@ -1163,6 +1256,9 @@ ModelingCmd = RootModel[
get_sketch_mode_plane, get_sketch_mode_plane,
curve_set_constraint, curve_set_constraint,
enable_sketch_mode, enable_sketch_mode,
set_background_color,
set_current_tool_properties,
set_default_system_properties,
curve_get_type, curve_get_type,
curve_get_control_points, curve_get_control_points,
take_snapshot, take_snapshot,
@ -1193,6 +1289,7 @@ ModelingCmd = RootModel[
edit_mode_exit, edit_mode_exit,
select_clear, select_clear,
select_get, select_get,
get_num_objects,
], ],
Field(discriminator="type"), Field(discriminator="type"),
] ]

View File

@ -9,6 +9,7 @@ from ..models.center_of_mass import CenterOfMass
from ..models.curve_get_control_points import CurveGetControlPoints from ..models.curve_get_control_points import CurveGetControlPoints
from ..models.curve_get_end_points import CurveGetEndPoints from ..models.curve_get_end_points import CurveGetEndPoints
from ..models.curve_get_type import CurveGetType from ..models.curve_get_type import CurveGetType
from ..models.default_camera_focus_on import DefaultCameraFocusOn
from ..models.default_camera_get_settings import DefaultCameraGetSettings from ..models.default_camera_get_settings import DefaultCameraGetSettings
from ..models.default_camera_zoom import DefaultCameraZoom from ..models.default_camera_zoom import DefaultCameraZoom
from ..models.density import Density from ..models.density import Density
@ -25,9 +26,11 @@ from ..models.face_get_gradient import FaceGetGradient
from ..models.face_get_position import FaceGetPosition from ..models.face_get_position import FaceGetPosition
from ..models.face_is_planar import FaceIsPlanar from ..models.face_is_planar import FaceIsPlanar
from ..models.get_entity_type import GetEntityType from ..models.get_entity_type import GetEntityType
from ..models.get_num_objects import GetNumObjects
from ..models.get_sketch_mode_plane import GetSketchModePlane from ..models.get_sketch_mode_plane import GetSketchModePlane
from ..models.highlight_set_entity import HighlightSetEntity from ..models.highlight_set_entity import HighlightSetEntity
from ..models.import_files import ImportFiles from ..models.import_files import ImportFiles
from ..models.imported_geometry import ImportedGeometry
from ..models.mass import Mass from ..models.mass import Mass
from ..models.mouse_click import MouseClick from ..models.mouse_click import MouseClick
from ..models.path_get_curve_uuids_for_vertices import PathGetCurveUuidsForVertices from ..models.path_get_curve_uuids_for_vertices import PathGetCurveUuidsForVertices
@ -166,6 +169,26 @@ class default_camera_zoom(BaseModel):
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())
class get_num_objects(BaseModel):
"""The response to the 'GetNumObjects' endpoint"""
data: GetNumObjects
type: Literal["get_num_objects"] = "get_num_objects"
model_config = ConfigDict(protected_namespaces=())
class default_camera_focus_on(BaseModel):
"""The response to the 'DefaultCameraFocusOn' endpoint"""
data: DefaultCameraFocusOn
type: Literal["default_camera_focus_on"] = "default_camera_focus_on"
model_config = ConfigDict(protected_namespaces=())
class select_get(BaseModel): class select_get(BaseModel):
"""The response to the 'SelectGet' endpoint""" """The response to the 'SelectGet' endpoint"""
@ -378,6 +401,16 @@ class import_files(BaseModel):
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())
class imported_geometry(BaseModel):
"""The response to the 'ImportedGeometry' endpoint"""
data: ImportedGeometry
type: Literal["imported_geometry"] = "imported_geometry"
model_config = ConfigDict(protected_namespaces=())
class mass(BaseModel): class mass(BaseModel):
"""The response to the 'Mass' endpoint""" """The response to the 'Mass' endpoint"""
@ -503,6 +536,8 @@ OkModelingCmdResponse = RootModel[
camera_drag_end, camera_drag_end,
default_camera_get_settings, default_camera_get_settings,
default_camera_zoom, default_camera_zoom,
get_num_objects,
default_camera_focus_on,
select_get, select_get,
solid3d_get_all_edge_faces, solid3d_get_all_edge_faces,
solid3d_get_all_opposite_edges, solid3d_get_all_opposite_edges,
@ -524,6 +559,7 @@ OkModelingCmdResponse = RootModel[
face_get_gradient, face_get_gradient,
plane_intersect_and_project, plane_intersect_and_project,
import_files, import_files,
imported_geometry,
mass, mass,
volume, volume,
density, density,

View File

@ -0,0 +1,12 @@
from enum import Enum
class PostEffectType(str, Enum):
"""Post effect type""" # noqa: E501
PHOSPHOR = "phosphor"
SSAO = "ssao"
NOEFFECT = "noeffect"
def __str__(self) -> str:
return str(self.value)

View File

@ -2,7 +2,6 @@ import datetime
from pydantic import BaseModel, ConfigDict from pydantic import BaseModel, ConfigDict
from ..models.uuid import Uuid
class Session(BaseModel): class Session(BaseModel):
@ -10,14 +9,12 @@ class Session(BaseModel):
created_at: datetime.datetime created_at: datetime.datetime
expires: datetime.datetime expires_at: datetime.datetime
id: Uuid token: str
session_token: Uuid
updated_at: datetime.datetime updated_at: datetime.datetime
user_id: Uuid user_id: str
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())

View File

@ -1,4 +1,4 @@
from typing import List, Literal, Union from typing import List, Literal, Optional, Union
from pydantic import BaseModel, ConfigDict, Field, RootModel from pydantic import BaseModel, ConfigDict, Field, RootModel
from typing_extensions import Annotated from typing_extensions import Annotated
@ -46,8 +46,12 @@ class modeling_cmd_req(BaseModel):
class modeling_cmd_batch_req(BaseModel): class modeling_cmd_batch_req(BaseModel):
"""A sequence of modeling requests. If any request fails, following requests will not be tried.""" """A sequence of modeling requests. If any request fails, following requests will not be tried."""
batch_id: ModelingCmdId
requests: List[ModelingCmdReq] requests: List[ModelingCmdReq]
responses: Optional[bool] = None
type: Literal["modeling_cmd_batch_req"] = "modeling_cmd_batch_req" type: Literal["modeling_cmd_batch_req"] = "modeling_cmd_batch_req"
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())