omdev 0.0.0.dev355__py3-none-any.whl → 0.0.0.dev357__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.
- omdev/.manifests.json +1 -1
- omdev/ci/docker/dataserver.py +1 -1
- omdev/ci/docker/repositories.py +1 -1
- omdev/cli/clicli.py +9 -2
- omdev/interp/cli.py +3 -0
- omdev/interp/default.py +3 -0
- omdev/interp/inject.py +5 -0
- omdev/interp/inspect.py +3 -0
- omdev/interp/providers/inject.py +3 -0
- omdev/interp/providers/running.py +3 -0
- omdev/interp/providers/standalone.py +3 -0
- omdev/interp/pyenv/inject.py +3 -0
- omdev/interp/pyenv/provider.py +3 -0
- omdev/interp/pyenv/pyenv.py +3 -0
- omdev/interp/resolvers.py +3 -0
- omdev/interp/uv/inject.py +13 -1
- omdev/interp/uv/provider.py +22 -3
- omdev/interp/uv/uv.py +3 -0
- omdev/magic/magic.py +3 -0
- omdev/magic/prepare.py +3 -0
- omdev/magic/styles.py +3 -0
- omdev/precheck/git.py +1 -1
- omdev/precheck/imports.py +3 -3
- omdev/precheck/lite.py +1 -1
- omdev/precheck/manifests.py +1 -1
- omdev/precheck/scripts.py +1 -1
- omdev/scripts/ci.py +1 -1
- omdev/scripts/interp.py +143 -11
- omdev/scripts/pyproject.py +151 -11
- omdev/tools/json/cli.py +14 -6
- omdev/tools/json/parsing.py +4 -4
- omdev/tools/json/processing.py +18 -0
- omdev/tools/json/rendering.py +1 -1
- {omdev-0.0.0.dev355.dist-info → omdev-0.0.0.dev357.dist-info}/METADATA +2 -2
- {omdev-0.0.0.dev355.dist-info → omdev-0.0.0.dev357.dist-info}/RECORD +39 -39
- {omdev-0.0.0.dev355.dist-info → omdev-0.0.0.dev357.dist-info}/WHEEL +0 -0
- {omdev-0.0.0.dev355.dist-info → omdev-0.0.0.dev357.dist-info}/entry_points.txt +0 -0
- {omdev-0.0.0.dev355.dist-info → omdev-0.0.0.dev357.dist-info}/licenses/LICENSE +0 -0
- {omdev-0.0.0.dev355.dist-info → omdev-0.0.0.dev357.dist-info}/top_level.txt +0 -0
omdev/.manifests.json
CHANGED
omdev/ci/docker/dataserver.py
CHANGED
omdev/ci/docker/repositories.py
CHANGED
omdev/cli/clicli.py
CHANGED
@@ -91,11 +91,17 @@ class CliCli(ap.Cli):
|
|
91
91
|
ap.arg('--local', action='store_true'),
|
92
92
|
ap.arg('--no-deps', action='store_true'),
|
93
93
|
ap.arg('--dry-run', action='store_true'),
|
94
|
+
ap.arg('--version'),
|
94
95
|
ap.arg('extra_deps', nargs='*'),
|
95
96
|
)
|
96
97
|
def reinstall(self) -> None:
|
97
98
|
latest_version = _parse_latest_version_str(lookup_latest_package_version(__package__.split('.')[0]))
|
98
99
|
|
100
|
+
if self.args.version is not None:
|
101
|
+
target_version: str = self.args.version
|
102
|
+
else:
|
103
|
+
target_version = latest_version
|
104
|
+
|
99
105
|
#
|
100
106
|
|
101
107
|
dep_set: set[str] = set(self.args.extra_deps or [])
|
@@ -142,6 +148,7 @@ class CliCli(ap.Cli):
|
|
142
148
|
|
143
149
|
print(f'Current version: {__about__.__version__}')
|
144
150
|
print(f'Latest version: {latest_version}')
|
151
|
+
print(f'Target version: {target_version}')
|
145
152
|
print()
|
146
153
|
|
147
154
|
#
|
@@ -163,7 +170,7 @@ class CliCli(ap.Cli):
|
|
163
170
|
reco_cmd = ' '.join([
|
164
171
|
'curl -LsSf',
|
165
172
|
f"'{url}'" if (qu := shlex.quote(url)) == url else qu,
|
166
|
-
f'| python3 - --version {shlex.quote(
|
173
|
+
f'| python3 - --version {shlex.quote(target_version)}',
|
167
174
|
*deps,
|
168
175
|
])
|
169
176
|
print(f'Recovery command:\n\n{reco_cmd}\n')
|
@@ -178,7 +185,7 @@ class CliCli(ap.Cli):
|
|
178
185
|
sys.executable,
|
179
186
|
sys.executable,
|
180
187
|
'-c', install_src,
|
181
|
-
'--version',
|
188
|
+
'--version', target_version,
|
182
189
|
*deps,
|
183
190
|
)
|
184
191
|
|
omdev/interp/cli.py
CHANGED
omdev/interp/default.py
CHANGED
omdev/interp/inject.py
CHANGED
@@ -15,6 +15,10 @@ from .pyenv.provider import PyenvInterpProvider
|
|
15
15
|
from .resolvers import InterpResolver
|
16
16
|
from .resolvers import InterpResolverProviders
|
17
17
|
from .uv.inject import bind_interp_uv
|
18
|
+
from .uv.provider import UvInterpProvider
|
19
|
+
|
20
|
+
|
21
|
+
##
|
18
22
|
|
19
23
|
|
20
24
|
def bind_interp() -> InjectorBindings:
|
@@ -36,6 +40,7 @@ def bind_interp() -> InjectorBindings:
|
|
36
40
|
injector.provide(c)
|
37
41
|
for c in [
|
38
42
|
PyenvInterpProvider,
|
43
|
+
UvInterpProvider,
|
39
44
|
RunningInterpProvider,
|
40
45
|
SystemInterpProvider,
|
41
46
|
]
|
omdev/interp/inspect.py
CHANGED
omdev/interp/providers/inject.py
CHANGED
omdev/interp/pyenv/inject.py
CHANGED
omdev/interp/pyenv/provider.py
CHANGED
omdev/interp/pyenv/pyenv.py
CHANGED
omdev/interp/resolvers.py
CHANGED
omdev/interp/uv/inject.py
CHANGED
@@ -5,8 +5,20 @@ from omlish.lite.inject import InjectorBindingOrBindings
|
|
5
5
|
from omlish.lite.inject import InjectorBindings
|
6
6
|
from omlish.lite.inject import inj
|
7
7
|
|
8
|
+
from ..providers.base import InterpProvider
|
9
|
+
from .provider import UvInterpProvider
|
10
|
+
from .uv import Uv
|
11
|
+
|
12
|
+
|
13
|
+
##
|
14
|
+
|
8
15
|
|
9
16
|
def bind_interp_uv() -> InjectorBindings:
|
10
|
-
lst: ta.List[InjectorBindingOrBindings] = [
|
17
|
+
lst: ta.List[InjectorBindingOrBindings] = [
|
18
|
+
inj.bind(Uv, singleton=True),
|
19
|
+
|
20
|
+
inj.bind(UvInterpProvider, singleton=True),
|
21
|
+
inj.bind(InterpProvider, to_key=UvInterpProvider, array=True),
|
22
|
+
]
|
11
23
|
|
12
24
|
return inj.as_bindings(*lst)
|
omdev/interp/uv/provider.py
CHANGED
@@ -5,17 +5,36 @@ uv run --python 3.11.6 pip
|
|
5
5
|
uv venv --python 3.11.6 --seed barf
|
6
6
|
python3 -m venv barf && barf/bin/pip install uv && barf/bin/uv venv --python 3.11.6 --seed barf2
|
7
7
|
"""
|
8
|
+
import logging
|
8
9
|
import typing as ta
|
9
10
|
|
11
|
+
from ..inspect import InterpInspector
|
10
12
|
from ..providers.base import InterpProvider
|
11
13
|
from ..types import Interp
|
12
14
|
from ..types import InterpSpecifier
|
13
15
|
from ..types import InterpVersion
|
16
|
+
from .uv import Uv
|
17
|
+
|
18
|
+
|
19
|
+
##
|
14
20
|
|
15
21
|
|
16
22
|
class UvInterpProvider(InterpProvider):
|
17
|
-
def
|
18
|
-
|
23
|
+
def __init__(
|
24
|
+
self,
|
25
|
+
*,
|
26
|
+
pyenv: Uv,
|
27
|
+
inspector: InterpInspector,
|
28
|
+
log: ta.Optional[logging.Logger] = None,
|
29
|
+
) -> None:
|
30
|
+
super().__init__()
|
31
|
+
|
32
|
+
self._pyenv = pyenv
|
33
|
+
self._inspector = inspector
|
34
|
+
self._log = log
|
35
|
+
|
36
|
+
async def get_installed_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
|
37
|
+
return []
|
19
38
|
|
20
|
-
def get_installed_version(self, version: InterpVersion) ->
|
39
|
+
async def get_installed_version(self, version: InterpVersion) -> Interp:
|
21
40
|
raise NotImplementedError
|
omdev/interp/uv/uv.py
CHANGED
omdev/magic/magic.py
CHANGED
omdev/magic/prepare.py
CHANGED
omdev/magic/styles.py
CHANGED
omdev/precheck/git.py
CHANGED
@@ -25,7 +25,7 @@ class GitBlacklistPrecheck(Precheck['GitBlacklistPrecheck.Config']):
|
|
25
25
|
def __init__(self, config: Config = Config()) -> None:
|
26
26
|
super().__init__(config)
|
27
27
|
|
28
|
-
async def run(self) -> ta.AsyncGenerator[Precheck.Violation
|
28
|
+
async def run(self) -> ta.AsyncGenerator[Precheck.Violation]:
|
29
29
|
for f in self._config.files:
|
30
30
|
proc = await asyncio.create_subprocess_exec('git', 'status', '-s', f)
|
31
31
|
await proc.communicate()
|
omdev/precheck/imports.py
CHANGED
@@ -35,7 +35,7 @@ class RootRelativeImportPrecheck(Precheck['RootRelativeImportPrecheck.Config']):
|
|
35
35
|
self._headers_cache = headers_cache
|
36
36
|
self._ast_cache = ast_cache
|
37
37
|
|
38
|
-
async def _run_py_file(self, py_file: str, src_root: str) -> ta.AsyncGenerator[Precheck.Violation
|
38
|
+
async def _run_py_file(self, py_file: str, src_root: str) -> ta.AsyncGenerator[Precheck.Violation]:
|
39
39
|
if isinstance(header_lines := self._headers_cache.get_file_headers(py_file), Exception):
|
40
40
|
return
|
41
41
|
if any(hl.src.strip() == '# ruff: noqa' for hl in header_lines):
|
@@ -58,7 +58,7 @@ class RootRelativeImportPrecheck(Precheck['RootRelativeImportPrecheck.Config']):
|
|
58
58
|
|
59
59
|
return
|
60
60
|
|
61
|
-
async def _run_src_root(self, src_root: str) -> ta.AsyncGenerator[Precheck.Violation
|
61
|
+
async def _run_src_root(self, src_root: str) -> ta.AsyncGenerator[Precheck.Violation]:
|
62
62
|
py_files = [
|
63
63
|
os.path.join(e.root, f)
|
64
64
|
for e in self._dir_walk_cache.list_dir(src_root)
|
@@ -70,7 +70,7 @@ class RootRelativeImportPrecheck(Precheck['RootRelativeImportPrecheck.Config']):
|
|
70
70
|
async for v in self._run_py_file(py_file, src_root):
|
71
71
|
yield v
|
72
72
|
|
73
|
-
async def run(self) -> ta.AsyncGenerator[Precheck.Violation
|
73
|
+
async def run(self) -> ta.AsyncGenerator[Precheck.Violation]:
|
74
74
|
for src_root in self._context.src_roots:
|
75
75
|
async for v in self._run_src_root(src_root):
|
76
76
|
yield v
|
omdev/precheck/lite.py
CHANGED
@@ -157,7 +157,7 @@ class LitePython8Precheck(Precheck['LitePython8Precheck.Config']):
|
|
157
157
|
else:
|
158
158
|
raise RuntimeError(f'Unknown target kind: {tgt.kind}')
|
159
159
|
|
160
|
-
async def run(self) -> ta.AsyncGenerator[Precheck.Violation
|
160
|
+
async def run(self) -> ta.AsyncGenerator[Precheck.Violation]:
|
161
161
|
tgts = await self._collect_targets()
|
162
162
|
|
163
163
|
sem = asyncio.Semaphore(self._config.concurrency)
|
omdev/precheck/manifests.py
CHANGED
@@ -20,7 +20,7 @@ class ManifestsPrecheck(Precheck['ManifestsPrecheck.Config']):
|
|
20
20
|
|
21
21
|
self._context = context
|
22
22
|
|
23
|
-
async def run(self) -> ta.AsyncGenerator[Precheck.Violation
|
23
|
+
async def run(self) -> ta.AsyncGenerator[Precheck.Violation]:
|
24
24
|
for src_root in self._context.src_roots:
|
25
25
|
try:
|
26
26
|
MANIFEST_LOADER.load(src_root)
|
omdev/precheck/scripts.py
CHANGED
@@ -26,7 +26,7 @@ class ScriptDepsPrecheck(Precheck['ScriptDepsPrecheck.Config']):
|
|
26
26
|
|
27
27
|
self._context = context
|
28
28
|
|
29
|
-
async def run(self) -> ta.AsyncGenerator[Precheck.Violation
|
29
|
+
async def run(self) -> ta.AsyncGenerator[Precheck.Violation]:
|
30
30
|
for fp in magic.find_magic_files(
|
31
31
|
magic.PY_MAGIC_STYLE,
|
32
32
|
self._context.src_roots,
|
omdev/scripts/ci.py
CHANGED
omdev/scripts/interp.py
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# @omlish-generated
|
6
6
|
# @omlish-amalg-output ../interp/cli.py
|
7
7
|
# @omlish-git-diff-omit
|
8
|
-
# ruff: noqa: N802 UP006 UP007 UP036 UP045
|
8
|
+
# ruff: noqa: N802 UP006 UP007 UP036 UP043 UP045
|
9
9
|
"""
|
10
10
|
TODO:
|
11
11
|
- partial best-matches - '3.12'
|
@@ -34,6 +34,7 @@ import shlex
|
|
34
34
|
import shutil
|
35
35
|
import subprocess
|
36
36
|
import sys
|
37
|
+
import tempfile
|
37
38
|
import threading
|
38
39
|
import time
|
39
40
|
import types
|
@@ -4020,16 +4021,6 @@ class Interp:
|
|
4020
4021
|
version: InterpVersion
|
4021
4022
|
|
4022
4023
|
|
4023
|
-
########################################
|
4024
|
-
# ../uv/inject.py
|
4025
|
-
|
4026
|
-
|
4027
|
-
def bind_interp_uv() -> InjectorBindings:
|
4028
|
-
lst: ta.List[InjectorBindingOrBindings] = []
|
4029
|
-
|
4030
|
-
return inj.as_bindings(*lst)
|
4031
|
-
|
4032
|
-
|
4033
4024
|
########################################
|
4034
4025
|
# ../../../omlish/logs/standard.py
|
4035
4026
|
"""
|
@@ -4435,6 +4426,9 @@ class BaseSubprocesses(abc.ABC): # noqa
|
|
4435
4426
|
# ../resolvers.py
|
4436
4427
|
|
4437
4428
|
|
4429
|
+
##
|
4430
|
+
|
4431
|
+
|
4438
4432
|
@dc.dataclass(frozen=True)
|
4439
4433
|
class InterpResolverProviders:
|
4440
4434
|
providers: ta.Sequence[ta.Tuple[str, InterpProvider]]
|
@@ -4829,6 +4823,9 @@ asyncio_subprocesses = AsyncioSubprocesses()
|
|
4829
4823
|
# ../inspect.py
|
4830
4824
|
|
4831
4825
|
|
4826
|
+
##
|
4827
|
+
|
4828
|
+
|
4832
4829
|
@dc.dataclass(frozen=True)
|
4833
4830
|
class InterpInspection:
|
4834
4831
|
exe: str
|
@@ -4938,6 +4935,9 @@ TODO:
|
|
4938
4935
|
"""
|
4939
4936
|
|
4940
4937
|
|
4938
|
+
##
|
4939
|
+
|
4940
|
+
|
4941
4941
|
class Pyenv:
|
4942
4942
|
def __init__(
|
4943
4943
|
self,
|
@@ -5005,10 +5005,74 @@ class Pyenv:
|
|
5005
5005
|
return True
|
5006
5006
|
|
5007
5007
|
|
5008
|
+
########################################
|
5009
|
+
# ../uv/uv.py
|
5010
|
+
|
5011
|
+
|
5012
|
+
##
|
5013
|
+
|
5014
|
+
|
5015
|
+
@dc.dataclass(frozen=True)
|
5016
|
+
class UvConfig:
|
5017
|
+
ignore_path: bool = False
|
5018
|
+
pip_bootstrap: bool = True
|
5019
|
+
|
5020
|
+
|
5021
|
+
class Uv:
|
5022
|
+
def __init__(
|
5023
|
+
self,
|
5024
|
+
config: UvConfig = UvConfig(),
|
5025
|
+
*,
|
5026
|
+
log: ta.Optional[logging.Logger] = None,
|
5027
|
+
) -> None:
|
5028
|
+
super().__init__()
|
5029
|
+
|
5030
|
+
self._config = config
|
5031
|
+
self._log = log
|
5032
|
+
|
5033
|
+
self._bootstrap_dir: ta.Optional[str] = None
|
5034
|
+
|
5035
|
+
def delete_bootstrap_dir(self) -> bool:
|
5036
|
+
if (bs := self._bootstrap_dir) is None:
|
5037
|
+
return False
|
5038
|
+
|
5039
|
+
shutil.rmtree(bs)
|
5040
|
+
self._bootstrap_dir = None
|
5041
|
+
return True
|
5042
|
+
|
5043
|
+
@async_cached_nullary
|
5044
|
+
async def uv_exe(self) -> ta.Optional[str]:
|
5045
|
+
if not self._config.ignore_path and (uv := shutil.which('uv')):
|
5046
|
+
return uv
|
5047
|
+
|
5048
|
+
if self._config.pip_bootstrap:
|
5049
|
+
if (bd := self._bootstrap_dir) is None:
|
5050
|
+
bd = self._bootstrap_dir = tempfile.mkdtemp()
|
5051
|
+
|
5052
|
+
if self._log is not None:
|
5053
|
+
self._log.info(f'Bootstrapping uv into %s', bd)
|
5054
|
+
|
5055
|
+
vn = 'uv-bootstrap'
|
5056
|
+
await asyncio_subprocesses.check_call(os.path.realpath(sys.executable), '-m', 'venv', vn, cwd=bd)
|
5057
|
+
|
5058
|
+
vx = os.path.join(bd, vn, 'bin', 'python3')
|
5059
|
+
await asyncio_subprocesses.check_call(vx, '-m', 'pip', 'install', 'uv', cwd=bd)
|
5060
|
+
|
5061
|
+
ux = os.path.join(bd, vn, 'bin', 'uv')
|
5062
|
+
check.state(os.path.isfile(ux))
|
5063
|
+
|
5064
|
+
return ux
|
5065
|
+
|
5066
|
+
return None
|
5067
|
+
|
5068
|
+
|
5008
5069
|
########################################
|
5009
5070
|
# ../providers/running.py
|
5010
5071
|
|
5011
5072
|
|
5073
|
+
##
|
5074
|
+
|
5075
|
+
|
5012
5076
|
class RunningInterpProvider(InterpProvider):
|
5013
5077
|
@cached_nullary
|
5014
5078
|
def version(self) -> InterpVersion:
|
@@ -5415,10 +5479,47 @@ class PyenvVersionInstaller:
|
|
5415
5479
|
return exe
|
5416
5480
|
|
5417
5481
|
|
5482
|
+
########################################
|
5483
|
+
# ../uv/provider.py
|
5484
|
+
"""
|
5485
|
+
uv run pip
|
5486
|
+
uv run --python 3.11.6 pip
|
5487
|
+
uv venv --python 3.11.6 --seed barf
|
5488
|
+
python3 -m venv barf && barf/bin/pip install uv && barf/bin/uv venv --python 3.11.6 --seed barf2
|
5489
|
+
"""
|
5490
|
+
|
5491
|
+
|
5492
|
+
##
|
5493
|
+
|
5494
|
+
|
5495
|
+
class UvInterpProvider(InterpProvider):
|
5496
|
+
def __init__(
|
5497
|
+
self,
|
5498
|
+
*,
|
5499
|
+
pyenv: Uv,
|
5500
|
+
inspector: InterpInspector,
|
5501
|
+
log: ta.Optional[logging.Logger] = None,
|
5502
|
+
) -> None:
|
5503
|
+
super().__init__()
|
5504
|
+
|
5505
|
+
self._pyenv = pyenv
|
5506
|
+
self._inspector = inspector
|
5507
|
+
self._log = log
|
5508
|
+
|
5509
|
+
async def get_installed_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
|
5510
|
+
return []
|
5511
|
+
|
5512
|
+
async def get_installed_version(self, version: InterpVersion) -> Interp:
|
5513
|
+
raise NotImplementedError
|
5514
|
+
|
5515
|
+
|
5418
5516
|
########################################
|
5419
5517
|
# ../providers/inject.py
|
5420
5518
|
|
5421
5519
|
|
5520
|
+
##
|
5521
|
+
|
5522
|
+
|
5422
5523
|
def bind_interp_providers() -> InjectorBindings:
|
5423
5524
|
lst: ta.List[InjectorBindingOrBindings] = [
|
5424
5525
|
inj.bind_array(InterpProvider),
|
@@ -5438,6 +5539,9 @@ def bind_interp_providers() -> InjectorBindings:
|
|
5438
5539
|
# ../pyenv/provider.py
|
5439
5540
|
|
5440
5541
|
|
5542
|
+
##
|
5543
|
+
|
5544
|
+
|
5441
5545
|
class PyenvInterpProvider(InterpProvider):
|
5442
5546
|
@dc.dataclass(frozen=True)
|
5443
5547
|
class Options:
|
@@ -5565,10 +5669,31 @@ class PyenvInterpProvider(InterpProvider):
|
|
5565
5669
|
return Interp(exe, version)
|
5566
5670
|
|
5567
5671
|
|
5672
|
+
########################################
|
5673
|
+
# ../uv/inject.py
|
5674
|
+
|
5675
|
+
|
5676
|
+
##
|
5677
|
+
|
5678
|
+
|
5679
|
+
def bind_interp_uv() -> InjectorBindings:
|
5680
|
+
lst: ta.List[InjectorBindingOrBindings] = [
|
5681
|
+
inj.bind(Uv, singleton=True),
|
5682
|
+
|
5683
|
+
inj.bind(UvInterpProvider, singleton=True),
|
5684
|
+
inj.bind(InterpProvider, to_key=UvInterpProvider, array=True),
|
5685
|
+
]
|
5686
|
+
|
5687
|
+
return inj.as_bindings(*lst)
|
5688
|
+
|
5689
|
+
|
5568
5690
|
########################################
|
5569
5691
|
# ../pyenv/inject.py
|
5570
5692
|
|
5571
5693
|
|
5694
|
+
##
|
5695
|
+
|
5696
|
+
|
5572
5697
|
def bind_interp_pyenv() -> InjectorBindings:
|
5573
5698
|
lst: ta.List[InjectorBindingOrBindings] = [
|
5574
5699
|
inj.bind(Pyenv, singleton=True),
|
@@ -5584,6 +5709,9 @@ def bind_interp_pyenv() -> InjectorBindings:
|
|
5584
5709
|
# ../inject.py
|
5585
5710
|
|
5586
5711
|
|
5712
|
+
##
|
5713
|
+
|
5714
|
+
|
5587
5715
|
def bind_interp() -> InjectorBindings:
|
5588
5716
|
lst: ta.List[InjectorBindingOrBindings] = [
|
5589
5717
|
bind_interp_providers(),
|
@@ -5603,6 +5731,7 @@ def bind_interp() -> InjectorBindings:
|
|
5603
5731
|
injector.provide(c)
|
5604
5732
|
for c in [
|
5605
5733
|
PyenvInterpProvider,
|
5734
|
+
UvInterpProvider,
|
5606
5735
|
RunningInterpProvider,
|
5607
5736
|
SystemInterpProvider,
|
5608
5737
|
]
|
@@ -5625,6 +5754,9 @@ def bind_interp() -> InjectorBindings:
|
|
5625
5754
|
# cli.py
|
5626
5755
|
|
5627
5756
|
|
5757
|
+
##
|
5758
|
+
|
5759
|
+
|
5628
5760
|
class InterpCli(ArgparseCli):
|
5629
5761
|
@cached_nullary
|
5630
5762
|
def injector(self) -> Injector:
|
omdev/scripts/pyproject.py
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# @omlish-generated
|
6
6
|
# @omlish-amalg-output ../pyproject/cli.py
|
7
7
|
# @omlish-git-diff-omit
|
8
|
-
# ruff: noqa: N802 TC003 UP006 UP007 UP036 UP045
|
8
|
+
# ruff: noqa: N802 TC003 UP006 UP007 UP036 UP043 UP045
|
9
9
|
"""
|
10
10
|
TODO:
|
11
11
|
- check / tests, src dir sets
|
@@ -143,6 +143,9 @@ SubprocessChannelOption = ta.Literal['pipe', 'stdout', 'devnull'] # ta.TypeAlia
|
|
143
143
|
# ../../magic/magic.py
|
144
144
|
|
145
145
|
|
146
|
+
##
|
147
|
+
|
148
|
+
|
146
149
|
@dc.dataclass(frozen=True)
|
147
150
|
class Magic:
|
148
151
|
key: str
|
@@ -161,6 +164,9 @@ class Magic:
|
|
161
164
|
# ../../magic/prepare.py
|
162
165
|
|
163
166
|
|
167
|
+
##
|
168
|
+
|
169
|
+
|
164
170
|
class MagicPrepareError(Exception):
|
165
171
|
pass
|
166
172
|
|
@@ -190,6 +196,9 @@ def json_magic_preparer(src: str) -> ta.Any:
|
|
190
196
|
# ../../magic/styles.py
|
191
197
|
|
192
198
|
|
199
|
+
##
|
200
|
+
|
201
|
+
|
193
202
|
MAGIC_KEY_PREFIX = '@omlish-'
|
194
203
|
|
195
204
|
|
@@ -6390,16 +6399,6 @@ class Interp:
|
|
6390
6399
|
version: InterpVersion
|
6391
6400
|
|
6392
6401
|
|
6393
|
-
########################################
|
6394
|
-
# ../../interp/uv/inject.py
|
6395
|
-
|
6396
|
-
|
6397
|
-
def bind_interp_uv() -> InjectorBindings:
|
6398
|
-
lst: ta.List[InjectorBindingOrBindings] = []
|
6399
|
-
|
6400
|
-
return inj.as_bindings(*lst)
|
6401
|
-
|
6402
|
-
|
6403
6402
|
########################################
|
6404
6403
|
# ../../../omlish/logs/standard.py
|
6405
6404
|
"""
|
@@ -6805,6 +6804,9 @@ class BaseSubprocesses(abc.ABC): # noqa
|
|
6805
6804
|
# ../../interp/resolvers.py
|
6806
6805
|
|
6807
6806
|
|
6807
|
+
##
|
6808
|
+
|
6809
|
+
|
6808
6810
|
@dc.dataclass(frozen=True)
|
6809
6811
|
class InterpResolverProviders:
|
6810
6812
|
providers: ta.Sequence[ta.Tuple[str, InterpProvider]]
|
@@ -7391,6 +7393,9 @@ asyncio_subprocesses = AsyncioSubprocesses()
|
|
7391
7393
|
# ../../interp/inspect.py
|
7392
7394
|
|
7393
7395
|
|
7396
|
+
##
|
7397
|
+
|
7398
|
+
|
7394
7399
|
@dc.dataclass(frozen=True)
|
7395
7400
|
class InterpInspection:
|
7396
7401
|
exe: str
|
@@ -7500,6 +7505,9 @@ TODO:
|
|
7500
7505
|
"""
|
7501
7506
|
|
7502
7507
|
|
7508
|
+
##
|
7509
|
+
|
7510
|
+
|
7503
7511
|
class Pyenv:
|
7504
7512
|
def __init__(
|
7505
7513
|
self,
|
@@ -7567,6 +7575,67 @@ class Pyenv:
|
|
7567
7575
|
return True
|
7568
7576
|
|
7569
7577
|
|
7578
|
+
########################################
|
7579
|
+
# ../../interp/uv/uv.py
|
7580
|
+
|
7581
|
+
|
7582
|
+
##
|
7583
|
+
|
7584
|
+
|
7585
|
+
@dc.dataclass(frozen=True)
|
7586
|
+
class UvConfig:
|
7587
|
+
ignore_path: bool = False
|
7588
|
+
pip_bootstrap: bool = True
|
7589
|
+
|
7590
|
+
|
7591
|
+
class Uv:
|
7592
|
+
def __init__(
|
7593
|
+
self,
|
7594
|
+
config: UvConfig = UvConfig(),
|
7595
|
+
*,
|
7596
|
+
log: ta.Optional[logging.Logger] = None,
|
7597
|
+
) -> None:
|
7598
|
+
super().__init__()
|
7599
|
+
|
7600
|
+
self._config = config
|
7601
|
+
self._log = log
|
7602
|
+
|
7603
|
+
self._bootstrap_dir: ta.Optional[str] = None
|
7604
|
+
|
7605
|
+
def delete_bootstrap_dir(self) -> bool:
|
7606
|
+
if (bs := self._bootstrap_dir) is None:
|
7607
|
+
return False
|
7608
|
+
|
7609
|
+
shutil.rmtree(bs)
|
7610
|
+
self._bootstrap_dir = None
|
7611
|
+
return True
|
7612
|
+
|
7613
|
+
@async_cached_nullary
|
7614
|
+
async def uv_exe(self) -> ta.Optional[str]:
|
7615
|
+
if not self._config.ignore_path and (uv := shutil.which('uv')):
|
7616
|
+
return uv
|
7617
|
+
|
7618
|
+
if self._config.pip_bootstrap:
|
7619
|
+
if (bd := self._bootstrap_dir) is None:
|
7620
|
+
bd = self._bootstrap_dir = tempfile.mkdtemp()
|
7621
|
+
|
7622
|
+
if self._log is not None:
|
7623
|
+
self._log.info(f'Bootstrapping uv into %s', bd)
|
7624
|
+
|
7625
|
+
vn = 'uv-bootstrap'
|
7626
|
+
await asyncio_subprocesses.check_call(os.path.realpath(sys.executable), '-m', 'venv', vn, cwd=bd)
|
7627
|
+
|
7628
|
+
vx = os.path.join(bd, vn, 'bin', 'python3')
|
7629
|
+
await asyncio_subprocesses.check_call(vx, '-m', 'pip', 'install', 'uv', cwd=bd)
|
7630
|
+
|
7631
|
+
ux = os.path.join(bd, vn, 'bin', 'uv')
|
7632
|
+
check.state(os.path.isfile(ux))
|
7633
|
+
|
7634
|
+
return ux
|
7635
|
+
|
7636
|
+
return None
|
7637
|
+
|
7638
|
+
|
7570
7639
|
########################################
|
7571
7640
|
# ../../packaging/revisions.py
|
7572
7641
|
"""
|
@@ -7691,6 +7760,9 @@ class GitRevisionAdder:
|
|
7691
7760
|
# ../../interp/providers/running.py
|
7692
7761
|
|
7693
7762
|
|
7763
|
+
##
|
7764
|
+
|
7765
|
+
|
7694
7766
|
class RunningInterpProvider(InterpProvider):
|
7695
7767
|
@cached_nullary
|
7696
7768
|
def version(self) -> InterpVersion:
|
@@ -8097,6 +8169,40 @@ class PyenvVersionInstaller:
|
|
8097
8169
|
return exe
|
8098
8170
|
|
8099
8171
|
|
8172
|
+
########################################
|
8173
|
+
# ../../interp/uv/provider.py
|
8174
|
+
"""
|
8175
|
+
uv run pip
|
8176
|
+
uv run --python 3.11.6 pip
|
8177
|
+
uv venv --python 3.11.6 --seed barf
|
8178
|
+
python3 -m venv barf && barf/bin/pip install uv && barf/bin/uv venv --python 3.11.6 --seed barf2
|
8179
|
+
"""
|
8180
|
+
|
8181
|
+
|
8182
|
+
##
|
8183
|
+
|
8184
|
+
|
8185
|
+
class UvInterpProvider(InterpProvider):
|
8186
|
+
def __init__(
|
8187
|
+
self,
|
8188
|
+
*,
|
8189
|
+
pyenv: Uv,
|
8190
|
+
inspector: InterpInspector,
|
8191
|
+
log: ta.Optional[logging.Logger] = None,
|
8192
|
+
) -> None:
|
8193
|
+
super().__init__()
|
8194
|
+
|
8195
|
+
self._pyenv = pyenv
|
8196
|
+
self._inspector = inspector
|
8197
|
+
self._log = log
|
8198
|
+
|
8199
|
+
async def get_installed_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
|
8200
|
+
return []
|
8201
|
+
|
8202
|
+
async def get_installed_version(self, version: InterpVersion) -> Interp:
|
8203
|
+
raise NotImplementedError
|
8204
|
+
|
8205
|
+
|
8100
8206
|
########################################
|
8101
8207
|
# ../pkg.py
|
8102
8208
|
"""
|
@@ -8659,6 +8765,9 @@ class _PyprojectCliPackageGenerator(BasePyprojectPackageGenerator):
|
|
8659
8765
|
# ../../interp/providers/inject.py
|
8660
8766
|
|
8661
8767
|
|
8768
|
+
##
|
8769
|
+
|
8770
|
+
|
8662
8771
|
def bind_interp_providers() -> InjectorBindings:
|
8663
8772
|
lst: ta.List[InjectorBindingOrBindings] = [
|
8664
8773
|
inj.bind_array(InterpProvider),
|
@@ -8678,6 +8787,9 @@ def bind_interp_providers() -> InjectorBindings:
|
|
8678
8787
|
# ../../interp/pyenv/provider.py
|
8679
8788
|
|
8680
8789
|
|
8790
|
+
##
|
8791
|
+
|
8792
|
+
|
8681
8793
|
class PyenvInterpProvider(InterpProvider):
|
8682
8794
|
@dc.dataclass(frozen=True)
|
8683
8795
|
class Options:
|
@@ -8805,10 +8917,31 @@ class PyenvInterpProvider(InterpProvider):
|
|
8805
8917
|
return Interp(exe, version)
|
8806
8918
|
|
8807
8919
|
|
8920
|
+
########################################
|
8921
|
+
# ../../interp/uv/inject.py
|
8922
|
+
|
8923
|
+
|
8924
|
+
##
|
8925
|
+
|
8926
|
+
|
8927
|
+
def bind_interp_uv() -> InjectorBindings:
|
8928
|
+
lst: ta.List[InjectorBindingOrBindings] = [
|
8929
|
+
inj.bind(Uv, singleton=True),
|
8930
|
+
|
8931
|
+
inj.bind(UvInterpProvider, singleton=True),
|
8932
|
+
inj.bind(InterpProvider, to_key=UvInterpProvider, array=True),
|
8933
|
+
]
|
8934
|
+
|
8935
|
+
return inj.as_bindings(*lst)
|
8936
|
+
|
8937
|
+
|
8808
8938
|
########################################
|
8809
8939
|
# ../../interp/pyenv/inject.py
|
8810
8940
|
|
8811
8941
|
|
8942
|
+
##
|
8943
|
+
|
8944
|
+
|
8812
8945
|
def bind_interp_pyenv() -> InjectorBindings:
|
8813
8946
|
lst: ta.List[InjectorBindingOrBindings] = [
|
8814
8947
|
inj.bind(Pyenv, singleton=True),
|
@@ -8824,6 +8957,9 @@ def bind_interp_pyenv() -> InjectorBindings:
|
|
8824
8957
|
# ../../interp/inject.py
|
8825
8958
|
|
8826
8959
|
|
8960
|
+
##
|
8961
|
+
|
8962
|
+
|
8827
8963
|
def bind_interp() -> InjectorBindings:
|
8828
8964
|
lst: ta.List[InjectorBindingOrBindings] = [
|
8829
8965
|
bind_interp_providers(),
|
@@ -8843,6 +8979,7 @@ def bind_interp() -> InjectorBindings:
|
|
8843
8979
|
injector.provide(c)
|
8844
8980
|
for c in [
|
8845
8981
|
PyenvInterpProvider,
|
8982
|
+
UvInterpProvider,
|
8846
8983
|
RunningInterpProvider,
|
8847
8984
|
SystemInterpProvider,
|
8848
8985
|
]
|
@@ -8865,6 +9002,9 @@ def bind_interp() -> InjectorBindings:
|
|
8865
9002
|
# ../../interp/default.py
|
8866
9003
|
|
8867
9004
|
|
9005
|
+
##
|
9006
|
+
|
9007
|
+
|
8868
9008
|
@cached_nullary
|
8869
9009
|
def get_default_interp_resolver() -> InterpResolver:
|
8870
9010
|
return inj.create_injector(bind_interp())[InterpResolver]
|
omdev/tools/json/cli.py
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
"""
|
2
2
|
TODO:
|
3
3
|
- read from http
|
4
|
-
- jmespath output flat, unquoted strs like jq '.[]'
|
5
4
|
|
6
5
|
==
|
7
6
|
|
@@ -68,10 +67,14 @@ T = ta.TypeVar('T')
|
|
68
67
|
U = ta.TypeVar('U')
|
69
68
|
|
70
69
|
|
70
|
+
##
|
71
|
+
|
72
|
+
|
71
73
|
def _build_args_parser() -> argparse.ArgumentParser:
|
72
74
|
parser = argparse.ArgumentParser()
|
73
75
|
|
74
76
|
parser.add_argument('file', nargs='?')
|
77
|
+
parser.add_argument('--source')
|
75
78
|
|
76
79
|
parser.add_argument('-S', '--stream', action='store_true')
|
77
80
|
parser.add_argument('-B', '--stream-build', action='store_true')
|
@@ -83,6 +86,7 @@ def _build_args_parser() -> argparse.ArgumentParser:
|
|
83
86
|
parser.add_argument('-f', '--format')
|
84
87
|
|
85
88
|
parser.add_argument('-x', '--jmespath-expr')
|
89
|
+
parser.add_argument('-M', '--marshal', action='store_true')
|
86
90
|
parser.add_argument('-F', '--flat', action='store_true')
|
87
91
|
parser.add_argument('-E', '--omit-empty', action='store_true')
|
88
92
|
|
@@ -129,6 +133,7 @@ def _process_args(args: ta.Any) -> RunConfiguration:
|
|
129
133
|
|
130
134
|
processing = ProcessingOptions(
|
131
135
|
jmespath_expr=args.jmespath_expr,
|
136
|
+
marshal=args.marshal,
|
132
137
|
flat=args.flat,
|
133
138
|
omit_empty=args.omit_empty,
|
134
139
|
)
|
@@ -177,13 +182,16 @@ def _main() -> None:
|
|
177
182
|
#
|
178
183
|
|
179
184
|
with contextlib.ExitStack() as es:
|
180
|
-
|
185
|
+
in_file: ta.BinaryIO
|
186
|
+
if args.source is not None:
|
187
|
+
check.none(args.file)
|
188
|
+
in_file = io.BytesIO(args.source.encode('utf-8'))
|
189
|
+
elif args.file is None:
|
181
190
|
in_file = sys.stdin.buffer
|
182
|
-
|
183
191
|
else:
|
184
192
|
in_file = es.enter_context(open(args.file, 'rb'))
|
185
193
|
|
186
|
-
def yield_input() -> ta.Generator[bytes
|
194
|
+
def yield_input() -> ta.Generator[bytes]:
|
187
195
|
fd = check.isinstance(in_file.fileno(), int)
|
188
196
|
|
189
197
|
while True:
|
@@ -228,7 +236,7 @@ def _main() -> None:
|
|
228
236
|
def flush_output(
|
229
237
|
fn: ta.Callable[[T], ta.Iterable[U]],
|
230
238
|
i: T,
|
231
|
-
) -> ta.Generator[U
|
239
|
+
) -> ta.Generator[U]:
|
232
240
|
n = 0
|
233
241
|
for o in fn(i):
|
234
242
|
yield o
|
@@ -247,7 +255,7 @@ def _main() -> None:
|
|
247
255
|
def append_newlines(
|
248
256
|
fn: ta.Callable[[T], ta.Iterable[str]],
|
249
257
|
i: T,
|
250
|
-
) -> ta.Generator[str
|
258
|
+
) -> ta.Generator[str]:
|
251
259
|
yield from fn(i)
|
252
260
|
yield '\n'
|
253
261
|
|
omdev/tools/json/parsing.py
CHANGED
@@ -22,7 +22,7 @@ class EagerParser:
|
|
22
22
|
|
23
23
|
self._fmt = fmt
|
24
24
|
|
25
|
-
def parse(self, f: ta.TextIO) -> ta.Generator[ta.Any
|
25
|
+
def parse(self, f: ta.TextIO) -> ta.Generator[ta.Any]:
|
26
26
|
return self._fmt.load(f)
|
27
27
|
|
28
28
|
|
@@ -42,7 +42,7 @@ class DelimitingParser:
|
|
42
42
|
|
43
43
|
self._db = DelimitingBuffer(delimiters)
|
44
44
|
|
45
|
-
def parse(self, b: bytes) -> ta.Generator[ta.Any
|
45
|
+
def parse(self, b: bytes) -> ta.Generator[ta.Any]:
|
46
46
|
for chunk in self._db.feed(b):
|
47
47
|
s = check.isinstance(chunk, bytes).decode('utf-8')
|
48
48
|
v = self._fmt.load(io.StringIO(s))
|
@@ -58,7 +58,7 @@ class StreamBuilder(lang.ExitStacked):
|
|
58
58
|
def _enter_contexts(self) -> None:
|
59
59
|
self._builder = self._enter_context(JsonObjectBuilder())
|
60
60
|
|
61
|
-
def build(self, e: JsonStreamParserEvent) -> ta.Generator[ta.Any
|
61
|
+
def build(self, e: JsonStreamParserEvent) -> ta.Generator[ta.Any]:
|
62
62
|
yield from check.not_none(self._builder)(e)
|
63
63
|
|
64
64
|
|
@@ -72,7 +72,7 @@ class StreamParser(lang.ExitStacked):
|
|
72
72
|
self._lex = self._enter_context(JsonStreamLexer())
|
73
73
|
self._parse = self._enter_context(JsonStreamParser())
|
74
74
|
|
75
|
-
def parse(self, b: bytes) -> ta.Generator[JsonStreamParserEvent
|
75
|
+
def parse(self, b: bytes) -> ta.Generator[JsonStreamParserEvent]:
|
76
76
|
for s in self._decoder.decode(b, not b):
|
77
77
|
for c in s:
|
78
78
|
for t in self._lex(c):
|
omdev/tools/json/processing.py
CHANGED
@@ -5,8 +5,10 @@ from omlish import lang
|
|
5
5
|
|
6
6
|
|
7
7
|
if ta.TYPE_CHECKING:
|
8
|
+
from omlish import marshal as msh
|
8
9
|
from omlish.specs import jmespath
|
9
10
|
else:
|
11
|
+
msh = lang.proxy_import('omlish.marshal')
|
10
12
|
jmespath = lang.proxy_import('omlish.specs.jmespath')
|
11
13
|
|
12
14
|
|
@@ -16,6 +18,7 @@ else:
|
|
16
18
|
@dc.dataclass(frozen=True, kw_only=True)
|
17
19
|
class ProcessingOptions:
|
18
20
|
jmespath_expr: ta.Any | None = None
|
21
|
+
marshal: bool = False
|
19
22
|
flat: bool = False
|
20
23
|
omit_empty: bool = False
|
21
24
|
|
@@ -31,10 +34,25 @@ class Processor:
|
|
31
34
|
jmespath_expr = jmespath.compile(jmespath_expr)
|
32
35
|
self._jmespath_expr: ta.Any | None = jmespath_expr
|
33
36
|
|
37
|
+
@lang.cached_function
|
38
|
+
def _marshaler_factory(self) -> 'msh.MarshalerFactory':
|
39
|
+
return msh.new_standard_marshaler_factory(
|
40
|
+
first=[msh.BASE64_MARSHALER_FACTORY],
|
41
|
+
)
|
42
|
+
|
43
|
+
def _marshal(self, v: ta.Any) -> ta.Any:
|
44
|
+
return msh.MarshalContext(
|
45
|
+
msh.GLOBAL_REGISTRY,
|
46
|
+
factory=self._marshaler_factory(),
|
47
|
+
).marshal(v)
|
48
|
+
|
34
49
|
def process(self, v: ta.Any) -> ta.Iterable[ta.Any]:
|
35
50
|
if self._jmespath_expr is not None:
|
36
51
|
v = self._jmespath_expr.search(v)
|
37
52
|
|
53
|
+
if self._opts.marshal:
|
54
|
+
v = self._marshal(v)
|
55
|
+
|
38
56
|
vs: ta.Iterable[ta.Any]
|
39
57
|
if self._opts.flat:
|
40
58
|
if (
|
omdev/tools/json/rendering.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omdev
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev357
|
4
4
|
Summary: omdev
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
|
|
12
12
|
Classifier: Operating System :: POSIX
|
13
13
|
Requires-Python: >=3.13
|
14
14
|
License-File: LICENSE
|
15
|
-
Requires-Dist: omlish==0.0.0.
|
15
|
+
Requires-Dist: omlish==0.0.0.dev357
|
16
16
|
Provides-Extra: all
|
17
17
|
Requires-Dist: black~=25.1; extra == "all"
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
omdev/.manifests.json,sha256=
|
1
|
+
omdev/.manifests.json,sha256=bc0ButqJqOkZiEgO6VZ6CRZ8RL9Mf_DiFUNxm81jl04,11870
|
2
2
|
omdev/__about__.py,sha256=2_6pQyjxqAspvwBSJUWQgdBBcGaDO3zX8yETLaspUQE,1202
|
3
3
|
omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
omdev/cmake.py,sha256=9rfSvFHPmKDj9ngvfDB2vK8O-xO_ZwUm7hMKLWA-yOw,4578
|
@@ -76,11 +76,11 @@ omdev/ci/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
76
76
|
omdev/ci/docker/buildcaching.py,sha256=ge6TOKkffqVJMHMPJJl4sWy7hOkUeXgjmfq2cVJEsus,1839
|
77
77
|
omdev/ci/docker/cache.py,sha256=Psk9EX9iDJ2Fk-tDGzbBa4TD8xgucroGoY_AErjgzDo,2120
|
78
78
|
omdev/ci/docker/cmds.py,sha256=1aSLQqbMJpdAMskxfeGI-he5Amb910RWvo2DE6ZgID8,3067
|
79
|
-
omdev/ci/docker/dataserver.py,sha256=
|
79
|
+
omdev/ci/docker/dataserver.py,sha256=3nDQhSJsEui3GG5vUqCND-n21EJJcMFKa7NO1Gkh_Go,5873
|
80
80
|
omdev/ci/docker/imagepulling.py,sha256=6N8PkvZUlvd20kQ5zF0_7fInP6TYgZYFM9WsH9J7uIc,1832
|
81
81
|
omdev/ci/docker/inject.py,sha256=vlWoIJHx2hzCai4wWspIcWnR3WhZ2bsOjq7fqq0qozE,2006
|
82
82
|
omdev/ci/docker/packing.py,sha256=IayecomyP6AdaiKP1-Ki1wcb2ayfZz2mDqHWbPD8y50,2022
|
83
|
-
omdev/ci/docker/repositories.py,sha256=
|
83
|
+
omdev/ci/docker/repositories.py,sha256=kZx4mqKapT9L9LnanstUHaIgM68v35rcZLbMwhxg80c,1235
|
84
84
|
omdev/ci/docker/utils.py,sha256=7Tobiq2hMxicGpQfTkDoU7oTa8Tyw47LpDh8C554LLs,1135
|
85
85
|
omdev/ci/docker/cacheserved/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
86
86
|
omdev/ci/docker/cacheserved/cache.py,sha256=V9R1_HBNJzMGFqiSnTAP1M4VAv9pJBsXYvR7I52wR50,7025
|
@@ -103,7 +103,7 @@ omdev/ci/github/api/v2/client.py,sha256=bJtL_TZ4sB6IDuzfqtEXj-iWivKfyXQZ_MO30lgB
|
|
103
103
|
omdev/cli/__init__.py,sha256=V_l6VP1SZMlJbO-8CJwSuO9TThOy2S_oaPepNYgIrbE,37
|
104
104
|
omdev/cli/__main__.py,sha256=mOJpgc07o0r5luQ1DlX4tk2PqZkgmbwPbdzJ3KmtjgQ,138
|
105
105
|
omdev/cli/_pathhack.py,sha256=UshIZX3oeXq0De-9X28gy2LgKMZDf_dzabdkUhZJdNA,2124
|
106
|
-
omdev/cli/clicli.py,sha256=
|
106
|
+
omdev/cli/clicli.py,sha256=kJ6gyf2JGbZuo99HSPWh0E82538GstlraKmKcAyCd1I,5052
|
107
107
|
omdev/cli/install.py,sha256=oB34AOwu07sqEztW_z5mgorAFoP_Tw556XiTPj2WSM0,4904
|
108
108
|
omdev/cli/main.py,sha256=dxZFyzKuwRykHHhoKKUA0fUa9QsY0dgdvLHbXNuIPCY,6694
|
109
109
|
omdev/cli/managers.py,sha256=BV98_n30Jj63OJrFgRoVZRfICxMLXEZKoEn4rMj9LV4,1160
|
@@ -134,35 +134,35 @@ omdev/home/secrets.py,sha256=XarB-uhwjRc3dpT5ZF-9yoRPDr7kpyr4Hgs0I4kKL4I,1992
|
|
134
134
|
omdev/home/shadow.py,sha256=6mGDJV70IExa-nzd7mOUW4R3OZIXO0fBwmOUU9T9f4M,295
|
135
135
|
omdev/interp/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
136
136
|
omdev/interp/__main__.py,sha256=GMCqeGYltgt5dlJzHxY9gqisa8cRkrPfmZYuZnjg4WI,162
|
137
|
-
omdev/interp/cli.py,sha256=
|
138
|
-
omdev/interp/default.py,sha256=
|
139
|
-
omdev/interp/inject.py,sha256=
|
140
|
-
omdev/interp/inspect.py,sha256=
|
141
|
-
omdev/interp/resolvers.py,sha256=
|
137
|
+
omdev/interp/cli.py,sha256=xYZHts_tYuWPenTTLQIQ-I1JWHao6XolsH0R73AufDY,2380
|
138
|
+
omdev/interp/default.py,sha256=1jxTsCeCkmYX1QDgr-bPcfSTFdbkYCNKrdfdVf4_P8M,290
|
139
|
+
omdev/interp/inject.py,sha256=MOppFILGFCp2f4-2uwmH5fN-7erHI3RyMQJaG0kw0Gc,1569
|
140
|
+
omdev/interp/inspect.py,sha256=tRhs4SXIrIjDrrjidNeos87RK6EF6KdTP7EsGECMG3A,2977
|
141
|
+
omdev/interp/resolvers.py,sha256=9ExwP0wcQ4mzyTLNurSG4Dg1AQ_IqLfR2ZyqR4VRANE,2590
|
142
142
|
omdev/interp/types.py,sha256=Pr0wrVpNasoCw-ThEvKC5LG30Civ7YJ4EONwrwBLpy0,2516
|
143
143
|
omdev/interp/venvs.py,sha256=B46sYxamM2X5BG_5KNk07ERtCHFF5Aqz47EGcCZMtP4,3280
|
144
144
|
omdev/interp/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
145
145
|
omdev/interp/providers/base.py,sha256=aftoEB3FQInKKGDHDSjpnI33cOLBpxPM4Cw_yOuV1fQ,1288
|
146
|
-
omdev/interp/providers/inject.py,sha256=
|
147
|
-
omdev/interp/providers/running.py,sha256=
|
148
|
-
omdev/interp/providers/standalone.py,sha256=
|
146
|
+
omdev/interp/providers/inject.py,sha256=NSDFBQVD3ZR9Mf162XB9_VvTUAXGCRhPcrjVlYcFDJk,857
|
147
|
+
omdev/interp/providers/running.py,sha256=M3Ni41f-iHRVEySyxogensOfh1RkONQ91kIMrfurY_M,786
|
148
|
+
omdev/interp/providers/standalone.py,sha256=9YVU9uGGxDFidnGkQ1kSIvjKrFQyhWDu45gBboFVicI,7736
|
149
149
|
omdev/interp/providers/system.py,sha256=Lld7a-SZR9tELHxczm72gOYhjETM5nsz8r4l32y03vw,3991
|
150
150
|
omdev/interp/pyenv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
151
|
-
omdev/interp/pyenv/inject.py,sha256=
|
151
|
+
omdev/interp/pyenv/inject.py,sha256=Qj9nCnZn0eZMOx1jNAYi5f2RlIy8SHmN3maPK1ZDWwo,616
|
152
152
|
omdev/interp/pyenv/install.py,sha256=knsHpM9R7SRQ7sc9pKqNKEPCkN4e52q4YeSBBNhugpY,8352
|
153
|
-
omdev/interp/pyenv/provider.py,sha256=
|
154
|
-
omdev/interp/pyenv/pyenv.py,sha256=
|
153
|
+
omdev/interp/pyenv/provider.py,sha256=1VJuyBkGmY1ChZ1TY3ihuk7E-4p-MQjGbibzQlgVXPs,4456
|
154
|
+
omdev/interp/pyenv/pyenv.py,sha256=Kf1K80v0zcw1BmBQPLczH4dz770_js_ma4Sj4_XOEcU,2654
|
155
155
|
omdev/interp/uv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
156
|
-
omdev/interp/uv/inject.py,sha256=
|
157
|
-
omdev/interp/uv/provider.py,sha256=
|
158
|
-
omdev/interp/uv/uv.py,sha256
|
156
|
+
omdev/interp/uv/inject.py,sha256=nNCfjD-nrErM8wM__Z51rxqZjV3Cn0kE25jFAbkrPag,595
|
157
|
+
omdev/interp/uv/provider.py,sha256=Rq4VEB5rEMd5ZI3Jkk9fJO2JmRXQU36hlWTg1R3ymwE,1018
|
158
|
+
omdev/interp/uv/uv.py,sha256=-kp_1hkJemWxwh20isOApSU4uu87grU6mi643wRAtXE,1784
|
159
159
|
omdev/magic/__init__.py,sha256=CBzRB71RLyylkrj8dph6JUEddA8KSMJvDgriHqFfJGU,478
|
160
160
|
omdev/magic/__main__.py,sha256=1_BAKDtA6Rn5hswyl4S5J78BPRbynX4is_wQsD0U7jI,161
|
161
161
|
omdev/magic/cli.py,sha256=DL4V34hSh0yVEtPyl6C7RSYd_td9FOT9Zn7kkyQZhvU,1190
|
162
162
|
omdev/magic/find.py,sha256=n9v4XzkYAyh9MVAXRBSmiOlLgZSVbwLYrSJdQBx0G8s,6223
|
163
|
-
omdev/magic/magic.py,sha256=
|
164
|
-
omdev/magic/prepare.py,sha256=
|
165
|
-
omdev/magic/styles.py,sha256=
|
163
|
+
omdev/magic/magic.py,sha256=M1aOpp1eimbSxZSlKLbobXRZ15MoRrTtLWK-FQrxtGI,235
|
164
|
+
omdev/magic/prepare.py,sha256=SEOK-bl4zDxq0aphYXsEI-hCjbkV908VNnJt-dk0kL4,594
|
165
|
+
omdev/magic/styles.py,sha256=6LAL7XR3fkkH2rh-8nwUvdCYVHBkQxCfP0oEuPuw1Bg,670
|
166
166
|
omdev/manifests/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
167
167
|
omdev/manifests/__main__.py,sha256=JqyVDyV7_jo-NZ3wSs5clDU_xCMlxzJv-XFohoZWQ7E,174
|
168
168
|
omdev/manifests/build.py,sha256=HirTi1z0hC_XzUNmvLWsCapr6OrywYk7s1ZQmd-islA,11017
|
@@ -197,12 +197,12 @@ omdev/precheck/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
197
197
|
omdev/precheck/__main__.py,sha256=UEuS4z5-heIrwTtB-ONe1KeXJdqj8tYXMqWMpuO10so,165
|
198
198
|
omdev/precheck/base.py,sha256=fKdrfakq2u1UU1_JZFnl-non9bIAZMsSkVY1SMYn8xQ,662
|
199
199
|
omdev/precheck/caches.py,sha256=OZKP20DIj6OpUzdNwrjCufv1GzndEbsc7tLD-qHNv9g,1736
|
200
|
-
omdev/precheck/git.py,sha256=
|
201
|
-
omdev/precheck/imports.py,sha256=
|
202
|
-
omdev/precheck/lite.py,sha256=
|
200
|
+
omdev/precheck/git.py,sha256=O8rNQZ_vlHec0pOFbK6LOkbly5ZIUYT_HXRMqQX8GaI,774
|
201
|
+
omdev/precheck/imports.py,sha256=JS-j1YWi_4YL43053xITl6b35isRW-7ChoYoztufVn0,2549
|
202
|
+
omdev/precheck/lite.py,sha256=qd6nXWEVut8aBSRD_NxnxXGRNa9ue8mu8ND8rGLisE4,4710
|
203
203
|
omdev/precheck/main.py,sha256=VEPdq9n8Yo_HiDqfCdHH1pj3xuJgOzrXie_vWoNbKqw,4303
|
204
|
-
omdev/precheck/manifests.py,sha256=
|
205
|
-
omdev/precheck/scripts.py,sha256=
|
204
|
+
omdev/precheck/manifests.py,sha256=EZkChCc9aDlAZswVVvq696p4r3Vy7VBQUSfn6DXhUcc,778
|
205
|
+
omdev/precheck/scripts.py,sha256=SyHTVUVMTnBoTzcrWywfwxuUoIfpeV_EQcPQZyaht6c,1336
|
206
206
|
omdev/ptk/__init__.py,sha256=IemfBhxxqZe1GeZ2_IMQzqWAB5j0XyARp_aajnonyKY,5142
|
207
207
|
omdev/ptk/confirm.py,sha256=kObMUAu-EZC0vdT9LLwtbNA6YLLNmn-Uy18SQTWBTb8,1471
|
208
208
|
omdev/ptk/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -252,9 +252,9 @@ omdev/pyproject/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
252
252
|
omdev/pyproject/resources/docker-dev.sh,sha256=DHkz5D18jok_oDolfg2mqrvGRWFoCe9GQo04dR1czcc,838
|
253
253
|
omdev/pyproject/resources/python.sh,sha256=rFaN4SiJ9hdLDXXsDTwugI6zsw6EPkgYMmtacZeTbvw,749
|
254
254
|
omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
|
255
|
-
omdev/scripts/ci.py,sha256=
|
256
|
-
omdev/scripts/interp.py,sha256=
|
257
|
-
omdev/scripts/pyproject.py,sha256=
|
255
|
+
omdev/scripts/ci.py,sha256=IcEIPLYY92fdl-nEpTRSpNC3q_NNG91YpShloOGH450,358026
|
256
|
+
omdev/scripts/interp.py,sha256=SPoPSDco58C61CKUmu1OoFtld9zqYJ1IndBaDZpHUGo,158182
|
257
|
+
omdev/scripts/pyproject.py,sha256=n5sZwKVs8XuL-UikTTfRUwSG2e5RY-w3U6PIo66N5OE,267682
|
258
258
|
omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
|
259
259
|
omdev/scripts/tmpexec.py,sha256=WTYcf56Tj2qjYV14AWmV8SfT0u6Y8eIU6cKgQRvEK3c,1442
|
260
260
|
omdev/tokens/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -288,12 +288,12 @@ omdev/tools/git/consts.py,sha256=JuXivUNDkNhM4pe97icjRVAKM8cNRbrODquHINNKqOE,40
|
|
288
288
|
omdev/tools/git/messages.py,sha256=NWztIK0nAKJIOVzuVQcR_5LHZUgqyVkrOlpl7dFLMdU,2424
|
289
289
|
omdev/tools/json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
290
290
|
omdev/tools/json/__main__.py,sha256=wqpkN_NsQyNwKW4qjVj8ADJ4_C98KhrFBtE-Z1UamfU,168
|
291
|
-
omdev/tools/json/cli.py,sha256=
|
291
|
+
omdev/tools/json/cli.py,sha256=EivaqeBlHNzrOYkSUvvxDUia0TuyS4KPtxrPxvfqFi8,9994
|
292
292
|
omdev/tools/json/formats.py,sha256=0IXHUIkcbKnTVP0a53wYWsBMpfVtGTrHN04zRAs2JZo,2049
|
293
293
|
omdev/tools/json/io.py,sha256=sfj2hJS9Hy3aUR8a_lLzOrYcmL9fSKyvOHiofdUASsI,1427
|
294
|
-
omdev/tools/json/parsing.py,sha256=
|
295
|
-
omdev/tools/json/processing.py,sha256=
|
296
|
-
omdev/tools/json/rendering.py,sha256=
|
294
|
+
omdev/tools/json/parsing.py,sha256=fBqPEmeQAbqSfq2Wuu-0xT1Jr6aTB0SM_KMtaZb7Z_8,2055
|
295
|
+
omdev/tools/json/processing.py,sha256=KVMVyW5dTaoPyjn2Aabkay4tBn5cwJJXtLQaJgZI7ZY,2016
|
296
|
+
omdev/tools/json/rendering.py,sha256=gCVjNrgfaZoviJNWU8j7Pq4sz1EHYjOxsshC6OxWwDE,2561
|
297
297
|
omdev/tools/jsonview/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
298
298
|
omdev/tools/jsonview/__main__.py,sha256=BF-MVWpPJJeQYUqJA48G395kxw0lEJnV-hRLV_F9G2A,173
|
299
299
|
omdev/tools/jsonview/cli.py,sha256=8pHULS_xxDV00kM8bO5dLH7i-zqQIoNjXTKFwhxSZ_A,4245
|
@@ -303,9 +303,9 @@ omdev/tools/jsonview/resources/jsonview.js,sha256=faDvXDOXKvEvjOuIlz4D3F2ReQXb_b
|
|
303
303
|
omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
304
304
|
omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
|
305
305
|
omdev/tools/pawk/pawk.py,sha256=zsEkfQX0jF5bn712uqPAyBSdJt2dno1LH2oeSMNfXQI,11424
|
306
|
-
omdev-0.0.0.
|
307
|
-
omdev-0.0.0.
|
308
|
-
omdev-0.0.0.
|
309
|
-
omdev-0.0.0.
|
310
|
-
omdev-0.0.0.
|
311
|
-
omdev-0.0.0.
|
306
|
+
omdev-0.0.0.dev357.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
307
|
+
omdev-0.0.0.dev357.dist-info/METADATA,sha256=v6zON6tQfkSiWWzKCFx9oj3SqsXT0FY-9U9zybw--cQ,1674
|
308
|
+
omdev-0.0.0.dev357.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
309
|
+
omdev-0.0.0.dev357.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
|
310
|
+
omdev-0.0.0.dev357.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
|
311
|
+
omdev-0.0.0.dev357.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|