kscale 0.3.16__py3-none-any.whl → 0.3.18__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kscale/__init__.py +1 -1
- kscale/cli.py +6 -0
- kscale/web/cli/clip.py +132 -0
- kscale/web/cli/group.py +241 -0
- kscale/web/cli/permission.py +110 -0
- kscale/web/cli/robot_class.py +4 -4
- kscale/web/cli/user.py +0 -11
- kscale/web/clients/base.py +5 -304
- kscale/web/clients/client.py +6 -0
- kscale/web/clients/clip.py +118 -0
- kscale/web/clients/group.py +85 -0
- kscale/web/clients/permission.py +35 -0
- kscale/web/clients/user.py +0 -4
- kscale/web/gen/api.py +173 -4
- {kscale-0.3.16.dist-info → kscale-0.3.18.dist-info}/METADATA +1 -1
- {kscale-0.3.16.dist-info → kscale-0.3.18.dist-info}/RECORD +20 -14
- {kscale-0.3.16.dist-info → kscale-0.3.18.dist-info}/WHEEL +1 -1
- {kscale-0.3.16.dist-info → kscale-0.3.18.dist-info}/entry_points.txt +0 -0
- {kscale-0.3.16.dist-info → kscale-0.3.18.dist-info}/licenses/LICENSE +0 -0
- {kscale-0.3.16.dist-info → kscale-0.3.18.dist-info}/top_level.txt +0 -0
kscale/web/gen/api.py
CHANGED
@@ -2,15 +2,31 @@
|
|
2
2
|
|
3
3
|
# generated by datamodel-codegen:
|
4
4
|
# filename: openapi.json
|
5
|
-
# timestamp: 2025-
|
5
|
+
# timestamp: 2025-09-03T23:04:34+00:00
|
6
6
|
|
7
7
|
from __future__ import annotations
|
8
8
|
|
9
|
+
from datetime import datetime
|
9
10
|
from typing import Dict, List, Optional, Union
|
10
11
|
|
11
12
|
from pydantic import BaseModel, Field
|
12
13
|
|
13
14
|
|
15
|
+
class APIKey(BaseModel):
|
16
|
+
id: str = Field(..., title="Id")
|
17
|
+
user_id: str = Field(..., title="User Id")
|
18
|
+
name: str = Field(..., title="Name")
|
19
|
+
key_hash: str = Field(..., title="Key Hash")
|
20
|
+
permissions: List[str] = Field(..., title="Permissions")
|
21
|
+
email: str = Field(..., title="Email")
|
22
|
+
email_verified: bool = Field(..., title="Email Verified")
|
23
|
+
created_at: datetime = Field(..., title="Created At")
|
24
|
+
last_used_at: Optional[datetime] = Field(None, title="Last Used At")
|
25
|
+
expires_at: Optional[datetime] = Field(None, title="Expires At")
|
26
|
+
is_active: Optional[bool] = Field(True, title="Is Active")
|
27
|
+
is_admin: Optional[bool] = Field(False, title="Is Admin")
|
28
|
+
|
29
|
+
|
14
30
|
class APIKeyRequest(BaseModel):
|
15
31
|
num_hours: Optional[int] = Field(24, title="Num Hours")
|
16
32
|
|
@@ -19,6 +35,16 @@ class APIKeyResponse(BaseModel):
|
|
19
35
|
api_key: str = Field(..., title="Api Key")
|
20
36
|
|
21
37
|
|
38
|
+
class APIKeySummaryResponse(BaseModel):
|
39
|
+
id: str = Field(..., title="Id")
|
40
|
+
name: str = Field(..., title="Name")
|
41
|
+
permissions: List[str] = Field(..., title="Permissions")
|
42
|
+
created_at: datetime = Field(..., title="Created At")
|
43
|
+
last_used_at: Optional[datetime] = Field(..., title="Last Used At")
|
44
|
+
expires_at: Optional[datetime] = Field(..., title="Expires At")
|
45
|
+
is_active: bool = Field(..., title="Is Active")
|
46
|
+
|
47
|
+
|
22
48
|
class ActuatorMetadataInput(BaseModel):
|
23
49
|
actuator_type: Optional[str] = Field(None, title="Actuator Type")
|
24
50
|
sysid: Optional[str] = Field(None, title="Sysid")
|
@@ -53,6 +79,14 @@ class ActuatorMetadataOutput(BaseModel):
|
|
53
79
|
error_gain: Optional[str] = Field(None, title="Error Gain")
|
54
80
|
|
55
81
|
|
82
|
+
class AddClipRequest(BaseModel):
|
83
|
+
description: Optional[str] = Field(None, title="Description")
|
84
|
+
|
85
|
+
|
86
|
+
class AddPermissionRequest(BaseModel):
|
87
|
+
permission: str = Field(..., title="Permission")
|
88
|
+
|
89
|
+
|
56
90
|
class AddRobotClassRequest(BaseModel):
|
57
91
|
description: Optional[str] = Field(None, title="Description")
|
58
92
|
|
@@ -62,6 +96,109 @@ class AddRobotRequest(BaseModel):
|
|
62
96
|
class_name: str = Field(..., title="Class Name")
|
63
97
|
|
64
98
|
|
99
|
+
class Agent(BaseModel):
|
100
|
+
id: str = Field(..., title="Id")
|
101
|
+
user_id: str = Field(..., title="User Id")
|
102
|
+
upload_time: str = Field(..., title="Upload Time")
|
103
|
+
description: Optional[str] = Field(None, title="Description")
|
104
|
+
num_downloads: Optional[int] = Field(0, title="Num Downloads")
|
105
|
+
|
106
|
+
|
107
|
+
class AgentDownloadResponse(BaseModel):
|
108
|
+
url: str = Field(..., title="Url")
|
109
|
+
md5_hash: str = Field(..., title="Md5 Hash")
|
110
|
+
|
111
|
+
|
112
|
+
class AgentUploadRequest(BaseModel):
|
113
|
+
filename: str = Field(..., title="Filename")
|
114
|
+
content_type: str = Field(..., title="Content Type")
|
115
|
+
|
116
|
+
|
117
|
+
class AgentUploadResponse(BaseModel):
|
118
|
+
url: str = Field(..., title="Url")
|
119
|
+
filename: str = Field(..., title="Filename")
|
120
|
+
content_type: str = Field(..., title="Content Type")
|
121
|
+
|
122
|
+
|
123
|
+
class Clip(BaseModel):
|
124
|
+
id: str = Field(..., title="Id")
|
125
|
+
description: Optional[str] = Field(None, title="Description")
|
126
|
+
user_id: str = Field(..., title="User Id")
|
127
|
+
created_at: datetime = Field(..., title="Created At")
|
128
|
+
num_downloads: Optional[int] = Field(0, title="Num Downloads")
|
129
|
+
file_size: Optional[int] = Field(None, title="File Size")
|
130
|
+
|
131
|
+
|
132
|
+
class ClipDownloadResponse(BaseModel):
|
133
|
+
url: str = Field(..., title="Url")
|
134
|
+
md5_hash: str = Field(..., title="Md5 Hash")
|
135
|
+
|
136
|
+
|
137
|
+
class ClipUploadRequest(BaseModel):
|
138
|
+
filename: str = Field(..., title="Filename")
|
139
|
+
content_type: str = Field(..., title="Content Type")
|
140
|
+
|
141
|
+
|
142
|
+
class ClipUploadResponse(BaseModel):
|
143
|
+
url: str = Field(..., title="Url")
|
144
|
+
filename: str = Field(..., title="Filename")
|
145
|
+
content_type: str = Field(..., title="Content Type")
|
146
|
+
|
147
|
+
|
148
|
+
class CreateAPIKeyRequest(BaseModel):
|
149
|
+
name: str = Field(..., title="Name")
|
150
|
+
permissions: List[str] = Field(..., title="Permissions")
|
151
|
+
expires_at: Optional[datetime] = Field(None, title="Expires At")
|
152
|
+
|
153
|
+
|
154
|
+
class CreateAPIKeyResponse(BaseModel):
|
155
|
+
api_key: APIKey
|
156
|
+
plain_key: str = Field(..., title="Plain Key")
|
157
|
+
|
158
|
+
|
159
|
+
class CreateAgentRequest(BaseModel):
|
160
|
+
description: Optional[str] = Field(None, title="Description")
|
161
|
+
|
162
|
+
|
163
|
+
class CreateGroupRequest(BaseModel):
|
164
|
+
name: str = Field(..., title="Name")
|
165
|
+
description: Optional[str] = Field(None, title="Description")
|
166
|
+
|
167
|
+
|
168
|
+
class GroupMembershipResponse(BaseModel):
|
169
|
+
id: str = Field(..., title="Id")
|
170
|
+
group_id: str = Field(..., title="Group Id")
|
171
|
+
user_id: str = Field(..., title="User Id")
|
172
|
+
status: str = Field(..., title="Status")
|
173
|
+
requested_at: str = Field(..., title="Requested At")
|
174
|
+
approved_at: Optional[str] = Field(..., title="Approved At")
|
175
|
+
approved_by: Optional[str] = Field(..., title="Approved By")
|
176
|
+
|
177
|
+
|
178
|
+
class GroupResponse(BaseModel):
|
179
|
+
id: str = Field(..., title="Id")
|
180
|
+
name: str = Field(..., title="Name")
|
181
|
+
description: Optional[str] = Field(..., title="Description")
|
182
|
+
owner_id: str = Field(..., title="Owner Id")
|
183
|
+
created_at: str = Field(..., title="Created At")
|
184
|
+
updated_at: str = Field(..., title="Updated At")
|
185
|
+
is_active: bool = Field(..., title="Is Active")
|
186
|
+
|
187
|
+
|
188
|
+
class GroupShareRequest(BaseModel):
|
189
|
+
resource_type: str = Field(..., title="Resource Type")
|
190
|
+
resource_id: str = Field(..., title="Resource Id")
|
191
|
+
|
192
|
+
|
193
|
+
class GroupShareResponse(BaseModel):
|
194
|
+
id: str = Field(..., title="Id")
|
195
|
+
group_id: str = Field(..., title="Group Id")
|
196
|
+
resource_type: str = Field(..., title="Resource Type")
|
197
|
+
resource_id: str = Field(..., title="Resource Id")
|
198
|
+
shared_by: str = Field(..., title="Shared By")
|
199
|
+
shared_at: str = Field(..., title="Shared At")
|
200
|
+
|
201
|
+
|
65
202
|
class JointMetadataInput(BaseModel):
|
66
203
|
id: Optional[int] = Field(None, title="Id")
|
67
204
|
kp: Optional[Union[float, str]] = Field(None, title="Kp")
|
@@ -92,11 +229,16 @@ class JointMetadataOutput(BaseModel):
|
|
92
229
|
max_angle_deg: Optional[str] = Field(None, title="Max Angle Deg")
|
93
230
|
|
94
231
|
|
95
|
-
class
|
232
|
+
class OIDCInfo(BaseModel):
|
96
233
|
authority: str = Field(..., title="Authority")
|
97
234
|
client_id: str = Field(..., title="Client Id")
|
98
235
|
|
99
236
|
|
237
|
+
class PermissionResponse(BaseModel):
|
238
|
+
permission: str = Field(..., title="Permission")
|
239
|
+
description: str = Field(..., title="Description")
|
240
|
+
|
241
|
+
|
100
242
|
class Robot(BaseModel):
|
101
243
|
id: str = Field(..., title="Id")
|
102
244
|
robot_name: str = Field(..., title="Robot Name")
|
@@ -145,6 +287,23 @@ class RobotUploadURDFResponse(BaseModel):
|
|
145
287
|
content_type: str = Field(..., title="Content Type")
|
146
288
|
|
147
289
|
|
290
|
+
class UpdateAPIKeyPermissionsRequest(BaseModel):
|
291
|
+
permissions: List[str] = Field(..., title="Permissions")
|
292
|
+
|
293
|
+
|
294
|
+
class UpdateAgentRequest(BaseModel):
|
295
|
+
description: Optional[str] = Field(None, title="Description")
|
296
|
+
|
297
|
+
|
298
|
+
class UpdateClipRequest(BaseModel):
|
299
|
+
new_description: Optional[str] = Field(None, title="New Description")
|
300
|
+
|
301
|
+
|
302
|
+
class UpdateGroupRequest(BaseModel):
|
303
|
+
name: Optional[str] = Field(None, title="Name")
|
304
|
+
description: Optional[str] = Field(None, title="Description")
|
305
|
+
|
306
|
+
|
148
307
|
class UpdateRobotClassRequest(BaseModel):
|
149
308
|
new_class_name: Optional[str] = Field(None, title="New Class Name")
|
150
309
|
new_description: Optional[str] = Field(None, title="New Description")
|
@@ -156,11 +315,21 @@ class UpdateRobotRequest(BaseModel):
|
|
156
315
|
new_description: Optional[str] = Field(None, title="New Description")
|
157
316
|
|
158
317
|
|
318
|
+
class UpdateUserPermissionsRequest(BaseModel):
|
319
|
+
permissions: List[str] = Field(..., title="Permissions")
|
320
|
+
|
321
|
+
|
322
|
+
class UserPermissionsResponse(BaseModel):
|
323
|
+
user_id: str = Field(..., title="User Id")
|
324
|
+
display_name: str = Field(..., title="Display Name")
|
325
|
+
email: str = Field(..., title="Email")
|
326
|
+
permissions: List[str] = Field(..., title="Permissions")
|
327
|
+
is_active: bool = Field(..., title="Is Active")
|
328
|
+
|
329
|
+
|
159
330
|
class UserResponse(BaseModel):
|
160
331
|
user_id: str = Field(..., title="User Id")
|
161
332
|
is_admin: bool = Field(..., title="Is Admin")
|
162
|
-
can_upload: bool = Field(..., title="Can Upload")
|
163
|
-
can_test: bool = Field(..., title="Can Test")
|
164
333
|
|
165
334
|
|
166
335
|
class ValidationError(BaseModel):
|
@@ -1,5 +1,5 @@
|
|
1
|
-
kscale/__init__.py,sha256=
|
2
|
-
kscale/cli.py,sha256=
|
1
|
+
kscale/__init__.py,sha256=yFIa0TyrRcBHZxIJp6qoKq_e2RFK9vspsF4A72f87ZA,201
|
2
|
+
kscale/cli.py,sha256=Yj_2ru8OP7LtI-wMaM1eXiigK__CHf85UgAikapwXMU,1072
|
3
3
|
kscale/conf.py,sha256=dm35XSnzJp93St-ixVtYN4Nvqvb5upPGBrWkSI6Yb-4,1743
|
4
4
|
kscale/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
5
|
kscale/requirements-dev.txt,sha256=WI7-ea4IRJakmqVMN8QKhOsDGrghwtvk03aIsFaNSIw,130
|
@@ -14,20 +14,26 @@ kscale/utils/cli.py,sha256=JoaY5x5SdUx97KmMM9j5AjRRUqqrTlJ9qVckZptEsYA,827
|
|
14
14
|
kscale/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
15
15
|
kscale/web/utils.py,sha256=Mme-FAQ0_zbjjOQeX8wyq8F4kL4i9fH7ytri16U6qOA,1046
|
16
16
|
kscale/web/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
|
+
kscale/web/cli/clip.py,sha256=JkGImMqEYiAkvhlNG3LtV2JJMRVAHhsEU3U7ztYIB6s,4450
|
18
|
+
kscale/web/cli/group.py,sha256=jIlnPViLosb19xPB_6_jEgrX-oLE1FxnfBIApWEJQps,7909
|
19
|
+
kscale/web/cli/permission.py,sha256=P0ZPexAD6qhTyyp--xpOFni3Q0VmKhhUyk75aNW7YzI,3617
|
17
20
|
kscale/web/cli/robot.py,sha256=rI-A4_0uvJPeA71Apl4Z3mV5fIfWkgmzT9JRmJYxz3A,3307
|
18
|
-
kscale/web/cli/robot_class.py,sha256=
|
19
|
-
kscale/web/cli/user.py,sha256=
|
21
|
+
kscale/web/cli/robot_class.py,sha256=lmA0gxXiFTMoUtq6FBPwr8gRfM_hkAMJ7KOog5RUZII,19715
|
22
|
+
kscale/web/cli/user.py,sha256=acerUkVjAG7n3pPAs_HWJ_GNf9n-7t6sTlOrVh_O5Vs,939
|
20
23
|
kscale/web/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
|
-
kscale/web/clients/base.py,sha256=
|
22
|
-
kscale/web/clients/client.py,sha256=
|
24
|
+
kscale/web/clients/base.py,sha256=rgo0Td5OoqYJxK-QkXafVvVMJzJkecAi1wLpPtARZrQ,4147
|
25
|
+
kscale/web/clients/client.py,sha256=POkyqkN8fJXAfpSSfmNI4IsV9FJZdcmQwU7azNMWWFk,572
|
26
|
+
kscale/web/clients/clip.py,sha256=XZTl_ZK-m_VgDVAOZKA3ge904RCp2bsUrL4NPUe565Q,4487
|
27
|
+
kscale/web/clients/group.py,sha256=LpMtX3gbqWKSltWbuMIYVpL8BSO_iI1WE-4r0XgwrHY,3938
|
28
|
+
kscale/web/clients/permission.py,sha256=lhT9kwhsxS6HImcOSP1i0uhfYKPlDjAht7uJwkgS0Bo,1964
|
23
29
|
kscale/web/clients/robot.py,sha256=PI8HHkU-4Re9I5rLpp6dGbekRE-rBNVfXZxR_mO2MqE,1485
|
24
30
|
kscale/web/clients/robot_class.py,sha256=LCKje6nNsDBeKDxZAGCO9vQXdyOwtx0woMmB5vDoUmE,7230
|
25
|
-
kscale/web/clients/user.py,sha256=
|
31
|
+
kscale/web/clients/user.py,sha256=9iv8J-ROm_yBIwi-0oqldReLkNBFktdHRv3UCOxBzjY,377
|
26
32
|
kscale/web/gen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
27
|
-
kscale/web/gen/api.py,sha256=
|
28
|
-
kscale-0.3.
|
29
|
-
kscale-0.3.
|
30
|
-
kscale-0.3.
|
31
|
-
kscale-0.3.
|
32
|
-
kscale-0.3.
|
33
|
-
kscale-0.3.
|
33
|
+
kscale/web/gen/api.py,sha256=hJ7FdrRTIwxQUZr4VKkZbAjKALYwqEDO7CxZs_dxhAY,13335
|
34
|
+
kscale-0.3.18.dist-info/licenses/LICENSE,sha256=HCN2bImAzUOXldAZZI7JZ9PYq6OwMlDAP_PpX1HnuN0,1071
|
35
|
+
kscale-0.3.18.dist-info/METADATA,sha256=yYiLryxgKKmYfMjiwpY_ke9w_x6-Uv-CPMQBXerKdEs,2350
|
36
|
+
kscale-0.3.18.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
37
|
+
kscale-0.3.18.dist-info/entry_points.txt,sha256=N_0pCpPnwGDYVzOeuaSOrbJkS5L3lS9d8CxpJF1f8UI,62
|
38
|
+
kscale-0.3.18.dist-info/top_level.txt,sha256=C2ynjYwopg6YjgttnI2dJjasyq3EKNmYp-IfQg9Xms4,7
|
39
|
+
kscale-0.3.18.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|