sima-cli 0.0.26__py3-none-any.whl → 0.0.28__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.
- sima_cli/__version__.py +1 -1
- sima_cli/install/metadata_installer.py +26 -0
- sima_cli/serial/serial.py +47 -8
- {sima_cli-0.0.26.dist-info → sima_cli-0.0.28.dist-info}/METADATA +1 -1
- {sima_cli-0.0.26.dist-info → sima_cli-0.0.28.dist-info}/RECORD +9 -9
- {sima_cli-0.0.26.dist-info → sima_cli-0.0.28.dist-info}/WHEEL +0 -0
- {sima_cli-0.0.26.dist-info → sima_cli-0.0.28.dist-info}/entry_points.txt +0 -0
- {sima_cli-0.0.26.dist-info → sima_cli-0.0.28.dist-info}/licenses/LICENSE +0 -0
- {sima_cli-0.0.26.dist-info → sima_cli-0.0.28.dist-info}/top_level.txt +0 -0
sima_cli/__version__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# sima_cli/__version__.py
|
2
|
-
__version__ = "0.0.
|
2
|
+
__version__ = "0.0.28"
|
@@ -9,6 +9,7 @@ import tarfile
|
|
9
9
|
import zipfile
|
10
10
|
import stat
|
11
11
|
from urllib.parse import urlparse
|
12
|
+
from InquirerPy import inquirer
|
12
13
|
|
13
14
|
from typing import Dict
|
14
15
|
from tqdm import tqdm
|
@@ -104,6 +105,29 @@ def _download_assets(metadata: dict, base_url: str, dest_folder: str, internal:
|
|
104
105
|
|
105
106
|
return local_paths
|
106
107
|
|
108
|
+
def selectable_resource_handler(metadata):
|
109
|
+
selectable = metadata.get("selectable-resources")
|
110
|
+
if not selectable:
|
111
|
+
return metadata
|
112
|
+
|
113
|
+
choices = [(f"{i.get('name','Unnamed')} ({i.get('url','')})" if i.get('url') else i.get('name','Unnamed')) for i in selectable]
|
114
|
+
choices.append("Skip")
|
115
|
+
|
116
|
+
sel = inquirer.select(message="Select an opt-in resource to download:", choices=choices).execute()
|
117
|
+
if sel == "Skip":
|
118
|
+
print("✅ No selectable resource chosen.")
|
119
|
+
return metadata
|
120
|
+
|
121
|
+
idx = choices.index(sel)
|
122
|
+
entry = selectable[idx]
|
123
|
+
res = entry.get("resource")
|
124
|
+
if res:
|
125
|
+
metadata.setdefault("resources", [])
|
126
|
+
if res not in metadata["resources"]:
|
127
|
+
metadata["resources"].append(res)
|
128
|
+
print(f"✅ Selected: {entry.get('name','(unnamed)')} → {res}")
|
129
|
+
return metadata
|
130
|
+
|
107
131
|
def _download_and_validate_metadata(metadata_url, internal=False):
|
108
132
|
"""
|
109
133
|
Downloads (if remote), validates, and parses metadata from a given URL or local file path.
|
@@ -141,6 +165,7 @@ def _download_and_validate_metadata(metadata_url, internal=False):
|
|
141
165
|
metadata = json.load(f)
|
142
166
|
validate_metadata(metadata)
|
143
167
|
click.echo("✅ Metadata validated successfully.")
|
168
|
+
metadata = selectable_resource_handler(metadata)
|
144
169
|
return metadata, os.path.dirname(metadata_path)
|
145
170
|
|
146
171
|
# Common validation logic for local file
|
@@ -148,6 +173,7 @@ def _download_and_validate_metadata(metadata_url, internal=False):
|
|
148
173
|
metadata = json.load(f)
|
149
174
|
|
150
175
|
validate_metadata(metadata)
|
176
|
+
metadata = selectable_resource_handler(metadata)
|
151
177
|
click.echo("✅ Metadata validated successfully.")
|
152
178
|
return metadata, os.path.dirname(os.path.abspath(metadata_path))
|
153
179
|
|
sima_cli/serial/serial.py
CHANGED
@@ -2,6 +2,7 @@ import platform
|
|
2
2
|
import subprocess
|
3
3
|
import shutil
|
4
4
|
import click
|
5
|
+
import os
|
5
6
|
from sima_cli.utils.env import is_sima_board
|
6
7
|
|
7
8
|
def connect_serial(ctx, baud):
|
@@ -74,11 +75,41 @@ def _connect_linux(baud):
|
|
74
75
|
if not shutil.which(terminal):
|
75
76
|
click.echo("⚙️ 'picocom' is not installed. Attempting to install via apt...")
|
76
77
|
if shutil.which("apt-get"):
|
77
|
-
|
78
|
-
|
78
|
+
try:
|
79
|
+
subprocess.run(["sudo", "apt-get", "update"], check=True)
|
80
|
+
subprocess.run(["sudo", "apt-get", "install", "-y", "picocom"], check=True)
|
81
|
+
except subprocess.CalledProcessError:
|
82
|
+
click.echo("❌ Failed to install picocom (possibly due to lack of sudo privileges). Checking for minicom...")
|
83
|
+
terminal = "minicom"
|
84
|
+
if not shutil.which(terminal):
|
85
|
+
click.echo("❌ Neither 'picocom' nor 'minicom' is available. Please request the admin to install one manually.")
|
86
|
+
raise SystemExit(1)
|
87
|
+
# Create minicom config file to match working settings
|
88
|
+
config_file = os.path.expanduser("~/.minirc.custom")
|
89
|
+
with open(config_file, "w") as f:
|
90
|
+
f.write("pu port /dev/ttyUSB0\n")
|
91
|
+
f.write(f"pu baudrate {baud}\n")
|
92
|
+
f.write("pu bits 8\n")
|
93
|
+
f.write("pu parity N\n")
|
94
|
+
f.write("pu stopbits 1\n")
|
95
|
+
f.write("pu rtscts No\n")
|
96
|
+
f.write("pu xonxoff No\n")
|
79
97
|
else:
|
80
|
-
click.echo("❌ 'apt-get' not found.
|
81
|
-
|
98
|
+
click.echo("❌ 'apt-get' not found. Checking for minicom...")
|
99
|
+
terminal = "minicom"
|
100
|
+
if not shutil.which(terminal):
|
101
|
+
click.echo("❌ Neither 'picocom' nor 'minicom' is available. Please request the admin to install one manually.")
|
102
|
+
raise SystemExit(1)
|
103
|
+
# Create minicom config file to match working settings
|
104
|
+
config_file = os.path.expanduser("~/.minirc.custom")
|
105
|
+
with open(config_file, "w") as f:
|
106
|
+
f.write("pu port /dev/ttyUSB0\n")
|
107
|
+
f.write(f"pu baudrate {baud}\n")
|
108
|
+
f.write("pu bits 8\n")
|
109
|
+
f.write("pu parity N\n")
|
110
|
+
f.write("pu stopbits 1\n")
|
111
|
+
f.write("pu rtscts No\n")
|
112
|
+
f.write("pu xonxoff No\n")
|
82
113
|
|
83
114
|
ports = sorted(
|
84
115
|
subprocess.getoutput("ls /dev/ttyUSB* 2>/dev/null").splitlines()
|
@@ -88,11 +119,19 @@ def _connect_linux(baud):
|
|
88
119
|
raise SystemExit(1)
|
89
120
|
|
90
121
|
port = ports[0]
|
91
|
-
click.echo(f"🔌 Connecting to {port} with
|
122
|
+
click.echo(f"🔌 Connecting to {port} with {terminal} ({baud} 8N1)...")
|
92
123
|
try:
|
93
|
-
|
94
|
-
|
95
|
-
|
124
|
+
if terminal == "picocom":
|
125
|
+
click.echo("🧷 To exit: Press Ctrl + A, then Ctrl + X")
|
126
|
+
subprocess.run(
|
127
|
+
["sudo", terminal, "-b", f"{baud}", "--databits", "8", "--parity", "n", "--stopbits", "1", port]
|
128
|
+
)
|
129
|
+
else: # minicom
|
130
|
+
config_file = os.path.expanduser("~/.minirc.custom")
|
131
|
+
click.echo("🧷 To exit: Press Ctrl + A, then Q")
|
132
|
+
subprocess.run(
|
133
|
+
["sudo", terminal, "-C", config_file, "-D", port]
|
134
|
+
)
|
96
135
|
except KeyboardInterrupt:
|
97
136
|
click.echo("\n❎ Serial connection interrupted by user.")
|
98
137
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
sima_cli/__init__.py,sha256=Nb2jSg9-CX1XvSc1c21U9qQ3atINxphuNkNfmR-9P3o,332
|
2
2
|
sima_cli/__main__.py,sha256=ehzD6AZ7zGytC2gLSvaJatxeD0jJdaEvNJvwYeGsWOg,69
|
3
|
-
sima_cli/__version__.py,sha256=
|
3
|
+
sima_cli/__version__.py,sha256=wdQWaXW7_2lzCGpGJA9Ok41JbEuK-vA6q78SmligY_w,49
|
4
4
|
sima_cli/cli.py,sha256=GYmQ7_XObl9VgFwuWWkWDo-_Y_Vn6lM53F7mKiYGubI,17126
|
5
5
|
sima_cli/app_zoo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
6
|
sima_cli/app_zoo/app.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -14,7 +14,7 @@ sima_cli/download/downloader.py,sha256=nCBrr_0WdnKTIyecwKpg1sCdfm_4PSQTRPwEbiezy
|
|
14
14
|
sima_cli/install/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
15
15
|
sima_cli/install/hostdriver.py,sha256=kAWDLebs60mbWIyTbUxmNrChcKW1uD5r7FtWNSUVUE4,5852
|
16
16
|
sima_cli/install/metadata_info.py,sha256=wmMqwzGfXbuilkqaxRVrFOzOtTOiONkmPCyA2oDAQpA,2168
|
17
|
-
sima_cli/install/metadata_installer.py,sha256=
|
17
|
+
sima_cli/install/metadata_installer.py,sha256=UPXxXL5gH0iotX8WCUgEbySbYeIHE1UwsfpZvACjZQs,18928
|
18
18
|
sima_cli/install/metadata_validator.py,sha256=7954rp9vFRNnqmIMvCVTjq40kUIEbGXzfc8HmQmChe0,5221
|
19
19
|
sima_cli/install/optiview.py,sha256=i5eWVor-9MScEfrQm3Ty9OP4VpSsCgWvNh7AvYdZu7s,3365
|
20
20
|
sima_cli/install/palette.py,sha256=uRznoHa4Mv9ZXHp6AoqknfC3RxpYNKi9Ins756Cyifk,3930
|
@@ -25,7 +25,7 @@ sima_cli/network/network.py,sha256=ToDCQBfX0bUFEWWtfS8srImK5T11MX6R4MBQFM80faY,7
|
|
25
25
|
sima_cli/sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
26
26
|
sima_cli/sdk/syscheck.py,sha256=h9zCULW67y4i2hqiGc-hc1ucBDShA5FAe9NxwBGq-fM,4575
|
27
27
|
sima_cli/serial/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
|
-
sima_cli/serial/serial.py,sha256=
|
28
|
+
sima_cli/serial/serial.py,sha256=1We85F9-l1FZcsLFxRzxbfPxAHeSCVlBOUyOUpqNf_s,6202
|
29
29
|
sima_cli/storage/nvme.py,sha256=cCzYWcyPwcFu5pSMBkovsS4EwovaIMGolhEFStogXMA,4739
|
30
30
|
sima_cli/storage/sdcard.py,sha256=-WULjdV31-n8v5OOqfxR77qBbIK4hJnrD3xWxUVMoGI,6324
|
31
31
|
sima_cli/update/__init__.py,sha256=0P-z-rSaev40IhfJXytK3AFWv2_sdQU4Ry6ei2sEus0,66
|
@@ -44,7 +44,7 @@ sima_cli/utils/disk.py,sha256=66Kr631yhc_ny19up2aijfycWfD35AeLQOJgUsuH2hY,446
|
|
44
44
|
sima_cli/utils/env.py,sha256=IP5HrH0lE7RMSiBeXcEt5GCLMT5p-QQroG-uGzl5XFU,8181
|
45
45
|
sima_cli/utils/net.py,sha256=WVntA4CqipkNrrkA4tBVRadJft_pMcGYh4Re5xk3rqo,971
|
46
46
|
sima_cli/utils/network.py,sha256=UvqxbqbWUczGFyO-t1SybG7Q-x9kjUVRNIn_D6APzy8,1252
|
47
|
-
sima_cli-0.0.
|
47
|
+
sima_cli-0.0.28.dist-info/licenses/LICENSE,sha256=a260OFuV4SsMZ6sQCkoYbtws_4o2deFtbnT9kg7Rfd4,1082
|
48
48
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
49
49
|
tests/test_app_zoo.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
50
50
|
tests/test_auth.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -53,8 +53,8 @@ tests/test_download.py,sha256=t87DwxlHs26_ws9rpcHGwr_OrcRPd3hz6Zmm0vRee2U,4465
|
|
53
53
|
tests/test_firmware.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
54
54
|
tests/test_model_zoo.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
55
55
|
tests/test_utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
56
|
-
sima_cli-0.0.
|
57
|
-
sima_cli-0.0.
|
58
|
-
sima_cli-0.0.
|
59
|
-
sima_cli-0.0.
|
60
|
-
sima_cli-0.0.
|
56
|
+
sima_cli-0.0.28.dist-info/METADATA,sha256=ETEoEF5hAtX6d8yNLF6dzARvDLO3AyuKfoiSn5wKRPg,3705
|
57
|
+
sima_cli-0.0.28.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
58
|
+
sima_cli-0.0.28.dist-info/entry_points.txt,sha256=xRYrDq1nCs6R8wEdB3c1kKuimxEjWJkHuCzArQPT0Xk,47
|
59
|
+
sima_cli-0.0.28.dist-info/top_level.txt,sha256=FtrbAUdHNohtEPteOblArxQNwoX9_t8qJQd59fagDlc,15
|
60
|
+
sima_cli-0.0.28.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|