ruyi 0.44.0a20251118__py3-none-any.whl → 0.45.0__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.
- ruyi/__main__.py +16 -4
- ruyi/cli/cmd.py +6 -5
- ruyi/cli/config_cli.py +14 -11
- ruyi/cli/main.py +34 -17
- ruyi/cli/oobe.py +10 -10
- ruyi/cli/self_cli.py +49 -36
- ruyi/cli/user_input.py +42 -12
- ruyi/cli/version_cli.py +11 -5
- ruyi/config/__init__.py +30 -10
- ruyi/config/errors.py +19 -7
- ruyi/device/provision.py +116 -55
- ruyi/device/provision_cli.py +6 -3
- ruyi/i18n/__init__.py +129 -0
- ruyi/log/__init__.py +6 -5
- ruyi/mux/runtime.py +19 -6
- ruyi/mux/venv/maker.py +93 -35
- ruyi/mux/venv/venv_cli.py +13 -10
- ruyi/pluginhost/plugin_cli.py +4 -3
- ruyi/resource_bundle/__init__.py +22 -8
- ruyi/resource_bundle/__main__.py +6 -5
- ruyi/resource_bundle/data.py +13 -9
- ruyi/ruyipkg/admin_checksum.py +4 -1
- ruyi/ruyipkg/admin_cli.py +9 -6
- ruyi/ruyipkg/augmented_pkg.py +15 -14
- ruyi/ruyipkg/checksum.py +8 -2
- ruyi/ruyipkg/distfile.py +33 -9
- ruyi/ruyipkg/entity.py +12 -2
- ruyi/ruyipkg/entity_cli.py +20 -12
- ruyi/ruyipkg/entity_provider.py +11 -2
- ruyi/ruyipkg/fetcher.py +38 -9
- ruyi/ruyipkg/install.py +163 -64
- ruyi/ruyipkg/install_cli.py +18 -15
- ruyi/ruyipkg/list.py +27 -20
- ruyi/ruyipkg/list_cli.py +12 -7
- ruyi/ruyipkg/news.py +23 -11
- ruyi/ruyipkg/news_cli.py +10 -7
- ruyi/ruyipkg/profile_cli.py +8 -2
- ruyi/ruyipkg/repo.py +22 -8
- ruyi/ruyipkg/unpack.py +42 -8
- ruyi/ruyipkg/unpack_method.py +5 -1
- ruyi/ruyipkg/update_cli.py +8 -3
- ruyi/telemetry/aggregate.py +5 -0
- ruyi/telemetry/provider.py +292 -105
- ruyi/telemetry/store.py +68 -15
- ruyi/telemetry/telemetry_cli.py +32 -13
- ruyi/utils/git.py +18 -11
- ruyi/utils/prereqs.py +10 -5
- ruyi/utils/ssl_patch.py +2 -1
- ruyi/version.py +9 -3
- {ruyi-0.44.0a20251118.dist-info → ruyi-0.45.0.dist-info}/METADATA +4 -2
- ruyi-0.45.0.dist-info/RECORD +103 -0
- {ruyi-0.44.0a20251118.dist-info → ruyi-0.45.0.dist-info}/WHEEL +1 -1
- ruyi-0.44.0a20251118.dist-info/RECORD +0 -102
- {ruyi-0.44.0a20251118.dist-info → ruyi-0.45.0.dist-info}/entry_points.txt +0 -0
- {ruyi-0.44.0a20251118.dist-info → ruyi-0.45.0.dist-info}/licenses/LICENSE-Apache.txt +0 -0
ruyi/telemetry/store.py
CHANGED
|
@@ -85,6 +85,11 @@ class TelemetryStore:
|
|
|
85
85
|
def record_upload_timestamp(self, time_now: float | None = None) -> None:
|
|
86
86
|
if time_now is None:
|
|
87
87
|
time_now = time.time()
|
|
88
|
+
|
|
89
|
+
# We may not have store_root existing yet if we're in minimal telemetry
|
|
90
|
+
# mode
|
|
91
|
+
self.store_root.mkdir(parents=True, exist_ok=True)
|
|
92
|
+
|
|
88
93
|
f = self.last_upload_marker_file
|
|
89
94
|
f.touch()
|
|
90
95
|
os.utime(f, (time_now, time_now))
|
|
@@ -122,10 +127,6 @@ class TelemetryStore:
|
|
|
122
127
|
f"scope {self.scope}: persisted {len(self._events)} telemetry event(s)"
|
|
123
128
|
)
|
|
124
129
|
|
|
125
|
-
def upload(self, installation_data: NodeInfo | None = None) -> None:
|
|
126
|
-
self.prepare_data_for_upload(installation_data)
|
|
127
|
-
self.upload_staged_payloads()
|
|
128
|
-
|
|
129
130
|
def read_back_raw_events(self) -> Iterable[TelemetryEvent]:
|
|
130
131
|
try:
|
|
131
132
|
for f in self.raw_events_dir.glob("run.*.ndjson"):
|
|
@@ -177,6 +178,47 @@ class TelemetryStore:
|
|
|
177
178
|
|
|
178
179
|
self.purge_raw_events()
|
|
179
180
|
|
|
181
|
+
def prepare_data_for_minimal_upload(self) -> bytes:
|
|
182
|
+
"""Prepare a minimal upload payload with no installation data and no events.
|
|
183
|
+
|
|
184
|
+
Used when user has not consented to telemetry collection but also not
|
|
185
|
+
explicitly opted out, for gaining minimal insight into adoption.
|
|
186
|
+
"""
|
|
187
|
+
|
|
188
|
+
# import ruyi.version here because this package is on the CLI startup
|
|
189
|
+
# critical path, and version probing is costly there
|
|
190
|
+
from ..version import RUYI_SEMVER
|
|
191
|
+
|
|
192
|
+
payload_nonce = uuid.uuid4().hex # for server-side dedup purposes
|
|
193
|
+
|
|
194
|
+
# We don't have installation data, and cannot have it initialized
|
|
195
|
+
# in this case because absence of installation data means no user
|
|
196
|
+
# consent. And making up a persistent installation ID is not a
|
|
197
|
+
# choice either, because "installation ID" resembles "advertising
|
|
198
|
+
# ID" a lot, which is considered personally identifiable information
|
|
199
|
+
# (PII) and not allowed to be collected without user consent.
|
|
200
|
+
#
|
|
201
|
+
# So, resort to re-using the completely random nonce as the report
|
|
202
|
+
# UUID, which does not allow for server-side correlation but at least
|
|
203
|
+
# allows for some insight into end-user adoption.
|
|
204
|
+
payload: UploadPayload = {
|
|
205
|
+
"fmt": 1,
|
|
206
|
+
"nonce": payload_nonce,
|
|
207
|
+
"ruyi_version": RUYI_SEMVER,
|
|
208
|
+
"report_uuid": payload_nonce,
|
|
209
|
+
"events": [],
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return json.dumps(payload).encode("utf-8")
|
|
213
|
+
|
|
214
|
+
def upload_minimal(self) -> None:
|
|
215
|
+
if not self.api_url:
|
|
216
|
+
return
|
|
217
|
+
|
|
218
|
+
p = self.prepare_data_for_minimal_upload()
|
|
219
|
+
self.upload_one_staged_payload(p, self.api_url)
|
|
220
|
+
self.record_upload_timestamp()
|
|
221
|
+
|
|
180
222
|
def upload_staged_payloads(self) -> None:
|
|
181
223
|
if not self.api_url:
|
|
182
224
|
return
|
|
@@ -198,7 +240,7 @@ class TelemetryStore:
|
|
|
198
240
|
|
|
199
241
|
def upload_one_staged_payload(
|
|
200
242
|
self,
|
|
201
|
-
f: pathlib.Path,
|
|
243
|
+
f: pathlib.Path | bytes,
|
|
202
244
|
endpoint: str,
|
|
203
245
|
) -> None:
|
|
204
246
|
# import ruyi.version here because this package is on the CLI startup
|
|
@@ -206,13 +248,23 @@ class TelemetryStore:
|
|
|
206
248
|
from ..version import RUYI_USER_AGENT
|
|
207
249
|
|
|
208
250
|
api_path = urljoin_for_sure(endpoint, "upload-v1")
|
|
209
|
-
|
|
251
|
+
|
|
252
|
+
if isinstance(f, pathlib.Path):
|
|
253
|
+
self._logger.D(
|
|
254
|
+
f"scope {self.scope}: about to upload payload {f} to {api_path}"
|
|
255
|
+
)
|
|
256
|
+
data = f.read_bytes()
|
|
257
|
+
else:
|
|
258
|
+
self._logger.D(
|
|
259
|
+
f"scope {self.scope}: about to upload in-memory payload to {api_path}"
|
|
260
|
+
)
|
|
261
|
+
data = f
|
|
210
262
|
|
|
211
263
|
import requests
|
|
212
264
|
|
|
213
265
|
resp = requests.post(
|
|
214
266
|
api_path,
|
|
215
|
-
data=
|
|
267
|
+
data=data,
|
|
216
268
|
headers={"User-Agent": RUYI_USER_AGENT},
|
|
217
269
|
allow_redirects=True,
|
|
218
270
|
timeout=5,
|
|
@@ -228,11 +280,12 @@ class TelemetryStore:
|
|
|
228
280
|
f"scope {self.scope}: telemetry upload ok: status code {resp.status_code}"
|
|
229
281
|
)
|
|
230
282
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
283
|
+
if isinstance(f, pathlib.Path):
|
|
284
|
+
# move to completed dir
|
|
285
|
+
# TODO: rotation
|
|
286
|
+
try:
|
|
287
|
+
f.rename(self.uploaded_dir / f.name)
|
|
288
|
+
except OSError as e:
|
|
289
|
+
self._logger.D(
|
|
290
|
+
f"scope {self.scope}: failed to move uploaded payload away: {e}"
|
|
291
|
+
)
|
ruyi/telemetry/telemetry_cli.py
CHANGED
|
@@ -3,6 +3,7 @@ import datetime
|
|
|
3
3
|
from typing import TYPE_CHECKING
|
|
4
4
|
|
|
5
5
|
from ..cli.cmd import RootCommand
|
|
6
|
+
from ..i18n import _
|
|
6
7
|
|
|
7
8
|
if TYPE_CHECKING:
|
|
8
9
|
from ..cli.completion import ArgumentParser
|
|
@@ -13,19 +14,41 @@ if TYPE_CHECKING:
|
|
|
13
14
|
class TelemetryCommand(
|
|
14
15
|
RootCommand,
|
|
15
16
|
cmd="telemetry",
|
|
17
|
+
has_main=True,
|
|
16
18
|
has_subcommands=True,
|
|
17
|
-
help="Manage your telemetry preferences",
|
|
19
|
+
help=_("Manage your telemetry preferences"),
|
|
18
20
|
):
|
|
19
21
|
@classmethod
|
|
20
22
|
def configure_args(cls, gc: "GlobalConfig", p: "ArgumentParser") -> None:
|
|
21
|
-
|
|
23
|
+
# https://github.com/python/cpython/issues/67037 prevents the registration
|
|
24
|
+
# of undocumented subcommands, so a preferred usage of
|
|
25
|
+
# "ruyi telemetry cron-upload" is not possible right now.
|
|
26
|
+
p.add_argument(
|
|
27
|
+
"--cron-upload",
|
|
28
|
+
action="store_true",
|
|
29
|
+
dest="cron_upload",
|
|
30
|
+
default=False,
|
|
31
|
+
help=argparse.SUPPRESS,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
@classmethod
|
|
35
|
+
def main(cls, cfg: "GlobalConfig", args: argparse.Namespace) -> int:
|
|
36
|
+
cron_upload: bool = args.cron_upload
|
|
37
|
+
if not cron_upload:
|
|
38
|
+
args._parser.print_help() # pylint: disable=protected-access
|
|
39
|
+
return 0
|
|
40
|
+
|
|
41
|
+
# the rest are implementation of "--cron-upload"
|
|
42
|
+
|
|
43
|
+
cfg.telemetry.flush(cron_mode=True)
|
|
44
|
+
return 0
|
|
22
45
|
|
|
23
46
|
|
|
24
47
|
class TelemetryConsentCommand(
|
|
25
48
|
TelemetryCommand,
|
|
26
49
|
cmd="consent",
|
|
27
50
|
aliases=["on"],
|
|
28
|
-
help="Give consent to telemetry data uploads",
|
|
51
|
+
help=_("Give consent to telemetry data uploads"),
|
|
29
52
|
):
|
|
30
53
|
@classmethod
|
|
31
54
|
def configure_args(cls, gc: "GlobalConfig", p: "ArgumentParser") -> None:
|
|
@@ -43,7 +66,7 @@ class TelemetryConsentCommand(
|
|
|
43
66
|
class TelemetryLocalCommand(
|
|
44
67
|
TelemetryCommand,
|
|
45
68
|
cmd="local",
|
|
46
|
-
help="Set telemetry mode to local collection only",
|
|
69
|
+
help=_("Set telemetry mode to local collection only"),
|
|
47
70
|
):
|
|
48
71
|
@classmethod
|
|
49
72
|
def configure_args(cls, gc: "GlobalConfig", p: "ArgumentParser") -> None:
|
|
@@ -61,7 +84,7 @@ class TelemetryOptoutCommand(
|
|
|
61
84
|
TelemetryCommand,
|
|
62
85
|
cmd="optout",
|
|
63
86
|
aliases=["off"],
|
|
64
|
-
help="Opt out of telemetry data collection",
|
|
87
|
+
help=_("Opt out of telemetry data collection"),
|
|
65
88
|
):
|
|
66
89
|
@classmethod
|
|
67
90
|
def configure_args(cls, gc: "GlobalConfig", p: "ArgumentParser") -> None:
|
|
@@ -78,7 +101,7 @@ class TelemetryOptoutCommand(
|
|
|
78
101
|
class TelemetryStatusCommand(
|
|
79
102
|
TelemetryCommand,
|
|
80
103
|
cmd="status",
|
|
81
|
-
help="Print the current telemetry mode",
|
|
104
|
+
help=_("Print the current telemetry mode"),
|
|
82
105
|
):
|
|
83
106
|
@classmethod
|
|
84
107
|
def configure_args(cls, gc: "GlobalConfig", p: "ArgumentParser") -> None:
|
|
@@ -86,7 +109,7 @@ class TelemetryStatusCommand(
|
|
|
86
109
|
"--verbose",
|
|
87
110
|
"-v",
|
|
88
111
|
action="store_true",
|
|
89
|
-
help="Enable verbose output",
|
|
112
|
+
help=_("Enable verbose output"),
|
|
90
113
|
)
|
|
91
114
|
|
|
92
115
|
@classmethod
|
|
@@ -98,7 +121,7 @@ class TelemetryStatusCommand(
|
|
|
98
121
|
|
|
99
122
|
if cfg.telemetry is None:
|
|
100
123
|
cfg.logger.I(
|
|
101
|
-
"telemetry mode is [green]off[/]: no further data will be collected"
|
|
124
|
+
_("telemetry mode is [green]off[/]: no further data will be collected")
|
|
102
125
|
)
|
|
103
126
|
return 0
|
|
104
127
|
|
|
@@ -109,7 +132,7 @@ class TelemetryStatusCommand(
|
|
|
109
132
|
class TelemetryUploadCommand(
|
|
110
133
|
TelemetryCommand,
|
|
111
134
|
cmd="upload",
|
|
112
|
-
help="Upload collected telemetry data now",
|
|
135
|
+
help=_("Upload collected telemetry data now"),
|
|
113
136
|
):
|
|
114
137
|
@classmethod
|
|
115
138
|
def configure_args(cls, gc: "GlobalConfig", p: "ArgumentParser") -> None:
|
|
@@ -117,10 +140,6 @@ class TelemetryUploadCommand(
|
|
|
117
140
|
|
|
118
141
|
@classmethod
|
|
119
142
|
def main(cls, cfg: "GlobalConfig", args: argparse.Namespace) -> int:
|
|
120
|
-
if cfg.telemetry is None:
|
|
121
|
-
cfg.logger.W("telemetry is disabled, nothing to upload")
|
|
122
|
-
return 0
|
|
123
|
-
|
|
124
143
|
cfg.telemetry.flush(upload_now=True)
|
|
125
144
|
# disable the flush at program exit because we have just done that
|
|
126
145
|
cfg.telemetry.discard_events()
|
ruyi/utils/git.py
CHANGED
|
@@ -30,6 +30,7 @@ from rich.text import Text
|
|
|
30
30
|
if TYPE_CHECKING:
|
|
31
31
|
from typing_extensions import Self
|
|
32
32
|
|
|
33
|
+
from ..i18n import _
|
|
33
34
|
from ..log import RuyiLogger
|
|
34
35
|
|
|
35
36
|
|
|
@@ -77,11 +78,11 @@ class RemoteGitProgressIndicator(
|
|
|
77
78
|
self._last_stats is None
|
|
78
79
|
or self._last_stats.received_objects != stats.received_objects
|
|
79
80
|
):
|
|
80
|
-
task_name = "transferring objects"
|
|
81
|
+
task_name = _("transferring objects")
|
|
81
82
|
total = stats.total_objects
|
|
82
83
|
completed = stats.received_objects
|
|
83
84
|
elif self._last_stats.indexed_deltas != stats.indexed_deltas:
|
|
84
|
-
task_name = "processing deltas"
|
|
85
|
+
task_name = _("processing deltas")
|
|
85
86
|
total = stats.total_deltas
|
|
86
87
|
completed = stats.indexed_deltas
|
|
87
88
|
elif self._last_stats.received_bytes != stats.received_bytes:
|
|
@@ -113,13 +114,15 @@ def pull_ff_or_die(
|
|
|
113
114
|
if remote.url != remote_url:
|
|
114
115
|
if not allow_auto_management:
|
|
115
116
|
logger.F(
|
|
116
|
-
|
|
117
|
+
_(
|
|
118
|
+
"URL of remote '[yellow]{remote}[/]' does not match expected URL"
|
|
119
|
+
).format(remote=remote_name)
|
|
117
120
|
)
|
|
118
121
|
repo_path = human_readable_path_of_repo(repo)
|
|
119
|
-
logger.I(
|
|
120
|
-
logger.I(
|
|
121
|
-
logger.I(
|
|
122
|
-
logger.I("please [bold red]fix the repo settings manually[/]")
|
|
122
|
+
logger.I(_("repository: [yellow]{path}[/]").format(path=repo_path))
|
|
123
|
+
logger.I(_("expected remote URL: [yellow]{url}[/]").format(url=remote_url))
|
|
124
|
+
logger.I(_("actual remote URL: [yellow]{url}[/]").format(url=remote.url))
|
|
125
|
+
logger.I(_("please [bold red]fix the repo settings manually[/]"))
|
|
123
126
|
raise SystemExit(1)
|
|
124
127
|
|
|
125
128
|
logger.D(
|
|
@@ -134,7 +137,11 @@ def pull_ff_or_die(
|
|
|
134
137
|
with RemoteGitProgressIndicator() as pr:
|
|
135
138
|
remote.fetch(callbacks=pr)
|
|
136
139
|
except GitError as e:
|
|
137
|
-
logger.F(
|
|
140
|
+
logger.F(
|
|
141
|
+
_("failed to fetch from remote URL {url}: {reason}").format(
|
|
142
|
+
url=remote_url, reason=e
|
|
143
|
+
)
|
|
144
|
+
)
|
|
138
145
|
raise SystemExit(1) from e
|
|
139
146
|
|
|
140
147
|
remote_head_ref = repo.lookup_reference(f"refs/remotes/{remote_name}/{branch_name}")
|
|
@@ -145,7 +152,7 @@ def pull_ff_or_die(
|
|
|
145
152
|
assert isinstance(remote_head_ref.target, str)
|
|
146
153
|
remote_head = Oid(hex=remote_head_ref.target)
|
|
147
154
|
|
|
148
|
-
merge_analysis,
|
|
155
|
+
merge_analysis, _mp = repo.merge_analysis(remote_head)
|
|
149
156
|
|
|
150
157
|
if merge_analysis & GIT_MERGE_ANALYSIS_UP_TO_DATE:
|
|
151
158
|
# nothing to do
|
|
@@ -166,6 +173,6 @@ def pull_ff_or_die(
|
|
|
166
173
|
return
|
|
167
174
|
|
|
168
175
|
# cannot handle these cases
|
|
169
|
-
logger.F("cannot fast-forward repo to newly fetched state")
|
|
170
|
-
logger.I("manual intervention is required to avoid data loss")
|
|
176
|
+
logger.F(_("cannot fast-forward repo to newly fetched state"))
|
|
177
|
+
logger.I(_("manual intervention is required to avoid data loss"))
|
|
171
178
|
raise SystemExit(1)
|
ruyi/utils/prereqs.py
CHANGED
|
@@ -3,6 +3,7 @@ import sys
|
|
|
3
3
|
from typing import Final, Iterable, NoReturn
|
|
4
4
|
|
|
5
5
|
from ..cli.user_input import pause_before_continuing
|
|
6
|
+
from ..i18n import _
|
|
6
7
|
from ..log import RuyiLogger, humanize_list
|
|
7
8
|
|
|
8
9
|
|
|
@@ -57,21 +58,25 @@ def ensure_cmds(
|
|
|
57
58
|
return None
|
|
58
59
|
|
|
59
60
|
cmds_str = humanize_list(absent_cmds, item_color="yellow")
|
|
60
|
-
prompt =
|
|
61
|
+
prompt = _(
|
|
62
|
+
"The command(s) {cmds} cannot be found in PATH, which [yellow]ruyi[/] requires"
|
|
63
|
+
).format(cmds=cmds_str)
|
|
61
64
|
if not interactive_retry:
|
|
62
65
|
logger.F(prompt)
|
|
63
|
-
logger.I("please install and retry")
|
|
66
|
+
logger.I(_("please install and retry"))
|
|
64
67
|
sys.exit(1)
|
|
65
68
|
|
|
66
69
|
logger.W(prompt)
|
|
67
70
|
logger.I(
|
|
68
|
-
|
|
71
|
+
_(
|
|
72
|
+
"please install them and press [green]Enter[/] to retry, or [green]Ctrl+C[/] to exit"
|
|
73
|
+
)
|
|
69
74
|
)
|
|
70
75
|
try:
|
|
71
76
|
pause_before_continuing(logger)
|
|
72
77
|
except EOFError:
|
|
73
|
-
logger.I("exiting due to EOF")
|
|
78
|
+
logger.I(_("exiting due to EOF"))
|
|
74
79
|
sys.exit(1)
|
|
75
80
|
except KeyboardInterrupt:
|
|
76
|
-
logger.I("exiting due to keyboard interrupt")
|
|
81
|
+
logger.I(_("exiting due to keyboard interrupt"))
|
|
77
82
|
sys.exit(1)
|
ruyi/utils/ssl_patch.py
CHANGED
|
@@ -6,6 +6,7 @@ from typing import Final, NamedTuple
|
|
|
6
6
|
|
|
7
7
|
import certifi
|
|
8
8
|
|
|
9
|
+
from ..i18n import _
|
|
9
10
|
from ..log import RuyiConsoleLogger, RuyiLogger
|
|
10
11
|
from .global_mode import EnvGlobalModeProvider
|
|
11
12
|
|
|
@@ -35,7 +36,7 @@ def _get_system_ssl_default_verify_paths(logger: RuyiLogger) -> ssl.DefaultVerif
|
|
|
35
36
|
try:
|
|
36
37
|
parts = _query_linux_system_ssl_default_cert_paths(logger)
|
|
37
38
|
if parts is None:
|
|
38
|
-
logger.W("failed to probe system libcrypto")
|
|
39
|
+
logger.W(_("failed to probe system libcrypto"))
|
|
39
40
|
else:
|
|
40
41
|
result = to_ssl_paths(parts)
|
|
41
42
|
except Exception as e:
|
ruyi/version.py
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
from typing import Final
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
from .i18n import d_
|
|
4
|
+
|
|
5
|
+
RUYI_SEMVER: Final = "0.45.0"
|
|
4
6
|
RUYI_USER_AGENT: Final = f"ruyi/{RUYI_SEMVER}"
|
|
5
7
|
|
|
6
|
-
COPYRIGHT_NOTICE: Final =
|
|
8
|
+
COPYRIGHT_NOTICE: Final = d_(
|
|
9
|
+
"""\
|
|
7
10
|
Copyright (C) Institute of Software, Chinese Academy of Sciences (ISCAS).
|
|
8
11
|
All rights reserved.
|
|
9
12
|
License: Apache-2.0 <https://www.apache.org/licenses/LICENSE-2.0>
|
|
10
13
|
\
|
|
11
14
|
"""
|
|
15
|
+
)
|
|
12
16
|
|
|
13
|
-
MPL_REDIST_NOTICE: Final =
|
|
17
|
+
MPL_REDIST_NOTICE: Final = d_(
|
|
18
|
+
"""\
|
|
14
19
|
This distribution of ruyi contains code licensed under the Mozilla Public
|
|
15
20
|
License 2.0 (https://mozilla.org/MPL/2.0/). You can get the respective
|
|
16
21
|
project's sources from the project's official website:
|
|
@@ -18,3 +23,4 @@ project's sources from the project's official website:
|
|
|
18
23
|
* certifi: https://github.com/certifi/python-certifi
|
|
19
24
|
\
|
|
20
25
|
"""
|
|
26
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ruyi
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.45.0
|
|
4
4
|
Summary: Package manager for RuyiSDK
|
|
5
5
|
License: Apache License
|
|
6
6
|
Version 2.0, January 2004
|
|
@@ -224,6 +224,7 @@ Classifier: Topic :: System :: Software Distribution
|
|
|
224
224
|
Classifier: Typing :: Typed
|
|
225
225
|
Requires-Dist: argcomplete (>=2.0.0)
|
|
226
226
|
Requires-Dist: arpy
|
|
227
|
+
Requires-Dist: babel (>=2.8.0)
|
|
227
228
|
Requires-Dist: fastjsonschema (>=2.15.1)
|
|
228
229
|
Requires-Dist: jinja2 (>=3,<4)
|
|
229
230
|
Requires-Dist: pygit2 (>=1.6) ; python_version >= "3.11"
|
|
@@ -408,7 +409,8 @@ described below.
|
|
|
408
409
|
There are 3 telemetry modes available:
|
|
409
410
|
|
|
410
411
|
* `local`: data will be collected but not uploaded without user action.
|
|
411
|
-
* `off`: data will
|
|
412
|
+
* `off`: data will neither be collected nor uploaded, except for a one-time
|
|
413
|
+
upload of `ruyi`'s version number on first run.
|
|
412
414
|
* `on`: data will be collected and periodically uploaded.
|
|
413
415
|
|
|
414
416
|
By default the `local` mode is active from `ruyi` 0.42.0 (inclusive) on, which
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
ruyi/__init__.py,sha256=_8k6Lm01mK35fGY7N9yQLF2SpmVPU70F2plkS6yG1YU,464
|
|
2
|
+
ruyi/__main__.py,sha256=oj13tC5ie1nYguDgzWu1WJVQvkpUYtj1O9CD9kEG2Hc,3631
|
|
3
|
+
ruyi/cli/__init__.py,sha256=MCdAZ00CLb9atln-pJrdQBmcrZmvPx4SOL5LVDbRc_Q,116
|
|
4
|
+
ruyi/cli/builtin_commands.py,sha256=cYyPSF00DSBH1WMv6mHcMygbFRBGXObMWhbXHs5K1Mc,639
|
|
5
|
+
ruyi/cli/cmd.py,sha256=uPbtCgvvJoGjwPSNyRo4JCu0fta3NJ43avH3DvdfqCk,6761
|
|
6
|
+
ruyi/cli/completer.py,sha256=cnOkU7veDe-jP8ROXZL2uBop2HgWfaAZl6dromnPLx8,1426
|
|
7
|
+
ruyi/cli/completion.py,sha256=ffLs3Dv7pY_uinwH98wkBPohRvAjpUOGqy01OTA_Bgo,841
|
|
8
|
+
ruyi/cli/config_cli.py,sha256=QOQ1AZGaPF7JyeOAFGsYHz4TOBCB_tJqUGqAAf4afjA,4152
|
|
9
|
+
ruyi/cli/main.py,sha256=L-3wK_Sklp9Sc1k1I3G9XS2DkuC5xWaIJQUqYejpQyU,4905
|
|
10
|
+
ruyi/cli/oobe.py,sha256=Fjb2-7mFFz85Q-xxuxUG2FSjY9_7ADUDHeqWGidolmY,2572
|
|
11
|
+
ruyi/cli/self_cli.py,sha256=djH51igQ2Ljrh3L2uFx3f31HGhd9iT8UQxp2x6dvXBs,9137
|
|
12
|
+
ruyi/cli/user_input.py,sha256=t-AYWGHSl7VqyLg82l5cjgkOwj0wyeD_S9h5ZyN3yYg,4513
|
|
13
|
+
ruyi/cli/version_cli.py,sha256=teCysKc7hQ7ewuV-wAPwO6DQerJQDJoyWVFAEhoxtWE,1394
|
|
14
|
+
ruyi/config/__init__.py,sha256=QK8dXWp4Tpr8H_4IKLg3fc3-y5wsvnbFUIiLXd3CXOU,17559
|
|
15
|
+
ruyi/config/editor.py,sha256=piAJ-a68iX6IFWXy1g9OXoSs_3DardZwoaSPdStKKL0,4243
|
|
16
|
+
ruyi/config/errors.py,sha256=VH1bhEkddmqkEqbFDgR-Sqp4_OIz6pB4QUTeLRGuQmk,2888
|
|
17
|
+
ruyi/config/news.py,sha256=83LjQjJHsqOPdRrytG7VBFubG6pyDwJ-Mg37gpBRU20,1061
|
|
18
|
+
ruyi/config/schema.py,sha256=u0TdpoUV6I7ZGZKlHAAGnqZbfaoTiA45UsM5c82M99M,7405
|
|
19
|
+
ruyi/device/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
ruyi/device/provision.py,sha256=aUtD4nc_A7kNpUSQDbZaVi39V2aHKc82UYW03OszlnQ,22534
|
|
21
|
+
ruyi/device/provision_cli.py,sha256=n6qgDsOeZ9Ta0DNX-awTwvcTwp6KsH5vZ7DXcQn8udk,1091
|
|
22
|
+
ruyi/i18n/__init__.py,sha256=5Qmcwk8cP8kYUACw8dJcYvXJOWo6EhLWVg4m60qv64g,4312
|
|
23
|
+
ruyi/log/__init__.py,sha256=VTVstSCUIeyPGyuLnwUGa5JGknqyOMdJyZJBbkHqK5Y,6663
|
|
24
|
+
ruyi/mux/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
+
ruyi/mux/runtime.py,sha256=7dK55D57c1O8hVRy6fEo4VWa4SbjDHoNYPqFd6YxmgA,7469
|
|
26
|
+
ruyi/mux/venv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
|
+
ruyi/mux/venv/emulator_cfg.py,sha256=vGw-pBtNii2fTllQqloN_o1FAFOOHgF7zDqLMVdIlzk,1125
|
|
28
|
+
ruyi/mux/venv/maker.py,sha256=NEt8L8lV4PwDWsFek__dWhxaIfOThprcCojuwDxLlBw,30640
|
|
29
|
+
ruyi/mux/venv/venv_cli.py,sha256=LL2nmRsqzeFVe8KoXiJl82uTBkemr2X1yX3oooI5RBk,3076
|
|
30
|
+
ruyi/mux/venv_cfg.py,sha256=m75JCVLFWE1gE8OzcNDOHqwUc2c6ikJhZ-GhjsXv94U,6840
|
|
31
|
+
ruyi/pluginhost/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
|
+
ruyi/pluginhost/api.py,sha256=Zh69xJfR7PEbM6fjoFZRNqeqTneWAmC71NjA76HodSY,5711
|
|
33
|
+
ruyi/pluginhost/ctx.py,sha256=MsP1L7nchnbSrauId3GaQzv0YJLnWE0u_H3ZFEmjUX8,6590
|
|
34
|
+
ruyi/pluginhost/paths.py,sha256=3EVY3_i3LLff4Lk9py-E317C7_ysiRatfCiuxvCsVWw,4227
|
|
35
|
+
ruyi/pluginhost/plugin_cli.py,sha256=Mdw3JYfdDuKLgxnE7Ca7PA-iCdXupqAl8E58nLL9wbk,998
|
|
36
|
+
ruyi/pluginhost/unsandboxed.py,sha256=A9T-6JFfDNiCAxq47_EhLo_rRmZ3Iyrod3teMWv3-XM,7122
|
|
37
|
+
ruyi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
|
+
ruyi/resource_bundle/__init__.py,sha256=AQonNhDlWGWSFSgcuw74Z296umGe5ojc2gkDYvw3Rqw,900
|
|
39
|
+
ruyi/resource_bundle/__main__.py,sha256=F3M-c9nzeI9Yimnn-qCbLKITAzjPYI8mtR-SvjNayrs,1659
|
|
40
|
+
ruyi/resource_bundle/data.py,sha256=QkFTjlplftVC2sJ7iaDy7_1OLVxa8qn8KbJ9n8g4GQ0,34704
|
|
41
|
+
ruyi/ruyipkg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
|
+
ruyi/ruyipkg/admin_checksum.py,sha256=l-YFbSHUBFM-_Gzv0PnSfk9Xv4Srpb0Vd38SrrpA1y0,2331
|
|
43
|
+
ruyi/ruyipkg/admin_cli.py,sha256=ynlkybso9BH6-HLUjgapBI8Gv_y1pXOn7B4ecaUGWq0,2512
|
|
44
|
+
ruyi/ruyipkg/atom.py,sha256=S0mWmtI0HgfOnbkAK6BlHmCrAiHcJ-QVnub3iCiCJjU,5440
|
|
45
|
+
ruyi/ruyipkg/augmented_pkg.py,sha256=O3q9l5zIygvphi-7BK0oCqkuyYrfDYujHNmAC63pf-k,6987
|
|
46
|
+
ruyi/ruyipkg/canonical_dump.py,sha256=Qu25YXwJpjWUBte0C3bmmaJxe7zyqfN-2-__u2_dJDM,9363
|
|
47
|
+
ruyi/ruyipkg/checksum.py,sha256=O3IsmO_LYgmL7RWbN9F3dqe-56qj6JMAutRALXXkCw4,1451
|
|
48
|
+
ruyi/ruyipkg/cli_completion.py,sha256=kJf7vN5rXi5zAwTI3dr4J8HdUzR3-ZXnsdaNQV6kqzo,1151
|
|
49
|
+
ruyi/ruyipkg/distfile.py,sha256=bsUpJm1zopolOIgMCtZDyDgfLXQW7RpcA1BPPLA8Hug,7624
|
|
50
|
+
ruyi/ruyipkg/entity.py,sha256=Ixs_d8Xw6j_NghafOkp0L9MQIYmKj6upue1GGUJe6uQ,14760
|
|
51
|
+
ruyi/ruyipkg/entity_cli.py,sha256=rxY1EMYzfQ-KCnDjyDjyoSEvNNN0tqOHWidJzLN0COc,4029
|
|
52
|
+
ruyi/ruyipkg/entity_provider.py,sha256=agYmFOWz36RpVIggo8BW6kfRWfYTIcyqsD3IVq065io,9018
|
|
53
|
+
ruyi/ruyipkg/fetcher.py,sha256=SWInsI_aQ2Wv1O_9YJEF1BcAxbb24m4UJwwt5maPl2s,9803
|
|
54
|
+
ruyi/ruyipkg/host.py,sha256=pmqgggi7koDCWgzFexwHpycv4SZ07VF6xUbi4s8FSKA,1399
|
|
55
|
+
ruyi/ruyipkg/install.py,sha256=oLMZgW2Lh3b4Odcx-dNE0BEds9oJzlktm83sr8RHbOw,20345
|
|
56
|
+
ruyi/ruyipkg/install_cli.py,sha256=jUoM6mGGDJKSfjv7GhhE5C1rO-IVvMP2nUESZdWiscM,5363
|
|
57
|
+
ruyi/ruyipkg/list.py,sha256=qxzJIe02rqnA9ngYsfNeqUbYgWba9rzprqk4ScF-YwI,4535
|
|
58
|
+
ruyi/ruyipkg/list_cli.py,sha256=tXpsMEZt0ntOSpuybv534VR4ZDIbbV0PS_A01Z5Lj-4,2345
|
|
59
|
+
ruyi/ruyipkg/list_filter.py,sha256=F64_UhwUEiaUR73EkLu91qoUBA-Yz9mEVWj8XY46MXQ,5467
|
|
60
|
+
ruyi/ruyipkg/msg.py,sha256=d9uF1rBmdT8iVvpTU53XXtNTJzvNhIK68rO-4W4h5wc,3180
|
|
61
|
+
ruyi/ruyipkg/news.py,sha256=kqU8Ci9D9fcUMTd-yGGBwP9kJ3NCznw76Sc24V7xn6g,4223
|
|
62
|
+
ruyi/ruyipkg/news_cli.py,sha256=Z4rS30RRG1fnEGKFTYJcxeKNMvIjei4vyPeYNdkuRn8,2434
|
|
63
|
+
ruyi/ruyipkg/news_store.py,sha256=ocTO4YDpL_HrKaIRFvJ_Gxvpmr7V7-R8b1B8f5Eue9c,5276
|
|
64
|
+
ruyi/ruyipkg/pkg_manifest.py,sha256=FmksKjQyBnU4zA3MFXiHdB2EjNmhs-J9km9vE-zBQlk,18836
|
|
65
|
+
ruyi/ruyipkg/profile.py,sha256=6xwL24crALShqD8bazGOIAFTYCpM_91mD8d6YMxM2FU,10762
|
|
66
|
+
ruyi/ruyipkg/profile_cli.py,sha256=GR-f0PKFRz0BzHvPq-Vii4qGGQ31RqYdUbs7pkvWOAc,1038
|
|
67
|
+
ruyi/ruyipkg/protocols.py,sha256=lPKRaAcK3DY3wmkyO2tKpFvPQ_4QA4aSNNsNLvi78O8,1833
|
|
68
|
+
ruyi/ruyipkg/repo.py,sha256=OqDH0GDGPXxFFyP18dO-ZfFQVAuHKwTdmT9joEwIXzM,25634
|
|
69
|
+
ruyi/ruyipkg/state.py,sha256=Ie4vrt79Wp9P0L36tMj36tOtDlFnIb6uwVGDQCQyg8s,11544
|
|
70
|
+
ruyi/ruyipkg/unpack.py,sha256=XS1pB2ahGXjSRE0ViOQKfjStrgDISf6WGlMzR-USD9U,11991
|
|
71
|
+
ruyi/ruyipkg/unpack_method.py,sha256=qJdZXB7OhLLuXhgejZDpiqK2BqMvxxcLJaMWCkc0G0Y,2179
|
|
72
|
+
ruyi/ruyipkg/update_cli.py,sha256=llq8oHctSQ9ahY0JYvGaoUOYzbMx8Y2VVTuj4GdLUDY,1531
|
|
73
|
+
ruyi/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
74
|
+
ruyi/telemetry/aggregate.py,sha256=MhehVOtU7KLICHgOz3sZE5z3OgFa4OmlRIPqXOW_tBU,2334
|
|
75
|
+
ruyi/telemetry/event.py,sha256=GZnFj6E59Q7mjp-2VRApAZH3rT_bu4_cWb5QMCPm-Zc,982
|
|
76
|
+
ruyi/telemetry/provider.py,sha256=1SRqs6Yq2RnKVsthvdcwleWIMbRoi9P0CiikC4YzJPU,23593
|
|
77
|
+
ruyi/telemetry/scope.py,sha256=e45VPAvRAqSxrL0ESorN9SCnR_I6Bwi2CMPJDDshJEE,1133
|
|
78
|
+
ruyi/telemetry/store.py,sha256=IbikQ9dmcuf85SIxlWpXY1aydovM1EzXA9Q6hAo_mXE,10072
|
|
79
|
+
ruyi/telemetry/telemetry_cli.py,sha256=JCgYAH4mJK8e5LPYs6HtoN9WaudDb-jJ33gZkcNgbVo,4072
|
|
80
|
+
ruyi/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
81
|
+
ruyi/utils/ar.py,sha256=w9wiYYdbInLewr5IRTcP0TiOw2ibVDQEmnV0hHm9WlA,2271
|
|
82
|
+
ruyi/utils/ci.py,sha256=66DBm4ooA7yozDtXCJFd1n2jJXTsEnxPSpkNzLfE28M,2970
|
|
83
|
+
ruyi/utils/frontmatter.py,sha256=4EOohEYCZ_q6ncpDv7ktJYf9PN4WEdgFfdE9hZBV3Zg,1052
|
|
84
|
+
ruyi/utils/git.py,sha256=9AumrbBfXBtZwvYvrezDKJJW3TA6HA4gch69eqfGRuo,6232
|
|
85
|
+
ruyi/utils/global_mode.py,sha256=9GES5RyisSXAo14_bP896Jat6BFru_N-DC1V_7bofWY,5684
|
|
86
|
+
ruyi/utils/l10n.py,sha256=l003oQ5M8fWIKQHbYTVSc6oHzFFGU2sbKac7Hh6FNFU,2530
|
|
87
|
+
ruyi/utils/markdown.py,sha256=Mpq--ClM4j9lm_-5zO53ptYePUTLI4rg0V1YshOwsf8,2654
|
|
88
|
+
ruyi/utils/mounts.py,sha256=31BGsVOpD2bO7PYpm8I1ogDHzP3MvrMWznKonS3Ajos,1210
|
|
89
|
+
ruyi/utils/node_info.py,sha256=8-4dtrr2Ww_Cb9iKH_WpTMOWx7wknJKRwMUUZJYo9dQ,6603
|
|
90
|
+
ruyi/utils/nuitka.py,sha256=7mdbmtKnUsGkIp1zxXgGWYrwZcCut3ipd0AP0DrbfZk,1112
|
|
91
|
+
ruyi/utils/porcelain.py,sha256=pF6ieSE2xlnC0HBADFY0m-uuwVNNME3wlbHo2jWdLFA,1403
|
|
92
|
+
ruyi/utils/prereqs.py,sha256=R24UQyHm3pGt2QmZ-5g89AJsxr2eO5SlPrhIoRtz9lM,2181
|
|
93
|
+
ruyi/utils/ssl_patch.py,sha256=HZsJ_nMEzPLjxSl1b8jkYkKU-O6koYK1rdFckic-bi0,5685
|
|
94
|
+
ruyi/utils/templating.py,sha256=94xBJTkIfDqmUBTc9hnLO54zQoC7hwGWONGF3YbaqHk,966
|
|
95
|
+
ruyi/utils/toml.py,sha256=aniIF3SGfR69_s3GWWwlnoKxW4B5IDVY2CM0eUI55_c,3501
|
|
96
|
+
ruyi/utils/url.py,sha256=Wyct6syS4GmZC6mY7SK-YgBWxKl3cOOBXtp9UtvGkto,186
|
|
97
|
+
ruyi/utils/xdg_basedir.py,sha256=RwVH199jPcLVsg5ngR62RaNS5hqnMpkdt31LqkCfa1g,2751
|
|
98
|
+
ruyi/version.py,sha256=qFJ1dp12sOzWy23xY5eKU0c7X8ZaKJy-W4OvavRb1w4,637
|
|
99
|
+
ruyi-0.45.0.dist-info/METADATA,sha256=Pm_WaW_bndLfRLYW1EocJtSuJjp5DYxkOUL-bDyCaEM,24481
|
|
100
|
+
ruyi-0.45.0.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
|
|
101
|
+
ruyi-0.45.0.dist-info/entry_points.txt,sha256=GXSNSy7OgFrnlU5xm5dE3l3PGO92Qf6VDIUCdvQNm8E,49
|
|
102
|
+
ruyi-0.45.0.dist-info/licenses/LICENSE-Apache.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
103
|
+
ruyi-0.45.0.dist-info/RECORD,,
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
ruyi/__init__.py,sha256=_8k6Lm01mK35fGY7N9yQLF2SpmVPU70F2plkS6yG1YU,464
|
|
2
|
-
ruyi/__main__.py,sha256=jgWWxLHU07JJQSRRqWWR3EcZpauqRpaJju9q3DF9yHg,3335
|
|
3
|
-
ruyi/cli/__init__.py,sha256=MCdAZ00CLb9atln-pJrdQBmcrZmvPx4SOL5LVDbRc_Q,116
|
|
4
|
-
ruyi/cli/builtin_commands.py,sha256=cYyPSF00DSBH1WMv6mHcMygbFRBGXObMWhbXHs5K1Mc,639
|
|
5
|
-
ruyi/cli/cmd.py,sha256=kR3aEiDE3AfPoP0Zr7MO-09CKoExbkLLmPvve9oKaUg,6725
|
|
6
|
-
ruyi/cli/completer.py,sha256=cnOkU7veDe-jP8ROXZL2uBop2HgWfaAZl6dromnPLx8,1426
|
|
7
|
-
ruyi/cli/completion.py,sha256=ffLs3Dv7pY_uinwH98wkBPohRvAjpUOGqy01OTA_Bgo,841
|
|
8
|
-
ruyi/cli/config_cli.py,sha256=9kq5W3Ir_lfwImhvrUmQ1KTKy1aRCv_UU1CmL5eGyJs,4038
|
|
9
|
-
ruyi/cli/main.py,sha256=qWgCKbWG8sHxM7rInkoQfzZOHKo2k8JwdgJp_AMH388,4455
|
|
10
|
-
ruyi/cli/oobe.py,sha256=TqXpoCAslIYt1ODPGial0NsNtf3nL1BLxJ8k_CdkuAU,2708
|
|
11
|
-
ruyi/cli/self_cli.py,sha256=UEX3Xjy8RGGn9W2O5cM-5rLCwpsM7uSQ9vYYBYxyjyQ,8837
|
|
12
|
-
ruyi/cli/user_input.py,sha256=ZJPyCAD7Aizkt37f_KDtW683aKvGZ2pL85Rg_y1LLfg,3711
|
|
13
|
-
ruyi/cli/version_cli.py,sha256=L2pejZ7LIPYLUTb9NIz4t51KB8ai8igPBuE64tyqUuI,1275
|
|
14
|
-
ruyi/config/__init__.py,sha256=9w1dtgvNxIW65eWzhRN4gl5-460hv-GipIoRZ_oqfXc,16859
|
|
15
|
-
ruyi/config/editor.py,sha256=piAJ-a68iX6IFWXy1g9OXoSs_3DardZwoaSPdStKKL0,4243
|
|
16
|
-
ruyi/config/errors.py,sha256=Yrzd3hX5Gb_bCawoVrWjFrLrpO-q_IOtg4ikE0P8ia0,2561
|
|
17
|
-
ruyi/config/news.py,sha256=83LjQjJHsqOPdRrytG7VBFubG6pyDwJ-Mg37gpBRU20,1061
|
|
18
|
-
ruyi/config/schema.py,sha256=u0TdpoUV6I7ZGZKlHAAGnqZbfaoTiA45UsM5c82M99M,7405
|
|
19
|
-
ruyi/device/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
-
ruyi/device/provision.py,sha256=9rUbLtybBQ8x9qRXaMwz_yAMf51vb3wmYE0qm54P5Bk,20906
|
|
21
|
-
ruyi/device/provision_cli.py,sha256=sc6AF8ohWrXA-kIAYdZcD6sl1HHbj_dH2cCi-pjjOQg,1031
|
|
22
|
-
ruyi/log/__init__.py,sha256=ehgUl8iY1oRfP_nJKrln5lnvJFSPPU1J-3g-PK28YWk,6516
|
|
23
|
-
ruyi/mux/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
-
ruyi/mux/runtime.py,sha256=_d7p-4w2bA2jgCsgcEZxiV1HPnJqdFp0cy4uMGNBsd8,7116
|
|
25
|
-
ruyi/mux/venv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
-
ruyi/mux/venv/emulator_cfg.py,sha256=vGw-pBtNii2fTllQqloN_o1FAFOOHgF7zDqLMVdIlzk,1125
|
|
27
|
-
ruyi/mux/venv/maker.py,sha256=6UabdjLKc77uWTjDRFlZda8Cm1v81inzgBmtQrD48ow,28684
|
|
28
|
-
ruyi/mux/venv/venv_cli.py,sha256=rIKNcYKu1j7ahHXNgv_ytYVR7qJOoly-TaHPvb21FGA,2974
|
|
29
|
-
ruyi/mux/venv_cfg.py,sha256=m75JCVLFWE1gE8OzcNDOHqwUc2c6ikJhZ-GhjsXv94U,6840
|
|
30
|
-
ruyi/pluginhost/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
|
-
ruyi/pluginhost/api.py,sha256=Zh69xJfR7PEbM6fjoFZRNqeqTneWAmC71NjA76HodSY,5711
|
|
32
|
-
ruyi/pluginhost/ctx.py,sha256=MsP1L7nchnbSrauId3GaQzv0YJLnWE0u_H3ZFEmjUX8,6590
|
|
33
|
-
ruyi/pluginhost/paths.py,sha256=3EVY3_i3LLff4Lk9py-E317C7_ysiRatfCiuxvCsVWw,4227
|
|
34
|
-
ruyi/pluginhost/plugin_cli.py,sha256=rLdXG4_OJ2nlaSjFBmTaclx_N2f0s_Wi-9qcSeq7h9I,968
|
|
35
|
-
ruyi/pluginhost/unsandboxed.py,sha256=A9T-6JFfDNiCAxq47_EhLo_rRmZ3Iyrod3teMWv3-XM,7122
|
|
36
|
-
ruyi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
-
ruyi/resource_bundle/__init__.py,sha256=yC1eQ4-EjD7PTr-m5T-l-YDFcblpy2j7i_WJAkC57tg,470
|
|
38
|
-
ruyi/resource_bundle/__main__.py,sha256=moZQB09_OU3BKaFJjtba4jX8TWilqqAOhxsjOlrqqZw,1566
|
|
39
|
-
ruyi/resource_bundle/data.py,sha256=I1gutOaCZziukFMnokYjbRFNDk-2TK4KhQS-ZtU7pV4,5839
|
|
40
|
-
ruyi/ruyipkg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
|
-
ruyi/ruyipkg/admin_checksum.py,sha256=H4JthL4lViKQKEB7A_FTEX2c1G9tHp6N25Y83AUV6vc,2260
|
|
42
|
-
ruyi/ruyipkg/admin_cli.py,sha256=pPA88VZ-hjIxsf6Vl6OF72ZyEl5_swdl44aoxszu-AQ,2443
|
|
43
|
-
ruyi/ruyipkg/atom.py,sha256=S0mWmtI0HgfOnbkAK6BlHmCrAiHcJ-QVnub3iCiCJjU,5440
|
|
44
|
-
ruyi/ruyipkg/augmented_pkg.py,sha256=QbzYNHCRanFx9xwYRosN_dAEzOSxmOBxyBVli8SC9FE,6924
|
|
45
|
-
ruyi/ruyipkg/canonical_dump.py,sha256=Qu25YXwJpjWUBte0C3bmmaJxe7zyqfN-2-__u2_dJDM,9363
|
|
46
|
-
ruyi/ruyipkg/checksum.py,sha256=ChYFPXl7-Y8p_bDerkXOGroRz4k6ejjWY9ViaVWuEgk,1274
|
|
47
|
-
ruyi/ruyipkg/cli_completion.py,sha256=kJf7vN5rXi5zAwTI3dr4J8HdUzR3-ZXnsdaNQV6kqzo,1151
|
|
48
|
-
ruyi/ruyipkg/distfile.py,sha256=wkyYVcSM2b3vD462TtoltdLcUZElCwWvcZBiPG3lTZ0,7002
|
|
49
|
-
ruyi/ruyipkg/entity.py,sha256=s8h5kNaR2vsP6v_QUFIO6SZiUrt0jrb8GU11bNT6fn4,14498
|
|
50
|
-
ruyi/ruyipkg/entity_cli.py,sha256=hF66i3sJX8XVLIWq376GA9vzgegfQy-6s0x0L831Irk,3802
|
|
51
|
-
ruyi/ruyipkg/entity_provider.py,sha256=jDfS2Jh01PVHo0kb1XyI5WkZgL4fv21AooXLLwqK-1I,8741
|
|
52
|
-
ruyi/ruyipkg/fetcher.py,sha256=_btz2hkTz0uEUCCSAhOK7tlhAuvzCu42ZTUCP-RpU7U,9047
|
|
53
|
-
ruyi/ruyipkg/host.py,sha256=pmqgggi7koDCWgzFexwHpycv4SZ07VF6xUbi4s8FSKA,1399
|
|
54
|
-
ruyi/ruyipkg/install.py,sha256=RhJwIqGxMveWrGmpP-2uWpZBRnqkA75HwyHwrNTdqow,18176
|
|
55
|
-
ruyi/ruyipkg/install_cli.py,sha256=joIV5iY4iblDinoH2pgbHNYkMVWqMxtVNj89T0IpJuk,5267
|
|
56
|
-
ruyi/ruyipkg/list.py,sha256=iO7666xFEWKTDNtJqVLaaQKsp0BfLTzgXBwFFHrqCGc,4172
|
|
57
|
-
ruyi/ruyipkg/list_cli.py,sha256=9tRWWRcJv3yJqzup6Oc89E3xahGp5jIfybfEvwwd55I,2243
|
|
58
|
-
ruyi/ruyipkg/list_filter.py,sha256=F64_UhwUEiaUR73EkLu91qoUBA-Yz9mEVWj8XY46MXQ,5467
|
|
59
|
-
ruyi/ruyipkg/msg.py,sha256=d9uF1rBmdT8iVvpTU53XXtNTJzvNhIK68rO-4W4h5wc,3180
|
|
60
|
-
ruyi/ruyipkg/news.py,sha256=5uN4UYqvEW5MU_10W9MzwFo3lH25oZCvMMjfAjLed7U,3857
|
|
61
|
-
ruyi/ruyipkg/news_cli.py,sha256=s5mirEBmO2lZITfjcpzDakP7rNYPqopdM9odbwmAPpg,2378
|
|
62
|
-
ruyi/ruyipkg/news_store.py,sha256=ocTO4YDpL_HrKaIRFvJ_Gxvpmr7V7-R8b1B8f5Eue9c,5276
|
|
63
|
-
ruyi/ruyipkg/pkg_manifest.py,sha256=FmksKjQyBnU4zA3MFXiHdB2EjNmhs-J9km9vE-zBQlk,18836
|
|
64
|
-
ruyi/ruyipkg/profile.py,sha256=6xwL24crALShqD8bazGOIAFTYCpM_91mD8d6YMxM2FU,10762
|
|
65
|
-
ruyi/ruyipkg/profile_cli.py,sha256=ud9MS9JQLOtec_1tFRu669I-imVfi1DHU3AuBJym9mw,848
|
|
66
|
-
ruyi/ruyipkg/protocols.py,sha256=lPKRaAcK3DY3wmkyO2tKpFvPQ_4QA4aSNNsNLvi78O8,1833
|
|
67
|
-
ruyi/ruyipkg/repo.py,sha256=l5d4XPZS-ofbwlAOk5GZMM7AFGay1n1xDVzge935oA4,25231
|
|
68
|
-
ruyi/ruyipkg/state.py,sha256=Ie4vrt79Wp9P0L36tMj36tOtDlFnIb6uwVGDQCQyg8s,11544
|
|
69
|
-
ruyi/ruyipkg/unpack.py,sha256=hPd-lOnDXp1lEb4mdbLUEckT4QXblSFxz-dGAdwaAjc,11207
|
|
70
|
-
ruyi/ruyipkg/unpack_method.py,sha256=MonFFvcDb7MVsi2w4yitnCeZkmWmS7nRMMY-wSt9AMs,2106
|
|
71
|
-
ruyi/ruyipkg/update_cli.py,sha256=ywsAAUPctJ3_2qPDvFL2__ql9m8tGZ6ZfrwbSk30Xh4,1425
|
|
72
|
-
ruyi/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
73
|
-
ruyi/telemetry/aggregate.py,sha256=iKFC4re8IA69x8S-wXIGf5doN1C4zyNuyJulSI0xBTs,1988
|
|
74
|
-
ruyi/telemetry/event.py,sha256=GZnFj6E59Q7mjp-2VRApAZH3rT_bu4_cWb5QMCPm-Zc,982
|
|
75
|
-
ruyi/telemetry/provider.py,sha256=RTuGDddQ7yrD8wOlNOjyGhKydD7hiRe3f96pL3pOvmI,16493
|
|
76
|
-
ruyi/telemetry/scope.py,sha256=e45VPAvRAqSxrL0ESorN9SCnR_I6Bwi2CMPJDDshJEE,1133
|
|
77
|
-
ruyi/telemetry/store.py,sha256=O9YMlLL1iqDbW8ltq0aZRX4VBCZEexBbc335DqlPtRM,8017
|
|
78
|
-
ruyi/telemetry/telemetry_cli.py,sha256=PBVMUSE3P6IBKQVMji_bueVenCdbchbOlowySXy0468,3364
|
|
79
|
-
ruyi/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
80
|
-
ruyi/utils/ar.py,sha256=w9wiYYdbInLewr5IRTcP0TiOw2ibVDQEmnV0hHm9WlA,2271
|
|
81
|
-
ruyi/utils/ci.py,sha256=66DBm4ooA7yozDtXCJFd1n2jJXTsEnxPSpkNzLfE28M,2970
|
|
82
|
-
ruyi/utils/frontmatter.py,sha256=4EOohEYCZ_q6ncpDv7ktJYf9PN4WEdgFfdE9hZBV3Zg,1052
|
|
83
|
-
ruyi/utils/git.py,sha256=YspRRkfxLXluCv4LNx6q_mjkPdoX7WSM9aR7EfudqlM,5991
|
|
84
|
-
ruyi/utils/global_mode.py,sha256=9GES5RyisSXAo14_bP896Jat6BFru_N-DC1V_7bofWY,5684
|
|
85
|
-
ruyi/utils/l10n.py,sha256=l003oQ5M8fWIKQHbYTVSc6oHzFFGU2sbKac7Hh6FNFU,2530
|
|
86
|
-
ruyi/utils/markdown.py,sha256=Mpq--ClM4j9lm_-5zO53ptYePUTLI4rg0V1YshOwsf8,2654
|
|
87
|
-
ruyi/utils/mounts.py,sha256=31BGsVOpD2bO7PYpm8I1ogDHzP3MvrMWznKonS3Ajos,1210
|
|
88
|
-
ruyi/utils/node_info.py,sha256=8-4dtrr2Ww_Cb9iKH_WpTMOWx7wknJKRwMUUZJYo9dQ,6603
|
|
89
|
-
ruyi/utils/nuitka.py,sha256=7mdbmtKnUsGkIp1zxXgGWYrwZcCut3ipd0AP0DrbfZk,1112
|
|
90
|
-
ruyi/utils/porcelain.py,sha256=pF6ieSE2xlnC0HBADFY0m-uuwVNNME3wlbHo2jWdLFA,1403
|
|
91
|
-
ruyi/utils/prereqs.py,sha256=oWAaH-smpTMQxpHt782YBxqHxrTaheataslN988-a78,2076
|
|
92
|
-
ruyi/utils/ssl_patch.py,sha256=a5gf4br6nC39wTHsqiFtcJ-mGzqB-YzK6DHSeERLaHQ,5661
|
|
93
|
-
ruyi/utils/templating.py,sha256=94xBJTkIfDqmUBTc9hnLO54zQoC7hwGWONGF3YbaqHk,966
|
|
94
|
-
ruyi/utils/toml.py,sha256=aniIF3SGfR69_s3GWWwlnoKxW4B5IDVY2CM0eUI55_c,3501
|
|
95
|
-
ruyi/utils/url.py,sha256=Wyct6syS4GmZC6mY7SK-YgBWxKl3cOOBXtp9UtvGkto,186
|
|
96
|
-
ruyi/utils/xdg_basedir.py,sha256=RwVH199jPcLVsg5ngR62RaNS5hqnMpkdt31LqkCfa1g,2751
|
|
97
|
-
ruyi/version.py,sha256=jT9EYtNy62PkDUnqmR1ruxXf6GwVW0MN9QJjtxtw8RU,610
|
|
98
|
-
ruyi-0.44.0a20251118.dist-info/METADATA,sha256=w6xXJQhK6X8tSfmFTCNX01eTVwosr6Ez2Kmf-p5czRw,24383
|
|
99
|
-
ruyi-0.44.0a20251118.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
100
|
-
ruyi-0.44.0a20251118.dist-info/entry_points.txt,sha256=GXSNSy7OgFrnlU5xm5dE3l3PGO92Qf6VDIUCdvQNm8E,49
|
|
101
|
-
ruyi-0.44.0a20251118.dist-info/licenses/LICENSE-Apache.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
102
|
-
ruyi-0.44.0a20251118.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|