ruyi 0.45.0b20260119__tar.gz → 0.46.0b20260203__tar.gz
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-0.45.0b20260119 → ruyi-0.46.0b20260203}/PKG-INFO +1 -1
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/pyproject.toml +1 -1
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/config/__init__.py +1 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/mux/venv/maker.py +10 -1
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/pluginhost/api.py +42 -2
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/pluginhost/ctx.py +30 -15
- ruyi-0.46.0b20260203/ruyi/pluginhost/traits.py +26 -0
- ruyi-0.46.0b20260203/ruyi/resource_bundle/data.py +32 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/list.py +1 -1
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/list_cli.py +8 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/list_filter.py +13 -3
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/profile.py +2 -1
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/repo.py +16 -16
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/version.py +1 -1
- ruyi-0.45.0b20260119/ruyi/resource_bundle/data.py +0 -28
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/LICENSE-Apache.txt +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/README.md +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/__init__.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/__main__.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/cli/__init__.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/cli/builtin_commands.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/cli/cmd.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/cli/completer.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/cli/completion.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/cli/config_cli.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/cli/main.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/cli/oobe.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/cli/self_cli.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/cli/user_input.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/cli/version_cli.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/config/editor.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/config/errors.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/config/news.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/config/schema.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/device/__init__.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/device/provision.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/device/provision_cli.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/i18n/__init__.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/log/__init__.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/mux/__init__.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/mux/runtime.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/mux/venv/__init__.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/mux/venv/emulator_cfg.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/mux/venv/venv_cli.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/mux/venv_cfg.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/pluginhost/__init__.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/pluginhost/paths.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/pluginhost/plugin_cli.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/pluginhost/unsandboxed.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/py.typed +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/resource_bundle/__init__.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/resource_bundle/__main__.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/__init__.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/admin_checksum.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/admin_cli.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/atom.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/augmented_pkg.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/canonical_dump.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/checksum.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/cli_completion.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/distfile.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/entity.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/entity_cli.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/entity_provider.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/fetcher.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/host.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/install.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/install_cli.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/msg.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/news.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/news_cli.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/news_store.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/pkg_manifest.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/profile_cli.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/protocols.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/state.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/unpack.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/unpack_method.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/ruyipkg/update_cli.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/telemetry/__init__.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/telemetry/aggregate.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/telemetry/event.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/telemetry/provider.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/telemetry/scope.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/telemetry/store.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/telemetry/telemetry_cli.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/__init__.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/ar.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/ci.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/frontmatter.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/git.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/global_mode.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/l10n.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/markdown.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/mounts.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/node_info.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/nuitka.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/porcelain.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/prereqs.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/ssl_patch.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/templating.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/toml.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/url.py +0 -0
- {ruyi-0.45.0b20260119 → ruyi-0.46.0b20260203}/ruyi/utils/xdg_basedir.py +0 -0
|
@@ -19,6 +19,7 @@ if TYPE_CHECKING:
|
|
|
19
19
|
from .news import NewsReadStatusStore
|
|
20
20
|
|
|
21
21
|
import babel
|
|
22
|
+
|
|
22
23
|
# not sure why Pyright insists on individual imports
|
|
23
24
|
# otherwise, at the use site (`except babel.core.UnknownLocaleError`):
|
|
24
25
|
# error: "core" is not a known attribute of module "babel" (reportAttributeAccessIssue)
|
|
@@ -13,6 +13,7 @@ from ...ruyipkg.atom import Atom
|
|
|
13
13
|
from ...ruyipkg.pkg_manifest import BoundPackageManifest, EmulatorProgDecl
|
|
14
14
|
from ...ruyipkg.profile import ProfileProxy
|
|
15
15
|
from ...utils.global_mode import ProvidesGlobalMode
|
|
16
|
+
from ...utils.l10n import match_lang_code
|
|
16
17
|
from ...utils.templating import render_template_str
|
|
17
18
|
from .emulator_cfg import ResolvedEmulatorProg
|
|
18
19
|
|
|
@@ -409,9 +410,11 @@ def do_make_venv(
|
|
|
409
410
|
)
|
|
410
411
|
maker.provision()
|
|
411
412
|
|
|
413
|
+
# TODO: move the template to PO
|
|
414
|
+
locale = match_lang_code(config.lang_code, avail=("en", "zh_CN"))
|
|
412
415
|
logger.I(
|
|
413
416
|
render_template_str(
|
|
414
|
-
"prompt.venv-created.txt",
|
|
417
|
+
f"prompt.venv-created.{locale}.txt",
|
|
415
418
|
{
|
|
416
419
|
"sysroot": maker.sysroot_destdir(None),
|
|
417
420
|
},
|
|
@@ -548,6 +551,12 @@ class VenvMaker:
|
|
|
548
551
|
template_data,
|
|
549
552
|
)
|
|
550
553
|
|
|
554
|
+
self.render_and_write(
|
|
555
|
+
bindir / "ruyi-activate.fish",
|
|
556
|
+
"ruyi-activate.fish",
|
|
557
|
+
template_data,
|
|
558
|
+
)
|
|
559
|
+
|
|
551
560
|
qemu_bin: PathLike[Any] | None = None
|
|
552
561
|
profile_emu_env: dict[str, str] | None = None
|
|
553
562
|
if self.emulator_root is not None and self.emulator_progs:
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
from contextlib import AbstractContextManager
|
|
2
|
+
from functools import cached_property
|
|
2
3
|
import pathlib
|
|
3
4
|
import subprocess
|
|
4
5
|
import sys
|
|
5
6
|
import time
|
|
6
|
-
from typing import TYPE_CHECKING, Any, Callable, TypeVar, cast
|
|
7
|
+
from typing import TYPE_CHECKING, Any, Callable, Final, TypeVar, cast
|
|
7
8
|
|
|
8
9
|
if sys.version_info >= (3, 11):
|
|
9
10
|
import tomllib
|
|
@@ -18,12 +19,18 @@ from ..version import RUYI_SEMVER
|
|
|
18
19
|
from .paths import resolve_ruyi_load_path
|
|
19
20
|
|
|
20
21
|
if TYPE_CHECKING:
|
|
21
|
-
from .ctx import PluginHostContext
|
|
22
|
+
from .ctx import PluginHostContext
|
|
23
|
+
from .traits import SupportsEvalFunction, SupportsGetOption
|
|
22
24
|
|
|
23
25
|
T = TypeVar("T")
|
|
24
26
|
U = TypeVar("U")
|
|
25
27
|
|
|
26
28
|
|
|
29
|
+
FIXED_FEATURES: Final = {
|
|
30
|
+
"i18n-v1",
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
27
34
|
class RuyiHostAPI:
|
|
28
35
|
def __init__(
|
|
29
36
|
self,
|
|
@@ -99,6 +106,39 @@ class RuyiHostAPI:
|
|
|
99
106
|
with cm as obj:
|
|
100
107
|
return cast(U, self._ev.eval_function(fn, obj))
|
|
101
108
|
|
|
109
|
+
def has_feature(self, feature: str) -> bool:
|
|
110
|
+
# Expose the i18n-v1 feature only if the host context is properly
|
|
111
|
+
# configured for it
|
|
112
|
+
match feature:
|
|
113
|
+
case "i18n-v1":
|
|
114
|
+
return self._phctx.has_i18n_capability()
|
|
115
|
+
return False
|
|
116
|
+
|
|
117
|
+
#########################################################################
|
|
118
|
+
|
|
119
|
+
# Exported methods for the `i18n-v1` feature
|
|
120
|
+
@cached_property
|
|
121
|
+
def i18n(self) -> "RuyiPluginI18nAPI":
|
|
122
|
+
return RuyiPluginI18nAPI(self._phctx)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
class RuyiPluginI18nAPI:
|
|
126
|
+
def __init__(
|
|
127
|
+
self,
|
|
128
|
+
phctx: "PluginHostContext[SupportsGetOption, SupportsEvalFunction]",
|
|
129
|
+
) -> None:
|
|
130
|
+
self._phctx = phctx
|
|
131
|
+
|
|
132
|
+
@property
|
|
133
|
+
def locale(self) -> str:
|
|
134
|
+
return self._phctx.locale
|
|
135
|
+
|
|
136
|
+
def msg(self, msgid: str, locale: str | None = None) -> str | None:
|
|
137
|
+
if not self._phctx.message_store:
|
|
138
|
+
raise RuntimeError("message store is not available in this context")
|
|
139
|
+
locale = locale or self.locale
|
|
140
|
+
return self._phctx.message_store.get_message_template(msgid, locale)
|
|
141
|
+
|
|
102
142
|
|
|
103
143
|
def _ensure_str(message: RenderableType) -> None:
|
|
104
144
|
if not isinstance(message, str):
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import abc
|
|
2
|
+
from functools import cached_property
|
|
2
3
|
import os
|
|
3
4
|
import pathlib
|
|
4
5
|
from typing import (
|
|
@@ -6,7 +7,6 @@ from typing import (
|
|
|
6
7
|
Final,
|
|
7
8
|
Generic,
|
|
8
9
|
MutableMapping,
|
|
9
|
-
Protocol,
|
|
10
10
|
TypeVar,
|
|
11
11
|
TYPE_CHECKING,
|
|
12
12
|
)
|
|
@@ -17,24 +17,12 @@ if TYPE_CHECKING:
|
|
|
17
17
|
from ..log import RuyiLogger
|
|
18
18
|
from . import api
|
|
19
19
|
from . import paths
|
|
20
|
+
from .traits import SupportsEvalFunction, SupportsGetOption, SupportsMessageStore
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
ENV_PLUGIN_BACKEND_KEY: Final = "RUYI_PLUGIN_BACKEND"
|
|
23
24
|
|
|
24
25
|
|
|
25
|
-
class SupportsGetOption(Protocol):
|
|
26
|
-
def get_option(self, key: str) -> object: ...
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class SupportsEvalFunction(Protocol):
|
|
30
|
-
def eval_function(
|
|
31
|
-
self,
|
|
32
|
-
function: object,
|
|
33
|
-
*args: object,
|
|
34
|
-
**kwargs: object,
|
|
35
|
-
) -> object: ...
|
|
36
|
-
|
|
37
|
-
|
|
38
26
|
ModuleTy = TypeVar("ModuleTy", bound=SupportsGetOption, covariant=True)
|
|
39
27
|
EvalTy = TypeVar("EvalTy", bound=SupportsEvalFunction, covariant=True)
|
|
40
28
|
|
|
@@ -44,6 +32,9 @@ class PluginHostContext(Generic[ModuleTy, EvalTy], metaclass=abc.ABCMeta):
|
|
|
44
32
|
def new(
|
|
45
33
|
host_logger: RuyiLogger,
|
|
46
34
|
plugin_root: pathlib.Path,
|
|
35
|
+
*,
|
|
36
|
+
locale: str | None = None,
|
|
37
|
+
message_store_factory: Callable[[], SupportsMessageStore] | None = None,
|
|
47
38
|
) -> "PluginHostContext[SupportsGetOption, SupportsEvalFunction]":
|
|
48
39
|
plugin_backend = os.environ.get("RUYI_PLUGIN_BACKEND", "")
|
|
49
40
|
if not plugin_backend:
|
|
@@ -51,7 +42,12 @@ class PluginHostContext(Generic[ModuleTy, EvalTy], metaclass=abc.ABCMeta):
|
|
|
51
42
|
|
|
52
43
|
match plugin_backend:
|
|
53
44
|
case "unsandboxed":
|
|
54
|
-
return UnsandboxedPluginHostContext(
|
|
45
|
+
return UnsandboxedPluginHostContext(
|
|
46
|
+
host_logger,
|
|
47
|
+
plugin_root,
|
|
48
|
+
locale=locale,
|
|
49
|
+
message_store_factory=message_store_factory,
|
|
50
|
+
)
|
|
55
51
|
case _:
|
|
56
52
|
raise RuntimeError(f"unsupported plugin backend: {plugin_backend}")
|
|
57
53
|
|
|
@@ -59,6 +55,9 @@ class PluginHostContext(Generic[ModuleTy, EvalTy], metaclass=abc.ABCMeta):
|
|
|
59
55
|
self,
|
|
60
56
|
host_logger: RuyiLogger,
|
|
61
57
|
plugin_root: pathlib.Path,
|
|
58
|
+
*,
|
|
59
|
+
locale: str | None = None,
|
|
60
|
+
message_store_factory: Callable[[], SupportsMessageStore] | None = None,
|
|
62
61
|
) -> None:
|
|
63
62
|
self._host_logger = host_logger
|
|
64
63
|
self._plugin_root = plugin_root
|
|
@@ -69,6 +68,9 @@ class PluginHostContext(Generic[ModuleTy, EvalTy], metaclass=abc.ABCMeta):
|
|
|
69
68
|
# plugin id: {key: value}
|
|
70
69
|
self._value_cache: dict[str, dict[str, object]] = {}
|
|
71
70
|
|
|
71
|
+
self._locale = locale or ""
|
|
72
|
+
self._msg_store_factory = message_store_factory
|
|
73
|
+
|
|
72
74
|
@abc.abstractmethod
|
|
73
75
|
def make_loader(
|
|
74
76
|
self,
|
|
@@ -123,6 +125,19 @@ class PluginHostContext(Generic[ModuleTy, EvalTy], metaclass=abc.ABCMeta):
|
|
|
123
125
|
self._value_cache[plugin_id][key] = v
|
|
124
126
|
return v
|
|
125
127
|
|
|
128
|
+
def has_i18n_capability(self) -> bool:
|
|
129
|
+
return self._msg_store_factory is not None
|
|
130
|
+
|
|
131
|
+
@property
|
|
132
|
+
def locale(self) -> str:
|
|
133
|
+
return self._locale
|
|
134
|
+
|
|
135
|
+
@cached_property
|
|
136
|
+
def message_store(self) -> SupportsMessageStore | None:
|
|
137
|
+
if self._msg_store_factory is None:
|
|
138
|
+
return None
|
|
139
|
+
return self._msg_store_factory()
|
|
140
|
+
|
|
126
141
|
|
|
127
142
|
class BasePluginLoader(Generic[ModuleTy], metaclass=abc.ABCMeta):
|
|
128
143
|
"""Base class for plugin loaders loading from Ruyi repo.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from typing import Protocol
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class SupportsGetOption(Protocol):
|
|
5
|
+
def get_option(self, key: str) -> object: ...
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class SupportsEvalFunction(Protocol):
|
|
9
|
+
def eval_function(
|
|
10
|
+
self,
|
|
11
|
+
function: object,
|
|
12
|
+
*args: object,
|
|
13
|
+
**kwargs: object,
|
|
14
|
+
) -> object: ...
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class SupportsMessageStore(Protocol):
|
|
18
|
+
def get_message_template(self, msgid: str, lang_code: str) -> str | None: ...
|
|
19
|
+
|
|
20
|
+
def render_message(
|
|
21
|
+
self,
|
|
22
|
+
msgid: str,
|
|
23
|
+
lang_code: str,
|
|
24
|
+
params: dict[str, str],
|
|
25
|
+
add_trailing_newline: bool = False,
|
|
26
|
+
) -> str: ...
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# NOTE: This file is auto-generated. DO NOT EDIT!
|
|
2
|
+
# Update by running the __main__.py alongside this file
|
|
3
|
+
|
|
4
|
+
from typing import Final
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
RESOURCES: Final = {
|
|
8
|
+
"_ruyi_completion": b"eNqlVntP40YQ/z+fYmosCC0h5KpKd7Tmjoc5ogYSxUlPd4FaTryJV9i7kXdNLofoZ++M7TgmmOiutVDYncdvZuexOzsTGc19NoU4WfJabQc6/J6FS/BAxzyKmA++XAh4YLHiUoCcQqD1XB03mzOug2R8iPrNe67CZXLf9OIZwYVMs+Y4lONm5HHxnOqpwM13iHfoN935UgdSNEpS6MUVC+doEgLvgYHPleZiomEesyn/CtNYRqADBjLmMy68ENQk5nMNWoL3ILkPwosYTGQYcvJa0bn6iQAlI6YDLmYHECUIOQOZ6HmiEQhi5vOYTVIqT6HIgs/GyQyUjpkXIYjP5kz4qaJI+Q9emDCKinvaP3cv7LPhx0OUa0/htP/xvHvd69gD2x06tjuwr3uX7Y7tAFegmD6ARDHQLJpPecgUTNGHdu/8sObmEXFLEXEpO/gj6vvwWAP8+BRGI2h8A8N8fNVU48mAu7vfyVORatG3Fd/lQrAYQT8YhULMdBJn+lOe/gvlBIOuM9ctw6xH93SQ/UzHLfvjDC66w4FL7tycXtsonKsZP+ZIZnIifWaZ71PKxNOwRktJcfSCkvoOJinWnmq177BZGeJ1eitjSm7C25PdFrw72X0DrZOmzx6aIglDeEPUP4p9qsJCxV7X3X1XqYSxpwO84n/hdRao9qVjmXu3R61f90rUrE0swyifT9D5vjhX7l9232l3byoPuAr/qnFVwSnRrLpZJ8OGib8G3BYy9FFFuJ32DZXA2fDy0u5XSvS67ZsBipwP+073hUi5tKzWFqbrXNmdjmV8U4GxVWzY6/Vtx3Gd3ul5BeS2cgHzMQvoccN8XMjYV6PW3dPT/v5G1IRUMtZWvYI+9yaszMCUcNXwdCNkntLw2+HbjTzQt8JryHy51s/7c51dTG0pQZRa6x+oj/6+vb3bP4bdXRKIPD0JyPWUObKax3cvCyA3nDnccGBvr9Kq6zOKyZgRcBETo1wlxMn8Hn0gVrYl4HT/skGyaG1k6qh8UEKXeP//Ilc+YgdB0T4VR9nMe9VZqEj6dq/z+bvrulhvL+1iUyk2+NwrsGi9tX5TqU/d/sVZ3z7901nprSn/u4Poxf6RFjKf7/9rQ7XKfZTVsvkefrLgqLo2E4Fv6jplBY+FufKGW5YFLUSiFsjapFBtlPrArDa2qrdGUW+b9ZNe1uUHZNsFuwpECY+WOJV5SZhaoSQU20t4LYjZEFc0zw58QhP4UIYhznHjZTqxfFFBqRtBLRU+3QfIwrFkwfHBwgEHFzrIIYxQer6XaDlNxMSABSFywTVHVBwTkUECiO+hnqGCTCz0NL7eUhyARKPxgit2kAOSE/m8tvDwNmA4QxkNBFAyHYmMfCI1aAaL2QyHP4TCkYycIu0c58UhUvrKofI9WnrtTHwQXLKIQ6jQ7KumQviZfK4YlF6LcjGUPLumVoP09uTkxYF//wJg/FlP", # fmt: skip
|
|
9
|
+
"binfmt.conf.jinja": b"eNpNUrlu20AQ7f0VAwgCbECk+wQp06Zwl0oakUNyoD2UvQRC1r/7LUkhrkjuzjuHOzqrG2w6Wo0ddd4NOlLMmvhshAYfKE0a6SPPSkVDymxIHN68s+LS4WVH6ijOMYntm5XrSQO05fSTogidLLtNqu1PC3EvidXEFhR/faY4+Wx6CjIqyAJ5J+QHyFcbxvibuhGYznDgpN69xrdD1Wa68QwOvl6DvwbltPqefYYGuIKecwXQO5yEop0QzPAIjXeS1B0I0+qKvwhoqp7YbDjhFIY5zAtVFDOgAV4GTgF9NP8wd6JbgLKE9uW+X3ThYqy+gkRvivTHehBp/wD57yfx/b7MtfB3NTwfHVuhxwMcDemw3qHmBQXcH49QaeJUrRCb6GnigiNfR4v29VaifF8NFUYZ2GIk4EJ2Sa1s+/KhR3qguZtUQNT5EKRLW/JaVhSUlLSLP+Bgi3Y5UKnwp71WsfX4+gabO2pqqAtC/MKz0CcWuiaCqb6i92s8fCFhU7+2Er79gUes69nDf9gX9HfteA==", # fmt: skip
|
|
10
|
+
"locale/zh_CN/LC_MESSAGES/argparse.mo": b"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", # fmt: skip
|
|
11
|
+
"locale/zh_CN/LC_MESSAGES/ruyi.mo": b"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", # fmt: skip
|
|
12
|
+
"meson-cross.ini.jinja": b"eNptkMFqwzAQRO/6ioUQ0tJazaU9FPoLvfUUglDkNV4iS0IrB4eQf69k2ZRCbmI083Z3NvDDCJbO+Ck2YgMDsnfAmMYATWOiZ246sgi3G1zQXVT0PsH9/jYbq0GSI5BSzoBvxJYXzF6+f8j9ixTicCKnIyEfhYEv2GWaMRmzEyaEVZimWbltG+h8hDNeXyHo1AO5ClS6bSmRd9qqFSgp4cBPz7C9iwzJoQxZiHN4RaJrC7XYtkAd8JXnW7JwOI1kU5PH+FDwecsQsaNp4azWiiqknC+5EH3AmOpdgz6jSt5b02tyam5tuezR17rX/1Xys1b8aHLzN1oces9JDdr05PBYcrmHkrLkxqn0OqpOD2SvaxnRG2TOFdTax4d6GaBd5aRkcSd+ATx1t64=", # fmt: skip
|
|
13
|
+
"prompt.venv-created.en.txt.jinja": b"eNp1kTFvwkAMhff7FV7YStjbqWLqwMZSISSOO4dYJOfIvoRGiP9eXwR0KTedbOv5e8/bBmEkyYNvAZP9OHWYMpBC4gsEQZ8xVs598wCdn8CHTKPVgDIcJ1AeJFA6QTYh3/fCvVBp3+eIE2gQ6k0ylSG3Owli2h8p7VZ7iCQYMsv0Bj5FiPjUN3FKI5+L+EGGiZZ/zUPlroslUA06qTBnWNyc+4RaUJtHbdUL1vRTrPhWGYxtJDUgjHeW/5xX7mt270dPrT+25iTPszW3LV8KTe9z8+4c2LubuV6fILeb2ZrpMEUDLGDbFyHPWIE7VLhQbsDCjtOy8xFhvfFnhMzchsYbbU0tupLQBtUiDcKqc7GCdYPh/MoOzFA1iw2w4oezdaWujwiKhhpEymXNoP5kp02aZQjleFq5Xz21xdY=", # fmt: skip
|
|
14
|
+
"prompt.venv-created.zh_CN.txt.jinja": b"eNpdkc1O20AUhfd+itmwRDwEa54gyiINk2IR2ZUdoFEUycofTgkmqG0KSapWKEFeFDtARFzbSd6Fzp2xV36FXmNAiFnO3DnnO/cIawaLOzBHEPjg9LjZjy6H/OSXsFy4av4zGpLEGzacuY/GWFcPtCJ9NH6S3EeNUiX/QVZyW3kiRg4svzPvBPpmbDTEsMXXBp8HUWvIx3+SsMeCaXbDbyZv5ZNwFBk96FuoH82a4ptNclVaLqtHee2gKm/u0kKxIh8WKhRtJFQR1wGEBjhPYLWNTSKXiF7VNVWtkI26JMHYfmfBvJsUwL9mno9B4qYtlnfM7zDPgOkPPpgh7YvE1ieNluTPBFXQC/NECxdWrSQcShLB85y6Vnv1rNdTsBSEKrvIkjK8A4jWF9Bpi6WDpsgunFs4vcekqe/2TmGfElhMob2Iv67i9inO8cExCx6S0MxeK6paLu4VZIWU5DJNwi7zLLJDdVWRmD+Bs64IB5F7/vrr6YkUNVXXX37gsrIOMdhbtLSo33+z9nh3BeYMN8sCbGyUyaUD93Z8/AW3yMddtlwjeOTO+YWVFvAf3zNT3Q==", # fmt: skip
|
|
15
|
+
"ruyi-activate.bash.jinja": b"eNp9lN1u2kAQhe/3KSYGqiSVRUnuqIhEGqRESgLCBClKI2uxx/JKZh2t126o6yfqI/QuT9bxH2CHhBvEzpn1d2YO7sDCFxF4IkBYx5GGFUIcoQu/hPbBiMJYOQgrIfsq3giTO1okXKMBp54K17DikX/KOrAJY3C4lKEGFUsQGlyh0NHBhjEmPHgCo5tejq1r25o+zH9MzMyAEZ19M+D5O2gfJQP6oOOHYDzSZQVL9XSdE0aOEi96CD+79XHefPHlrGx8pUeenzNPMFaAulijwvEJpIWoAwoj1BAGLqBMhArlGqWGhCvBVwFGleqIcM3f0E2X4/lXO4Nn6tOxkhFoFSOQHSoAMbnoBFzRsLgGHgRFO1WrfnJszx8eb+zp7ZU9Gy+uh3QZ+YU9w/knL42MblNrbMv4+hIqXai2Z7HMfTQ7imLuvzQhZMID4eYDoKcV7bQhx8ei7tPewFRwdtF3MenLmOg/xbcGH8Bbgya7NXiPbg0+Jq9qNXhZL8rLyf3y0Jk9m0/vZosa94mAiXVQRUqG0sWIFpWvH1vEHbAw8KAWHLWwTA9a4anZMkYhL0VCKQww4Y3gtDPXpGBsCz9K050T+AO0hixj1aB2tllztzTiMhTVj62wT//MYVXbDwr7LAAHl5/28mHuhnw/vpuA2ctYe+4NB6WstpH2TMAgwsN9RveYXhco+Rphz4JxYpSN0iWA3vth1Psu3yNlMnfFqxtrfHk7qURmO6ONpBFCSl8kYtvsvv2d0+5g/8ryquztHzTke2mmRPwHax2J0Q==", # fmt: skip
|
|
16
|
+
"ruyi-activate.fish.jinja": b"eNqNVF1P2zAUfc+vuLhhwENAG29Im8REJyoBRS1DQtMU3OSWWkrszrGjsY5ftJ+wN37ZbOejcZdW5KX19bnH514f3wHcLVgBc5Yh5LpQMEMohJYJpjCXIjc7xeIMHqsYzBg/kfqZRTRRrKQKj+3+YzCAZ6EhoZwLBVJzYApSJjFR2XMQsDkoNNwkjAnsfQRSsRGI6Dp2TAIwHyYLAQcPhs3Jqc9VVmSRSLZUZxA20YPDQlGlK/mc5ngEn959cDQSlZYcTk8D5GkQzDU3ggUHJz7FRj5EKZDhT6bcBpRMKk0zQG7+CZ4jV0B52rApAVzI3ACKBWYerBI/MMgCFYgs9ThKKhmdZVg4lGmHBUU/IJ58fRjF46uL+Pb87tJt2s/tPv0EG4RwFwj7KFzF2w76MppexreT8fXtXTy+H04mo4vhds6daEPf9LVwh9gexqb22JoiXhr7LFWLtl8HjvAGUNLPCW/i3y3HNslrVl27K/1+eHPfG6x70ba3tjWVT+W3998rI3PBUxOW2noMSXviAKaYzaNmby/oVb1h0Faj0zkAza0kJiVmWFLPWpvW9nUEQeOqthhYrTqL38bU8PKyxvnOgtD5y7MmCdv0EzMZSI0JVvu2N+um3ZxfDyHaf/lfQt1PT0kFb+Ss9iPArMDd+YczWrgJAGtJR1UuT40Wk9tOoehXV3h8MZqef74a1kzNO57S0k4dhESbXnPPcu2FAS0cpl1vt5xn6i5Xf4qX02v3jsR6OtWzUMxdMKOm1ETkOa2N3to5s+MprtFh9Rt0eMdaLbVyJJtvxs7miAN5/TOx4zLcvIfXv0C6VBPTbyF3qFxKLJkw602l7iiCdjKHa7nE2OJ4i1Yh2RPjNDshBk82pW+/GX8AeL7vm35d7xD3Kv8BeY5Dlw==", # fmt: skip
|
|
17
|
+
"ruyi-cache.toml.jinja": b"eNptUs1uhCAYvPsUX2nMtknjoccmve0e9tK9eDOGsIJK1r8CmhjjuxcUF6uexG+GmWHgFX5u4eULwpxLSHnBQH9LUpGMUbj3INqeB3C+GRpcztfwxfOihCQ5o7j7jL3BB57CLytbfOcV+ONz+Q1oGBwyjkhzWUU13R/tvkbUxhMbEqs6AzjxYINOZmkt4PEBHWjJDR5wxUr59q5VtPFDO9oMnTH3ZnezX+P/k6xFFREZU3Iltkq0gFY/9lRdF0lOeGXOSLlYHKPTFjnFUwo3TguSySP+BFj6XFMXIQfLXoq6VijW0XbTIz0LzYr7O9DiWZJgXklFigLrqJP0ZuaEN8Ch7LPobbtJSXHJFKFEEVyS5rjmHQvZwlHsUSZXpzR/S7PT3WDVNvoRuxpWU9epy/cHatoHPQ==", # fmt: skip
|
|
18
|
+
"ruyi-venv.toml.jinja": b"eNqtkOFqwyAQx7/7FBIIbWEN7AH2JEHCYUwqbTxRN1ZC3n0atQlpSxnbN/V+3v3uX3NUnewZ0QY7eRH0gxbjSPNtmgoyllR21F6tQXT0WE4knyObb5E9UqFaz3uM1INw0IIDRr6EsRKV//JOQscBuEGqz32Tmb0+zM2N0NjINovUu/SwY/MEDk70aK5LPb8kQMEglmK4pcKikGrpIZWTehQL9nHvrFcXac/GSxcsELf1Kg38DL2wVWIYCRPWyz1pc/Cjw6Als+1UMXxewKEJvI1zPdKhoQ5ML1wDhp/eqKZSPf9VSScGu48BP9DOeBWSWfUNwdzvolfWQaR8tcK3M3Dvv1VeU7PnI9EAsb8rOcQLP4FUv4t1++1Vrjf+X4L9AYyLQa0=", # fmt: skip
|
|
19
|
+
"toolchain.cmake.jinja": b"eNqFkVFrwjAUhd/7Ky6IMGF274M9dG2cZWlT0joUhJDVaIuajKQTR+l/X6zOWccwb+F+5+Scmx5MjIBNuRaPTs/pQb7lawGu68Lc3g5nGPiR94pYRgj2x14Ys1GI0VNdw07IHdNKVdA0D5VSm7zgpXSPFnOn7g+hXIL5Mi3Tb64MwzjNPIxZQtEonB4Mf9CmOcmFXFiHs9LGchwjqrujQTpLMxSx2IsQ4FJ+7gd/hwklPkpTQsH6f2iVC2OUti9csj7zSZTYVi2V59fj6bQL7PctUfcv+w1tzF/NKIwDRgnJWOJlY+iUa5UX1YzgOi9gaXMVgi+ENsDlwn7Ku+a6FAZKCVUhoOJ6JSqr3JVaya2Q1X1XbfutNN+eBYUyHfzffCwiATrs6oV6EcToDdHBDRiHz9SjMyAxnt1iw9jHkwCd2G+4PsQk", # fmt: skip
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
TEMPLATE_NAME_MAP: Final = {
|
|
23
|
+
"binfmt.conf": "binfmt.conf.jinja",
|
|
24
|
+
"meson-cross.ini": "meson-cross.ini.jinja",
|
|
25
|
+
"prompt.venv-created.en.txt": "prompt.venv-created.en.txt.jinja",
|
|
26
|
+
"prompt.venv-created.zh_CN.txt": "prompt.venv-created.zh_CN.txt.jinja",
|
|
27
|
+
"ruyi-activate.bash": "ruyi-activate.bash.jinja",
|
|
28
|
+
"ruyi-activate.fish": "ruyi-activate.fish.jinja",
|
|
29
|
+
"ruyi-cache.toml": "ruyi-cache.toml.jinja",
|
|
30
|
+
"ruyi-venv.toml": "ruyi-venv.toml.jinja",
|
|
31
|
+
"toolchain.cmake": "toolchain.cmake.jinja",
|
|
32
|
+
}
|
|
@@ -26,7 +26,7 @@ def do_list(
|
|
|
26
26
|
logger.F(_("no filter specified for list operation"))
|
|
27
27
|
logger.I(
|
|
28
28
|
_(
|
|
29
|
-
"for the old behavior of listing all packages, try [yellow]ruyi list --
|
|
29
|
+
"for the old behavior of listing all packages, try [yellow]ruyi list --all[/]"
|
|
30
30
|
)
|
|
31
31
|
)
|
|
32
32
|
return 1
|
|
@@ -27,6 +27,14 @@ class ListCommand(
|
|
|
27
27
|
help=_("Also show details for every package"),
|
|
28
28
|
)
|
|
29
29
|
|
|
30
|
+
p.add_argument(
|
|
31
|
+
"--all",
|
|
32
|
+
action=ListFilterAction,
|
|
33
|
+
nargs=0,
|
|
34
|
+
dest="filters",
|
|
35
|
+
help=_("Match and show all packages"),
|
|
36
|
+
)
|
|
37
|
+
|
|
30
38
|
# filter expressions
|
|
31
39
|
p.add_argument(
|
|
32
40
|
"--is-installed",
|
|
@@ -19,6 +19,7 @@ class ListFilterOpKind(enum.Enum):
|
|
|
19
19
|
NAME_CONTAINS = 3
|
|
20
20
|
RELATED_TO_ENTITY = 4
|
|
21
21
|
IS_INSTALLED = 5
|
|
22
|
+
ALL = 6
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
class ListFilterOp(NamedTuple):
|
|
@@ -35,6 +36,8 @@ class ListFilterExecCtx(NamedTuple):
|
|
|
35
36
|
|
|
36
37
|
def _execute_filter_op(op: ListFilterOp, ctx: ListFilterExecCtx) -> bool:
|
|
37
38
|
match op.op:
|
|
39
|
+
case ListFilterOpKind.ALL:
|
|
40
|
+
return True
|
|
38
41
|
case ListFilterOpKind.CATEGORY_CONTAINS:
|
|
39
42
|
return op.arg in ctx.category
|
|
40
43
|
case ListFilterOpKind.CATEGORY_IS:
|
|
@@ -102,9 +105,9 @@ class ListFilterAction(ArgcompleteAction):
|
|
|
102
105
|
help: str | None = None,
|
|
103
106
|
metavar: str | tuple[str, ...] | None = None,
|
|
104
107
|
) -> None:
|
|
105
|
-
# for now let's just support unary filter ops
|
|
106
|
-
if nargs
|
|
107
|
-
raise ValueError("nargs
|
|
108
|
+
# for now let's just support argument-less and unary filter ops
|
|
109
|
+
if nargs not in (None, 0, 1):
|
|
110
|
+
raise ValueError("nargs not supported")
|
|
108
111
|
if const is not None:
|
|
109
112
|
raise ValueError("const not supported")
|
|
110
113
|
if default is not None:
|
|
@@ -143,6 +146,8 @@ class ListFilterAction(ArgcompleteAction):
|
|
|
143
146
|
self.filter_op_kind = ListFilterOpKind.RELATED_TO_ENTITY
|
|
144
147
|
case "is-installed":
|
|
145
148
|
self.filter_op_kind = ListFilterOpKind.IS_INSTALLED
|
|
149
|
+
case "all":
|
|
150
|
+
self.filter_op_kind = ListFilterOpKind.ALL
|
|
146
151
|
case _:
|
|
147
152
|
# should never happen
|
|
148
153
|
self.filter_op_kind = ListFilterOpKind.UNKNOWN
|
|
@@ -159,6 +164,11 @@ class ListFilterAction(ArgcompleteAction):
|
|
|
159
164
|
dest = ListFilter()
|
|
160
165
|
setattr(namespace, self.dest, dest)
|
|
161
166
|
|
|
167
|
+
if self.filter_op_kind == ListFilterOpKind.ALL:
|
|
168
|
+
# "--all" takes no argument
|
|
169
|
+
dest.append(ListFilterOp(ListFilterOpKind.ALL, ""))
|
|
170
|
+
return
|
|
171
|
+
|
|
162
172
|
val: str
|
|
163
173
|
if isinstance(values, str):
|
|
164
174
|
val = values
|
|
@@ -14,7 +14,8 @@ from typing import (
|
|
|
14
14
|
if TYPE_CHECKING:
|
|
15
15
|
from typing_extensions import NotRequired
|
|
16
16
|
|
|
17
|
-
from ..pluginhost.ctx import PluginHostContext
|
|
17
|
+
from ..pluginhost.ctx import PluginHostContext
|
|
18
|
+
from ..pluginhost.traits import SupportsEvalFunction
|
|
18
19
|
from .entity_provider import BaseEntityProvider
|
|
19
20
|
from .pkg_manifest import EmulatorFlavor
|
|
20
21
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import glob
|
|
2
|
+
from functools import cached_property
|
|
2
3
|
import itertools
|
|
3
4
|
import os.path
|
|
4
5
|
import pathlib
|
|
@@ -226,20 +227,18 @@ class MetadataRepo(ProvidesPackageManifests):
|
|
|
226
227
|
|
|
227
228
|
self._cfg: RepoConfig | None = None
|
|
228
229
|
self._cfg_initialized = False
|
|
229
|
-
self._messages: RepoMessageStore | None = None
|
|
230
230
|
self._pkgs: dict[str, dict[str, BoundPackageManifest]] = {}
|
|
231
231
|
self._categories: dict[str, dict[str, dict[str, BoundPackageManifest]]] = {}
|
|
232
232
|
self._slug_cache: dict[str, BoundPackageManifest] = {}
|
|
233
233
|
self._supported_arches: set[str] | None = None
|
|
234
234
|
self._arch_profile_stores: dict[str, ArchProfileStore] = {}
|
|
235
235
|
self._news_cache: NewsItemStore | None = None
|
|
236
|
-
self.
|
|
236
|
+
self._plugin_host_ctx = PluginHostContext.new(
|
|
237
237
|
gc.logger,
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
238
|
+
self.plugin_root,
|
|
239
|
+
locale=gc.lang_code,
|
|
240
|
+
message_store_factory=lambda: self.messages,
|
|
241
241
|
)
|
|
242
|
-
self._plugin_host_ctx = PluginHostContext.new(gc.logger, self.plugin_root)
|
|
243
242
|
self._plugin_fn_evaluator = self._plugin_host_ctx.make_evaluator()
|
|
244
243
|
|
|
245
244
|
@property
|
|
@@ -379,11 +378,8 @@ class MetadataRepo(ProvidesPackageManifests):
|
|
|
379
378
|
self._cfg = RepoConfig.from_object(obj)
|
|
380
379
|
return self._cfg
|
|
381
380
|
|
|
382
|
-
@
|
|
381
|
+
@cached_property
|
|
383
382
|
def messages(self) -> RepoMessageStore:
|
|
384
|
-
if self._messages is not None:
|
|
385
|
-
return self._messages
|
|
386
|
-
|
|
387
383
|
self.ensure_git_repo()
|
|
388
384
|
|
|
389
385
|
obj: dict[str, object] = {}
|
|
@@ -393,8 +389,7 @@ class MetadataRepo(ProvidesPackageManifests):
|
|
|
393
389
|
except FileNotFoundError:
|
|
394
390
|
pass
|
|
395
391
|
|
|
396
|
-
|
|
397
|
-
return self._messages
|
|
392
|
+
return RepoMessageStore.from_object(obj)
|
|
398
393
|
|
|
399
394
|
def iter_pkg_manifests(
|
|
400
395
|
self,
|
|
@@ -590,7 +585,7 @@ class MetadataRepo(ProvidesPackageManifests):
|
|
|
590
585
|
)
|
|
591
586
|
)
|
|
592
587
|
|
|
593
|
-
def
|
|
588
|
+
def _ensure_news_cache(
|
|
594
589
|
self,
|
|
595
590
|
ensure_repo: bool = True,
|
|
596
591
|
) -> None:
|
|
@@ -629,7 +624,7 @@ class MetadataRepo(ProvidesPackageManifests):
|
|
|
629
624
|
ensure_repo: bool = True,
|
|
630
625
|
) -> NewsItemStore:
|
|
631
626
|
if self._news_cache is None:
|
|
632
|
-
self.
|
|
627
|
+
self._ensure_news_cache(ensure_repo=ensure_repo)
|
|
633
628
|
assert self._news_cache is not None
|
|
634
629
|
return self._news_cache
|
|
635
630
|
|
|
@@ -658,10 +653,15 @@ class MetadataRepo(ProvidesPackageManifests):
|
|
|
658
653
|
ret = 1
|
|
659
654
|
return ret
|
|
660
655
|
|
|
661
|
-
@
|
|
656
|
+
@cached_property
|
|
662
657
|
def entity_store(self) -> EntityStore:
|
|
663
658
|
"""Get the entity store for this repository."""
|
|
664
|
-
return
|
|
659
|
+
return EntityStore(
|
|
660
|
+
self.logger,
|
|
661
|
+
FSEntityProvider(self.logger, pathlib.Path(self.root) / "entities"),
|
|
662
|
+
MetadataRepoEntityProvider(self),
|
|
663
|
+
ProfileEntityProvider(self),
|
|
664
|
+
)
|
|
665
665
|
|
|
666
666
|
def get_telemetry_api_url(self, scope: TelemetryScopeConfig) -> str | None:
|
|
667
667
|
# do not clone the metadata repo if it is absent, in case the user
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# NOTE: This file is auto-generated. DO NOT EDIT!
|
|
2
|
-
# Update by running the __main__.py alongside this file
|
|
3
|
-
|
|
4
|
-
from typing import Final
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
RESOURCES: Final = {
|
|
8
|
-
"_ruyi_completion": b"eNqlVntP40YQ/z+fYmosCC0h5KpKd7Tmjoc5ogYSxUlPd4FaTryJV9i7kXdNLofoZ++M7TgmmOiutVDYncdvZuexOzsTGc19NoU4WfJabQc6/J6FS/BAxzyKmA++XAh4YLHiUoCcQqD1XB03mzOug2R8iPrNe67CZXLf9OIZwYVMs+Y4lONm5HHxnOqpwM13iHfoN935UgdSNEpS6MUVC+doEgLvgYHPleZiomEesyn/CtNYRqADBjLmMy68ENQk5nMNWoL3ILkPwosYTGQYcvJa0bn6iQAlI6YDLmYHECUIOQOZ6HmiEQhi5vOYTVIqT6HIgs/GyQyUjpkXIYjP5kz4qaJI+Q9emDCKinvaP3cv7LPhx0OUa0/htP/xvHvd69gD2x06tjuwr3uX7Y7tAFegmD6ARDHQLJpPecgUTNGHdu/8sObmEXFLEXEpO/gj6vvwWAP8+BRGI2h8A8N8fNVU48mAu7vfyVORatG3Fd/lQrAYQT8YhULMdBJn+lOe/gvlBIOuM9ctw6xH93SQ/UzHLfvjDC66w4FL7tycXtsonKsZP+ZIZnIifWaZ71PKxNOwRktJcfSCkvoOJinWnmq177BZGeJ1eitjSm7C25PdFrw72X0DrZOmzx6aIglDeEPUP4p9qsJCxV7X3X1XqYSxpwO84n/hdRao9qVjmXu3R61f90rUrE0swyifT9D5vjhX7l9232l3byoPuAr/qnFVwSnRrLpZJ8OGib8G3BYy9FFFuJ32DZXA2fDy0u5XSvS67ZsBipwP+073hUi5tKzWFqbrXNmdjmV8U4GxVWzY6/Vtx3Gd3ul5BeS2cgHzMQvoccN8XMjYV6PW3dPT/v5G1IRUMtZWvYI+9yaszMCUcNXwdCNkntLw2+HbjTzQt8JryHy51s/7c51dTG0pQZRa6x+oj/6+vb3bP4bdXRKIPD0JyPWUObKax3cvCyA3nDnccGBvr9Kq6zOKyZgRcBETo1wlxMn8Hn0gVrYl4HT/skGyaG1k6qh8UEKXeP//Ilc+YgdB0T4VR9nMe9VZqEj6dq/z+bvrulhvL+1iUyk2+NwrsGi9tX5TqU/d/sVZ3z7901nprSn/u4Poxf6RFjKf7/9rQ7XKfZTVsvkefrLgqLo2E4Fv6jplBY+FufKGW5YFLUSiFsjapFBtlPrArDa2qrdGUW+b9ZNe1uUHZNsFuwpECY+WOJV5SZhaoSQU20t4LYjZEFc0zw58QhP4UIYhznHjZTqxfFFBqRtBLRU+3QfIwrFkwfHBwgEHFzrIIYxQer6XaDlNxMSABSFywTVHVBwTkUECiO+hnqGCTCz0NL7eUhyARKPxgit2kAOSE/m8tvDwNmA4QxkNBFAyHYmMfCI1aAaL2QyHP4TCkYycIu0c58UhUvrKofI9WnrtTHwQXLKIQ6jQ7KumQviZfK4YlF6LcjGUPLumVoP09uTkxYF//wJg/FlP", # fmt: skip
|
|
9
|
-
"binfmt.conf.jinja": b"eNpNUrlu20AQ7f0VAwgCbECk+wQp06Zwl0oakUNyoD2UvQRC1r/7LUkhrkjuzjuHOzqrG2w6Wo0ddd4NOlLMmvhshAYfKE0a6SPPSkVDymxIHN68s+LS4WVH6ijOMYntm5XrSQO05fSTogidLLtNqu1PC3EvidXEFhR/faY4+Wx6CjIqyAJ5J+QHyFcbxvibuhGYznDgpN69xrdD1Wa68QwOvl6DvwbltPqefYYGuIKecwXQO5yEop0QzPAIjXeS1B0I0+qKvwhoqp7YbDjhFIY5zAtVFDOgAV4GTgF9NP8wd6JbgLKE9uW+X3ThYqy+gkRvivTHehBp/wD57yfx/b7MtfB3NTwfHVuhxwMcDemw3qHmBQXcH49QaeJUrRCb6GnigiNfR4v29VaifF8NFUYZ2GIk4EJ2Sa1s+/KhR3qguZtUQNT5EKRLW/JaVhSUlLSLP+Bgi3Y5UKnwp71WsfX4+gabO2pqqAtC/MKz0CcWuiaCqb6i92s8fCFhU7+2Er79gUes69nDf9gX9HfteA==", # fmt: skip
|
|
10
|
-
"locale/zh_CN/LC_MESSAGES/argparse.mo": b"eNqFldtPFFcYwMeCt92mD7ZW2/RyaqWw6tBlWytZvKBILQ23ItGmD7XD7tndsbMz65wZAV+KIioigqlENHhBQdGKGE10gaUkpu0f0PStSZuYmdndl/LePtjvzJllFwQl2fzOnO873/lu5+OvVfl9HPx9AL934Ld+CTfnb9MrHLcGyANfBVYC3wU2AN8HxoCfAnuBbwF/BRYC/wZuAC7PA5tAXx7b3w/cCvwhj8kTwPeAyTxmd1k+x62mfuQzf/z5zLf9wE+ArcCvgKOO/BnwQ+r7UqZXDlwObAK+ATwI/Ijet5T5exPoBv4GLAL+vpTZ+Q+4Gbh2Gce9DaxdxuyIwBuQk0PO/uoVHPca0AtEwB0OvwOWAY8C3wROAQuAfwA9wH9XsHjXr2R5qFvJ4m0Gvg7sA64F3nb4BLgK+Kfz/Q9wHc2nC3IC3AD8FohdLK5fXCwOw8X0lkCQy+h9bla3jW6Wn1I3y/c3wJU0n27mR7ubxTHoZvV54mZ1f+boraFGUFEQhwRd0vyoILP0EA9XUBTBQlCUwx7ih4+YqtAVwqqqqFQ1igkRwthDXDnSZkGV4cg8uRBtEsO6ohOkxDRRkamYrTwEBRRdCqKooAUi9BQlJh7CCWpYj2JZQ+v4dahZ1CIoqgQxKlCzkoKizPKALEQxdSDn3qxe4XOKhUgkKIhjKg4IGg5yAUEu1MA7LFPlkChhR49atEMGewElGhXkINWICSrB6mLGFDkkiQENEuEEjIimsrSQxaXEFuOWGA6AFVijjNMLbuaoChqSsEAgABkvcAjEUWVR6ZxdMSwrKmyCFHwUNZTNtcqJ8mFBEsGJIq01BnEj+NQxzZC98GQ1AhFFDORKUBFsKQSjkKpEYZspENpni57ZBE3R2oRRq6KjKBbsegckMEI0j7rjBRZlBfyWJKUZArEbJxsE4Wi4SghpkWzUhKYVSqjiQ7oI0XNOWQqzXTq/xGyfcDGFiHQlSDl1IRGlGdEXoQrRQsgSVgk1J+vRJqwi2kG4RdSYmhYBwxEsxZDTtzlyvcnpOMJRd0MKjYm2TdZxQcWzbtvto8vZwj7Xerr8vaw0y4h1L5rbxqxGNIf+uenUZYhaCcviEdpLmauZQeqxH3H1qnIQLuWrgvw+Fq0f1TfUfVlZ0Yj2VTbsraqrdTXgmKJqfA0Ji0F+lx4mfKPiR5U1O6uqy3fu3t1QuXevq76uka9QsUAd53dDpv3I5/V9xntL+JItyOfz+3wbvaVeLyjyDfiwSBbV28z0quFV8I2qIBNJ0Ojc2r+zdg/6WseqLqKtzYIcbrHX5SIJCKRYCBQH5O1wSg7rdmRHIge+gMMHKmpnN/lGLERzJWhrdXW5JBYrani7q17SVUHiP1fUKKRIjtmfZFtJGWLLbd4yV01VTWU2TyXFXleFImuQVL4R3pUfabhF+zgmCaJcBq+ClkjbpmshvjSrRyMKYZWvlANK0C5vaZOoufZgGau0QfldrX60S2jCEvIVl2yBK7iZxKn0ZH/q3tBM4lLOoJ9JdOaOehDOjnNYp89fTI2N2ScWmPewnxq9aZ47PV8h3daZHhw3R/vNgRFr9JYx3mlrzM58s2cs1T5lnhlPd3Qb8dNz5n6BiqyRQTPRk7x03Ow5ZvXdp/8BOGf5kpHPtJ62DTyn97Ttsvn4Qer6T2aiPXl+hLMuXLMe9lmdP5qJNls/O/RB1XY3M/fNc1PG5JCtNGfuzzdpnniQvHMU3M6EfyF596YRf0CNES59/bg1cJWOGiN+h/np7KVOPjTvnzPibQsJhi4tIDC7+7Jb5vRUsm/YmDhh9f8MacskSrVD7DsF/mQnttmWsEPLDOxZFXDZ6rqdK4N+MSbP5o4CcHw0o9f54qNnrGMjrMhW+0PQsfrHcqf3TOLqy8wb8W4wYMTP0oyxmKzeUdovU9N2sqc70oOTRuKa2TFsq3Q8gvPGeBeky+k/u2KZnptfLKbCGVPdyal7TiYhgcmhieRIlzlBuy/ZecoauGv2PDbHH6Xb2syTE45GamzYjN8zT982pgeto2NZsTnay5pljnvG5LAR72J3OL1w+Qor5GLNYg3cSV4dBmnq1g3rSq95cWT+tKbPOZv42SQ6qYNnnho7MfuCmFEIG1qevvD/AXszg6A=", # fmt: skip
|
|
11
|
-
"locale/zh_CN/LC_MESSAGES/ruyi.mo": b"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", # fmt: skip
|
|
12
|
-
"meson-cross.ini.jinja": b"eNptkMFqwzAQRO/6ioUQ0tJazaU9FPoLvfUUglDkNV4iS0IrB4eQf69k2ZRCbmI083Z3NvDDCJbO+Ck2YgMDsnfAmMYATWOiZ246sgi3G1zQXVT0PsH9/jYbq0GSI5BSzoBvxJYXzF6+f8j9ixTicCKnIyEfhYEv2GWaMRmzEyaEVZimWbltG+h8hDNeXyHo1AO5ClS6bSmRd9qqFSgp4cBPz7C9iwzJoQxZiHN4RaJrC7XYtkAd8JXnW7JwOI1kU5PH+FDwecsQsaNp4azWiiqknC+5EH3AmOpdgz6jSt5b02tyam5tuezR17rX/1Xys1b8aHLzN1oces9JDdr05PBYcrmHkrLkxqn0OqpOD2SvaxnRG2TOFdTax4d6GaBd5aRkcSd+ATx1t64=", # fmt: skip
|
|
13
|
-
"prompt.venv-created.txt.jinja": b"eNp1kTFvwkAMhff7FV7YStjbqWLqwMZSISSOO4dYJOfIvoRGiP9eXwR0KTedbOv5e8/bBmEkyYNvAZP9OHWYMpBC4gsEQZ8xVs598wCdn8CHTKPVgDIcJ1AeJFA6QTYh3/fCvVBp3+eIE2gQ6k0ylSG3Owli2h8p7VZ7iCQYMsv0Bj5FiPjUN3FKI5+L+EGGiZZ/zUPlroslUA06qTBnWNyc+4RaUJtHbdUL1vRTrPhWGYxtJDUgjHeW/5xX7mt270dPrT+25iTPszW3LV8KTe9z8+4c2LubuV6fILeb2ZrpMEUDLGDbFyHPWIE7VLhQbsDCjtOy8xFhvfFnhMzchsYbbU0tupLQBtUiDcKqc7GCdYPh/MoOzFA1iw2w4oezdaWujwiKhhpEymXNoP5kp02aZQjleFq5Xz21xdY=", # fmt: skip
|
|
14
|
-
"ruyi-activate.bash.jinja": b"eNp9lN1u2kAQhe/3KSYGqiSVRUnuqIhEGqRESgLCBClKI2uxx/JKZh2t126o6yfqI/QuT9bxH2CHhBvEzpn1d2YO7sDCFxF4IkBYx5GGFUIcoQu/hPbBiMJYOQgrIfsq3giTO1okXKMBp54K17DikX/KOrAJY3C4lKEGFUsQGlyh0NHBhjEmPHgCo5tejq1r25o+zH9MzMyAEZ19M+D5O2gfJQP6oOOHYDzSZQVL9XSdE0aOEi96CD+79XHefPHlrGx8pUeenzNPMFaAulijwvEJpIWoAwoj1BAGLqBMhArlGqWGhCvBVwFGleqIcM3f0E2X4/lXO4Nn6tOxkhFoFSOQHSoAMbnoBFzRsLgGHgRFO1WrfnJszx8eb+zp7ZU9Gy+uh3QZ+YU9w/knL42MblNrbMv4+hIqXai2Z7HMfTQ7imLuvzQhZMID4eYDoKcV7bQhx8ei7tPewFRwdtF3MenLmOg/xbcGH8Bbgya7NXiPbg0+Jq9qNXhZL8rLyf3y0Jk9m0/vZosa94mAiXVQRUqG0sWIFpWvH1vEHbAw8KAWHLWwTA9a4anZMkYhL0VCKQww4Y3gtDPXpGBsCz9K050T+AO0hixj1aB2tllztzTiMhTVj62wT//MYVXbDwr7LAAHl5/28mHuhnw/vpuA2ctYe+4NB6WstpH2TMAgwsN9RveYXhco+Rphz4JxYpSN0iWA3vth1Psu3yNlMnfFqxtrfHk7qURmO6ONpBFCSl8kYtvsvv2d0+5g/8ryquztHzTke2mmRPwHax2J0Q==", # fmt: skip
|
|
15
|
-
"ruyi-cache.toml.jinja": b"eNptUs1uhCAYvPsUX2nMtknjoccmve0e9tK9eDOGsIJK1r8CmhjjuxcUF6uexG+GmWHgFX5u4eULwpxLSHnBQH9LUpGMUbj3INqeB3C+GRpcztfwxfOihCQ5o7j7jL3BB57CLytbfOcV+ONz+Q1oGBwyjkhzWUU13R/tvkbUxhMbEqs6AzjxYINOZmkt4PEBHWjJDR5wxUr59q5VtPFDO9oMnTH3ZnezX+P/k6xFFREZU3Iltkq0gFY/9lRdF0lOeGXOSLlYHKPTFjnFUwo3TguSySP+BFj6XFMXIQfLXoq6VijW0XbTIz0LzYr7O9DiWZJgXklFigLrqJP0ZuaEN8Ch7LPobbtJSXHJFKFEEVyS5rjmHQvZwlHsUSZXpzR/S7PT3WDVNvoRuxpWU9epy/cHatoHPQ==", # fmt: skip
|
|
16
|
-
"ruyi-venv.toml.jinja": b"eNqtkOFqwyAQx7/7FBIIbWEN7AH2JEHCYUwqbTxRN1ZC3n0atQlpSxnbN/V+3v3uX3NUnewZ0QY7eRH0gxbjSPNtmgoyllR21F6tQXT0WE4knyObb5E9UqFaz3uM1INw0IIDRr6EsRKV//JOQscBuEGqz32Tmb0+zM2N0NjINovUu/SwY/MEDk70aK5LPb8kQMEglmK4pcKikGrpIZWTehQL9nHvrFcXac/GSxcsELf1Kg38DL2wVWIYCRPWyz1pc/Cjw6Als+1UMXxewKEJvI1zPdKhoQ5ML1wDhp/eqKZSPf9VSScGu48BP9DOeBWSWfUNwdzvolfWQaR8tcK3M3Dvv1VeU7PnI9EAsb8rOcQLP4FUv4t1++1Vrjf+X4L9AYyLQa0=", # fmt: skip
|
|
17
|
-
"toolchain.cmake.jinja": b"eNqFkVFrwjAUhd/7Ky6IMGF274M9dG2cZWlT0joUhJDVaIuajKQTR+l/X6zOWccwb+F+5+Scmx5MjIBNuRaPTs/pQb7lawGu68Lc3g5nGPiR94pYRgj2x14Ys1GI0VNdw07IHdNKVdA0D5VSm7zgpXSPFnOn7g+hXIL5Mi3Tb64MwzjNPIxZQtEonB4Mf9CmOcmFXFiHs9LGchwjqrujQTpLMxSx2IsQ4FJ+7gd/hwklPkpTQsH6f2iVC2OUti9csj7zSZTYVi2V59fj6bQL7PctUfcv+w1tzF/NKIwDRgnJWOJlY+iUa5UX1YzgOi9gaXMVgi+ENsDlwn7Ku+a6FAZKCVUhoOJ6JSqr3JVaya2Q1X1XbfutNN+eBYUyHfzffCwiATrs6oV6EcToDdHBDRiHz9SjMyAxnt1iw9jHkwCd2G+4PsQk", # fmt: skip
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
TEMPLATE_NAME_MAP: Final = {
|
|
21
|
-
"binfmt.conf": "binfmt.conf.jinja",
|
|
22
|
-
"meson-cross.ini": "meson-cross.ini.jinja",
|
|
23
|
-
"prompt.venv-created.txt": "prompt.venv-created.txt.jinja",
|
|
24
|
-
"ruyi-activate.bash": "ruyi-activate.bash.jinja",
|
|
25
|
-
"ruyi-cache.toml": "ruyi-cache.toml.jinja",
|
|
26
|
-
"ruyi-venv.toml": "ruyi-venv.toml.jinja",
|
|
27
|
-
"toolchain.cmake": "toolchain.cmake.jinja",
|
|
28
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|