omdev 0.0.0.dev186__py3-none-any.whl → 0.0.0.dev188__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,21 @@
1
+ # ruff: noqa: UP006 UP007
2
+ """
3
+ uv run pip
4
+ uv run --python 3.11.6 pip
5
+ uv venv --python 3.11.6 --seed barf
6
+ python3 -m venv barf && barf/bin/pip install uv && barf/bin/uv venv --python 3.11.6 --seed barf2
7
+ """
8
+ import typing as ta
9
+
10
+ from ..providers.base import InterpProvider
11
+ from ..types import Interp
12
+ from ..types import InterpSpecifier
13
+ from ..types import InterpVersion
14
+
15
+
16
+ class UvInterpProvider(InterpProvider):
17
+ def get_installed_versions(self, spec: InterpSpecifier) -> ta.Awaitable[ta.Sequence[InterpVersion]]:
18
+ raise NotImplementedError
19
+
20
+ def get_installed_version(self, version: InterpVersion) -> ta.Awaitable[Interp]:
21
+ raise NotImplementedError
omdev/interp/uv/uv.py CHANGED
@@ -1,21 +1,66 @@
1
1
  # ruff: noqa: UP006 UP007
2
- """
3
- uv run pip
4
- uv run --python 3.11.6 pip
5
- uv venv --python 3.11.6 --seed barf
6
- python3 -m venv barf && barf/bin/pip install uv && barf/bin/uv venv --python 3.11.6 --seed barf2
7
- """
2
+ import dataclasses as dc
3
+ import logging
4
+ import os.path
5
+ import shutil
6
+ import sys
7
+ import tempfile
8
8
  import typing as ta
9
9
 
10
- from ..providers.base import InterpProvider
11
- from ..types import Interp
12
- from ..types import InterpSpecifier
13
- from ..types import InterpVersion
10
+ from omlish.asyncs.asyncio.subprocesses import asyncio_subprocesses
11
+ from omlish.lite.cached import async_cached_nullary
12
+ from omlish.lite.check import check
14
13
 
15
14
 
16
- class PyenvInterpProvider(InterpProvider):
17
- def get_installed_versions(self, spec: InterpSpecifier) -> ta.Awaitable[ta.Sequence[InterpVersion]]:
18
- raise NotImplementedError
15
+ @dc.dataclass(frozen=True)
16
+ class UvConfig:
17
+ ignore_path: bool = False
18
+ pip_bootstrap: bool = True
19
19
 
20
- def get_installed_version(self, version: InterpVersion) -> ta.Awaitable[Interp]:
21
- raise NotImplementedError
20
+
21
+ class Uv:
22
+ def __init__(
23
+ self,
24
+ config: UvConfig = UvConfig(),
25
+ *,
26
+ log: ta.Optional[logging.Logger] = None,
27
+ ) -> None:
28
+ super().__init__()
29
+
30
+ self._config = config
31
+ self._log = log
32
+
33
+ self._bootstrap_dir: ta.Optional[str] = None
34
+
35
+ def delete_bootstrap_dir(self) -> bool:
36
+ if (bs := self._bootstrap_dir) is None:
37
+ return False
38
+
39
+ shutil.rmtree(bs)
40
+ self._bootstrap_dir = None
41
+ return True
42
+
43
+ @async_cached_nullary
44
+ async def uv_exe(self) -> ta.Optional[str]:
45
+ if not self._config.ignore_path and (uv := shutil.which('uv')):
46
+ return uv
47
+
48
+ if self._config.pip_bootstrap:
49
+ if (bd := self._bootstrap_dir) is None:
50
+ bd = self._bootstrap_dir = tempfile.mkdtemp()
51
+
52
+ if self._log is not None:
53
+ self._log.info(f'Bootstrapping uv into %s', bd)
54
+
55
+ vn = 'uv-bootstrap'
56
+ await asyncio_subprocesses.check_call(os.path.realpath(sys.executable), '-m', 'venv', vn, cwd=bd)
57
+
58
+ vx = os.path.join(bd, vn, 'bin', 'python3')
59
+ await asyncio_subprocesses.check_call(vx, '-m', 'pip', 'install', 'uv', cwd=bd)
60
+
61
+ ux = os.path.join(bd, vn, 'bin', 'uv')
62
+ check.state(os.path.isfile(ux))
63
+
64
+ return ux
65
+
66
+ return None
@@ -3,10 +3,10 @@ import json
3
3
  import typing as ta
4
4
 
5
5
  from omlish import lang
6
- from omlish import term
7
6
  from omlish.formats.json.render import JsonRenderer
8
7
  from omlish.formats.json.stream.parse import JsonStreamParserEvent
9
8
  from omlish.formats.json.stream.render import StreamJsonRenderer
9
+ from omlish.term import codes as tc
10
10
 
