kscale 0.3.6__py3-none-any.whl → 0.3.7__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/requirements.txt +0 -3
- kscale/web/cli/robot_class.py +31 -24
- {kscale-0.3.6.dist-info → kscale-0.3.7.dist-info}/METADATA +1 -2
- {kscale-0.3.6.dist-info → kscale-0.3.7.dist-info}/RECORD +9 -9
- {kscale-0.3.6.dist-info → kscale-0.3.7.dist-info}/LICENSE +0 -0
- {kscale-0.3.6.dist-info → kscale-0.3.7.dist-info}/WHEEL +0 -0
- {kscale-0.3.6.dist-info → kscale-0.3.7.dist-info}/entry_points.txt +0 -0
- {kscale-0.3.6.dist-info → kscale-0.3.7.dist-info}/top_level.txt +0 -0
kscale/__init__.py
CHANGED
kscale/requirements.txt
CHANGED
kscale/web/cli/robot_class.py
CHANGED
@@ -80,7 +80,23 @@ async def update(current_name: str, name: str | None = None, description: str |
|
|
80
80
|
click.echo(f" Description: {click.style(robot_class.description or 'N/A', fg='yellow')}")
|
81
81
|
|
82
82
|
|
83
|
-
@cli.command()
|
83
|
+
@cli.command("delete")
|
84
|
+
@click.argument("name")
|
85
|
+
@coro
|
86
|
+
async def delete_robot_class(name: str) -> None:
|
87
|
+
"""Deletes a robot class."""
|
88
|
+
async with RobotClassClient() as client:
|
89
|
+
await client.delete_robot_class(name)
|
90
|
+
click.echo(f"Robot class deleted: {click.style(name, fg='red')}")
|
91
|
+
|
92
|
+
|
93
|
+
@cli.group()
|
94
|
+
def metadata() -> None:
|
95
|
+
"""Handle the robot class metadata."""
|
96
|
+
pass
|
97
|
+
|
98
|
+
|
99
|
+
@metadata.command("update")
|
84
100
|
@click.argument("name")
|
85
101
|
@click.argument("json_path", type=click.Path(exists=True))
|
86
102
|
@coro
|
@@ -96,7 +112,7 @@ async def update_metadata(name: str, json_path: str) -> None:
|
|
96
112
|
click.echo(f" Name: {click.style(robot_class.class_name, fg='green')}")
|
97
113
|
|
98
114
|
|
99
|
-
@
|
115
|
+
@metadata.command("get")
|
100
116
|
@click.argument("name")
|
101
117
|
@click.option("--json-path", type=click.Path(exists=False))
|
102
118
|
@coro
|
@@ -115,27 +131,17 @@ async def get_metadata(name: str, json_path: str | None = None) -> None:
|
|
115
131
|
json.dump(metadata.model_dump(), f)
|
116
132
|
|
117
133
|
|
118
|
-
@cli.command()
|
119
|
-
@click.argument("name")
|
120
|
-
@coro
|
121
|
-
async def delete(name: str) -> None:
|
122
|
-
"""Deletes a robot class."""
|
123
|
-
async with RobotClassClient() as client:
|
124
|
-
await client.delete_robot_class(name)
|
125
|
-
click.echo(f"Robot class deleted: {click.style(name, fg='red')}")
|
126
|
-
|
127
|
-
|
128
134
|
@cli.group()
|
129
135
|
def urdf() -> None:
|
130
136
|
"""Handle the robot class URDF."""
|
131
137
|
pass
|
132
138
|
|
133
139
|
|
134
|
-
@urdf.command()
|
140
|
+
@urdf.command("upload")
|
135
141
|
@click.argument("class_name")
|
136
142
|
@click.argument("urdf_file")
|
137
143
|
@coro
|
138
|
-
async def
|
144
|
+
async def upload_urdf(class_name: str, urdf_file: str) -> None:
|
139
145
|
"""Uploads a URDF file to a robot class."""
|
140
146
|
async with RobotClassClient() as client:
|
141
147
|
response = await client.upload_robot_class_urdf(class_name, urdf_file)
|
@@ -143,18 +149,18 @@ async def upload(class_name: str, urdf_file: str) -> None:
|
|
143
149
|
click.echo(f" Filename: {click.style(response.filename, fg='green')}")
|
144
150
|
|
145
151
|
|
146
|
-
@urdf.command()
|
152
|
+
@urdf.command("download")
|
147
153
|
@click.argument("class_name")
|
148
154
|
@click.option("--cache", is_flag=True, default=False)
|
149
155
|
@coro
|
150
|
-
async def
|
156
|
+
async def download_urdf(class_name: str, cache: bool) -> None:
|
151
157
|
"""Downloads a URDF file from a robot class."""
|
152
158
|
async with RobotClassClient() as client:
|
153
159
|
urdf_file = await client.download_and_extract_urdf(class_name, cache=cache)
|
154
160
|
click.echo(f"URDF downloaded: {click.style(urdf_file, fg='green')}")
|
155
161
|
|
156
162
|
|
157
|
-
@urdf.command()
|
163
|
+
@urdf.command("pybullet")
|
158
164
|
@click.argument("class_name")
|
159
165
|
@click.option("--no-cache", is_flag=True, default=False)
|
160
166
|
@click.option("--hide-gui", is_flag=True, default=False)
|
@@ -168,7 +174,7 @@ async def download(class_name: str, cache: bool) -> None:
|
|
168
174
|
@click.option("--start-height", type=float, default=0.0)
|
169
175
|
@click.option("--cycle-duration", type=float, default=2.0)
|
170
176
|
@coro
|
171
|
-
async def
|
177
|
+
async def run_pybullet(
|
172
178
|
class_name: str,
|
173
179
|
no_cache: bool,
|
174
180
|
hide_gui: bool,
|
@@ -432,11 +438,11 @@ async def pybullet(
|
|
432
438
|
last_time = cur_time
|
433
439
|
|
434
440
|
|
435
|
-
@urdf.command()
|
441
|
+
@urdf.command("mujoco")
|
436
442
|
@click.argument("class_name")
|
437
443
|
@click.option("--no-cache", is_flag=True, default=False)
|
438
444
|
@coro
|
439
|
-
async def
|
445
|
+
async def run_mujoco(class_name: str, no_cache: bool) -> None:
|
440
446
|
"""Shows the URDF file for a robot class in Mujoco.
|
441
447
|
|
442
448
|
This command downloads and extracts the robot class URDF folder,
|
@@ -444,11 +450,11 @@ async def mujoco(class_name: str, no_cache: bool) -> None:
|
|
444
450
|
launches the Mujoco viewer using the provided MJCF file.
|
445
451
|
"""
|
446
452
|
try:
|
447
|
-
|
453
|
+
import mujoco.viewer
|
448
454
|
except ImportError:
|
449
455
|
click.echo(
|
450
456
|
click.style(
|
451
|
-
"Mujoco and mujoco-python-viewer are required; install with `pip install mujoco
|
457
|
+
"Mujoco and mujoco-python-viewer are required; install with `pip install mujoco`",
|
452
458
|
fg="red",
|
453
459
|
)
|
454
460
|
)
|
@@ -463,8 +469,9 @@ async def mujoco(class_name: str, no_cache: bool) -> None:
|
|
463
469
|
click.echo(click.style(f"No MJCF file found in {extracted_folder}", fg="red"))
|
464
470
|
return
|
465
471
|
|
466
|
-
|
467
|
-
|
472
|
+
mjcf_path_str = str(mjcf_file.resolve())
|
473
|
+
click.echo(f"Launching Mujoco viewer with: {click.style(mjcf_path_str, fg='green')}")
|
474
|
+
mujoco.viewer.launch_from_path(mjcf_path_str)
|
468
475
|
|
469
476
|
|
470
477
|
if __name__ == "__main__":
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: kscale
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.7
|
4
4
|
Summary: The kscale project
|
5
5
|
Home-page: https://github.com/kscalelabs/kscale
|
6
6
|
Author: Benjamin Bolte
|
@@ -21,7 +21,6 @@ Requires-Dist: click
|
|
21
21
|
Requires-Dist: colorlogging
|
22
22
|
Requires-Dist: tabulate
|
23
23
|
Requires-Dist: async-lru
|
24
|
-
Requires-Dist: krec
|
25
24
|
Provides-Extra: dev
|
26
25
|
Requires-Dist: black; extra == "dev"
|
27
26
|
Requires-Dist: darglint; extra == "dev"
|
@@ -1,9 +1,9 @@
|
|
1
|
-
kscale/__init__.py,sha256=
|
1
|
+
kscale/__init__.py,sha256=JXk1-68D39Xj5C7awsV8wBXSDoj4Zds3jDuQP0VvMyY,200
|
2
2
|
kscale/cli.py,sha256=PMHLKR5UwdbbReVmqHXpJ-K9-mGHv_0I7KQkwxmFcUA,881
|
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
|
6
|
-
kscale/requirements.txt,sha256=
|
6
|
+
kscale/requirements.txt,sha256=tj8wBkIhl6ijk5rFqtPCdkpdOS7XSIcUvsz_Eq1axcw,198
|
7
7
|
kscale/artifacts/__init__.py,sha256=RK8wdybtCJPgdLLJ8R8-YMi1Ph5ojqAKVJZowHONtgo,232
|
8
8
|
kscale/artifacts/plane.obj,sha256=x59-IIrWpLjhotChiqT2Ul6U8s0RcHkaEeUZb4KXL1c,348
|
9
9
|
kscale/artifacts/plane.urdf,sha256=LCiTk14AyTHjkZ1jvsb0hNaEaJUxDb8Z1JjsgpXu3YM,819
|
@@ -15,7 +15,7 @@ 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
17
|
kscale/web/cli/robot.py,sha256=rI-A4_0uvJPeA71Apl4Z3mV5fIfWkgmzT9JRmJYxz3A,3307
|
18
|
-
kscale/web/cli/robot_class.py,sha256=
|
18
|
+
kscale/web/cli/robot_class.py,sha256=QjE65uw2lSaerrdFr_zZzN9_W5w4Rx4exWZkijpDzmQ,18892
|
19
19
|
kscale/web/cli/token.py,sha256=1rFC8MYKtqbNsQa2KIqwW1tqpaMtFaxuNsallwejXTU,787
|
20
20
|
kscale/web/cli/user.py,sha256=aaJJCL1P5lfhK6ZC9OwOHXKA-I3MWqVZ_k7TYnx33CY,1303
|
21
21
|
kscale/web/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -26,9 +26,9 @@ kscale/web/clients/robot_class.py,sha256=G8Nk6V7LGJE9Wpg9tyyCkIfz1fRTsxXQRgHtlei
|
|
26
26
|
kscale/web/clients/user.py,sha256=jsa1_s6qXRM-AGBbHlPhd1NierUtynjY9tVAPNr6_Os,568
|
27
27
|
kscale/web/gen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
28
|
kscale/web/gen/api.py,sha256=VWlt8TaMZaAhCPPIWhx1d4yE0BRfpVz0-_Cps8hjgAI,4662
|
29
|
-
kscale-0.3.
|
30
|
-
kscale-0.3.
|
31
|
-
kscale-0.3.
|
32
|
-
kscale-0.3.
|
33
|
-
kscale-0.3.
|
34
|
-
kscale-0.3.
|
29
|
+
kscale-0.3.7.dist-info/LICENSE,sha256=HCN2bImAzUOXldAZZI7JZ9PYq6OwMlDAP_PpX1HnuN0,1071
|
30
|
+
kscale-0.3.7.dist-info/METADATA,sha256=0hDh7EJaKk94ofN-EfGPVcvlSNs1vfcuVTI5vx9DB6Y,2320
|
31
|
+
kscale-0.3.7.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
32
|
+
kscale-0.3.7.dist-info/entry_points.txt,sha256=N_0pCpPnwGDYVzOeuaSOrbJkS5L3lS9d8CxpJF1f8UI,62
|
33
|
+
kscale-0.3.7.dist-info/top_level.txt,sha256=C2ynjYwopg6YjgttnI2dJjasyq3EKNmYp-IfQg9Xms4,7
|
34
|
+
kscale-0.3.7.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|