Skip to content

Commit 25a4817

Browse files
Update api spec (#531)
* 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 0d10712 commit 25a4817

File tree

9 files changed

+773
-0
lines changed

9 files changed

+773
-0
lines changed

kittycad.py.patch.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,14 @@
351351
"libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.orgs"
352352
}
353353
},
354+
{
355+
"op": "add",
356+
"path": "/paths/~1orgs~1{id}~1admin~1details/get/x-python",
357+
"value": {
358+
"example": "from kittycad.models.uuid import Uuid\nfrom kittycad.models.uuid import Uuid\nfrom kittycad.models import OrgAdminDetails\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_org_admin_details_get():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n result: OrgAdminDetails = client.orgs.org_admin_details_get(id=Uuid(\"<string>\"))\n\n\n body: OrgAdminDetails = result\n print(body)\n\n",
359+
"libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.orgs"
360+
}
361+
},
354362
{
355363
"op": "add",
356364
"path": "/paths/~1orgs~1{id}~1enterprise~1pricing/put/x-python",
@@ -807,6 +815,14 @@
807815
"libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.users"
808816
}
809817
},
818+
{
819+
"op": "add",
820+
"path": "/paths/~1users~1{id}~1admin~1details/get/x-python",
821+
"value": {
822+
"example": "from kittycad.models.user_identifier import UserIdentifier\nfrom kittycad.models import UserAdminDetails\nfrom typing import Union, Any, Optional, List, Tuple\nfrom kittycad.types import Response\ndef example_user_admin_details_get():\n client = KittyCAD() # Uses KITTYCAD_API_TOKEN environment variable\n\n result: UserAdminDetails = client.users.user_admin_details_get(id=UserIdentifier(\"<string>\"))\n\n\n body: UserAdminDetails = result\n print(body)\n\n",
823+
"libDocsLink": "https://python.api.docs.zoo.dev/_autosummary/kittycad.KittyCAD.html#kittycad.KittyCAD.users"
824+
}
825+
},
810826
{
811827
"op": "add",
812828
"path": "/paths/~1users~1{id}~1api-calls/get/x-python",

kittycad/__init__.py

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
from .models.ml_prompt_results_page import MlPromptResultsPage
9292
from .models.oauth2_client_info import OAuth2ClientInfo
9393
from .models.org import Org
94+
from .models.org_admin_details import OrgAdminDetails
9495
from .models.org_details import OrgDetails
9596
from .models.org_member import OrgMember
9697
from .models.org_member_results_page import OrgMemberResultsPage
@@ -153,6 +154,7 @@
153154
from .models.update_shortlink_request import UpdateShortlinkRequest
154155
from .models.update_user import UpdateUser
155156
from .models.user import User
157+
from .models.user_admin_details import UserAdminDetails
156158
from .models.user_identifier import UserIdentifier
157159
from .models.user_org_info import UserOrgInfo
158160
from .models.user_org_role import UserOrgRole
@@ -6101,6 +6103,34 @@ def get_any_org(
61016103
# Validate into a Pydantic model (works for BaseModel and RootModel)
61026104
return Org.model_validate(json_data)
61036105

6106+
def org_admin_details_get(
6107+
self,
6108+
id: Uuid,
6109+
) -> OrgAdminDetails:
6110+
"""Zoo admins can retrieve extended information about any organization, while non-admins receive a 404 to avoid leaking existence."""
6111+
6112+
url = "{}/orgs/{id}/admin/details".format(self.client.base_url, id=id)
6113+
6114+
_client = self.client.get_http_client()
6115+
6116+
response = _client.get(
6117+
url=url,
6118+
headers=self.client.get_headers(),
6119+
)
6120+
6121+
if not response.is_success:
6122+
from ..response_helpers import raise_for_status
6123+
6124+
raise_for_status(response)
6125+
6126+
if not response.content:
6127+
return None # type: ignore
6128+
6129+
json_data = response.json()
6130+
6131+
# Validate into a Pydantic model (works for BaseModel and RootModel)
6132+
return OrgAdminDetails.model_validate(json_data)
6133+
61046134
def update_enterprise_pricing_for_org(
61056135
self,
61066136
id: Uuid,
@@ -6858,6 +6888,34 @@ async def get_any_org(
68586888
# Validate into a Pydantic model (works for BaseModel and RootModel)
68596889
return Org.model_validate(json_data)
68606890

6891+
async def org_admin_details_get(
6892+
self,
6893+
id: Uuid,
6894+
) -> OrgAdminDetails:
6895+
"""Zoo admins can retrieve extended information about any organization, while non-admins receive a 404 to avoid leaking existence."""
6896+
6897+
url = "{}/orgs/{id}/admin/details".format(self.client.base_url, id=id)
6898+
6899+
_client = self.client.get_http_client()
6900+
6901+
response = await _client.get(
6902+
url=url,
6903+
headers=self.client.get_headers(),
6904+
)
6905+
6906+
if not response.is_success:
6907+
from ..response_helpers import raise_for_status
6908+
6909+
raise_for_status(response)
6910+
6911+
if not response.content:
6912+
return None # type: ignore
6913+
6914+
json_data = response.json()
6915+
6916+
# Validate into a Pydantic model (works for BaseModel and RootModel)
6917+
return OrgAdminDetails.model_validate(json_data)
6918+
68616919
async def update_enterprise_pricing_for_org(
68626920
self,
68636921
id: Uuid,
@@ -10706,6 +10764,34 @@ def get_user(
1070610764
# Validate into a Pydantic model (works for BaseModel and RootModel)
1070710765
return User.model_validate(json_data)
1070810766

10767+
def user_admin_details_get(
10768+
self,
10769+
id: UserIdentifier,
10770+
) -> UserAdminDetails:
10771+
"""Zoo admins can retrieve extended information about any user, while non-admins receive a 404 to avoid leaking the existence of the resource."""
10772+
10773+
url = "{}/users/{id}/admin/details".format(self.client.base_url, id=id)
10774+
10775+
_client = self.client.get_http_client()
10776+
10777+
response = _client.get(
10778+
url=url,
10779+
headers=self.client.get_headers(),
10780+
)
10781+
10782+
if not response.is_success:
10783+
from ..response_helpers import raise_for_status
10784+
10785+
raise_for_status(response)
10786+
10787+
if not response.content:
10788+
return None # type: ignore
10789+
10790+
json_data = response.json()
10791+
10792+
# Validate into a Pydantic model (works for BaseModel and RootModel)
10793+
return UserAdminDetails.model_validate(json_data)
10794+
1070910795
def update_subscription_for_user(
1071010796
self,
1071110797
id: UserIdentifier,
@@ -11461,6 +11547,34 @@ async def get_user(
1146111547
# Validate into a Pydantic model (works for BaseModel and RootModel)
1146211548
return User.model_validate(json_data)
1146311549

11550+
async def user_admin_details_get(
11551+
self,
11552+
id: UserIdentifier,
11553+
) -> UserAdminDetails:
11554+
"""Zoo admins can retrieve extended information about any user, while non-admins receive a 404 to avoid leaking the existence of the resource."""
11555+
11556+
url = "{}/users/{id}/admin/details".format(self.client.base_url, id=id)
11557+
11558+
_client = self.client.get_http_client()
11559+
11560+
response = await _client.get(
11561+
url=url,
11562+
headers=self.client.get_headers(),
11563+
)
11564+
11565+
if not response.is_success:
11566+
from ..response_helpers import raise_for_status
11567+
11568+
raise_for_status(response)
11569+
11570+
if not response.content:
11571+
return None # type: ignore
11572+
11573+
json_data = response.json()
11574+
11575+
# Validate into a Pydantic model (works for BaseModel and RootModel)
11576+
return UserAdminDetails.model_validate(json_data)
11577+
1146411578
async def update_subscription_for_user(
1146511579
self,
1146611580
id: UserIdentifier,

kittycad/models/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from .account_provider import AccountProvider
44
from .add_hole_from_offset import AddHoleFromOffset
55
from .add_org_member import AddOrgMember
6+
from .address import Address
67
from .address_details import AddressDetails
78
from .adjacency_info import AdjacencyInfo
89
from .angle import Angle
@@ -236,6 +237,8 @@
236237
from .opposite_for_angle import OppositeForAngle
237238
from .opposite_for_length_unit import OppositeForLengthUnit
238239
from .org import Org
240+
from .org_address import OrgAddress
241+
from .org_admin_details import OrgAdminDetails
239242
from .org_details import OrgDetails
240243
from .org_member import OrgMember
241244
from .org_member_results_page import OrgMemberResultsPage
@@ -394,6 +397,7 @@
394397
from .update_shortlink_request import UpdateShortlinkRequest
395398
from .update_user import UpdateUser
396399
from .user import User
400+
from .user_admin_details import UserAdminDetails
397401
from .user_identifier import UserIdentifier
398402
from .user_org_info import UserOrgInfo
399403
from .user_org_role import UserOrgRole

kittycad/models/address.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import datetime
2+
from typing import Optional
3+
4+
from ..models.country_code import CountryCode
5+
from ..models.uuid import Uuid
6+
from .base import KittyCadBaseModel
7+
8+
9+
class Address(KittyCadBaseModel):
10+
"""An address for a user."""
11+
12+
city: Optional[str] = None
13+
14+
country: CountryCode
15+
16+
created_at: datetime.datetime
17+
18+
id: Uuid
19+
20+
state: Optional[str] = None
21+
22+
street1: Optional[str] = None
23+
24+
street2: Optional[str] = None
25+
26+
updated_at: datetime.datetime
27+
28+
user_id: Uuid
29+
30+
zip: Optional[str] = None

kittycad/models/org_address.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import datetime
2+
from typing import Optional
3+
4+
from ..models.country_code import CountryCode
5+
from ..models.uuid import Uuid
6+
from .base import KittyCadBaseModel
7+
8+
9+
class OrgAddress(KittyCadBaseModel):
10+
"""An address for an organization."""
11+
12+
city: Optional[str] = None
13+
14+
country: CountryCode
15+
16+
created_at: datetime.datetime
17+
18+
id: Uuid
19+
20+
org_id: Uuid
21+
22+
state: Optional[str] = None
23+
24+
street1: Optional[str] = None
25+
26+
street2: Optional[str] = None
27+
28+
updated_at: datetime.datetime
29+
30+
zip: Optional[str] = None
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from typing import List, Optional
2+
3+
from ..models.block_reason import BlockReason
4+
from ..models.org_address import OrgAddress
5+
from ..models.payment_method import PaymentMethod
6+
from .base import KittyCadBaseModel
7+
8+
9+
class OrgAdminDetails(KittyCadBaseModel):
10+
"""Extra admin-only details for an organization."""
11+
12+
address: Optional[OrgAddress] = None
13+
14+
address_summary: Optional[str] = None
15+
16+
block: Optional[BlockReason] = None
17+
18+
block_message: Optional[str] = None
19+
20+
payment_methods: List[PaymentMethod]
21+
22+
payment_methods_summary: List[str]
23+
24+
stripe_customer_id: Optional[str] = None
25+
26+
stripe_dashboard_url: Optional[str] = None
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from typing import List, Optional
2+
3+
from ..models.address import Address
4+
from ..models.block_reason import BlockReason
5+
from ..models.payment_method import PaymentMethod
6+
from .base import KittyCadBaseModel
7+
8+
9+
class UserAdminDetails(KittyCadBaseModel):
10+
"""Extra admin-only details for a user."""
11+
12+
address: Optional[Address] = None
13+
14+
address_summary: Optional[str] = None
15+
16+
block: Optional[BlockReason] = None
17+
18+
block_message: Optional[str] = None
19+
20+
hubspot_contact_url: Optional[str] = None
21+
22+
payment_methods: List[PaymentMethod]
23+
24+
payment_methods_summary: List[str]
25+
26+
stripe_customer_id: Optional[str] = None
27+
28+
stripe_dashboard_url: Optional[str] = None

0 commit comments

Comments
 (0)