omdev 0.0.0.dev144__tar.gz → 0.0.0.dev146__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.
Potentially problematic release.
This version of omdev might be problematic. Click here for more details.
- {omdev-0.0.0.dev144/omdev.egg-info → omdev-0.0.0.dev146}/PKG-INFO +2 -2
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/.manifests.json +2 -2
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/amalg/amalg.py +92 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cli/main.py +1 -1
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/interp/resolvers.py +1 -1
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/manifests/build.py +4 -4
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/precheck/manifests.py +2 -1
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/scripts/interp.py +1 -1
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/scripts/pyproject.py +74 -54
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tokens.py +10 -3
- omdev-0.0.0.dev146/omdev/toml/__init__.py +1 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/docker.py +14 -1
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/git.py +4 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/json/io.py +1 -1
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146/omdev.egg-info}/PKG-INFO +2 -2
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev.egg-info/SOURCES.txt +0 -2
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev.egg-info/requires.txt +1 -1
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/pyproject.toml +2 -2
- omdev-0.0.0.dev144/omdev/manifests/__init__.py +0 -2
- omdev-0.0.0.dev144/omdev/manifests/load.py +0 -165
- omdev-0.0.0.dev144/omdev/manifests/types.py +0 -16
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/LICENSE +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/MANIFEST.in +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/README.rst +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/__about__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/antlr/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/antlr/consts.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/antlr/gen.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/bracepy.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/compute/currents.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/build_ext.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/build.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/cmake.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/classdot.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cli/__main__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cli/clicli.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cli/install.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cli/managers.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cli/types.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/clipboard/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/clipboard/clipboard.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/clipboard/darwin_cf.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/clipboard/linux_x11.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/cmake.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/findimports.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/git.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/imgur.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/interp/cli.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/interp/providers.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/interp/pyenv.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/interp/standalone.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/interp/system.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/interp/types.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/magic/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/magic/find.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/magic/magic.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/magic/prepare.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/magic/styles.py +0 -0
- {omdev-0.0.0.dev144/omdev/pyproject → omdev-0.0.0.dev146/omdev/manifests}/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/mypy/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/packaging/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/packaging/marshal.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/packaging/names.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/packaging/requires.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/packaging/specifiers.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/packaging/versions.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/pip.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/precheck/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/precheck/base.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/precheck/git.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/precheck/lite.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/precheck/main.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/precheck/scripts.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/ptk/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/ptk/apps/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/ptk/apps/ncdu.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/pycharm/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/pycharm/__main__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/pycharm/cli.py +0 -0
- {omdev-0.0.0.dev144/omdev/toml → omdev-0.0.0.dev146/omdev/pyproject}/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/pyproject/cexts.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/pyproject/cli.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/pyproject/configs.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/pyproject/pkg.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/pyproject/reqs.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/revisions.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/scripts/bumpversion.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/scripts/execrss.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/scripts/exectime.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/scripts/importtrace.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/scripts/slowcat.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/scripts/tmpexec.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/secrets.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/toml/parser.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/toml/writer.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/cloc.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/doc.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/importscan.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/json/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/json/__main__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/json/cli.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/json/formats.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/json/parsing.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/json/processing.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/json/rendering.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/mkrelimp.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/notebook.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/pawk/__init__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/pawk/__main__.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/pawk/pawk.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/pip.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/prof.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/qr.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/tools/sqlrepl.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev/wheelfile.py +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/omdev.egg-info/top_level.txt +0 -0
- {omdev-0.0.0.dev144 → omdev-0.0.0.dev146}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: omdev
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev146
|
|
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.
|
|
15
|
+
Requires-Dist: omlish==0.0.0.dev146
|
|
16
16
|
Provides-Extra: all
|
|
17
17
|
Requires-Dist: black~=24.10; extra == "all"
|
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
|
@@ -243,7 +243,7 @@
|
|
|
243
243
|
"module": ".tools.docker",
|
|
244
244
|
"attr": "_CLI_MODULE",
|
|
245
245
|
"file": "omdev/tools/docker.py",
|
|
246
|
-
"line":
|
|
246
|
+
"line": 249,
|
|
247
247
|
"value": {
|
|
248
248
|
"$.cli.types.CliModule": {
|
|
249
249
|
"cmd_name": "docker",
|
|
@@ -255,7 +255,7 @@
|
|
|
255
255
|
"module": ".tools.git",
|
|
256
256
|
"attr": "_CLI_MODULE",
|
|
257
257
|
"file": "omdev/tools/git.py",
|
|
258
|
-
"line":
|
|
258
|
+
"line": 215,
|
|
259
259
|
"value": {
|
|
260
260
|
"$.cli.types.CliModule": {
|
|
261
261
|
"cmd_name": "git",
|
|
@@ -25,8 +25,10 @@ Targets:
|
|
|
25
25
|
"""
|
|
26
26
|
import argparse
|
|
27
27
|
import ast
|
|
28
|
+
import base64
|
|
28
29
|
import dataclasses as dc
|
|
29
30
|
import io
|
|
31
|
+
import itertools
|
|
30
32
|
import logging
|
|
31
33
|
import os.path
|
|
32
34
|
import re
|
|
@@ -286,6 +288,37 @@ def is_root_level_if_type_checking_block(lts: Tokens) -> bool:
|
|
|
286
288
|
##
|
|
287
289
|
|
|
288
290
|
|
|
291
|
+
class RootLevelResourcesRead(ta.NamedTuple):
|
|
292
|
+
variable: str
|
|
293
|
+
kind: ta.Literal['binary', 'text']
|
|
294
|
+
resource: str
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
def is_root_level_resources_read(lts: Tokens) -> RootLevelResourcesRead | None:
|
|
298
|
+
wts = list(tks.ignore_ws(lts, keep=['INDENT']))
|
|
299
|
+
|
|
300
|
+
if not tks.match_toks(wts, [
|
|
301
|
+
('NAME', None),
|
|
302
|
+
('OP', '='),
|
|
303
|
+
('NAME', ('read_package_resource_binary', 'read_package_resource_text')),
|
|
304
|
+
('OP', '('),
|
|
305
|
+
('NAME', '__package__'),
|
|
306
|
+
('OP', ','),
|
|
307
|
+
('STRING', None),
|
|
308
|
+
('OP', ')'),
|
|
309
|
+
]):
|
|
310
|
+
return None
|
|
311
|
+
|
|
312
|
+
return RootLevelResourcesRead(
|
|
313
|
+
wts[0].src,
|
|
314
|
+
'binary' if wts[2].src == 'read_package_resource_binary' else 'text',
|
|
315
|
+
ast.literal_eval(wts[6].src),
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
##
|
|
320
|
+
|
|
321
|
+
|
|
289
322
|
@dc.dataclass(frozen=True, kw_only=True)
|
|
290
323
|
class SrcFile:
|
|
291
324
|
path: str
|
|
@@ -301,6 +334,8 @@ class SrcFile:
|
|
|
301
334
|
|
|
302
335
|
ruff_noqa: ta.AbstractSet[str] = dc.field(repr=False)
|
|
303
336
|
|
|
337
|
+
has_binary_resources: bool = False
|
|
338
|
+
|
|
304
339
|
|
|
305
340
|
def make_src_file(
|
|
306
341
|
path: str,
|
|
@@ -322,6 +357,8 @@ def make_src_file(
|
|
|
322
357
|
tys: list[Typing] = []
|
|
323
358
|
ctls: list[Tokens] = []
|
|
324
359
|
|
|
360
|
+
has_binary_resources = False
|
|
361
|
+
|
|
325
362
|
i = 0
|
|
326
363
|
while i < len(cls):
|
|
327
364
|
line = cls[i]
|
|
@@ -383,6 +420,57 @@ def make_src_file(
|
|
|
383
420
|
i += 1
|
|
384
421
|
skip_block()
|
|
385
422
|
|
|
423
|
+
elif (rsrc := is_root_level_resources_read(line)) is not None:
|
|
424
|
+
rf = os.path.join(os.path.dirname(path), rsrc.resource)
|
|
425
|
+
|
|
426
|
+
if rsrc.kind == 'binary':
|
|
427
|
+
with open(rf, 'rb') as bf:
|
|
428
|
+
rb = bf.read() # noqa
|
|
429
|
+
|
|
430
|
+
ctls.append([
|
|
431
|
+
trt.Token(name='NAME', src=rsrc.variable),
|
|
432
|
+
trt.Token(name='UNIMPORTANT_WS', src=' '),
|
|
433
|
+
trt.Token(name='OP', src='='),
|
|
434
|
+
trt.Token(name='UNIMPORTANT_WS', src=' '),
|
|
435
|
+
trt.Token(name='NAME', src='base64'),
|
|
436
|
+
trt.Token(name='OP', src='.'),
|
|
437
|
+
trt.Token(name='NAME', src='b64decode'),
|
|
438
|
+
trt.Token(name='OP', src='('),
|
|
439
|
+
trt.Token(name='NL', src='\n'),
|
|
440
|
+
])
|
|
441
|
+
|
|
442
|
+
rb64 = base64.b64encode(rb).decode('ascii')
|
|
443
|
+
for chunk in itertools.batched(rb64, 96):
|
|
444
|
+
ctls.append([
|
|
445
|
+
trt.Token(name='UNIMPORTANT_WS', src=' '),
|
|
446
|
+
trt.Token(name='STRING', src=f"'{''.join(chunk)}'"),
|
|
447
|
+
trt.Token(name='NL', src='\n'),
|
|
448
|
+
])
|
|
449
|
+
|
|
450
|
+
ctls.append([
|
|
451
|
+
trt.Token(name='OP', src=')'),
|
|
452
|
+
trt.Token(name='NEWLINE', src='\n'),
|
|
453
|
+
])
|
|
454
|
+
|
|
455
|
+
has_binary_resources = True
|
|
456
|
+
|
|
457
|
+
elif rsrc.kind == 'text':
|
|
458
|
+
with open(rf) as tf:
|
|
459
|
+
rt = tf.read() # noqa
|
|
460
|
+
rt = rt.replace('\\', '\\\\') # Escape backslashes
|
|
461
|
+
rt = rt.replace('"""', r'\"\"\"')
|
|
462
|
+
ctls.append([
|
|
463
|
+
trt.Token(name='NAME', src=rsrc.variable),
|
|
464
|
+
trt.Token(name='UNIMPORTANT_WS', src=' '),
|
|
465
|
+
trt.Token(name='OP', src='='),
|
|
466
|
+
trt.Token(name='UNIMPORTANT_WS', src=' '),
|
|
467
|
+
trt.Token(name='STRING', src=f'"""\\\n{rt}"""\n'),
|
|
468
|
+
trt.Token(name='NEWLINE', src=''),
|
|
469
|
+
])
|
|
470
|
+
|
|
471
|
+
else:
|
|
472
|
+
raise ValueError(rsrc.kind)
|
|
473
|
+
|
|
386
474
|
else:
|
|
387
475
|
ctls.append(line)
|
|
388
476
|
|
|
@@ -399,6 +487,8 @@ def make_src_file(
|
|
|
399
487
|
content_lines=ctls,
|
|
400
488
|
|
|
401
489
|
ruff_noqa=set(lang.flatten(tks.join_toks(l).strip().split()[3:] for l in rnls)), # noqa
|
|
490
|
+
|
|
491
|
+
has_binary_resources=has_binary_resources,
|
|
402
492
|
)
|
|
403
493
|
|
|
404
494
|
|
|
@@ -488,6 +578,8 @@ def gen_amalg(
|
|
|
488
578
|
dct: dict = {
|
|
489
579
|
('sys', None, None): ['import sys\n'],
|
|
490
580
|
}
|
|
581
|
+
if any(sf.has_binary_resources for sf in src_files.values()):
|
|
582
|
+
dct[('base64', None, None)] = ['import base64\n']
|
|
491
583
|
for imp in gl_imps:
|
|
492
584
|
dct.setdefault((imp.mod, imp.item, imp.as_), []).append(imp)
|
|
493
585
|
for _, l in sorted(dct.items()):
|
|
@@ -13,8 +13,8 @@ import typing as ta
|
|
|
13
13
|
|
|
14
14
|
from omlish import check
|
|
15
15
|
from omlish.lite.cached import cached_nullary
|
|
16
|
+
from omlish.manifests.load import ManifestLoader
|
|
16
17
|
|
|
17
|
-
from ..manifests.load import ManifestLoader
|
|
18
18
|
from .types import CliCmd
|
|
19
19
|
from .types import CliFunc
|
|
20
20
|
from .types import CliModule
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# ruff: noqa: UP006 UP007
|
|
1
2
|
"""
|
|
2
3
|
TODO:
|
|
3
4
|
- separate build from cli
|
|
@@ -10,7 +11,6 @@ See (entry_points):
|
|
|
10
11
|
- https://packaging.python.org/en/latest/guides/creating-and-discovering-plugins/
|
|
11
12
|
- [project.entry-points.omlish-manifests] \n omdev = omdev
|
|
12
13
|
"""
|
|
13
|
-
# ruff: noqa: UP006 UP007
|
|
14
14
|
import argparse
|
|
15
15
|
import asyncio
|
|
16
16
|
import collections
|
|
@@ -31,11 +31,11 @@ from omlish.lite.cached import cached_nullary
|
|
|
31
31
|
from omlish.lite.json import json_dumps_pretty
|
|
32
32
|
from omlish.lite.logs import configure_standard_logging
|
|
33
33
|
from omlish.lite.logs import log
|
|
34
|
+
from omlish.manifests.load import ManifestLoader
|
|
35
|
+
from omlish.manifests.types import Manifest
|
|
36
|
+
from omlish.manifests.types import ManifestOrigin
|
|
34
37
|
|
|
35
38
|
from .. import magic
|
|
36
|
-
from .load import ManifestLoader
|
|
37
|
-
from .types import Manifest
|
|
38
|
-
from .types import ManifestOrigin
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
T = ta.TypeVar('T')
|
|
@@ -3087,23 +3087,24 @@ TODO:
|
|
|
3087
3087
|
@dc.dataclass(frozen=True)
|
|
3088
3088
|
class ObjMarshalOptions:
|
|
3089
3089
|
raw_bytes: bool = False
|
|
3090
|
+
nonstrict_dataclasses: bool = False
|
|
3090
3091
|
|
|
3091
3092
|
|
|
3092
3093
|
class ObjMarshaler(abc.ABC):
|
|
3093
3094
|
@abc.abstractmethod
|
|
3094
|
-
def marshal(self, o: ta.Any,
|
|
3095
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3095
3096
|
raise NotImplementedError
|
|
3096
3097
|
|
|
3097
3098
|
@abc.abstractmethod
|
|
3098
|
-
def unmarshal(self, o: ta.Any,
|
|
3099
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3099
3100
|
raise NotImplementedError
|
|
3100
3101
|
|
|
3101
3102
|
|
|
3102
3103
|
class NopObjMarshaler(ObjMarshaler):
|
|
3103
|
-
def marshal(self, o: ta.Any,
|
|
3104
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3104
3105
|
return o
|
|
3105
3106
|
|
|
3106
|
-
def unmarshal(self, o: ta.Any,
|
|
3107
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3107
3108
|
return o
|
|
3108
3109
|
|
|
3109
3110
|
|
|
@@ -3111,29 +3112,29 @@ class NopObjMarshaler(ObjMarshaler):
|
|
|
3111
3112
|
class ProxyObjMarshaler(ObjMarshaler):
|
|
3112
3113
|
m: ta.Optional[ObjMarshaler] = None
|
|
3113
3114
|
|
|
3114
|
-
def marshal(self, o: ta.Any,
|
|
3115
|
-
return check_not_none(self.m).marshal(o,
|
|
3115
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3116
|
+
return check_not_none(self.m).marshal(o, ctx)
|
|
3116
3117
|
|
|
3117
|
-
def unmarshal(self, o: ta.Any,
|
|
3118
|
-
return check_not_none(self.m).unmarshal(o,
|
|
3118
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3119
|
+
return check_not_none(self.m).unmarshal(o, ctx)
|
|
3119
3120
|
|
|
3120
3121
|
|
|
3121
3122
|
@dc.dataclass(frozen=True)
|
|
3122
3123
|
class CastObjMarshaler(ObjMarshaler):
|
|
3123
3124
|
ty: type
|
|
3124
3125
|
|
|
3125
|
-
def marshal(self, o: ta.Any,
|
|
3126
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3126
3127
|
return o
|
|
3127
3128
|
|
|
3128
|
-
def unmarshal(self, o: ta.Any,
|
|
3129
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3129
3130
|
return self.ty(o)
|
|
3130
3131
|
|
|
3131
3132
|
|
|
3132
3133
|
class DynamicObjMarshaler(ObjMarshaler):
|
|
3133
|
-
def marshal(self, o: ta.Any,
|
|
3134
|
-
return marshal_obj(o)
|
|
3134
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3135
|
+
return ctx.manager.marshal_obj(o, opts=ctx.options)
|
|
3135
3136
|
|
|
3136
|
-
def unmarshal(self, o: ta.Any,
|
|
3137
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3137
3138
|
return o
|
|
3138
3139
|
|
|
3139
3140
|
|
|
@@ -3141,10 +3142,10 @@ class DynamicObjMarshaler(ObjMarshaler):
|
|
|
3141
3142
|
class Base64ObjMarshaler(ObjMarshaler):
|
|
3142
3143
|
ty: type
|
|
3143
3144
|
|
|
3144
|
-
def marshal(self, o: ta.Any,
|
|
3145
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3145
3146
|
return base64.b64encode(o).decode('ascii')
|
|
3146
3147
|
|
|
3147
|
-
def unmarshal(self, o: ta.Any,
|
|
3148
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3148
3149
|
return self.ty(base64.b64decode(o))
|
|
3149
3150
|
|
|
3150
3151
|
|
|
@@ -3152,25 +3153,25 @@ class Base64ObjMarshaler(ObjMarshaler):
|
|
|
3152
3153
|
class BytesSwitchedObjMarshaler(ObjMarshaler):
|
|
3153
3154
|
m: ObjMarshaler
|
|
3154
3155
|
|
|
3155
|
-
def marshal(self, o: ta.Any,
|
|
3156
|
-
if
|
|
3156
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3157
|
+
if ctx.options.raw_bytes:
|
|
3157
3158
|
return o
|
|
3158
|
-
return self.m.marshal(o,
|
|
3159
|
+
return self.m.marshal(o, ctx)
|
|
3159
3160
|
|
|
3160
|
-
def unmarshal(self, o: ta.Any,
|
|
3161
|
-
if
|
|
3161
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3162
|
+
if ctx.options.raw_bytes:
|
|
3162
3163
|
return o
|
|
3163
|
-
return self.m.unmarshal(o,
|
|
3164
|
+
return self.m.unmarshal(o, ctx)
|
|
3164
3165
|
|
|
3165
3166
|
|
|
3166
3167
|
@dc.dataclass(frozen=True)
|
|
3167
3168
|
class EnumObjMarshaler(ObjMarshaler):
|
|
3168
3169
|
ty: type
|
|
3169
3170
|
|
|
3170
|
-
def marshal(self, o: ta.Any,
|
|
3171
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3171
3172
|
return o.name
|
|
3172
3173
|
|
|
3173
|
-
def unmarshal(self, o: ta.Any,
|
|
3174
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3174
3175
|
return self.ty.__members__[o] # type: ignore
|
|
3175
3176
|
|
|
3176
3177
|
|
|
@@ -3178,15 +3179,15 @@ class EnumObjMarshaler(ObjMarshaler):
|
|
|
3178
3179
|
class OptionalObjMarshaler(ObjMarshaler):
|
|
3179
3180
|
item: ObjMarshaler
|
|
3180
3181
|
|
|
3181
|
-
def marshal(self, o: ta.Any,
|
|
3182
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3182
3183
|
if o is None:
|
|
3183
3184
|
return None
|
|
3184
|
-
return self.item.marshal(o,
|
|
3185
|
+
return self.item.marshal(o, ctx)
|
|
3185
3186
|
|
|
3186
|
-
def unmarshal(self, o: ta.Any,
|
|
3187
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3187
3188
|
if o is None:
|
|
3188
3189
|
return None
|
|
3189
|
-
return self.item.unmarshal(o,
|
|
3190
|
+
return self.item.unmarshal(o, ctx)
|
|
3190
3191
|
|
|
3191
3192
|
|
|
3192
3193
|
@dc.dataclass(frozen=True)
|
|
@@ -3195,11 +3196,11 @@ class MappingObjMarshaler(ObjMarshaler):
|
|
|
3195
3196
|
km: ObjMarshaler
|
|
3196
3197
|
vm: ObjMarshaler
|
|
3197
3198
|
|
|
3198
|
-
def marshal(self, o: ta.Any,
|
|
3199
|
-
return {self.km.marshal(k,
|
|
3199
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3200
|
+
return {self.km.marshal(k, ctx): self.vm.marshal(v, ctx) for k, v in o.items()}
|
|
3200
3201
|
|
|
3201
|
-
def unmarshal(self, o: ta.Any,
|
|
3202
|
-
return self.ty((self.km.unmarshal(k,
|
|
3202
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3203
|
+
return self.ty((self.km.unmarshal(k, ctx), self.vm.unmarshal(v, ctx)) for k, v in o.items())
|
|
3203
3204
|
|
|
3204
3205
|
|
|
3205
3206
|
@dc.dataclass(frozen=True)
|
|
@@ -3207,11 +3208,11 @@ class IterableObjMarshaler(ObjMarshaler):
|
|
|
3207
3208
|
ty: type
|
|
3208
3209
|
item: ObjMarshaler
|
|
3209
3210
|
|
|
3210
|
-
def marshal(self, o: ta.Any,
|
|
3211
|
-
return [self.item.marshal(e,
|
|
3211
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3212
|
+
return [self.item.marshal(e, ctx) for e in o]
|
|
3212
3213
|
|
|
3213
|
-
def unmarshal(self, o: ta.Any,
|
|
3214
|
-
return self.ty(self.item.unmarshal(e,
|
|
3214
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3215
|
+
return self.ty(self.item.unmarshal(e, ctx) for e in o)
|
|
3215
3216
|
|
|
3216
3217
|
|
|
3217
3218
|
@dc.dataclass(frozen=True)
|
|
@@ -3220,11 +3221,18 @@ class DataclassObjMarshaler(ObjMarshaler):
|
|
|
3220
3221
|
fs: ta.Mapping[str, ObjMarshaler]
|
|
3221
3222
|
nonstrict: bool = False
|
|
3222
3223
|
|
|
3223
|
-
def marshal(self, o: ta.Any,
|
|
3224
|
-
return {
|
|
3224
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3225
|
+
return {
|
|
3226
|
+
k: m.marshal(getattr(o, k), ctx)
|
|
3227
|
+
for k, m in self.fs.items()
|
|
3228
|
+
}
|
|
3225
3229
|
|
|
3226
|
-
def unmarshal(self, o: ta.Any,
|
|
3227
|
-
return self.ty(**{
|
|
3230
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3231
|
+
return self.ty(**{
|
|
3232
|
+
k: self.fs[k].unmarshal(v, ctx)
|
|
3233
|
+
for k, v in o.items()
|
|
3234
|
+
if not (self.nonstrict or ctx.options.nonstrict_dataclasses) or k in self.fs
|
|
3235
|
+
})
|
|
3228
3236
|
|
|
3229
3237
|
|
|
3230
3238
|
@dc.dataclass(frozen=True)
|
|
@@ -3244,50 +3252,50 @@ class PolymorphicObjMarshaler(ObjMarshaler):
|
|
|
3244
3252
|
{i.tag: i for i in impls},
|
|
3245
3253
|
)
|
|
3246
3254
|
|
|
3247
|
-
def marshal(self, o: ta.Any,
|
|
3255
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3248
3256
|
impl = self.impls_by_ty[type(o)]
|
|
3249
|
-
return {impl.tag: impl.m.marshal(o,
|
|
3257
|
+
return {impl.tag: impl.m.marshal(o, ctx)}
|
|
3250
3258
|
|
|
3251
|
-
def unmarshal(self, o: ta.Any,
|
|
3259
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3252
3260
|
[(t, v)] = o.items()
|
|
3253
3261
|
impl = self.impls_by_tag[t]
|
|
3254
|
-
return impl.m.unmarshal(v,
|
|
3262
|
+
return impl.m.unmarshal(v, ctx)
|
|
3255
3263
|
|
|
3256
3264
|
|
|
3257
3265
|
@dc.dataclass(frozen=True)
|
|
3258
3266
|
class DatetimeObjMarshaler(ObjMarshaler):
|
|
3259
3267
|
ty: type
|
|
3260
3268
|
|
|
3261
|
-
def marshal(self, o: ta.Any,
|
|
3269
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3262
3270
|
return o.isoformat()
|
|
3263
3271
|
|
|
3264
|
-
def unmarshal(self, o: ta.Any,
|
|
3272
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3265
3273
|
return self.ty.fromisoformat(o) # type: ignore
|
|
3266
3274
|
|
|
3267
3275
|
|
|
3268
3276
|
class DecimalObjMarshaler(ObjMarshaler):
|
|
3269
|
-
def marshal(self, o: ta.Any,
|
|
3277
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3270
3278
|
return str(check_isinstance(o, decimal.Decimal))
|
|
3271
3279
|
|
|
3272
|
-
def unmarshal(self, v: ta.Any,
|
|
3280
|
+
def unmarshal(self, v: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3273
3281
|
return decimal.Decimal(check_isinstance(v, str))
|
|
3274
3282
|
|
|
3275
3283
|
|
|
3276
3284
|
class FractionObjMarshaler(ObjMarshaler):
|
|
3277
|
-
def marshal(self, o: ta.Any,
|
|
3285
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3278
3286
|
fr = check_isinstance(o, fractions.Fraction)
|
|
3279
3287
|
return [fr.numerator, fr.denominator]
|
|
3280
3288
|
|
|
3281
|
-
def unmarshal(self, v: ta.Any,
|
|
3289
|
+
def unmarshal(self, v: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3282
3290
|
num, denom = check_isinstance(v, list)
|
|
3283
3291
|
return fractions.Fraction(num, denom)
|
|
3284
3292
|
|
|
3285
3293
|
|
|
3286
3294
|
class UuidObjMarshaler(ObjMarshaler):
|
|
3287
|
-
def marshal(self, o: ta.Any,
|
|
3295
|
+
def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3288
3296
|
return str(o)
|
|
3289
3297
|
|
|
3290
|
-
def unmarshal(self, o: ta.Any,
|
|
3298
|
+
def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
|
|
3291
3299
|
return uuid.UUID(o)
|
|
3292
3300
|
|
|
3293
3301
|
|
|
@@ -3448,6 +3456,12 @@ class ObjMarshalerManager:
|
|
|
3448
3456
|
|
|
3449
3457
|
#
|
|
3450
3458
|
|
|
3459
|
+
def _make_context(self, opts: ta.Optional[ObjMarshalOptions]) -> 'ObjMarshalContext':
|
|
3460
|
+
return ObjMarshalContext(
|
|
3461
|
+
options=opts or self._default_options,
|
|
3462
|
+
manager=self,
|
|
3463
|
+
)
|
|
3464
|
+
|
|
3451
3465
|
def marshal_obj(
|
|
3452
3466
|
self,
|
|
3453
3467
|
o: ta.Any,
|
|
@@ -3455,7 +3469,7 @@ class ObjMarshalerManager:
|
|
|
3455
3469
|
opts: ta.Optional[ObjMarshalOptions] = None,
|
|
3456
3470
|
) -> ta.Any:
|
|
3457
3471
|
m = self.get_obj_marshaler(ty if ty is not None else type(o))
|
|
3458
|
-
return m.marshal(o,
|
|
3472
|
+
return m.marshal(o, self._make_context(opts))
|
|
3459
3473
|
|
|
3460
3474
|
def unmarshal_obj(
|
|
3461
3475
|
self,
|
|
@@ -3464,7 +3478,7 @@ class ObjMarshalerManager:
|
|
|
3464
3478
|
opts: ta.Optional[ObjMarshalOptions] = None,
|
|
3465
3479
|
) -> T:
|
|
3466
3480
|
m = self.get_obj_marshaler(ty)
|
|
3467
|
-
return m.unmarshal(o,
|
|
3481
|
+
return m.unmarshal(o, self._make_context(opts))
|
|
3468
3482
|
|
|
3469
3483
|
def roundtrip_obj(
|
|
3470
3484
|
self,
|
|
@@ -3479,6 +3493,12 @@ class ObjMarshalerManager:
|
|
|
3479
3493
|
return u
|
|
3480
3494
|
|
|
3481
3495
|
|
|
3496
|
+
@dc.dataclass(frozen=True)
|
|
3497
|
+
class ObjMarshalContext:
|
|
3498
|
+
options: ObjMarshalOptions
|
|
3499
|
+
manager: ObjMarshalerManager
|
|
3500
|
+
|
|
3501
|
+
|
|
3482
3502
|
##
|
|
3483
3503
|
|
|
3484
3504
|
|
|
@@ -5728,7 +5748,7 @@ class InterpResolver:
|
|
|
5728
5748
|
if spec.contains(si)
|
|
5729
5749
|
]
|
|
5730
5750
|
|
|
5731
|
-
slst = sorted(lst, key=lambda t: (-t[0], t[1]))
|
|
5751
|
+
slst = sorted(lst, key=lambda t: (-t[0], t[1].version))
|
|
5732
5752
|
if not slst:
|
|
5733
5753
|
return None
|
|
5734
5754
|
|
|
@@ -61,7 +61,7 @@ def join_lines(ls: ta.Iterable[Tokens]) -> str:
|
|
|
61
61
|
|
|
62
62
|
def match_toks(
|
|
63
63
|
ts: ta.Iterable['trt.Token'],
|
|
64
|
-
pat: ta.Sequence[tuple[str | None, str | None]],
|
|
64
|
+
pat: ta.Sequence[tuple[str | None, str | tuple[str, ...] | None]],
|
|
65
65
|
) -> bool:
|
|
66
66
|
it = iter(ts)
|
|
67
67
|
for pn, ps in pat:
|
|
@@ -71,6 +71,13 @@ def match_toks(
|
|
|
71
71
|
return False
|
|
72
72
|
if pn is not None and t.name != pn:
|
|
73
73
|
return False
|
|
74
|
-
if ps is not None
|
|
75
|
-
|
|
74
|
+
if ps is not None:
|
|
75
|
+
if isinstance(ps, str):
|
|
76
|
+
if t.src != ps:
|
|
77
|
+
return False
|
|
78
|
+
elif isinstance(ps, tuple):
|
|
79
|
+
if t.src not in ps:
|
|
80
|
+
return False
|
|
81
|
+
else:
|
|
82
|
+
raise TypeError(ps)
|
|
76
83
|
return True
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# @omlish-lite
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""
|
|
2
2
|
TODO:
|
|
3
|
-
-
|
|
3
|
+
- https://github.com/zeromake/docker-debug
|
|
4
4
|
"""
|
|
5
5
|
import os
|
|
6
6
|
import re
|
|
@@ -232,6 +232,19 @@ class Cli(ap.Cli):
|
|
|
232
232
|
|
|
233
233
|
print(f'{svc_name}: {lt}')
|
|
234
234
|
|
|
235
|
+
@ap.command()
|
|
236
|
+
def dockly(self) -> None:
|
|
237
|
+
os.execl(
|
|
238
|
+
exe := docker_exe(),
|
|
239
|
+
exe,
|
|
240
|
+
'run',
|
|
241
|
+
'-it',
|
|
242
|
+
'--rm',
|
|
243
|
+
'-v',
|
|
244
|
+
'/var/run/docker.sock:/var/run/docker.sock',
|
|
245
|
+
'lirantal/dockly',
|
|
246
|
+
)
|
|
247
|
+
|
|
235
248
|
|
|
236
249
|
# @omlish-manifest
|
|
237
250
|
_CLI_MODULE = CliModule('docker', __name__)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: omdev
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev146
|
|
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.
|
|
15
|
+
Requires-Dist: omlish==0.0.0.dev146
|
|
16
16
|
Provides-Extra: all
|
|
17
17
|
Requires-Dist: black~=24.10; extra == "all"
|
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|