11
11
 
12
12
  ##
@@ -43,9 +43,9 @@ class Renderer(lang.Abstract):
43
43
 
44
44
  def term_color(o: ta.Any, state: JsonRenderer.State) -> tuple[str, str]:
45
45
  if state is JsonRenderer.State.KEY:
46
- return term.SGR(term.SGRs.FG.BRIGHT_BLUE), term.SGR(term.SGRs.RESET)
46
+ return tc.SGR(tc.SGRs.FG.BRIGHT_BLUE), tc.SGR(tc.SGRs.RESET)
47
47
  elif isinstance(o, str):
48
- return term.SGR(term.SGRs.FG.GREEN), term.SGR(term.SGRs.RESET)
48
+ return tc.SGR(tc.SGRs.FG.GREEN), tc.SGR(tc.SGRs.RESET)
49
49
  else:
50
50
  return '', ''
51
51
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev186
3
+ Version: 0.0.0.dev188
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.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev186
15
+ Requires-Dist: omlish==0.0.0.dev188
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -102,7 +102,8 @@ omdev/interp/pyenv/provider.py,sha256=RvPWnT5Fpj85gYxfw9o8E4kNtgvM0AcXk8_7FUk7rT
102
102
  omdev/interp/pyenv/pyenv.py,sha256=1Gt77di-lxeje9SnNYCWhYRo7CHdhTWZD0whvPanNP8,2643
103
103
  omdev/interp/uv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
104
  omdev/interp/uv/inject.py,sha256=3nHYu8qQMbV5iXdp-ItzNtfYE0zkIxrzmt7QdV7WiXU,314
105
- omdev/interp/uv/uv.py,sha256=oP4V6WJ0aYLIzFwkIvKMPLD_5HxppTuhd8fvtz6UoXs,671
105
+ omdev/interp/uv/provider.py,sha256=_4EoNPv1pDK8d_r1z_eES1pEW6ci4UPvefYWGOWeSPg,668
106
+ omdev/interp/uv/uv.py,sha256=O1fArTkjwddVYyFe0hL1tB2TIUoCX8CD0FCRRfnD9T0,1773
106
107
  omdev/magic/__init__.py,sha256=CBzRB71RLyylkrj8dph6JUEddA8KSMJvDgriHqFfJGU,478
107
108
  omdev/magic/__main__.py,sha256=1_BAKDtA6Rn5hswyl4S5J78BPRbynX4is_wQsD0U7jI,161
108
109
  omdev/magic/cli.py,sha256=puL5Snnc-i9Dpa3AU8DtaCp5qUd_7RXwv-qWU_B2fa8,1184
@@ -176,13 +177,13 @@ omdev/tools/json/formats.py,sha256=XHabWAQnAQ9uNS7fHu3mdgxoptWw00RVLq08uadD6kk,1
176
177
  omdev/tools/json/io.py,sha256=sfj2hJS9Hy3aUR8a_lLzOrYcmL9fSKyvOHiofdUASsI,1427
177
178
  omdev/tools/json/parsing.py,sha256=YOeTRY6Gd89EfcHvqXO5PRWJ3IgRCpNnI54Lb_N3v2k,2183
178
179
  omdev/tools/json/processing.py,sha256=iFm5VqaxJ97WHaun2ed7NEjMxhFeJqf28bLNfoDJft0,1209
179
- omdev/tools/json/rendering.py,sha256=jNShMfCpFR9-Kcn6cUFuOChXHjg71diuTC4x7Ofmz-o,2240
180
+ omdev/tools/json/rendering.py,sha256=tMcjOW5edfozcMSTxxvF7WVTsbYLoe9bCKFh50qyaGw,2236
180
181
  omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
181
182
  omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
182
183
  omdev/tools/pawk/pawk.py,sha256=Eckymn22GfychCQcQi96BFqRo_LmiJ-EPhC8TTUJdB4,11446
183
- omdev-0.0.0.dev186.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
184
- omdev-0.0.0.dev186.dist-info/METADATA,sha256=n1DjkU4Ead9mMdvVOcpX3-1l__8nVDBU7QhdhaGiwhE,1760
185
- omdev-0.0.0.dev186.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
186
- omdev-0.0.0.dev186.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
187
- omdev-0.0.0.dev186.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
188
- omdev-0.0.0.dev186.dist-info/RECORD,,
184
+ omdev-0.0.0.dev188.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
185
+ omdev-0.0.0.dev188.dist-info/METADATA,sha256=cjKh_dFXi5T7txrXI8xzK1sTpgYVo3kY1dxENbUnhsE,1760
186
+ omdev-0.0.0.dev188.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
187
+ omdev-0.0.0.dev188.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
188
+ omdev-0.0.0.dev188.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
189
+ omdev-0.0.0.dev188.dist-info/RECORD,,