kscale 0.3.12__py3-none-any.whl → 0.3.13__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 CHANGED
@@ -1,6 +1,6 @@
1
1
  """Defines the common interface for the K-Scale Python API."""
2
2
 
3
- __version__ = "0.3.12"
3
+ __version__ = "0.3.13"
4
4
 
5
5
  from pathlib import Path
6
6
 
@@ -3,6 +3,7 @@
3
3
  import hashlib
4
4
  import json
5
5
  import logging
6
+ import shutil
6
7
  import tarfile
7
8
  from pathlib import Path
8
9
  from typing import Any
@@ -171,9 +172,16 @@ class RobotClassClient(BaseClient):
171
172
 
172
173
  # Unpacks the file if requested.
173
174
  unpack_path = cache_path.parent / "robot"
174
- unpack_path.mkdir(parents=True, exist_ok=True)
175
175
  unpacked_path_info = unpack_path / INFO_FILE_NAME
176
176
 
177
+ if not cache:
178
+ # If not using cache, remove the existing unpacked directory.
179
+ if unpack_path.exists():
180
+ logger.info("Removing existing unpacked directory")
181
+ shutil.rmtree(unpack_path)
182
+
183
+ unpack_path.mkdir(parents=True, exist_ok=True)
184
+
177
185
  # If the file has already been unpacked, return the path.
178
186
  if unpacked_path_info.exists():
179
187
  with open(unpacked_path_info, "r") as f:
kscale/web/gen/api.py CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # generated by datamodel-codegen:
4
4
  # filename: openapi.json
5
- # timestamp: 2025-05-03T21:02:12+00:00
5
+ # timestamp: 2025-05-04T22:45:26+00:00
6
6
 
7
7
  from __future__ import annotations
8
8
 
@@ -19,6 +19,40 @@ class APIKeyResponse(BaseModel):
19
19
  api_key: str = Field(..., title="Api Key")
20
20
 
21
21
 
22
+ class ActuatorMetadataInput(BaseModel):
23
+ actuator_type: Optional[str] = Field(None, title="Actuator Type")
24
+ sysid: Optional[str] = Field(None, title="Sysid")
25
+ max_torque: Optional[Union[float, str]] = Field(None, title="Max Torque")
26
+ armature: Optional[Union[float, str]] = Field(None, title="Armature")
27
+ damping: Optional[Union[float, str]] = Field(None, title="Damping")
28
+ frictionloss: Optional[Union[float, str]] = Field(None, title="Frictionloss")
29
+ vin: Optional[Union[float, str]] = Field(None, title="Vin")
30
+ kt: Optional[Union[float, str]] = Field(None, title="Kt")
31
+ R: Optional[Union[float, str]] = Field(None, title="R")
32
+ vmax: Optional[Union[float, str]] = Field(None, title="Vmax")
33
+ amax: Optional[Union[float, str]] = Field(None, title="Amax")
34
+ max_velocity: Optional[Union[float, str]] = Field(None, title="Max Velocity")
35
+ max_pwm: Optional[Union[float, str]] = Field(None, title="Max Pwm")
36
+ error_gain: Optional[Union[float, str]] = Field(None, title="Error Gain")
37
+
38
+
39
+ class ActuatorMetadataOutput(BaseModel):
40
+ actuator_type: Optional[str] = Field(None, title="Actuator Type")
41
+ sysid: Optional[str] = Field(None, title="Sysid")
42
+ max_torque: Optional[str] = Field(None, title="Max Torque")
43
+ armature: Optional[str] = Field(None, title="Armature")
44
+ damping: Optional[str] = Field(None, title="Damping")
45
+ frictionloss: Optional[str] = Field(None, title="Frictionloss")
46
+ vin: Optional[str] = Field(None, title="Vin")
47
+ kt: Optional[str] = Field(None, title="Kt")
48
+ R: Optional[str] = Field(None, title="R")
49
+ vmax: Optional[str] = Field(None, title="Vmax")
50
+ amax: Optional[str] = Field(None, title="Amax")
51
+ max_velocity: Optional[str] = Field(None, title="Max Velocity")
52
+ max_pwm: Optional[str] = Field(None, title="Max Pwm")
53
+ error_gain: Optional[str] = Field(None, title="Error Gain")
54
+
55
+
22
56
  class AddRobotClassRequest(BaseModel):
23
57
  description: Optional[str] = Field(None, title="Description")
24
58
 
@@ -82,11 +116,17 @@ class RobotResponse(BaseModel):
82
116
 
83
117
  class RobotURDFMetadataInput(BaseModel):
84
118
  joint_name_to_metadata: Optional[Dict[str, JointMetadataInput]] = Field(None, title="Joint Name To Metadata")
119
+ actuator_type_to_metadata: Optional[Dict[str, ActuatorMetadataInput]] = Field(
120
+ None, title="Actuator Type To Metadata"
121
+ )
85
122
  control_frequency: Optional[Union[float, str]] = Field(None, title="Control Frequency")
86
123
 
87
124
 
88
125
  class RobotURDFMetadataOutput(BaseModel):
