sima-cli 0.0.17__py3-none-any.whl → 0.0.19__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/auth/login.py +2 -2
- sima_cli/cli.py +81 -4
- sima_cli/data/resources_public.yaml +1 -1
- sima_cli/download/downloader.py +1 -0
- sima_cli/install/__init__.py +0 -0
- sima_cli/install/hostdriver.py +152 -0
- sima_cli/install/optiview.py +80 -0
- sima_cli/install/palette.py +87 -0
- sima_cli/update/bmaptool.py +137 -0
- sima_cli/update/bootimg.py +339 -0
- sima_cli/update/local.py +19 -14
- sima_cli/update/query.py +30 -1
- sima_cli/update/remote.py +16 -10
- sima_cli/update/updater.py +96 -35
- sima_cli/utils/env.py +33 -29
- {sima_cli-0.0.17.dist-info → sima_cli-0.0.19.dist-info}/METADATA +1 -1
- {sima_cli-0.0.17.dist-info → sima_cli-0.0.19.dist-info}/RECORD +22 -16
- {sima_cli-0.0.17.dist-info → sima_cli-0.0.19.dist-info}/WHEEL +0 -0
- {sima_cli-0.0.17.dist-info → sima_cli-0.0.19.dist-info}/entry_points.txt +0 -0
- {sima_cli-0.0.17.dist-info → sima_cli-0.0.19.dist-info}/licenses/LICENSE +0 -0
- {sima_cli-0.0.17.dist-info → sima_cli-0.0.19.dist-info}/top_level.txt +0 -0
sima_cli/update/updater.py
CHANGED
@@ -4,7 +4,9 @@ import re
|
|
4
4
|
import time
|
5
5
|
import tempfile
|
6
6
|
import tarfile
|
7
|
+
import gzip
|
7
8
|
import subprocess
|
9
|
+
import shutil
|
8
10
|
from InquirerPy import inquirer
|
9
11
|
from urllib.parse import urlparse
|
10
12
|
from typing import List
|
@@ -12,8 +14,17 @@ from sima_cli.utils.env import get_environment_type
|
|
12
14
|
from sima_cli.download import download_file_from_url
|
13
15
|
from sima_cli.utils.config_loader import load_resource_config
|
14
16
|
from sima_cli.update.remote import push_and_update_remote_board, get_remote_board_info, reboot_remote_board
|
15
|
-
from sima_cli.update.local import get_local_board_info, push_and_update_local_board
|
16
17
|
from sima_cli.update.query import list_available_firmware_versions
|
18
|
+
from sima_cli.utils.env import is_sima_board
|
19
|
+
|
20
|
+
if is_sima_board():
|
21
|
+
from sima_cli.update import local
|
22
|
+
get_local_board_info = local.get_local_board_info
|
23
|
+
push_and_update_local_board = local.push_and_update_local_board
|
24
|
+
else:
|
25
|
+
get_local_board_info = None
|
26
|
+
push_and_update_local_board = None
|
27
|
+
|
17
28
|
|
18
29
|
def _resolve_firmware_url(version_or_url: str, board: str, internal: bool = False) -> str:
|
19
30
|
"""
|
@@ -54,33 +65,37 @@ def _pick_from_available_versions(board: str, version_or_url: str, internal: boo
|
|
54
65
|
if "http" in version_or_url:
|
55
66
|
return version_or_url
|
56
67
|
|
57
|
-
available_versions = list_available_firmware_versions(board, version_or_url, internal
|
68
|
+
available_versions = list_available_firmware_versions(board, version_or_url, internal)
|
58
69
|
|
59
|
-
|
60
|
-
|
70
|
+
try:
|
71
|
+
if len(available_versions) > 1:
|
72
|
+
click.echo("Multiple firmware versions found matching your input:")
|
61
73
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
74
|
+
selected_version = inquirer.fuzzy(
|
75
|
+
message="Select a version:",
|
76
|
+
choices=available_versions,
|
77
|
+
max_height="70%", # scrollable
|
78
|
+
instruction="(Use ↑↓ to navigate, / to search, Enter to select)"
|
79
|
+
).execute()
|
68
80
|
|
69
|
-
|
70
|
-
|
71
|
-
|
81
|
+
if not selected_version:
|
82
|
+
click.echo("No selection made. Exiting.", err=True)
|
83
|
+
raise SystemExit(1)
|
72
84
|
|
73
|
-
|
85
|
+
return selected_version
|
74
86
|
|
75
|
-
|
76
|
-
|
87
|
+
elif len(available_versions) == 1:
|
88
|
+
return available_versions[0]
|
77
89
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
90
|
+
else:
|
91
|
+
click.echo(
|
92
|
+
f"No firmware versions found matching keyword '{version_or_url}' for board '{board}'.",
|
93
|
+
err=True
|
94
|
+
)
|
95
|
+
raise SystemExit(1)
|
96
|
+
except:
|
97
|
+
click.echo("Unable to determine available versions")
|
98
|
+
exit(0)
|
84
99
|
|
85
100
|
def _sanitize_url_to_filename(url: str) -> str:
|
86
101
|
"""
|
@@ -98,22 +113,23 @@ def _sanitize_url_to_filename(url: str) -> str:
|
|
98
113
|
return safe_name
|
99
114
|
|
100
115
|
|
101
|
-
def _extract_required_files(tar_path: str, board: str) -> list:
|
116
|
+
def _extract_required_files(tar_path: str, board: str, update_type: str = 'standard') -> list:
|
102
117
|
"""
|
103
118
|
Extract required files from a .tar.gz or .tar archive into the same folder
|
104
119
|
and return the full paths to the extracted files (with subfolder if present).
|
105
|
-
Skips files that already exist.
|
120
|
+
Skips files that already exist. If a .wic.gz file is extracted, it will be decompressed,
|
121
|
+
unless the decompressed .wic file already exists.
|
106
122
|
|
107
123
|
Args:
|
108
124
|
tar_path (str): Path to the downloaded or provided firmware archive.
|
109
125
|
board (str): Board type ('davinci' or 'modalix').
|
126
|
+
update_type (str): Update type ('standard' or 'bootimg').
|
110
127
|
|
111
128
|
Returns:
|
112
129
|
list: List of full paths to extracted files.
|
113
130
|
"""
|
114
131
|
extract_dir = os.path.dirname(tar_path)
|
115
132
|
|
116
|
-
# Define required filenames (not full paths)
|
117
133
|
target_filenames = {
|
118
134
|
"troot-upgrade-simaai-ev.swu",
|
119
135
|
f"simaai-image-palette-upgrade-{board}.swu"
|
@@ -123,6 +139,12 @@ def _extract_required_files(tar_path: str, board: str) -> list:
|
|
123
139
|
if env_type == "host" and _os == "linux":
|
124
140
|
target_filenames.add("sima_pcie_host_pkg.sh")
|
125
141
|
|
142
|
+
if update_type == 'bootimg':
|
143
|
+
target_filenames = {
|
144
|
+
f"simaai-image-palette-{board}.wic.gz",
|
145
|
+
f"simaai-image-palette-{board}.wic.bmap"
|
146
|
+
}
|
147
|
+
|
126
148
|
extracted_paths = []
|
127
149
|
|
128
150
|
try:
|
@@ -140,14 +162,29 @@ def _extract_required_files(tar_path: str, board: str) -> list:
|
|
140
162
|
if os.path.exists(full_dest_path):
|
141
163
|
click.echo(f"⚠️ Skipping existing file: {full_dest_path}")
|
142
164
|
extracted_paths.append(full_dest_path)
|
143
|
-
|
165
|
+
else:
|
166
|
+
os.makedirs(os.path.dirname(full_dest_path), exist_ok=True)
|
167
|
+
tar.extract(member, path=extract_dir)
|
168
|
+
click.echo(f"✅ Extracted: {full_dest_path}")
|
169
|
+
extracted_paths.append(full_dest_path)
|
144
170
|
|
145
|
-
#
|
146
|
-
|
171
|
+
# If it's a .wic.gz file, decompress it now
|
172
|
+
if full_dest_path.endswith(".wic.gz"):
|
173
|
+
uncompressed_path = full_dest_path[:-3] # remove .gz
|
147
174
|
|
148
|
-
|
149
|
-
|
150
|
-
|
175
|
+
if os.path.exists(uncompressed_path):
|
176
|
+
click.echo(f"⚠️ Skipping decompression: {uncompressed_path} already exists")
|
177
|
+
extracted_paths.append(uncompressed_path)
|
178
|
+
continue
|
179
|
+
|
180
|
+
try:
|
181
|
+
with gzip.open(full_dest_path, 'rb') as f_in:
|
182
|
+
with open(uncompressed_path, 'wb') as f_out:
|
183
|
+
shutil.copyfileobj(f_in, f_out)
|
184
|
+
click.echo(f"📦 Decompressed: {uncompressed_path}")
|
185
|
+
extracted_paths.append(uncompressed_path)
|
186
|
+
except Exception as decomp_err:
|
187
|
+
click.echo(f"❌ Failed to decompress {full_dest_path}: {decomp_err}")
|
151
188
|
|
152
189
|
if not extracted_paths:
|
153
190
|
click.echo("⚠️ No matching files were found or extracted.")
|
@@ -158,7 +195,8 @@ def _extract_required_files(tar_path: str, board: str) -> list:
|
|
158
195
|
click.echo(f"❌ Failed to extract files from archive: {e}")
|
159
196
|
return []
|
160
197
|
|
161
|
-
|
198
|
+
|
199
|
+
def _download_image(version_or_url: str, board: str, internal: bool = False, update_type: str = 'standard'):
|
162
200
|
"""
|
163
201
|
Download or use a firmware image for the specified board and version or file path.
|
164
202
|
|
@@ -176,7 +214,7 @@ def _download_image(version_or_url: str, board: str, internal: bool = False):
|
|
176
214
|
# Case 1: Local file provided
|
177
215
|
if os.path.exists(version_or_url) and os.path.isfile(version_or_url):
|
178
216
|
click.echo(f"📁 Using local firmware file: {version_or_url}")
|
179
|
-
return _extract_required_files(version_or_url, board)
|
217
|
+
return _extract_required_files(version_or_url, board, update_type)
|
180
218
|
|
181
219
|
# Case 2: Treat as custom full URL
|
182
220
|
if version_or_url.startswith("http://") or version_or_url.startswith("https://"):
|
@@ -198,10 +236,11 @@ def _download_image(version_or_url: str, board: str, internal: bool = False):
|
|
198
236
|
firmware_path = download_file_from_url(image_url, dest_path, internal=internal)
|
199
237
|
|
200
238
|
click.echo(f"📦 Firmware downloaded to: {firmware_path}")
|
201
|
-
return _extract_required_files(firmware_path, board)
|
239
|
+
return _extract_required_files(firmware_path, board, update_type)
|
202
240
|
|
203
241
|
except Exception as e:
|
204
242
|
click.echo(f"❌ Host update failed: {e}")
|
243
|
+
exit(0)
|
205
244
|
|
206
245
|
def _update_host(script_path: str, board: str, boardip: str, passwd: str):
|
207
246
|
"""
|
@@ -252,6 +291,7 @@ def _update_host(script_path: str, board: str, boardip: str, passwd: str):
|
|
252
291
|
|
253
292
|
except Exception as e:
|
254
293
|
click.echo(f"❌ Host update failed: {e}")
|
294
|
+
exit(0)
|
255
295
|
|
256
296
|
|
257
297
|
def _update_sdk(version_or_url: str, board: str):
|
@@ -326,6 +366,27 @@ def _update_remote(extracted_paths: List[str], ip: str, board: str, passwd: str,
|
|
326
366
|
|
327
367
|
return script_path
|
328
368
|
|
369
|
+
def download_image(version_or_url: str, board: str, swtype: str, internal: bool = False, update_type: str = 'standard'):
|
370
|
+
"""
|
371
|
+
Download and extract a firmware image for a specified board.
|
372
|
+
|
373
|
+
Args:
|
374
|
+
version_or_url (str): Either a version string (e.g., "1.6.0") or a direct URL or local file path to the image.
|
375
|
+
board (str): The board type (e.g., "mlsoc", "modalix").
|
376
|
+
swtype (str): The software type (default to 'davinci', possible values: `davinci`, `modalix`): not supported for now
|
377
|
+
internal (bool): Whether to use internal download paths (e.g., Artifactory).
|
378
|
+
update_type (str): Whether this is standard update or writing boot image.
|
379
|
+
|
380
|
+
Returns:
|
381
|
+
List[str]: Paths to the extracted image files.
|
382
|
+
"""
|
383
|
+
|
384
|
+
if 'http' not in version_or_url and not os.path.exists(version_or_url):
|
385
|
+
version_or_url = _pick_from_available_versions(board, version_or_url, internal)
|
386
|
+
|
387
|
+
extracted_paths = _download_image(version_or_url, board, internal, update_type)
|
388
|
+
return extracted_paths
|
389
|
+
|
329
390
|
def perform_update(version_or_url: str, ip: str = None, internal: bool = False, passwd: str = "edgeai", auto_confirm: bool = False):
|
330
391
|
r"""
|
331
392
|
Update the system based on environment and input.
|
@@ -356,7 +417,7 @@ def perform_update(version_or_url: str, ip: str = None, internal: bool = False,
|
|
356
417
|
if board in ['davinci', 'modalix']:
|
357
418
|
click.echo(f"🔧 Target board: {board}, board currently running: {version}")
|
358
419
|
|
359
|
-
if 'http' not in version_or_url:
|
420
|
+
if 'http' not in version_or_url and not os.path.exists(version_or_url):
|
360
421
|
version_or_url = _pick_from_available_versions(board, version_or_url, internal)
|
361
422
|
|
362
423
|
extracted_paths = _download_image(version_or_url, board, internal)
|
sima_cli/utils/env.py
CHANGED
@@ -11,58 +11,62 @@ def is_sima_board() -> bool:
|
|
11
11
|
"""
|
12
12
|
Detect if running on a SiMa board.
|
13
13
|
|
14
|
-
This is done by checking for the existence of
|
15
|
-
|
14
|
+
This is done by checking for the existence of known build info files
|
15
|
+
(/etc/build or /etc/buildinfo) and looking for specific identifiers like
|
16
16
|
SIMA_BUILD_VERSION and MACHINE.
|
17
17
|
|
18
18
|
Returns:
|
19
19
|
bool: True if running on a SiMa board, False otherwise.
|
20
20
|
"""
|
21
|
-
|
22
|
-
if not os.path.exists(build_file_path):
|
23
|
-
return False
|
21
|
+
build_file_paths = ["/etc/build", "/etc/buildinfo"]
|
24
22
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
23
|
+
for path in build_file_paths:
|
24
|
+
if os.path.exists(path):
|
25
|
+
try:
|
26
|
+
with open(path, "r") as f:
|
27
|
+
content = f.read()
|
28
|
+
if "SIMA_BUILD_VERSION" in content and "MACHINE" in content:
|
29
|
+
return True
|
30
|
+
except Exception:
|
31
|
+
continue
|
32
|
+
|
33
|
+
return False
|
31
34
|
|
32
35
|
def is_pcie_host() -> bool:
|
33
36
|
"""
|
34
37
|
Detect if running from a PCIe host (typically a Linux or macOS dev machine).
|
35
38
|
|
36
|
-
This assumes a PCIe host is not a SiMa board and is running on a standard
|
37
|
-
Unix-based OS like Linux or macOS (Darwin).
|
39
|
+
This assumes a PCIe host is not a SiMa board and is running on a standard Linux platform.
|
38
40
|
|
39
41
|
Returns:
|
40
42
|
bool: True if likely a PCIe host, False otherwise.
|
41
43
|
"""
|
42
44
|
import platform
|
43
|
-
return not is_sima_board() and platform.system() in ["Linux"
|
45
|
+
return not is_sima_board() and platform.system() in ["Linux"]
|
44
46
|
|
45
47
|
def get_sima_board_type() -> str:
|
46
48
|
"""
|
47
|
-
If running on a SiMa board, extract the board type from the MACHINE field
|
49
|
+
If running on a SiMa board, extract the board type from the MACHINE field
|
50
|
+
in /etc/build or /etc/buildinfo.
|
48
51
|
|
49
52
|
Returns:
|
50
53
|
str: The board type (e.g., "modalix", "davinci"), or an empty string if not found or not a SiMa board.
|
51
54
|
"""
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
55
|
+
build_file_paths = ["/etc/build", "/etc/buildinfo"]
|
56
|
+
|
57
|
+
for path in build_file_paths:
|
58
|
+
if os.path.exists(path):
|
59
|
+
try:
|
60
|
+
with open(path, "r") as f:
|
61
|
+
for line in f:
|
62
|
+
line = line.strip()
|
63
|
+
if line.startswith("MACHINE"):
|
64
|
+
# Format: MACHINE = modalix
|
65
|
+
parts = line.split("=", 1)
|
66
|
+
if len(parts) == 2:
|
67
|
+
return parts[1].strip()
|
68
|
+
except Exception:
|
69
|
+
continue
|
66
70
|
|
67
71
|
return ""
|
68
72
|
|
@@ -1,33 +1,39 @@
|
|
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=
|
4
|
-
sima_cli/cli.py,sha256=
|
3
|
+
sima_cli/__version__.py,sha256=2xNp40YbbA9TjpFNNqUbe-Cjo-Xe8LvBbe2706ROs3k,49
|
4
|
+
sima_cli/cli.py,sha256=k4w4NB6yfqjTrNBEv338yQTBWIMZ-ul7W-0vo7y01dc,11326
|
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
|
7
7
|
sima_cli/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
8
|
sima_cli/auth/basic_auth.py,sha256=pcocI6v496vC7v5MLYPZq3AEgD-2DdkzNFZiKsbx3eQ,4290
|
9
|
-
sima_cli/auth/login.py,sha256=
|
9
|
+
sima_cli/auth/login.py,sha256=yCYXWgrfbP4jSTZ3hITfxlgHkdVQVzsd8hQKpqaqCKs,3780
|
10
10
|
sima_cli/data/resources_internal.yaml,sha256=zlQD4cSnZK86bLtTWuvEudZTARKiuIKmB--Jv4ajL8o,200
|
11
|
-
sima_cli/data/resources_public.yaml,sha256=
|
11
|
+
sima_cli/data/resources_public.yaml,sha256=U7hmUomGeQ2ULdo1BU2OQHr0PyKBamIdK9qrutDlX8o,201
|
12
12
|
sima_cli/download/__init__.py,sha256=6y4O2FOCYFR2jdnQoVi3hRtEoZ0Gw6rydlTy1SGJ5FE,218
|
13
|
-
sima_cli/download/downloader.py,sha256=
|
13
|
+
sima_cli/download/downloader.py,sha256=pHfqcg_ujBQjds_EkcRV85M2mRYGrysoZaiR-FIrpf4,5161
|
14
|
+
sima_cli/install/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
15
|
+
sima_cli/install/hostdriver.py,sha256=kAWDLebs60mbWIyTbUxmNrChcKW1uD5r7FtWNSUVUE4,5852
|
16
|
+
sima_cli/install/optiview.py,sha256=VT8C1_EX-DW-n7DuxI9d0vPb87JBX-Rg9Bw9JHh1aeo,3108
|
17
|
+
sima_cli/install/palette.py,sha256=uRznoHa4Mv9ZXHp6AoqknfC3RxpYNKi9Ins756Cyifk,3930
|
14
18
|
sima_cli/mla/meminfo.py,sha256=ndc8kQJmWGEIdvNh6iIhATGdrkqM2pbddr_eHxaPNfg,1466
|
15
19
|
sima_cli/model_zoo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
16
20
|
sima_cli/model_zoo/model.py,sha256=q91Nrg62j1TqwPO8HiX4nlEFCCmzNEFcyFTBVMbJm8w,9836
|
17
21
|
sima_cli/sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
18
22
|
sima_cli/sdk/syscheck.py,sha256=h9zCULW67y4i2hqiGc-hc1ucBDShA5FAe9NxwBGq-fM,4575
|
19
23
|
sima_cli/update/__init__.py,sha256=0P-z-rSaev40IhfJXytK3AFWv2_sdQU4Ry6ei2sEus0,66
|
20
|
-
sima_cli/update/
|
21
|
-
sima_cli/update/
|
22
|
-
sima_cli/update/
|
23
|
-
sima_cli/update/
|
24
|
+
sima_cli/update/bmaptool.py,sha256=KrhUGShBwY4Wzz50QiuMYAxxPgEy1nz5C68G-0a4qF4,4988
|
25
|
+
sima_cli/update/bootimg.py,sha256=iMe8b42JK0KF-udSB6Kl044XUJtNgMUmBNxyuWneAkU,13387
|
26
|
+
sima_cli/update/local.py,sha256=CyUFLs5Lz5w4VyM6ip4wndKBBLz3_KZ-3scEvSiOrcg,3299
|
27
|
+
sima_cli/update/query.py,sha256=cVkUMLZkONJ2XMEwqEC-JqLVB38hOqfWM2hB2ehBK6Y,3272
|
28
|
+
sima_cli/update/remote.py,sha256=DvcvUX1ydpyF4DwUsVXagb7My6H2MNoGiCQfGfO06iI,8939
|
29
|
+
sima_cli/update/updater.py,sha256=SprOcvSzRSwViGd2dYTtyTQfiwdLQcqZoS3KBQpxz4s,18466
|
24
30
|
sima_cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
25
31
|
sima_cli/utils/artifactory.py,sha256=6YyVpzVm8ATy7NEwT9nkWx-wptkXrvG7Wl_zDT6jmLs,2390
|
26
32
|
sima_cli/utils/config.py,sha256=wE-cPQqY_gOqaP8t01xsRHD9tBUGk9MgBUm2GYYxI3E,1616
|
27
33
|
sima_cli/utils/config_loader.py,sha256=7I5we1yiCai18j9R9jvhfUzAmT3OjAqVK35XSLuUw8c,2005
|
28
|
-
sima_cli/utils/env.py,sha256=
|
34
|
+
sima_cli/utils/env.py,sha256=Jrb062EnpMBr1jGMotBlI2j9LEH6W1Z5Tgt6LHY7yYQ,5753
|
29
35
|
sima_cli/utils/network.py,sha256=UvqxbqbWUczGFyO-t1SybG7Q-x9kjUVRNIn_D6APzy8,1252
|
30
|
-
sima_cli-0.0.
|
36
|
+
sima_cli-0.0.19.dist-info/licenses/LICENSE,sha256=a260OFuV4SsMZ6sQCkoYbtws_4o2deFtbnT9kg7Rfd4,1082
|
31
37
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
32
38
|
tests/test_app_zoo.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
33
39
|
tests/test_auth.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -36,8 +42,8 @@ tests/test_download.py,sha256=t87DwxlHs26_ws9rpcHGwr_OrcRPd3hz6Zmm0vRee2U,4465
|
|
36
42
|
tests/test_firmware.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
37
43
|
tests/test_model_zoo.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
38
44
|
tests/test_utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
39
|
-
sima_cli-0.0.
|
40
|
-
sima_cli-0.0.
|
41
|
-
sima_cli-0.0.
|
42
|
-
sima_cli-0.0.
|
43
|
-
sima_cli-0.0.
|
45
|
+
sima_cli-0.0.19.dist-info/METADATA,sha256=7_B7RJl70GRcQOHvMQRrxhjvQhuQD9pqX3FUQvKRr1M,3631
|
46
|
+
sima_cli-0.0.19.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
47
|
+
sima_cli-0.0.19.dist-info/entry_points.txt,sha256=xRYrDq1nCs6R8wEdB3c1kKuimxEjWJkHuCzArQPT0Xk,47
|
48
|
+
sima_cli-0.0.19.dist-info/top_level.txt,sha256=FtrbAUdHNohtEPteOblArxQNwoX9_t8qJQd59fagDlc,15
|
49
|
+
sima_cli-0.0.19.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|