omdev 0.0.0.dev416__py3-none-any.whl → 0.0.0.dev500__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/{.manifests.json → .omlish-manifests.json} +23 -47
- omdev/README.md +51 -0
- omdev/__about__.py +12 -8
- omdev/amalg/cli/main.py +1 -2
- 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 +26 -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/compute/storage.py +3 -1
- omdev/cache/data/actions.py +1 -1
- omdev/cache/data/cache.py +2 -2
- omdev/cache/data/specs.py +1 -1
- omdev/cexts/_boilerplate.cc +2 -3
- omdev/cexts/_distutils/build_ext.py +5 -2
- omdev/cexts/_distutils/compilers/ccompiler.py +5 -2
- omdev/cexts/_distutils/compilers/options.py +3 -0
- omdev/cexts/_distutils/compilers/unixccompiler.py +6 -2
- omdev/cexts/_distutils/dir_util.py +6 -2
- omdev/cexts/_distutils/errors.py +3 -0
- omdev/cexts/_distutils/extension.py +3 -0
- omdev/cexts/_distutils/file_util.py +6 -2
- omdev/cexts/_distutils/modified.py +3 -0
- omdev/cexts/_distutils/spawn.py +6 -2
- omdev/cexts/_distutils/sysconfig.py +3 -0
- omdev/cexts/_distutils/util.py +6 -2
- omdev/cexts/_distutils/version.py +3 -0
- omdev/cexts/cmake.py +5 -3
- omdev/cexts/scan.py +1 -2
- omdev/ci/cache.py +7 -3
- omdev/ci/cli.py +6 -4
- omdev/ci/docker/buildcaching.py +3 -1
- omdev/ci/docker/cache.py +2 -1
- omdev/ci/docker/cacheserved/cache.py +4 -1
- omdev/ci/docker/cacheserved/manifests.py +2 -2
- omdev/ci/docker/dataserver.py +2 -2
- omdev/ci/docker/imagepulling.py +2 -1
- omdev/ci/docker/packing.py +1 -1
- omdev/ci/docker/repositories.py +2 -1
- omdev/ci/github/api/clients.py +8 -4
- omdev/ci/github/api/v1/client.py +4 -1
- omdev/ci/github/api/v2/api.py +2 -0
- omdev/ci/github/api/v2/azure.py +4 -1
- omdev/ci/github/api/v2/client.py +4 -1
- omdev/cli/clicli.py +37 -7
- omdev/clipboard/clipboard.py +1 -1
- omdev/cmake.py +2 -1
- 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 +342 -62
- omdev/dataclasses/dumping.py +200 -0
- omdev/dataserver/handlers.py +3 -2
- omdev/dataserver/targets.py +2 -2
- omdev/imgur.py +2 -2
- omdev/interp/cli.py +1 -1
- omdev/interp/inspect.py +2 -1
- omdev/interp/providers/base.py +3 -2
- omdev/interp/providers/standalone.py +4 -1
- omdev/interp/providers/system.py +2 -2
- omdev/interp/pyenv/install.py +2 -1
- omdev/interp/pyenv/provider.py +2 -2
- omdev/interp/types.py +3 -2
- omdev/interp/uv/provider.py +40 -2
- omdev/interp/uv/uv.py +2 -2
- omdev/interp/venvs.py +3 -2
- 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/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 +529 -136
- omdev/manifests/building.py +6 -3
- 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/oci/data.py +2 -2
- omdev/oci/datarefs.py +2 -2
- omdev/oci/media.py +2 -2
- omdev/oci/repositories.py +3 -2
- omdev/packaging/marshal.py +9 -9
- omdev/packaging/requires.py +6 -6
- omdev/packaging/revisions.py +5 -2
- omdev/packaging/specifiers.py +41 -42
- omdev/packaging/versions.py +10 -10
- omdev/packaging/wheelfile.py +4 -2
- omdev/precheck/blanklines.py +66 -0
- omdev/precheck/caches.py +1 -1
- omdev/precheck/imports.py +14 -1
- omdev/precheck/lite.py +2 -2
- omdev/precheck/main.py +5 -5
- 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 +6 -7
- omdev/py/bracepy.py +12 -4
- omdev/py/docstrings/numpydoc.py +4 -4
- omdev/py/reprs.py +32 -0
- omdev/py/scripts/execstat.py +31 -26
- omdev/py/srcheaders.py +1 -1
- omdev/py/tokens/__init__.py +0 -0
- omdev/{tokens → py/tokens}/utils.py +2 -1
- omdev/py/tools/importscan.py +2 -2
- omdev/py/tools/mkrelimp.py +3 -4
- omdev/py/tools/pipdepup.py +686 -0
- omdev/pyproject/cli.py +1 -1
- omdev/pyproject/pkg.py +197 -48
- omdev/pyproject/reqs.py +36 -10
- omdev/pyproject/tools/__init__.py +0 -0
- omdev/pyproject/tools/aboutdeps.py +60 -0
- omdev/pyproject/venvs.py +12 -2
- omdev/rs/__init__.py +0 -0
- omdev/scripts/ci.py +9551 -6982
- omdev/scripts/interp.py +1323 -892
- omdev/scripts/lib/__init__.py +0 -0
- omdev/scripts/lib/inject.py +2086 -0
- omdev/scripts/lib/logs.py +2175 -0
- omdev/scripts/lib/marshal.py +1731 -0
- omdev/scripts/pyproject.py +4979 -1874
- omdev/tools/docker.py +19 -7
- omdev/tools/git/cli.py +56 -16
- omdev/tools/git/messages.py +2 -2
- omdev/tools/json/cli.py +6 -6
- omdev/tools/json/formats.py +2 -0
- omdev/tools/json/parsing.py +5 -5
- omdev/tools/json/processing.py +6 -3
- omdev/tools/json/rendering.py +2 -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.dev416.dist-info → omdev-0.0.0.dev500.dist-info}/METADATA +18 -12
- omdev-0.0.0.dev500.dist-info/RECORD +386 -0
- 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/tools/antlr/__main__.py +0 -11
- omdev/tools/antlr/cli.py +0 -62
- omdev/tools/antlr/consts.py +0 -7
- omdev/tools/antlr/gen.py +0 -188
- omdev-0.0.0.dev416.dist-info/RECORD +0 -332
- /omdev/{ptk/apps → irc}/__init__.py +0 -0
- /omdev/{tokens → irc/messages}/__init__.py +0 -0
- /omdev/{tools/antlr → irc/numerics}/__init__.py +0 -0
- /omdev/{tokens → py/tokens}/all.py +0 -0
- /omdev/{tokens → py/tokens}/tokenizert.py +0 -0
- {omdev-0.0.0.dev416.dist-info → omdev-0.0.0.dev500.dist-info}/WHEEL +0 -0
- {omdev-0.0.0.dev416.dist-info → omdev-0.0.0.dev500.dist-info}/entry_points.txt +0 -0
- {omdev-0.0.0.dev416.dist-info → omdev-0.0.0.dev500.dist-info}/licenses/LICENSE +0 -0
- {omdev-0.0.0.dev416.dist-info → omdev-0.0.0.dev500.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import typing as ta
|
|
2
|
+
|
|
3
|
+
from omlish import dataclasses as dc
|
|
4
|
+
|
|
5
|
+
from .base import Message
|
|
6
|
+
from .formats import MessageFormat
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ParseError(Exception):
|
|
13
|
+
pass
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def parse_message(cls: type[Message], params: ta.Sequence[str]) -> Message:
|
|
17
|
+
mf = cls.FORMAT
|
|
18
|
+
|
|
19
|
+
kws: dict = {}
|
|
20
|
+
i = 0
|
|
21
|
+
for fp in mf.params:
|
|
22
|
+
if isinstance(fp, MessageFormat.KwargParam):
|
|
23
|
+
if i >= len(params):
|
|
24
|
+
if not fp.optional:
|
|
25
|
+
raise ParseError(f'Missing param: {fp.name}')
|
|
26
|
+
continue
|
|
27
|
+
|
|
28
|
+
kv: ta.Any
|
|
29
|
+
if (ar := fp.arity) is MessageFormat.KwargParam.Arity.SINGLE:
|
|
30
|
+
kv = params[i]
|
|
31
|
+
i += 1
|
|
32
|
+
|
|
33
|
+
elif ar is MessageFormat.KwargParam.Arity.VARIADIC:
|
|
34
|
+
kv = params[i:]
|
|
35
|
+
i = len(params)
|
|
36
|
+
|
|
37
|
+
elif ar is MessageFormat.KwargParam.Arity.COMMA_LIST:
|
|
38
|
+
kv = params[i].split(',')
|
|
39
|
+
i += 1
|
|
40
|
+
|
|
41
|
+
else:
|
|
42
|
+
raise TypeError(ar)
|
|
43
|
+
|
|
44
|
+
kws[fp.name] = kv
|
|
45
|
+
|
|
46
|
+
elif isinstance(fp, MessageFormat.LiteralParam):
|
|
47
|
+
if i >= len(params):
|
|
48
|
+
raise ParseError('Missing literal param')
|
|
49
|
+
|
|
50
|
+
pv = params[i]
|
|
51
|
+
if fp.text != pv:
|
|
52
|
+
raise ParseError(f'Unexpected literal: {pv}')
|
|
53
|
+
i += 1
|
|
54
|
+
|
|
55
|
+
else:
|
|
56
|
+
raise TypeError(fp)
|
|
57
|
+
|
|
58
|
+
if i != len(params):
|
|
59
|
+
raise ParseError('Unconsumed params')
|
|
60
|
+
|
|
61
|
+
if (up := mf.unpack_params) is not None:
|
|
62
|
+
kws = dict(up(kws))
|
|
63
|
+
|
|
64
|
+
return cls(**kws)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
##
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class UnparsedMessage(ta.NamedTuple):
|
|
71
|
+
name: str
|
|
72
|
+
params: ta.Sequence[str]
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def unparse_message(msg: Message) -> UnparsedMessage:
|
|
76
|
+
mf = msg.FORMAT
|
|
77
|
+
|
|
78
|
+
kws = {k: v for k, v in dc.asdict(msg).items() if v is not None}
|
|
79
|
+
|
|
80
|
+
if (up := mf.unpack_params) is not None:
|
|
81
|
+
kws = dict(up.backward(kws))
|
|
82
|
+
|
|
83
|
+
params = []
|
|
84
|
+
|
|
85
|
+
for fp in mf.params:
|
|
86
|
+
if isinstance(fp, MessageFormat.KwargParam):
|
|
87
|
+
# FIXME
|
|
88
|
+
raise NotImplementedError
|
|
89
|
+
|
|
90
|
+
elif isinstance(fp, MessageFormat.LiteralParam):
|
|
91
|
+
params.append(fp.text)
|
|
92
|
+
|
|
93
|
+
else:
|
|
94
|
+
raise TypeError(fp)
|
|
95
|
+
|
|
96
|
+
return UnparsedMessage(
|
|
97
|
+
name=mf.name,
|
|
98
|
+
params=params,
|
|
99
|
+
)
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import dataclasses as dc
|
|
2
|
+
import typing as ta
|
|
3
|
+
|
|
4
|
+
from omlish import check
|
|
5
|
+
from omlish import lang
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
FormatPart: ta.TypeAlias = ta.Union[str, 'Formats.Optional', 'Formats.Variadic']
|
|
9
|
+
FormatParts: ta.TypeAlias = ta.Sequence[FormatPart]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
##
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class Formats(lang.Namespace):
|
|
16
|
+
@dc.dataclass(frozen=True)
|
|
17
|
+
class Name:
|
|
18
|
+
name: str
|
|
19
|
+
|
|
20
|
+
@dc.dataclass(frozen=True)
|
|
21
|
+
class Optional:
|
|
22
|
+
body: FormatParts
|
|
23
|
+
|
|
24
|
+
@dc.dataclass(frozen=True)
|
|
25
|
+
class Variadic:
|
|
26
|
+
body: FormatParts
|
|
27
|
+
|
|
28
|
+
#
|
|
29
|
+
|
|
30
|
+
_PARTS_BY_DELIMITERS: ta.Mapping[tuple[str, str], type] = {
|
|
31
|
+
('[', ']'): Optional,
|
|
32
|
+
('{', '}'): Variadic,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
_DELIMITERS_BY_PARTS: ta.Mapping[type, tuple[str, str]] = {v: k for k, v in _PARTS_BY_DELIMITERS.items()}
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
|
|
39
|
+
@staticmethod
|
|
40
|
+
def split_parts(s: str) -> FormatParts:
|
|
41
|
+
stk: list[tuple[str, list]] = [('', [])]
|
|
42
|
+
|
|
43
|
+
p = 0
|
|
44
|
+
while p < len(s):
|
|
45
|
+
n = lang.find_any(s, '{}[]<', p)
|
|
46
|
+
|
|
47
|
+
if n < 0:
|
|
48
|
+
check.state(not stk[-1][0])
|
|
49
|
+
stk[-1][1].append(s[p:])
|
|
50
|
+
break
|
|
51
|
+
|
|
52
|
+
if n != p:
|
|
53
|
+
stk[-1][1].append(s[p:n])
|
|
54
|
+
|
|
55
|
+
d = s[n]
|
|
56
|
+
if d == '<':
|
|
57
|
+
e = s.index('>', n)
|
|
58
|
+
stk[-1][1].append(Formats.Name(s[n + 1:e]))
|
|
59
|
+
p = e + 1
|
|
60
|
+
|
|
61
|
+
elif d in '{[':
|
|
62
|
+
stk.append((d, []))
|
|
63
|
+
p = n + 1
|
|
64
|
+
|
|
65
|
+
elif d in '}]':
|
|
66
|
+
x, l = stk.pop()
|
|
67
|
+
pc = Formats._PARTS_BY_DELIMITERS[(x, d)]
|
|
68
|
+
stk[-1][1].append(pc(l))
|
|
69
|
+
p = n + 1
|
|
70
|
+
|
|
71
|
+
else:
|
|
72
|
+
raise RuntimeError
|
|
73
|
+
|
|
74
|
+
_, ret = check.single(stk)
|
|
75
|
+
return ret
|
|
76
|
+
|
|
77
|
+
#
|
|
78
|
+
|
|
79
|
+
@staticmethod
|
|
80
|
+
def render_parts(p: FormatPart | FormatParts) -> ta.Iterator[str]:
|
|
81
|
+
if isinstance(p, str):
|
|
82
|
+
yield p
|
|
83
|
+
|
|
84
|
+
elif isinstance(p, Formats.Name):
|
|
85
|
+
yield '<'
|
|
86
|
+
yield p.name
|
|
87
|
+
yield '>'
|
|
88
|
+
|
|
89
|
+
elif isinstance(p, (Formats.Optional, Formats.Variadic)):
|
|
90
|
+
l, r = Formats._DELIMITERS_BY_PARTS[type(p)]
|
|
91
|
+
yield l
|
|
92
|
+
yield from Formats.render_parts(p.body)
|
|
93
|
+
yield r
|
|
94
|
+
|
|
95
|
+
else:
|
|
96
|
+
for c in p:
|
|
97
|
+
yield from Formats.render_parts(c)
|