89
126
  joint_name_to_metadata: Optional[Dict[str, JointMetadataOutput]] = Field(None, title="Joint Name To Metadata")
127
+ actuator_type_to_metadata: Optional[Dict[str, ActuatorMetadataOutput]] = Field(
128
+ None, title="Actuator Type To Metadata"
129
+ )
90
130
  control_frequency: Optional[str] = Field(None, title="Control Frequency")
91
131
 
92
132
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kscale
3
- Version: 0.3.12
3
+ Version: 0.3.13
4
4
  Summary: The kscale project
5
5
  Home-page: https://github.com/kscalelabs/kscale
6
6
  Author: Benjamin Bolte
@@ -55,7 +55,7 @@ Dynamic: summary
55
55
 
56
56
  # K-Scale Command Line Interface
57
57
 
58
- This is a command line tool for interacting with various services provided by K-Scale Labs. For more information, see the [documentation](https://docs.kscale.dev/pkg/intro).
58
+ This is a command line tool for interacting with various services provided by K-Scale Labs. For more information, see the [documentation](https://docs.kscale.dev/docs/k-scale-api).
59
59
 
60
60
  ## Installation
61
61
 
@@ -1,4 +1,4 @@
1
- kscale/__init__.py,sha256=dvs5DUTbLSWgAycehACzl60WVsJdFN7yCMHoTvxFI38,201
1
+ kscale/__init__.py,sha256=blW9DBfEkhee_kJYnE9wcIWBY9iWvKHkO1_CoKimPU8,201
2
2
  kscale/cli.py,sha256=JvaPtmWvF7s0D4I3K98eZAItf3oOi2ULsn5aPGxDcu4,795
3
3
  kscale/conf.py,sha256=dm35XSnzJp93St-ixVtYN4Nvqvb5upPGBrWkSI6Yb-4,1743
4
4
  kscale/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -21,13 +21,13 @@ kscale/web/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
21
21
  kscale/web/clients/base.py,sha256=P5AZdoawNpocgx_8j5v0eauowG5suUf8SnnD7q1_gx0,16213
22
22
  kscale/web/clients/client.py,sha256=rzW2s8T7bKVuybOSQ65-ghl02rcXBoOxnx_nUDwgEPw,362
23
23
  kscale/web/clients/robot.py,sha256=PI8HHkU-4Re9I5rLpp6dGbekRE-rBNVfXZxR_mO2MqE,1485
24
- kscale/web/clients/robot_class.py,sha256=mgA-95P8lR0eCIF7-9f7oPE5tQ8tYLOIU7a83dFiqCs,6970
24
+ kscale/web/clients/robot_class.py,sha256=LCKje6nNsDBeKDxZAGCO9vQXdyOwtx0woMmB5vDoUmE,7230
25
25
  kscale/web/clients/user.py,sha256=jsa1_s6qXRM-AGBbHlPhd1NierUtynjY9tVAPNr6_Os,568
26
26
  kscale/web/gen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- kscale/web/gen/api.py,sha256=VSTHOLFtsjH_9mGYChW0iDbtX5FlLU8Itz5MzDb4maE,5147
28
- kscale-0.3.12.dist-info/licenses/LICENSE,sha256=HCN2bImAzUOXldAZZI7JZ9PYq6OwMlDAP_PpX1HnuN0,1071
29
- kscale-0.3.12.dist-info/METADATA,sha256=Pqgb5F9FCKrg6aoVgzHzmqKTT229TOMWOBqOa1e9SfM,2343
30
- kscale-0.3.12.dist-info/WHEEL,sha256=GHB6lJx2juba1wDgXDNlMTyM13ckjBMKf-OnwgKOCtA,91
31
- kscale-0.3.12.dist-info/entry_points.txt,sha256=N_0pCpPnwGDYVzOeuaSOrbJkS5L3lS9d8CxpJF1f8UI,62
32
- kscale-0.3.12.dist-info/top_level.txt,sha256=C2ynjYwopg6YjgttnI2dJjasyq3EKNmYp-IfQg9Xms4,7
33
- kscale-0.3.12.dist-info/RECORD,,
27
+ kscale/web/gen/api.py,sha256=QwyayqHVz7FFgDQO7IJFMN9MxtKpJPemiTMAk6aCEQE,7299
28
+ kscale-0.3.13.dist-info/licenses/LICENSE,sha256=HCN2bImAzUOXldAZZI7JZ9PYq6OwMlDAP_PpX1HnuN0,1071
29
+ kscale-0.3.13.dist-info/METADATA,sha256=MBCGy62OjZbOcDo-culQK6K62vtR1kIDshurzWkp768,2350
30
+ kscale-0.3.13.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
31
+ kscale-0.3.13.dist-info/entry_points.txt,sha256=N_0pCpPnwGDYVzOeuaSOrbJkS5L3lS9d8CxpJF1f8UI,62
32
+ kscale-0.3.13.dist-info/top_level.txt,sha256=C2ynjYwopg6YjgttnI2dJjasyq3EKNmYp-IfQg9Xms4,7
33
+ kscale-0.3.13.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.3.0)
2
+ Generator: setuptools (80.3.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5