sima-cli 0.0.33__py3-none-any.whl → 0.0.35__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 +3 -3
- sima_cli/cli.py +1 -1
- sima_cli/install/metadata_installer.py +7 -1
- sima_cli/network/network.py +7 -1
- sima_cli/update/local.py +3 -3
- sima_cli/update/remote.py +20 -15
- sima_cli/update/updater.py +16 -10
- sima_cli/utils/env.py +29 -22
- {sima_cli-0.0.33.dist-info → sima_cli-0.0.35.dist-info}/METADATA +1 -1
- {sima_cli-0.0.33.dist-info → sima_cli-0.0.35.dist-info}/RECORD +15 -15
- {sima_cli-0.0.33.dist-info → sima_cli-0.0.35.dist-info}/WHEEL +0 -0
- {sima_cli-0.0.33.dist-info → sima_cli-0.0.35.dist-info}/entry_points.txt +0 -0
- {sima_cli-0.0.33.dist-info → sima_cli-0.0.35.dist-info}/licenses/LICENSE +0 -0
- {sima_cli-0.0.33.dist-info → sima_cli-0.0.35.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.35"
|
sima_cli/auth/login.py
CHANGED
@@ -60,15 +60,15 @@ def login_internal():
|
|
60
60
|
|
61
61
|
click.echo(f"✅ Identity token is valid")
|
62
62
|
|
63
|
-
# Step 2: Exchange for a short-lived access token (default:
|
64
|
-
access_token, user_name = exchange_identity_token(identity_token, exchange_url, expires_in=
|
63
|
+
# Step 2: Exchange for a short-lived access token (default: 30 days)
|
64
|
+
access_token, user_name = exchange_identity_token(identity_token, exchange_url, expires_in=2592000)
|
65
65
|
|
66
66
|
if not access_token:
|
67
67
|
return click.echo("❌ Failed to acquire short-lived access token.")
|
68
68
|
|
69
69
|
# Step 3: Save token to internal auth config
|
70
70
|
set_auth_token(access_token, internal=True)
|
71
|
-
click.echo(f"💾 Short-lived access token saved successfully for {user_name} (valid for
|
71
|
+
click.echo(f"💾 Short-lived access token saved successfully for {user_name} (valid for 30 days).")
|
72
72
|
|
73
73
|
|
74
74
|
def _login_external():
|
sima_cli/cli.py
CHANGED
@@ -151,7 +151,7 @@ def download(ctx, url, dest):
|
|
151
151
|
default='edgeai',
|
152
152
|
help="Optional SSH password for remote board (default is 'edgeai')."
|
153
153
|
)
|
154
|
-
@click.option("-f", "--flavor", type=click.Choice(["headless", "full"], case_sensitive=False), default="
|
154
|
+
@click.option("-f", "--flavor", type=click.Choice(["headless", "full", "auto"], case_sensitive=False), default="auto", show_default=True, help="firmware flavor, full image supports NVMe, GUI on Modalix DevKit.")
|
155
155
|
@click.pass_context
|
156
156
|
def update(ctx, version_or_url, ip, yes, passwd, flavor):
|
157
157
|
"""
|
@@ -9,7 +9,6 @@ import tarfile
|
|
9
9
|
import zipfile
|
10
10
|
import stat
|
11
11
|
from urllib.parse import urlparse
|
12
|
-
from InquirerPy import inquirer
|
13
12
|
|
14
13
|
from typing import Dict
|
15
14
|
from tqdm import tqdm
|
@@ -113,6 +112,8 @@ def selectable_resource_handler(metadata):
|
|
113
112
|
choices = [(f"{i.get('name','Unnamed')} ({i.get('url','')})" if i.get('url') else i.get('name','Unnamed')) for i in selectable]
|
114
113
|
choices.append("Skip")
|
115
114
|
|
115
|
+
from InquirerPy import inquirer
|
116
|
+
|
116
117
|
sel = inquirer.select(message="Select an opt-in resource to download:", choices=choices).execute()
|
117
118
|
if sel == "Skip":
|
118
119
|
print("✅ No selectable resource chosen.")
|
@@ -390,6 +391,11 @@ def _is_platform_compatible(metadata: dict) -> bool:
|
|
390
391
|
|
391
392
|
for i, platform_entry in enumerate(platforms):
|
392
393
|
platform_type = platform_entry.get("type")
|
394
|
+
|
395
|
+
# For SDK environment compatibility check.
|
396
|
+
if (platform_type, env_type, env_subtype) == ("palette", "sdk", "palette"):
|
397
|
+
return True
|
398
|
+
|
393
399
|
if platform_type != env_type:
|
394
400
|
continue
|
395
401
|
|
sima_cli/network/network.py
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
from InquirerPy import inquirer
|
2
1
|
import subprocess
|
3
2
|
import os
|
4
3
|
import re
|
@@ -144,6 +143,7 @@ def set_default_route(iface, ip):
|
|
144
143
|
check=True
|
145
144
|
)
|
146
145
|
print(f"✅ Default route set via {iface} ({gateway})")
|
146
|
+
|
147
147
|
except subprocess.CalledProcessError:
|
148
148
|
print(f"❌ Failed to set default route via {iface}")
|
149
149
|
|
@@ -152,6 +152,10 @@ def network_menu():
|
|
152
152
|
print("❌ This command only runs on the DevKit")
|
153
153
|
return
|
154
154
|
|
155
|
+
from InquirerPy import inquirer
|
156
|
+
|
157
|
+
print("✅ Scanning network configuration, please wait...")
|
158
|
+
|
155
159
|
while True:
|
156
160
|
interfaces = get_interfaces()
|
157
161
|
choices = ["🚪 Quit Menu"]
|
@@ -165,6 +169,8 @@ def network_menu():
|
|
165
169
|
iface_map[label] = iface
|
166
170
|
|
167
171
|
try:
|
172
|
+
|
173
|
+
|
168
174
|
iface_choice = inquirer.fuzzy(
|
169
175
|
message="Select Ethernet Interface:",
|
170
176
|
choices=choices,
|
sima_cli/update/local.py
CHANGED
@@ -86,7 +86,7 @@ def get_local_board_info() -> Tuple[str, str, bool]:
|
|
86
86
|
Retrieve the local board type and build version by reading /etc/build or /etc/buildinfo.
|
87
87
|
|
88
88
|
Returns:
|
89
|
-
(board_type, build_version,
|
89
|
+
(board_type, build_version, devkit_name, full_image): Tuple of strings, or ('', '') on failure.
|
90
90
|
"""
|
91
91
|
board_type = ""
|
92
92
|
build_version = ""
|
@@ -107,9 +107,9 @@ def get_local_board_info() -> Tuple[str, str, bool]:
|
|
107
107
|
except Exception:
|
108
108
|
continue
|
109
109
|
|
110
|
-
|
110
|
+
devkit_name = get_exact_devkit_type()
|
111
111
|
|
112
|
-
return board_type, build_version,
|
112
|
+
return board_type, build_version, devkit_name, is_board_running_full_image()
|
113
113
|
|
114
114
|
|
115
115
|
def get_boot_mmc(mounts_path="/proc/mounts", cmdline_path="/proc/cmdline"):
|
sima_cli/update/remote.py
CHANGED
@@ -53,19 +53,22 @@ def _wait_for_ssh(ip: str, timeout: int = 120):
|
|
53
53
|
else:
|
54
54
|
print("\r✅ Board is online! \n")
|
55
55
|
|
56
|
-
|
56
|
+
|
57
|
+
def get_remote_board_info(ip: str, passwd: str = DEFAULT_PASSWORD) -> Tuple[str, str, str, bool]:
|
57
58
|
"""
|
58
|
-
Connect to the remote board and retrieve board type, build version, and
|
59
|
+
Connect to the remote board and retrieve board type, build version, and devkit model.
|
59
60
|
|
60
61
|
Args:
|
61
62
|
ip (str): IP address of the board.
|
63
|
+
passwd (str): SSH password.
|
62
64
|
|
63
65
|
Returns:
|
64
|
-
(board_type, build_version,
|
66
|
+
(board_type, build_version, devkit_model, full_image):
|
67
|
+
Tuple of strings + bool, or ('', '', '', False) on failure.
|
65
68
|
"""
|
66
69
|
board_type = ""
|
67
70
|
build_version = ""
|
68
|
-
|
71
|
+
devkit_model = ""
|
69
72
|
full_image = False
|
70
73
|
|
71
74
|
try:
|
@@ -77,12 +80,17 @@ def get_remote_board_info(ip: str, passwd: str = DEFAULT_PASSWORD) -> Tuple[str,
|
|
77
80
|
_, stdout, _ = ssh.exec_command("cat /etc/build 2>/dev/null || cat /etc/buildinfo 2>/dev/null")
|
78
81
|
build_output = stdout.read().decode()
|
79
82
|
|
80
|
-
# Retrieve
|
81
|
-
_, stdout, _ = ssh.exec_command("
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
83
|
+
# Retrieve model from /proc/device-tree/model
|
84
|
+
_, stdout, _ = ssh.exec_command("cat /proc/device-tree/model 2>/dev/null || echo ''")
|
85
|
+
model_output = stdout.read().decode().strip()
|
86
|
+
if model_output:
|
87
|
+
# Normalize string: remove "SiMa.ai " prefix and trailing "Board"
|
88
|
+
if model_output.startswith("SiMa.ai "):
|
89
|
+
model_output = model_output[len("SiMa.ai "):]
|
90
|
+
model_output = model_output.replace(" Board", "")
|
91
|
+
devkit_model = model_output.lower().replace(" ", "-")
|
92
|
+
|
93
|
+
# Check for NVMe tool presence (determine if full image is flashed)
|
86
94
|
nvme_check_cmd = r'PATH="$PATH:/usr/sbin:/sbin"; command -v nvme >/dev/null 2>&1 || which nvme >/dev/null 2>&1; echo $?'
|
87
95
|
_, stdout, _ = ssh.exec_command(nvme_check_cmd)
|
88
96
|
nvme_rc = stdout.read().decode().strip()
|
@@ -90,6 +98,7 @@ def get_remote_board_info(ip: str, passwd: str = DEFAULT_PASSWORD) -> Tuple[str,
|
|
90
98
|
|
91
99
|
ssh.close()
|
92
100
|
|
101
|
+
# Parse build info
|
93
102
|
for line in build_output.splitlines():
|
94
103
|
line = line.strip()
|
95
104
|
if line.startswith("MACHINE"):
|
@@ -97,11 +106,7 @@ def get_remote_board_info(ip: str, passwd: str = DEFAULT_PASSWORD) -> Tuple[str,
|
|
97
106
|
elif line.startswith("SIMA_BUILD_VERSION"):
|
98
107
|
build_version = line.split("=", 1)[-1].strip()
|
99
108
|
|
100
|
-
|
101
|
-
if line.startswith("fdt_name"):
|
102
|
-
fdt_name = line.split("=", 1)[-1].strip().replace('.dtb', '')
|
103
|
-
|
104
|
-
return board_type, build_version, fdt_name, full_image
|
109
|
+
return board_type, build_version, devkit_model, full_image
|
105
110
|
|
106
111
|
except Exception as e:
|
107
112
|
click.echo(f"Unable to retrieve board info with error: {e}, board may be still booting.")
|
sima_cli/update/updater.py
CHANGED
@@ -7,7 +7,6 @@ import tarfile
|
|
7
7
|
import gzip
|
8
8
|
import subprocess
|
9
9
|
import shutil
|
10
|
-
from InquirerPy import inquirer
|
11
10
|
from urllib.parse import urlparse
|
12
11
|
from typing import List
|
13
12
|
from sima_cli.utils.env import get_environment_type
|
@@ -82,6 +81,11 @@ def _confirm_flavor_switching(full_image: bool, flavor: str) -> str:
|
|
82
81
|
Returns:
|
83
82
|
str: The flavor to use ('full' or 'headless')
|
84
83
|
"""
|
84
|
+
# when the flavor is set to auto use the detected flavor instead
|
85
|
+
if flavor == 'auto':
|
86
|
+
flavor = 'full' if full_image else 'headless'
|
87
|
+
click.echo(f"✅ Automatically detected the flavor of the running image: [{flavor}], Proceeding to update")
|
88
|
+
|
85
89
|
if (full_image and flavor != 'full') or (not full_image and flavor == 'full'):
|
86
90
|
click.echo(f"🔄 The current image running on the board has a different flavor from what you specified ({flavor}).")
|
87
91
|
click.echo("Please choose an option:")
|
@@ -113,7 +117,9 @@ def _pick_from_available_versions(board: str, version_or_url: str, internal: boo
|
|
113
117
|
try:
|
114
118
|
if len(available_versions) > 1:
|
115
119
|
click.echo("Multiple firmware versions found matching your input:")
|
116
|
-
|
120
|
+
|
121
|
+
from InquirerPy import inquirer
|
122
|
+
|
117
123
|
selected_version = inquirer.fuzzy(
|
118
124
|
message="Select a version:",
|
119
125
|
choices=available_versions,
|
@@ -440,7 +446,7 @@ def _update_remote(extracted_paths: List[str], ip: str, board: str, passwd: str,
|
|
440
446
|
|
441
447
|
# Get remote board info
|
442
448
|
click.echo("🔍 Checking remote board type and version...")
|
443
|
-
remote_board, remote_version,
|
449
|
+
remote_board, remote_version, _, _ = get_remote_board_info(ip, passwd)
|
444
450
|
|
445
451
|
if not remote_board:
|
446
452
|
click.echo("❌ Could not determine remote board type.")
|
@@ -480,7 +486,7 @@ def download_image(version_or_url: str, board: str, swtype: str, internal: bool
|
|
480
486
|
extracted_paths = _download_image(version_or_url, board, internal, update_type, flavor=flavor, swtype=swtype)
|
481
487
|
return extracted_paths
|
482
488
|
|
483
|
-
def perform_update(version_or_url: str, ip: str = None, internal: bool = False, passwd: str = "edgeai", auto_confirm: bool = False, flavor: str = '
|
489
|
+
def perform_update(version_or_url: str, ip: str = None, internal: bool = False, passwd: str = "edgeai", auto_confirm: bool = False, flavor: str = 'auto'):
|
484
490
|
r"""
|
485
491
|
Update the system based on environment and input.
|
486
492
|
|
@@ -495,7 +501,7 @@ def perform_update(version_or_url: str, ip: str = None, internal: bool = False,
|
|
495
501
|
internal (bool): If True, enable internal-only behaviors (e.g., Artifactory access).
|
496
502
|
passwd (str): Password for the board user (default: "edgeai").
|
497
503
|
auto_confirm (bool): If True, auto-confirm firmware update without prompting.
|
498
|
-
flavor (str): headless or full
|
504
|
+
flavor (str): headless or full, or auto (detect the running image flavor and use it)
|
499
505
|
"""
|
500
506
|
try:
|
501
507
|
board = ''
|
@@ -504,17 +510,17 @@ def perform_update(version_or_url: str, ip: str = None, internal: bool = False,
|
|
504
510
|
click.echo(f"🔧 Requested version or URL: {version_or_url}, with flavor {flavor}")
|
505
511
|
|
506
512
|
if env_type == 'board':
|
507
|
-
board, version,
|
513
|
+
board, version, devkit_name, full_image = get_local_board_info()
|
508
514
|
else:
|
509
|
-
board, version,
|
515
|
+
board, version, devkit_name, full_image = get_remote_board_info(ip, passwd)
|
510
516
|
|
511
517
|
flavor = _confirm_flavor_switching(full_image=full_image, flavor=flavor)
|
512
518
|
|
513
519
|
if board in ['davinci', 'modalix']:
|
514
|
-
click.echo(f"🔧 Target board: {board} : {
|
520
|
+
click.echo(f"🔧 Target board: {board}, specific type: [{devkit_name}], board currently running: {version}, full_image: {full_image}")
|
515
521
|
|
516
|
-
if flavor == 'full' and 'modalix' not in
|
517
|
-
click.echo(f"❌ You've requested updating {
|
522
|
+
if flavor == 'full' and 'modalix' not in devkit_name:
|
523
|
+
click.echo(f"❌ You've requested updating {devkit_name} to full image, this is only supported for the Modalix DevKit")
|
518
524
|
return
|
519
525
|
|
520
526
|
# Davinci only supports headless build, so ignore the full flavor
|
sima_cli/utils/env.py
CHANGED
@@ -73,44 +73,51 @@ def get_sima_board_type() -> str:
|
|
73
73
|
|
74
74
|
def is_modalix_devkit() -> bool:
|
75
75
|
"""
|
76
|
-
Determines whether the current system is a Modalix DevKit (
|
77
|
-
by checking if
|
76
|
+
Determines whether the current system is a Modalix DevKit (SoM)
|
77
|
+
by checking if "Modalix SoM" is present in /proc/device-tree/model.
|
78
78
|
|
79
79
|
Returns:
|
80
|
-
bool: True if running on a Modalix DevKit, False otherwise.
|
80
|
+
bool: True if running on a Modalix DevKit (SoM), False otherwise.
|
81
81
|
"""
|
82
|
-
|
82
|
+
model_path = "/proc/device-tree/model"
|
83
|
+
if not os.path.exists(model_path):
|
83
84
|
return False
|
84
85
|
|
85
86
|
try:
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
except subprocess.CalledProcessError:
|
87
|
+
with open(model_path, "r") as f:
|
88
|
+
line = f.readline().strip()
|
89
|
+
return "Modalix SoM" in line
|
90
|
+
except Exception:
|
91
91
|
return False
|
92
|
-
|
93
|
-
return False
|
92
|
+
|
94
93
|
|
95
94
|
def get_exact_devkit_type() -> str:
|
96
95
|
"""
|
97
|
-
Extracts the exact devkit type from
|
96
|
+
Extracts the exact devkit type from /proc/device-tree/model.
|
97
|
+
|
98
|
+
Example mappings:
|
99
|
+
"SiMa.ai Modalix SoM Board" -> "modalix-som"
|
100
|
+
"SiMa.ai Modalix DVT Board" -> "modalix-dvt"
|
101
|
+
"SiMa.ai DaVinci Half-Height..." -> "davinci-half-height-half-length"
|
98
102
|
|
99
103
|
Returns:
|
100
|
-
str:
|
104
|
+
str: Normalized devkit type (lowercase, spaces -> "-"),
|
105
|
+
or an empty string if not found or unavailable.
|
101
106
|
"""
|
102
|
-
|
107
|
+
model_path = "/proc/device-tree/model"
|
108
|
+
if not os.path.exists(model_path):
|
103
109
|
return ""
|
104
110
|
|
105
111
|
try:
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
if line.startswith("
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
112
|
+
with open(model_path, "r") as f:
|
113
|
+
line = f.readline().strip()
|
114
|
+
# Remove "SiMa.ai " prefix if present
|
115
|
+
if line.startswith("SiMa.ai "):
|
116
|
+
line = line[len("SiMa.ai "):]
|
117
|
+
# Remove trailing "Board"
|
118
|
+
line = line.replace(" Board", "")
|
119
|
+
# Normalize
|
120
|
+
return line.lower().replace(" ", "-")
|
114
121
|
except Exception:
|
115
122
|
return ""
|
116
123
|
|
@@ -1,12 +1,12 @@
|
|
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=dV_wUomyW1FHtFgcX6fG1NT7ViHhyASu0XFi6X2mgRA,49
|
4
|
+
sima_cli/cli.py,sha256=qnAQtlaM87tM8t9663NTIxxqMWIpU5--4V-v_0-gYZQ,17224
|
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=ht_mVXBtxV2UGvUYwvhkPHs4cMWL5Hw2B_OFxWdKw6c,8825
|
9
|
-
sima_cli/auth/login.py,sha256=
|
9
|
+
sima_cli/auth/login.py,sha256=nE-dSHK_husXw1XJaEcOe3I1_bnwHkLgO_BqKuQODDM,3781
|
10
10
|
sima_cli/data/resources_internal.yaml,sha256=zlQD4cSnZK86bLtTWuvEudZTARKiuIKmB--Jv4ajL8o,200
|
11
11
|
sima_cli/data/resources_public.yaml,sha256=U7hmUomGeQ2ULdo1BU2OQHr0PyKBamIdK9qrutDlX8o,201
|
12
12
|
sima_cli/download/__init__.py,sha256=6y4O2FOCYFR2jdnQoVi3hRtEoZ0Gw6rydlTy1SGJ5FE,218
|
@@ -14,14 +14,14 @@ 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=kWhERFYfv3hkfAkFJ5yIMu0vv4Kkav8w1DPOOQEysmc,19098
|
18
18
|
sima_cli/install/metadata_validator.py,sha256=7954rp9vFRNnqmIMvCVTjq40kUIEbGXzfc8HmQmChe0,5221
|
19
19
|
sima_cli/install/optiview.py,sha256=r4DYdQDTUbZVCR87hl5T21gsjZrhqpU8hWnYxKmUJ_k,4790
|
20
20
|
sima_cli/install/palette.py,sha256=uRznoHa4Mv9ZXHp6AoqknfC3RxpYNKi9Ins756Cyifk,3930
|
21
21
|
sima_cli/mla/meminfo.py,sha256=ndc8kQJmWGEIdvNh6iIhATGdrkqM2pbddr_eHxaPNfg,1466
|
22
22
|
sima_cli/model_zoo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
23
23
|
sima_cli/model_zoo/model.py,sha256=q91Nrg62j1TqwPO8HiX4nlEFCCmzNEFcyFTBVMbJm8w,9836
|
24
|
-
sima_cli/network/network.py,sha256=
|
24
|
+
sima_cli/network/network.py,sha256=kXYI2oxgeIg7LoGt2VKF9JlK8DIfQT87A9-x-D6uHCA,7714
|
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
|
@@ -32,21 +32,21 @@ sima_cli/update/__init__.py,sha256=0P-z-rSaev40IhfJXytK3AFWv2_sdQU4Ry6ei2sEus0,6
|
|
32
32
|
sima_cli/update/bmaptool.py,sha256=KrhUGShBwY4Wzz50QiuMYAxxPgEy1nz5C68G-0a4qF4,4988
|
33
33
|
sima_cli/update/bootimg.py,sha256=OA_GyZwI8dbU3kaucKmoxAZbnnSnjXeOkU6yuDPji1k,13632
|
34
34
|
sima_cli/update/cleanlog.py,sha256=-V6eDl3MdsvDmCfkKUJTqkXJ_WnLJE01uxS7z96b15g,909
|
35
|
-
sima_cli/update/local.py,sha256=
|
35
|
+
sima_cli/update/local.py,sha256=z3oRk6JH-zbCdoS3JpgeW_ZB4kolG7nPhLC55A2yssk,5597
|
36
36
|
sima_cli/update/netboot.py,sha256=hsJQLq4HVwFFkaWjA54VZdkMGDhO0RmylciS78qAfrM,19663
|
37
37
|
sima_cli/update/query.py,sha256=6RgvQfQT1_EtBGcibvVcz003dRKOq17NaGgL2mhaBbY,4891
|
38
|
-
sima_cli/update/remote.py,sha256=
|
39
|
-
sima_cli/update/updater.py,sha256=
|
38
|
+
sima_cli/update/remote.py,sha256=wC4MSBQVxmibxtPBchAzFMhZYcRjxTiLlPSzVI0en4o,14690
|
39
|
+
sima_cli/update/updater.py,sha256=NPd32OzM_356Nm1bEDDNh7faubW_VSOk12J4I6Yc2SQ,24580
|
40
40
|
sima_cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
41
41
|
sima_cli/utils/artifactory.py,sha256=6YyVpzVm8ATy7NEwT9nkWx-wptkXrvG7Wl_zDT6jmLs,2390
|
42
42
|
sima_cli/utils/config.py,sha256=wE-cPQqY_gOqaP8t01xsRHD9tBUGk9MgBUm2GYYxI3E,1616
|
43
43
|
sima_cli/utils/config_loader.py,sha256=7I5we1yiCai18j9R9jvhfUzAmT3OjAqVK35XSLuUw8c,2005
|
44
44
|
sima_cli/utils/disk.py,sha256=66Kr631yhc_ny19up2aijfycWfD35AeLQOJgUsuH2hY,446
|
45
|
-
sima_cli/utils/env.py,sha256=
|
45
|
+
sima_cli/utils/env.py,sha256=LtV8S1kCkOpi-7Gj4rhidQRN13x_NDKy4W_LxujheeI,8400
|
46
46
|
sima_cli/utils/net.py,sha256=WVntA4CqipkNrrkA4tBVRadJft_pMcGYh4Re5xk3rqo,971
|
47
47
|
sima_cli/utils/network.py,sha256=UvqxbqbWUczGFyO-t1SybG7Q-x9kjUVRNIn_D6APzy8,1252
|
48
48
|
sima_cli/utils/pkg_update_check.py,sha256=IAV_NAOsBDL_lYNYMRYfdZWuVq-rJ_zzHjJJZ7UQaoc,3274
|
49
|
-
sima_cli-0.0.
|
49
|
+
sima_cli-0.0.35.dist-info/licenses/LICENSE,sha256=a260OFuV4SsMZ6sQCkoYbtws_4o2deFtbnT9kg7Rfd4,1082
|
50
50
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
51
51
|
tests/test_app_zoo.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
52
52
|
tests/test_auth.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -55,8 +55,8 @@ tests/test_download.py,sha256=t87DwxlHs26_ws9rpcHGwr_OrcRPd3hz6Zmm0vRee2U,4465
|
|
55
55
|
tests/test_firmware.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
56
56
|
tests/test_model_zoo.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
57
57
|
tests/test_utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
58
|
-
sima_cli-0.0.
|
59
|
-
sima_cli-0.0.
|
60
|
-
sima_cli-0.0.
|
61
|
-
sima_cli-0.0.
|
62
|
-
sima_cli-0.0.
|
58
|
+
sima_cli-0.0.35.dist-info/METADATA,sha256=wT-QS9rbFlezkg5M_CmGhmMmHhxZ4XqPVovYiLJLSRw,3705
|
59
|
+
sima_cli-0.0.35.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
60
|
+
sima_cli-0.0.35.dist-info/entry_points.txt,sha256=xRYrDq1nCs6R8wEdB3c1kKuimxEjWJkHuCzArQPT0Xk,47
|
61
|
+
sima_cli-0.0.35.dist-info/top_level.txt,sha256=FtrbAUdHNohtEPteOblArxQNwoX9_t8qJQd59fagDlc,15
|
62
|
+
sima_cli-0.0.35.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|