omdev 0.0.0.dev440__py3-none-any.whl → 0.0.0.dev495__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.
Potentially problematic release.
This version of omdev might be problematic. Click here for more details.
- omdev/.omlish-manifests.json +18 -30
- omdev/README.md +51 -0
- omdev/__about__.py +11 -7
- omdev/amalg/gen/gen.py +49 -6
- omdev/amalg/gen/imports.py +1 -1
- omdev/amalg/gen/manifests.py +1 -1
- omdev/amalg/gen/resources.py +1 -1
- omdev/amalg/gen/srcfiles.py +13 -3
- omdev/amalg/gen/strip.py +1 -1
- omdev/amalg/gen/types.py +1 -1
- omdev/amalg/gen/typing.py +1 -1
- omdev/amalg/info.py +32 -0
- omdev/cache/data/actions.py +1 -1
- omdev/cache/data/specs.py +1 -1
- omdev/cexts/_boilerplate.cc +2 -3
- omdev/cexts/cmake.py +4 -1
- omdev/ci/cli.py +2 -3
- omdev/cli/clicli.py +37 -7
- omdev/cmdlog/cli.py +1 -2
- omdev/dataclasses/_dumping.py +1960 -0
- omdev/dataclasses/_template.py +22 -0
- omdev/dataclasses/cli.py +7 -2
- omdev/dataclasses/codegen.py +340 -60
- omdev/dataclasses/dumping.py +200 -0
- omdev/interp/cli.py +1 -1
- omdev/interp/types.py +3 -2
- omdev/interp/uv/provider.py +37 -0
- omdev/interp/venvs.py +1 -0
- omdev/irc/messages/base.py +50 -0
- omdev/irc/messages/formats.py +92 -0
- omdev/irc/messages/messages.py +775 -0
- omdev/irc/messages/parsing.py +99 -0
- omdev/irc/numerics/__init__.py +0 -0
- omdev/irc/numerics/formats.py +97 -0
- omdev/irc/numerics/numerics.py +865 -0
- omdev/irc/numerics/types.py +59 -0
- omdev/irc/protocol/LICENSE +11 -0
- omdev/irc/protocol/__init__.py +61 -0
- omdev/irc/protocol/consts.py +6 -0
- omdev/irc/protocol/errors.py +30 -0
- omdev/irc/protocol/message.py +21 -0
- omdev/irc/protocol/nuh.py +55 -0
- omdev/irc/protocol/parsing.py +158 -0
- omdev/irc/protocol/rendering.py +153 -0
- omdev/irc/protocol/tags.py +102 -0
- omdev/irc/protocol/utils.py +30 -0
- omdev/manifests/_dumping.py +125 -25
- omdev/manifests/main.py +1 -1
- omdev/markdown/__init__.py +0 -0
- omdev/markdown/incparse.py +116 -0
- omdev/markdown/tokens.py +51 -0
- omdev/packaging/marshal.py +8 -8
- omdev/packaging/requires.py +6 -6
- omdev/packaging/revisions.py +1 -1
- omdev/packaging/specifiers.py +2 -1
- omdev/packaging/versions.py +4 -4
- omdev/packaging/wheelfile.py +2 -0
- omdev/precheck/blanklines.py +66 -0
- omdev/precheck/caches.py +1 -1
- omdev/precheck/imports.py +14 -1
- omdev/precheck/main.py +4 -3
- omdev/precheck/unicode.py +39 -15
- omdev/py/asts/__init__.py +0 -0
- omdev/py/asts/parents.py +28 -0
- omdev/py/asts/toplevel.py +123 -0
- omdev/py/asts/visitors.py +18 -0
- omdev/py/attrdocs.py +1 -1
- omdev/py/bracepy.py +12 -4
- omdev/py/reprs.py +32 -0
- omdev/py/srcheaders.py +1 -1
- omdev/py/tokens/__init__.py +0 -0
- omdev/py/tools/mkrelimp.py +1 -1
- omdev/py/tools/pipdepup.py +686 -0
- omdev/pyproject/cli.py +1 -1
- omdev/pyproject/pkg.py +190 -45
- omdev/pyproject/reqs.py +31 -9
- omdev/pyproject/tools/__init__.py +0 -0
- omdev/pyproject/tools/aboutdeps.py +60 -0
- omdev/pyproject/venvs.py +8 -1
- omdev/rs/__init__.py +0 -0
- omdev/scripts/ci.py +752 -98
- omdev/scripts/interp.py +232 -39
- omdev/scripts/lib/inject.py +74 -27
- omdev/scripts/lib/logs.py +187 -43
- omdev/scripts/lib/marshal.py +67 -25
- omdev/scripts/pyproject.py +1369 -143
- omdev/tools/git/cli.py +10 -0
- omdev/tools/json/formats.py +2 -0
- omdev/tools/json/processing.py +5 -2
- omdev/tools/jsonview/cli.py +49 -65
- omdev/tools/jsonview/resources/jsonview.html.j2 +43 -0
- omdev/tools/pawk/README.md +195 -0
- omdev/tools/pawk/pawk.py +2 -2
- omdev/tools/pip.py +8 -0
- omdev/tui/__init__.py +0 -0
- omdev/tui/apps/__init__.py +0 -0
- omdev/tui/apps/edit/__init__.py +0 -0
- omdev/tui/apps/edit/main.py +167 -0
- omdev/tui/apps/irc/__init__.py +0 -0
- omdev/tui/apps/irc/__main__.py +4 -0
- omdev/tui/apps/irc/app.py +286 -0
- omdev/tui/apps/irc/client.py +187 -0
- omdev/tui/apps/irc/commands.py +175 -0
- omdev/tui/apps/irc/main.py +26 -0
- omdev/tui/apps/markdown/__init__.py +0 -0
- omdev/tui/apps/markdown/__main__.py +11 -0
- omdev/{ptk → tui/apps}/markdown/cli.py +5 -7
- omdev/tui/rich/__init__.py +46 -0
- omdev/tui/rich/console2.py +20 -0
- omdev/tui/rich/markdown2.py +186 -0
- omdev/tui/textual/__init__.py +265 -0
- omdev/tui/textual/app2.py +16 -0
- omdev/tui/textual/autocomplete/LICENSE +21 -0
- omdev/tui/textual/autocomplete/__init__.py +33 -0
- omdev/tui/textual/autocomplete/matching.py +226 -0
- omdev/tui/textual/autocomplete/paths.py +202 -0
- omdev/tui/textual/autocomplete/widget.py +612 -0
- omdev/tui/textual/debug/__init__.py +10 -0
- omdev/tui/textual/debug/dominfo.py +151 -0
- omdev/tui/textual/debug/screen.py +24 -0
- omdev/tui/textual/devtools.py +187 -0
- omdev/tui/textual/drivers2.py +55 -0
- omdev/tui/textual/logging2.py +20 -0
- omdev/tui/textual/types.py +45 -0
- {omdev-0.0.0.dev440.dist-info → omdev-0.0.0.dev495.dist-info}/METADATA +15 -9
- {omdev-0.0.0.dev440.dist-info → omdev-0.0.0.dev495.dist-info}/RECORD +135 -80
- omdev/ptk/__init__.py +0 -103
- omdev/ptk/apps/ncdu.py +0 -167
- omdev/ptk/confirm.py +0 -60
- omdev/ptk/markdown/LICENSE +0 -22
- omdev/ptk/markdown/__init__.py +0 -10
- omdev/ptk/markdown/__main__.py +0 -11
- omdev/ptk/markdown/border.py +0 -94
- omdev/ptk/markdown/markdown.py +0 -390
- omdev/ptk/markdown/parser.py +0 -42
- omdev/ptk/markdown/styles.py +0 -29
- omdev/ptk/markdown/tags.py +0 -299
- omdev/ptk/markdown/utils.py +0 -366
- omdev/pyproject/cexts.py +0 -110
- /omdev/{ptk/apps → irc}/__init__.py +0 -0
- /omdev/{tokens → irc/messages}/__init__.py +0 -0
- /omdev/{tokens → py/tokens}/all.py +0 -0
- /omdev/{tokens → py/tokens}/tokenizert.py +0 -0
- /omdev/{tokens → py/tokens}/utils.py +0 -0
- {omdev-0.0.0.dev440.dist-info → omdev-0.0.0.dev495.dist-info}/WHEEL +0 -0
- {omdev-0.0.0.dev440.dist-info → omdev-0.0.0.dev495.dist-info}/entry_points.txt +0 -0
- {omdev-0.0.0.dev440.dist-info → omdev-0.0.0.dev495.dist-info}/licenses/LICENSE +0 -0
- {omdev-0.0.0.dev440.dist-info → omdev-0.0.0.dev495.dist-info}/top_level.txt +0 -0
omdev/interp/uv/provider.py
CHANGED
|
@@ -4,7 +4,10 @@ uv run pip
|
|
|
4
4
|
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
|
+
uv python find '3.13.10'
|
|
8
|
+
uv python list --output-format=json
|
|
7
9
|
"""
|
|
10
|
+
import dataclasses as dc
|
|
8
11
|
import typing as ta
|
|
9
12
|
|
|
10
13
|
from omlish.logs.protocols import LoggerLike
|
|
@@ -20,6 +23,34 @@ from .uv import Uv
|
|
|
20
23
|
##
|
|
21
24
|
|
|
22
25
|
|
|
26
|
+
@dc.dataclass(frozen=True)
|
|
27
|
+
class UvPythonListOutput:
|
|
28
|
+
key: str
|
|
29
|
+
version: str
|
|
30
|
+
|
|
31
|
+
@dc.dataclass(frozen=True)
|
|
32
|
+
class VersionParts:
|
|
33
|
+
major: int
|
|
34
|
+
minor: int
|
|
35
|
+
patch: int
|
|
36
|
+
|
|
37
|
+
version_parts: VersionParts
|
|
38
|
+
|
|
39
|
+
path: ta.Optional[str]
|
|
40
|
+
symlink: ta.Optional[str]
|
|
41
|
+
|
|
42
|
+
url: str
|
|
43
|
+
|
|
44
|
+
os: str # emscripten linux macos
|
|
45
|
+
variant: str # default freethreaded
|
|
46
|
+
implementation: str # cpython graalpy pyodide pypy
|
|
47
|
+
arch: str # aarch64 wasm32 x86_64
|
|
48
|
+
libc: str # gnu musl none
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
##
|
|
52
|
+
|
|
53
|
+
|
|
23
54
|
class UvInterpProvider(InterpProvider):
|
|
24
55
|
def __init__(
|
|
25
56
|
self,
|
|
@@ -39,3 +70,9 @@ class UvInterpProvider(InterpProvider):
|
|
|
39
70
|
|
|
40
71
|
async def get_installed_version(self, version: InterpVersion) -> Interp:
|
|
41
72
|
raise NotImplementedError
|
|
73
|
+
|
|
74
|
+
# async def get_installable_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
|
|
75
|
+
# return []
|
|
76
|
+
|
|
77
|
+
# async def install_version(self, version: InterpVersion) -> Interp:
|
|
78
|
+
# raise TypeError
|
omdev/interp/venvs.py
CHANGED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import typing as ta
|
|
2
|
+
|
|
3
|
+
from omlish import check
|
|
4
|
+
from omlish import dataclasses as dc
|
|
5
|
+
from omlish.funcs import pairs as fps
|
|
6
|
+
|
|
7
|
+
from ..numerics import numerics as nr
|
|
8
|
+
from .formats import MessageFormat
|
|
9
|
+
from .formats import MessageParamsUnpacker
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
##
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class Message(dc.Case):
|
|
16
|
+
FORMAT: ta.ClassVar[MessageFormat]
|
|
17
|
+
REPLIES: ta.ClassVar[ta.Collection[nr.NumericReply]] = ()
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
##
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def list_pair_params_unpacker(
|
|
24
|
+
kwarg: str,
|
|
25
|
+
key_param: str,
|
|
26
|
+
value_param: str,
|
|
27
|
+
) -> MessageParamsUnpacker:
|
|
28
|
+
def forward(params: ta.Mapping[str, str]) -> ta.Mapping[str, ta.Any]:
|
|
29
|
+
out: dict = dict(params)
|
|
30
|
+
ks = out.pop(key_param)
|
|
31
|
+
vs = out.pop(value_param, None)
|
|
32
|
+
if vs is not None:
|
|
33
|
+
out[kwarg] = list(zip(ks, vs, strict=True))
|
|
34
|
+
else:
|
|
35
|
+
out[kwarg] = ks
|
|
36
|
+
return out
|
|
37
|
+
|
|
38
|
+
def backward(kwargs: ta.Mapping[str, ta.Any]) -> ta.Mapping[str, str]:
|
|
39
|
+
out: dict = dict(kwargs)
|
|
40
|
+
ts = out.pop(kwarg)
|
|
41
|
+
is_ts = check.single({isinstance(e, tuple) for e in ts})
|
|
42
|
+
if is_ts:
|
|
43
|
+
ks, vs = zip(*ts)
|
|
44
|
+
out[key_param] = ks
|
|
45
|
+
out[value_param] = vs
|
|
46
|
+
else:
|
|
47
|
+
out[key_param] = ts
|
|
48
|
+
return out
|
|
49
|
+
|
|
50
|
+
return fps.of(forward, backward)
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import enum
|
|
2
|
+
import typing as ta
|
|
3
|
+
|
|
4
|
+
from omlish import check
|
|
5
|
+
from omlish import dataclasses as dc
|
|
6
|
+
from omlish import lang
|
|
7
|
+
from omlish.funcs import pairs as fps
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
MessageParamsUnpacker: ta.TypeAlias = fps.FnPair[
|
|
11
|
+
ta.Mapping[str, str], # params
|
|
12
|
+
ta.Mapping[str, ta.Any], # kwargs
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
##
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class MessageFormat(dc.Frozen, final=True):
|
|
20
|
+
name: str
|
|
21
|
+
|
|
22
|
+
class Param(dc.Case):
|
|
23
|
+
@classmethod
|
|
24
|
+
def of(cls, obj: ta.Any) -> 'MessageFormat.Param':
|
|
25
|
+
if isinstance(obj, MessageFormat.Param):
|
|
26
|
+
return obj
|
|
27
|
+
|
|
28
|
+
elif isinstance(obj, str):
|
|
29
|
+
s = check.non_empty_str(obj)
|
|
30
|
+
|
|
31
|
+
optional = False
|
|
32
|
+
if s.startswith('?'):
|
|
33
|
+
optional = True
|
|
34
|
+
s = s[1:]
|
|
35
|
+
|
|
36
|
+
arity = MessageFormat.KwargParam.Arity.SINGLE
|
|
37
|
+
if s.startswith('*'):
|
|
38
|
+
arity = MessageFormat.KwargParam.Arity.VARIADIC
|
|
39
|
+
s = s[1:]
|
|
40
|
+
|
|
41
|
+
elif s.startswith(','):
|
|
42
|
+
arity = MessageFormat.KwargParam.Arity.COMMA_LIST
|
|
43
|
+
s = s[1:]
|
|
44
|
+
|
|
45
|
+
return MessageFormat.KwargParam(
|
|
46
|
+
s,
|
|
47
|
+
optional=optional,
|
|
48
|
+
arity=arity,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
else:
|
|
52
|
+
raise TypeError(obj)
|
|
53
|
+
|
|
54
|
+
class KwargParam(Param):
|
|
55
|
+
name: str = dc.xfield(validate=lang.is_ident)
|
|
56
|
+
|
|
57
|
+
optional: bool = False
|
|
58
|
+
|
|
59
|
+
class Arity(enum.Enum):
|
|
60
|
+
SINGLE = enum.auto() # <foo>
|
|
61
|
+
VARIADIC = enum.auto() # <foo>{ <foo>}
|
|
62
|
+
COMMA_LIST = enum.auto() # <foo>{,<foo>}
|
|
63
|
+
|
|
64
|
+
arity: Arity = Arity.SINGLE
|
|
65
|
+
|
|
66
|
+
class LiteralParam(Param):
|
|
67
|
+
text: str
|
|
68
|
+
|
|
69
|
+
params: ta.Sequence[Param]
|
|
70
|
+
|
|
71
|
+
_: dc.KW_ONLY
|
|
72
|
+
|
|
73
|
+
unpack_params: MessageParamsUnpacker | None = None
|
|
74
|
+
|
|
75
|
+
@dc.init
|
|
76
|
+
def _validate_params(self) -> None:
|
|
77
|
+
kws = [p for p in self.params if isinstance(p, MessageFormat.KwargParam)]
|
|
78
|
+
check.unique(p.name for p in kws)
|
|
79
|
+
check.state(all(p.arity is not MessageFormat.KwargParam.Arity.VARIADIC for p in kws[:-1]))
|
|
80
|
+
|
|
81
|
+
@classmethod
|
|
82
|
+
def of(
|
|
83
|
+
cls,
|
|
84
|
+
name: str,
|
|
85
|
+
*params: ta.Any,
|
|
86
|
+
**kwargs: ta.Any,
|
|
87
|
+
) -> 'MessageFormat':
|
|
88
|
+
return cls(
|
|
89
|
+
name,
|
|
90
|
+
[MessageFormat.Param.of(p) for p in params],
|
|
91
|
+
**kwargs,
|
|
92
|
+
)
|