omdev 0.0.0.dev459__tar.gz → 0.0.0.dev506__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.dev459/omdev.egg-info → omdev-0.0.0.dev506}/PKG-INFO +12 -8
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/.omlish-manifests.json +3 -3
- omdev-0.0.0.dev506/omdev/README.md +51 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/__about__.py +7 -4
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/amalg/gen/gen.py +49 -6
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/amalg/gen/imports.py +1 -1
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/amalg/gen/manifests.py +1 -1
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/amalg/gen/resources.py +1 -1
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/amalg/gen/srcfiles.py +13 -3
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/amalg/gen/strip.py +1 -1
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/amalg/gen/types.py +1 -1
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/amalg/gen/typing.py +1 -1
- omdev-0.0.0.dev506/omdev/amalg/info.py +32 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/cmake.py +4 -1
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/cli.py +2 -3
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cli/clicli.py +37 -7
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cmdlog/cli.py +1 -2
- omdev-0.0.0.dev506/omdev/dataclasses/_dumping.py +1960 -0
- omdev-0.0.0.dev506/omdev/dataclasses/_template.py +22 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/dataclasses/cli.py +7 -2
- omdev-0.0.0.dev506/omdev/dataclasses/codegen.py +375 -0
- omdev-0.0.0.dev506/omdev/dataclasses/dumping.py +200 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/cli.py +1 -1
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/types.py +3 -2
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/uv/provider.py +37 -0
- omdev-0.0.0.dev506/omdev/irc/messages/base.py +50 -0
- omdev-0.0.0.dev506/omdev/irc/messages/formats.py +92 -0
- omdev-0.0.0.dev506/omdev/irc/messages/messages.py +775 -0
- omdev-0.0.0.dev506/omdev/irc/messages/parsing.py +99 -0
- omdev-0.0.0.dev506/omdev/irc/numerics/formats.py +97 -0
- omdev-0.0.0.dev506/omdev/irc/numerics/numerics.py +865 -0
- omdev-0.0.0.dev506/omdev/irc/numerics/types.py +59 -0
- omdev-0.0.0.dev506/omdev/irc/protocol/LICENSE +11 -0
- omdev-0.0.0.dev506/omdev/irc/protocol/__init__.py +61 -0
- omdev-0.0.0.dev506/omdev/irc/protocol/consts.py +6 -0
- omdev-0.0.0.dev506/omdev/irc/protocol/errors.py +30 -0
- omdev-0.0.0.dev506/omdev/irc/protocol/message.py +21 -0
- omdev-0.0.0.dev506/omdev/irc/protocol/nuh.py +55 -0
- omdev-0.0.0.dev506/omdev/irc/protocol/parsing.py +158 -0
- omdev-0.0.0.dev506/omdev/irc/protocol/rendering.py +153 -0
- omdev-0.0.0.dev506/omdev/irc/protocol/tags.py +102 -0
- omdev-0.0.0.dev506/omdev/irc/protocol/utils.py +30 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/manifests/_dumping.py +69 -25
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/manifests/main.py +1 -1
- omdev-0.0.0.dev506/omdev/markdown/incparse.py +508 -0
- omdev-0.0.0.dev506/omdev/markdown/tokens.py +51 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/packaging/revisions.py +1 -1
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/packaging/specifiers.py +2 -1
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/packaging/versions.py +4 -4
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/packaging/wheelfile.py +2 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/precheck/caches.py +1 -1
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/precheck/imports.py +14 -1
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/precheck/main.py +2 -3
- omdev-0.0.0.dev506/omdev/py/asts/parents.py +28 -0
- omdev-0.0.0.dev506/omdev/py/asts/toplevel.py +123 -0
- omdev-0.0.0.dev506/omdev/py/asts/visitors.py +18 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/attrdocs.py +1 -1
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/bracepy.py +12 -4
- omdev-0.0.0.dev506/omdev/py/reprs.py +32 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/srcheaders.py +1 -1
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/tools/mkrelimp.py +1 -1
- omdev-0.0.0.dev506/omdev/py/tools/pipdepup.py +686 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/pyproject/cli.py +2 -36
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/pyproject/configs.py +1 -1
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/pyproject/pkg.py +189 -44
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/pyproject/reqs.py +8 -7
- omdev-0.0.0.dev506/omdev/pyproject/tools/aboutdeps.py +60 -0
- omdev-0.0.0.dev506/omdev/pyproject/tools/pyversions.py +47 -0
- omdev-0.0.0.dev506/omdev/pyproject/versions.py +40 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/scripts/ci.py +572 -51
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/scripts/interp.py +175 -37
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/scripts/lib/inject.py +73 -25
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/scripts/lib/logs.py +187 -43
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/scripts/lib/marshal.py +67 -25
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/scripts/pyproject.py +817 -138
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/git/cli.py +52 -13
- omdev-0.0.0.dev506/omdev/tools/json/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/json/formats.py +2 -0
- omdev-0.0.0.dev506/omdev/tools/jsonview/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/jsonview/cli.py +49 -65
- omdev-0.0.0.dev506/omdev/tools/jsonview/resources/__init__.py +0 -0
- omdev-0.0.0.dev506/omdev/tools/jsonview/resources/jsonview.html.j2 +43 -0
- omdev-0.0.0.dev506/omdev/tools/pawk/README.md +195 -0
- omdev-0.0.0.dev506/omdev/tools/pawk/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/pawk/pawk.py +2 -2
- omdev-0.0.0.dev506/omdev/tools/sqlrepl.py +313 -0
- omdev-0.0.0.dev506/omdev/tui/__init__.py +0 -0
- omdev-0.0.0.dev506/omdev/tui/apps/__init__.py +0 -0
- omdev-0.0.0.dev506/omdev/tui/apps/edit/__init__.py +0 -0
- omdev-0.0.0.dev506/omdev/tui/apps/edit/main.py +167 -0
- omdev-0.0.0.dev506/omdev/tui/apps/irc/__init__.py +0 -0
- omdev-0.0.0.dev506/omdev/tui/apps/irc/__main__.py +4 -0
- omdev-0.0.0.dev506/omdev/tui/apps/irc/app.py +286 -0
- omdev-0.0.0.dev506/omdev/tui/apps/irc/client.py +187 -0
- omdev-0.0.0.dev506/omdev/tui/apps/irc/commands.py +175 -0
- omdev-0.0.0.dev506/omdev/tui/apps/irc/main.py +26 -0
- omdev-0.0.0.dev506/omdev/tui/apps/markdown/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tui/apps/markdown/cli.py +3 -4
- omdev-0.0.0.dev506/omdev/tui/rich/__init__.py +46 -0
- omdev-0.0.0.dev506/omdev/tui/rich/console2.py +20 -0
- omdev-0.0.0.dev506/omdev/tui/rich/markdown2.py +387 -0
- omdev-0.0.0.dev506/omdev/tui/textual/__init__.py +265 -0
- omdev-0.0.0.dev506/omdev/tui/textual/app2.py +16 -0
- omdev-0.0.0.dev506/omdev/tui/textual/autocomplete/LICENSE +21 -0
- omdev-0.0.0.dev506/omdev/tui/textual/autocomplete/__init__.py +33 -0
- omdev-0.0.0.dev506/omdev/tui/textual/autocomplete/matching.py +226 -0
- omdev-0.0.0.dev506/omdev/tui/textual/autocomplete/paths.py +202 -0
- omdev-0.0.0.dev506/omdev/tui/textual/autocomplete/widget.py +612 -0
- omdev-0.0.0.dev506/omdev/tui/textual/debug/__init__.py +10 -0
- omdev-0.0.0.dev506/omdev/tui/textual/debug/dominfo.py +151 -0
- omdev-0.0.0.dev506/omdev/tui/textual/debug/screen.py +24 -0
- omdev-0.0.0.dev506/omdev/tui/textual/devtools.py +187 -0
- omdev-0.0.0.dev506/omdev/tui/textual/drivers2.py +55 -0
- omdev-0.0.0.dev506/omdev/tui/textual/logging2.py +20 -0
- omdev-0.0.0.dev506/omdev/tui/textual/types.py +45 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506/omdev.egg-info}/PKG-INFO +12 -8
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev.egg-info/SOURCES.txt +71 -6
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev.egg-info/requires.txt +11 -7
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/pyproject.toml +17 -8
- omdev-0.0.0.dev459/omdev/dataclasses/codegen.py +0 -95
- omdev-0.0.0.dev459/omdev/pyproject/cexts.py +0 -110
- omdev-0.0.0.dev459/omdev/tools/sqlrepl.py +0 -202
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/LICENSE +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/MANIFEST.in +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/README.md +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/amalg/cli/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/amalg/cli/main.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/amalg/gen/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/amalg/sources.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/compute/currents.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/capi/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/capi/darwin/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/capi/darwin/aps.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/capi/darwin/ax.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/capi/darwin/cf.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/capi/darwin/cg.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/capi/linux/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/capi/linux/x11.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cc/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cc/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cc/cdeps.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cc/cdeps.toml +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cc/cli.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cc/srclangs.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/build_ext.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/build.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/cache.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/ci.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/compose.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/consts.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/docker/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/docker/buildcaching.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/docker/cache.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/docker/cacheserved/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/docker/cacheserved/cache.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/docker/cacheserved/manifests.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/docker/cmds.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/docker/dataserver.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/docker/imagepulling.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/docker/inject.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/docker/packing.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/docker/repositories.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/docker/utils.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/api/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/api/clients.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/api/v1/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/api/v1/api.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/api/v1/client.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/api/v2/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/api/v2/api.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/api/v2/azure.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/api/v2/client.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/bootstrap.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/cache.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/cli.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/env.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/github/inject.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/inject.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/requirements.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/shell.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/ci/utils.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cli/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cli/install.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cli/main.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cli/managers.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cli/types.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/clipboard/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/clipboard/clipboard.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/clipboard/darwin_cf.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/clipboard/linux_x11.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cmake.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cmdlog/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cmdlog/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cmdlog/_cmdlog.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/cmdlog/cmdlog.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/dataclasses/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/dataclasses/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/dataserver/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/dataserver/handlers.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/dataserver/http.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/dataserver/routes.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/dataserver/server.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/dataserver/targets.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/git/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/git/magic.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/git/revisions.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/git/shallow.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/git/status.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/home/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/home/paths.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/home/secrets.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/home/shadow.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/imgur.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/intellij/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/intellij/cli.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/intellij/ides.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/intellij/open.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/default.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/inject.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/providers/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/providers/base.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/providers/inject.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/providers/running.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/providers/standalone.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/providers/system.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/pyenv/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/pyenv/inject.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/pyenv/install.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/pyenv/provider.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/pyenv/pyenv.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/resolvers.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/uv/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/uv/inject.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/uv/uv.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/interp/venvs.py +0 -0
- {omdev-0.0.0.dev459/omdev/manifests → omdev-0.0.0.dev506/omdev/irc}/__init__.py +0 -0
- {omdev-0.0.0.dev459/omdev/mypy → omdev-0.0.0.dev506/omdev/irc/messages}/__init__.py +0 -0
- {omdev-0.0.0.dev459/omdev/oci → omdev-0.0.0.dev506/omdev/irc/numerics}/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/magic/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/magic/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/magic/cli.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/magic/find.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/magic/magic.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/magic/prepare.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/magic/styles.py +0 -0
- {omdev-0.0.0.dev459/omdev/oci/pack → omdev-0.0.0.dev506/omdev/manifests}/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/manifests/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/manifests/building.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/manifests/dumping.py +0 -0
- {omdev-0.0.0.dev459/omdev/packaging → omdev-0.0.0.dev506/omdev/markdown}/__init__.py +0 -0
- {omdev-0.0.0.dev459/omdev/precheck → omdev-0.0.0.dev506/omdev/mypy}/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/mypy/report.py +0 -0
- {omdev-0.0.0.dev459/omdev/py/scripts → omdev-0.0.0.dev506/omdev/oci}/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/oci/building.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/oci/compression.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/oci/data.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/oci/datarefs.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/oci/dataserver.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/oci/loading.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/oci/media.py +0 -0
- {omdev-0.0.0.dev459/omdev/py/tools → omdev-0.0.0.dev506/omdev/oci/pack}/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/oci/pack/packing.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/oci/pack/repositories.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/oci/pack/unpacking.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/oci/repositories.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/oci/tars.py +0 -0
- {omdev-0.0.0.dev459/omdev/pyproject/resources → omdev-0.0.0.dev506/omdev/packaging}/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/packaging/marshal.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/packaging/names.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/packaging/requires.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/pip.py +0 -0
- {omdev-0.0.0.dev459/omdev/scripts/lib → omdev-0.0.0.dev506/omdev/precheck}/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/precheck/base.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/precheck/blanklines.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/precheck/git.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/precheck/lite.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/precheck/manifests.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/precheck/scripts.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/precheck/unicode.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/__init__.py +0 -0
- {omdev-0.0.0.dev459/omdev/tokens → omdev-0.0.0.dev506/omdev/py/asts}/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/classdot.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/docstrings/LICENSE +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/docstrings/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/docstrings/attrdoc.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/docstrings/common.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/docstrings/epydoc.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/docstrings/google.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/docstrings/numpydoc.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/docstrings/parser.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/docstrings/rest.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/findimports.py +0 -0
- {omdev-0.0.0.dev459/omdev/tools/git → omdev-0.0.0.dev506/omdev/py/scripts}/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/scripts/bumpversion.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/scripts/execstat.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/scripts/importtrace.py +0 -0
- {omdev-0.0.0.dev459/omdev/tools/json → omdev-0.0.0.dev506/omdev/py/tokens}/__init__.py +0 -0
- {omdev-0.0.0.dev459/omdev → omdev-0.0.0.dev506/omdev/py}/tokens/all.py +0 -0
- {omdev-0.0.0.dev459/omdev → omdev-0.0.0.dev506/omdev/py}/tokens/tokenizert.py +0 -0
- {omdev-0.0.0.dev459/omdev → omdev-0.0.0.dev506/omdev/py}/tokens/utils.py +0 -0
- {omdev-0.0.0.dev459/omdev/tools/jsonview → omdev-0.0.0.dev506/omdev/py/tools}/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/py/tools/importscan.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/pyproject/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/pyproject/inject.py +0 -0
- {omdev-0.0.0.dev459/omdev/tools/jsonview → omdev-0.0.0.dev506/omdev/pyproject}/resources/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/pyproject/resources/docker-dev.sh +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/pyproject/resources/python.sh +0 -0
- {omdev-0.0.0.dev459/omdev/tools/pawk → omdev-0.0.0.dev506/omdev/pyproject/tools}/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/pyproject/venvs.py +0 -0
- {omdev-0.0.0.dev459/omdev/tui → omdev-0.0.0.dev506/omdev/rs}/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev459/omdev/tui/apps → omdev-0.0.0.dev506/omdev/scripts/lib}/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/scripts/slowcat.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/scripts/tmpexec.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tagstrings.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/cloc.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/diff.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/doc.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/docker.py +0 -0
- {omdev-0.0.0.dev459/omdev/tui/apps/markdown → omdev-0.0.0.dev506/omdev/tools/git}/__init__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/git/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/git/cloning.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/git/consts.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/git/messages.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/json/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/json/cli.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/json/io.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/json/parsing.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/json/processing.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/json/rendering.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/jsonview/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/jsonview/resources/jsonview.css +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/jsonview/resources/jsonview.js +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/linehisto.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/mkenv.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/notebook.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/pawk/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/pip.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/prof.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/qr.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/shadow.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tools/shell.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev/tui/apps/markdown/__main__.py +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/omdev.egg-info/top_level.txt +0 -0
- {omdev-0.0.0.dev459 → omdev-0.0.0.dev506}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: omdev
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev506
|
|
4
4
|
Summary: omdev
|
|
5
5
|
Author: wrmsr
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -14,22 +14,24 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
14
14
|
Requires-Python: >=3.13
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: omlish==0.0.0.
|
|
17
|
+
Requires-Dist: omlish==0.0.0.dev506
|
|
18
18
|
Provides-Extra: all
|
|
19
|
-
Requires-Dist: black~=
|
|
19
|
+
Requires-Dist: black~=26.1; extra == "all"
|
|
20
20
|
Requires-Dist: pycparser~=2.23; extra == "all"
|
|
21
21
|
Requires-Dist: pcpp~=1.30; extra == "all"
|
|
22
22
|
Requires-Dist: docutils~=0.22; extra == "all"
|
|
23
23
|
Requires-Dist: markdown-it-py~=4.0; extra == "all"
|
|
24
24
|
Requires-Dist: mdit-py-plugins~=0.5; extra == "all"
|
|
25
25
|
Requires-Dist: pygments~=2.19; extra == "all"
|
|
26
|
-
Requires-Dist: mypy~=1.
|
|
26
|
+
Requires-Dist: mypy~=1.19; extra == "all"
|
|
27
27
|
Requires-Dist: gprof2dot~=2025.4; extra == "all"
|
|
28
28
|
Requires-Dist: segno~=1.6; extra == "all"
|
|
29
29
|
Requires-Dist: rich~=14.2; extra == "all"
|
|
30
|
-
Requires-Dist: textual~=
|
|
30
|
+
Requires-Dist: textual~=7.3; extra == "all"
|
|
31
|
+
Requires-Dist: textual-dev~=1.8; extra == "all"
|
|
32
|
+
Requires-Dist: textual-speedups~=0.2; extra == "all"
|
|
31
33
|
Provides-Extra: black
|
|
32
|
-
Requires-Dist: black~=
|
|
34
|
+
Requires-Dist: black~=26.1; extra == "black"
|
|
33
35
|
Provides-Extra: c
|
|
34
36
|
Requires-Dist: pycparser~=2.23; extra == "c"
|
|
35
37
|
Requires-Dist: pcpp~=1.30; extra == "c"
|
|
@@ -39,14 +41,16 @@ Requires-Dist: markdown-it-py~=4.0; extra == "doc"
|
|
|
39
41
|
Requires-Dist: mdit-py-plugins~=0.5; extra == "doc"
|
|
40
42
|
Requires-Dist: pygments~=2.19; extra == "doc"
|
|
41
43
|
Provides-Extra: mypy
|
|
42
|
-
Requires-Dist: mypy~=1.
|
|
44
|
+
Requires-Dist: mypy~=1.19; extra == "mypy"
|
|
43
45
|
Provides-Extra: prof
|
|
44
46
|
Requires-Dist: gprof2dot~=2025.4; extra == "prof"
|
|
45
47
|
Provides-Extra: qr
|
|
46
48
|
Requires-Dist: segno~=1.6; extra == "qr"
|
|
47
49
|
Provides-Extra: tui
|
|
48
50
|
Requires-Dist: rich~=14.2; extra == "tui"
|
|
49
|
-
Requires-Dist: textual~=
|
|
51
|
+
Requires-Dist: textual~=7.3; extra == "tui"
|
|
52
|
+
Requires-Dist: textual-dev~=1.8; extra == "tui"
|
|
53
|
+
Requires-Dist: textual-speedups~=0.2; extra == "tui"
|
|
50
54
|
Dynamic: license-file
|
|
51
55
|
|
|
52
56
|
# Overview
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"module": ".cexts.cmake",
|
|
28
28
|
"attr": "_CLI_MODULE",
|
|
29
29
|
"file": "omdev/cexts/cmake.py",
|
|
30
|
-
"line":
|
|
30
|
+
"line": 335,
|
|
31
31
|
"value": {
|
|
32
32
|
"!.cli.types.CliModule": {
|
|
33
33
|
"name": "cmake",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"module": ".cli.clicli",
|
|
40
40
|
"attr": "_CLI_MODULE",
|
|
41
41
|
"file": "omdev/cli/clicli.py",
|
|
42
|
-
"line":
|
|
42
|
+
"line": 263,
|
|
43
43
|
"value": {
|
|
44
44
|
"!.cli.types.CliModule": {
|
|
45
45
|
"name": "cli",
|
|
@@ -527,7 +527,7 @@
|
|
|
527
527
|
"module": ".tools.sqlrepl",
|
|
528
528
|
"attr": "_CLI_MODULE",
|
|
529
529
|
"file": "omdev/tools/sqlrepl.py",
|
|
530
|
-
"line":
|
|
530
|
+
"line": 307,
|
|
531
531
|
"value": {
|
|
532
532
|
"!.cli.types.CliModule": {
|
|
533
533
|
"name": "sqlrepl",
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
Development utilities and support code.
|
|
4
|
+
|
|
5
|
+
# Notable packages
|
|
6
|
+
|
|
7
|
+
- **[cli](https://github.com/wrmsr/omlish/blob/master/omdev/cli)** - The codebase's all-in-one CLI. This is not
|
|
8
|
+
installed as an entrypoint / command when this package is itself installed - that is separated into the `omdev-cli`
|
|
9
|
+
installable package so as to not pollute users' bin/ directories when depping this lib for its utility code.
|
|
10
|
+
|
|
11
|
+
- **[amalg](https://github.com/wrmsr/omlish/blob/master/omdev/amalg)** - The [amalgamator](#amalgamation).
|
|
12
|
+
|
|
13
|
+
- **[pyproject](https://github.com/wrmsr/omlish/blob/master/omdev/pyproject)**
|
|
14
|
+
([amalg](https://github.com/wrmsr/omlish/blob/master/omdev/scripts/pyproject.py)) - python project management tool.
|
|
15
|
+
wrangles but does not replace tools like venv, pip, setuptools, and uv. does things like sets up venvs, generates
|
|
16
|
+
[`.pkg`](https://github.com/wrmsr/omlish/blob/master/.pkg) directories and their `pyproject.toml`'s (from their
|
|
17
|
+
`__about__.py`'s), and packages them. this should grow to eat more and more of the Makefile. as it is amalgamated it
|
|
18
|
+
requires no installation and can just be dropped into other projects / repos.
|
|
19
|
+
|
|
20
|
+
- **[ci](https://github.com/wrmsr/omlish/blob/master/omdev/ci)**
|
|
21
|
+
([amalg](https://github.com/wrmsr/omlish/blob/master/omdev/scripts/ci.py)) - ci runner. given a
|
|
22
|
+
[`compose.yml`](https://github.com/wrmsr/omlish/blob/master/docker/compose.yml)
|
|
23
|
+
and requirements.txt files, takes care of building and caching of containers and venvs and execution of required ci
|
|
24
|
+
commands. detects and [natively uses](https://github.com/wrmsr/omlish/blob/master/omdev/ci/github/api/v2)
|
|
25
|
+
github-action's caching system. unifies ci execution between local dev and github runners.
|
|
26
|
+
|
|
27
|
+
- **[tools.json](https://github.com/wrmsr/omlish/blob/master/omdev/tools/json)** (cli: `om j`) - a tool for json-like
|
|
28
|
+
data, obviously in the vein of [jq](https://github.com/jqlang/jq) but using the internal
|
|
29
|
+
[jmespath](https://github.com/wrmsr/omlish/blob/master/omlish/specs/jmespath) engine. supports
|
|
30
|
+
[true streaming](https://github.com/wrmsr/omlish/blob/master/omlish/formats/json/stream) json input and output, as
|
|
31
|
+
well as [various other](https://github.com/wrmsr/omlish/blob/master/omdev/tools/json/formats.py) non-streaming input
|
|
32
|
+
formats.
|
|
33
|
+
|
|
34
|
+
- **[tools.git](https://github.com/wrmsr/omlish/blob/master/omdev/tools/git)** (cli: `om git`) - a tool for various lazy
|
|
35
|
+
git operations, including the one that (poorly) writes all of these commit messages.
|
|
36
|
+
|
|
37
|
+
# Amalgamation
|
|
38
|
+
|
|
39
|
+
Amalgamation is the process of stitching together multiple python source files into a single self-contained python
|
|
40
|
+
script. ['lite'](https://github.com/wrmsr/omlish/blob/master/omlish#lite-code) code is written in a style conducive to
|
|
41
|
+
this.
|
|
42
|
+
|
|
43
|
+
# Local storage
|
|
44
|
+
|
|
45
|
+
Some of this code, when asked, will store things on the local filesystem. The only directories used (outside of ones
|
|
46
|
+
explicitly specified as command or function arguments) are managed in
|
|
47
|
+
[home.paths](https://github.com/wrmsr/omlish/blob/master/omdev/home/paths.py), and are the following:
|
|
48
|
+
|
|
49
|
+
- `$OMLISH_HOME`, default of `~/.omlish` - persistent things like config and state.
|
|
50
|
+
- `$OMLISH_CACHE`, default of `~/.cache/omlish` - used for things like the local ci cache and
|
|
51
|
+
[various other](https://github.com/search?q=repo%3Awrmsr%2Fomlish+%22dcache.%22&type=code) cached data.
|
|
@@ -13,7 +13,7 @@ class Project(ProjectBase):
|
|
|
13
13
|
|
|
14
14
|
optional_dependencies = {
|
|
15
15
|
'black': [
|
|
16
|
-
'black ~=
|
|
16
|
+
'black ~= 26.1',
|
|
17
17
|
],
|
|
18
18
|
|
|
19
19
|
'c': [
|
|
@@ -31,7 +31,7 @@ class Project(ProjectBase):
|
|
|
31
31
|
],
|
|
32
32
|
|
|
33
33
|
'mypy': [
|
|
34
|
-
'mypy ~= 1.
|
|
34
|
+
'mypy ~= 1.19',
|
|
35
35
|
],
|
|
36
36
|
|
|
37
37
|
'prof': [
|
|
@@ -44,7 +44,9 @@ class Project(ProjectBase):
|
|
|
44
44
|
|
|
45
45
|
'tui': [
|
|
46
46
|
'rich ~= 14.2',
|
|
47
|
-
'textual ~=
|
|
47
|
+
'textual ~= 7.3', # [syntax]
|
|
48
|
+
'textual-dev ~= 1.8',
|
|
49
|
+
'textual-speedups ~= 0.2',
|
|
48
50
|
],
|
|
49
51
|
}
|
|
50
52
|
|
|
@@ -58,7 +60,8 @@ class Project(ProjectBase):
|
|
|
58
60
|
|
|
59
61
|
|
|
60
62
|
class Setuptools(SetuptoolsBase):
|
|
61
|
-
|
|
63
|
+
cext = True
|
|
64
|
+
rs = True
|
|
62
65
|
|
|
63
66
|
find_packages = {
|
|
64
67
|
'include': [Project.name, f'{Project.name}.*'],
|
|
@@ -9,7 +9,8 @@ from omlish.algorithm import all as alg
|
|
|
9
9
|
from omlish.lite.runtime import LITE_REQUIRED_PYTHON_VERSION
|
|
10
10
|
|
|
11
11
|
from ...git.magic import GIT_DIFF_OMIT_MAGIC
|
|
12
|
-
from ...tokens import all as tks
|
|
12
|
+
from ...py.tokens import all as tks
|
|
13
|
+
from ..info import AMALG_INFO_ATTR
|
|
13
14
|
from .srcfiles import SrcFile
|
|
14
15
|
from .srcfiles import make_src_file
|
|
15
16
|
from .strip import strip_main_lines
|
|
@@ -32,18 +33,22 @@ SCAN_COMMENT = '# @omlish-amalg '
|
|
|
32
33
|
|
|
33
34
|
|
|
34
35
|
class AmalgGenerator:
|
|
36
|
+
DEFAULT_TARGET_LINE_LEN: ta.ClassVar[int] = 120
|
|
37
|
+
|
|
35
38
|
def __init__(
|
|
36
39
|
self,
|
|
37
40
|
main_path: str,
|
|
38
41
|
*,
|
|
39
42
|
mounts: ta.Mapping[str, str],
|
|
40
43
|
output_dir: str | None = None,
|
|
44
|
+
target_line_len: int | None = DEFAULT_TARGET_LINE_LEN,
|
|
41
45
|
) -> None:
|
|
42
46
|
super().__init__()
|
|
43
47
|
|
|
44
48
|
self._main_path = main_path
|
|
45
49
|
self._mounts = mounts
|
|
46
50
|
self._output_dir = output_dir
|
|
51
|
+
self._target_line_len = target_line_len
|
|
47
52
|
|
|
48
53
|
@cached.function
|
|
49
54
|
def _src_files(self) -> dict[str, SrcFile]:
|
|
@@ -105,6 +110,40 @@ class AmalgGenerator:
|
|
|
105
110
|
|
|
106
111
|
return [*additional_header_lines, *header_lines]
|
|
107
112
|
|
|
113
|
+
def gen_amalg_info_block(self, sfs: ta.Sequence[str]) -> str:
|
|
114
|
+
md = os.path.dirname(self._main_path)
|
|
115
|
+
src_files = self._src_files()
|
|
116
|
+
sf_dcts = [
|
|
117
|
+
dict(
|
|
118
|
+
path=os.path.relpath(sfn, md),
|
|
119
|
+
sha1=src_files[sfn].sha1,
|
|
120
|
+
)
|
|
121
|
+
for sfn in sfs
|
|
122
|
+
]
|
|
123
|
+
sf_lines = [
|
|
124
|
+
''.join([
|
|
125
|
+
' dict(',
|
|
126
|
+
', '.join([f'{k}={v!r}' for k, v in sf_dct.items()]),
|
|
127
|
+
'),',
|
|
128
|
+
])
|
|
129
|
+
for sf_dct in sf_dcts
|
|
130
|
+
]
|
|
131
|
+
if (tll := self._target_line_len) is not None:
|
|
132
|
+
sf_lines = [
|
|
133
|
+
l + ' # noqa' if len(l) >= tll else l
|
|
134
|
+
for l in sf_lines
|
|
135
|
+
]
|
|
136
|
+
|
|
137
|
+
return '\n'.join([
|
|
138
|
+
f'def {AMALG_INFO_ATTR}(): # noqa',
|
|
139
|
+
f' return dict(',
|
|
140
|
+
f' src_files=[',
|
|
141
|
+
*sf_lines,
|
|
142
|
+
f' ],',
|
|
143
|
+
f' )',
|
|
144
|
+
'',
|
|
145
|
+
])
|
|
146
|
+
|
|
108
147
|
@cached.function
|
|
109
148
|
def gen_amalg(self) -> str:
|
|
110
149
|
src_files = self._src_files()
|
|
@@ -137,6 +176,13 @@ class AmalgGenerator:
|
|
|
137
176
|
out.write(il if isinstance(il, str) else tks.join_toks(il.toks))
|
|
138
177
|
if dct:
|
|
139
178
|
out.write('\n\n')
|
|
179
|
+
##
|
|
180
|
+
|
|
181
|
+
ts = list(alg.toposort({ # noqa
|
|
182
|
+
f.path: {mp for i in f.imports if (mp := i.mod_path) is not None}
|
|
183
|
+
for f in src_files.values()
|
|
184
|
+
}))
|
|
185
|
+
sfs = [sf for ss in ts for sf in sorted(ss)]
|
|
140
186
|
|
|
141
187
|
##
|
|
142
188
|
|
|
@@ -155,11 +201,8 @@ class AmalgGenerator:
|
|
|
155
201
|
|
|
156
202
|
##
|
|
157
203
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
for f in src_files.values()
|
|
161
|
-
}))
|
|
162
|
-
sfs = [sf for ss in ts for sf in sorted(ss)]
|
|
204
|
+
out.write(self.gen_amalg_info_block(sfs))
|
|
205
|
+
out.write('\n\n')
|
|
163
206
|
|
|
164
207
|
##
|
|
165
208
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import dataclasses as dc
|
|
2
|
+
import hashlib
|
|
2
3
|
import typing as ta
|
|
3
4
|
|
|
4
5
|
from omlish import collections as col
|
|
5
6
|
from omlish import lang
|
|
6
7
|
|
|
7
|
-
from ...tokens import all as tks
|
|
8
|
+
from ...py.tokens import all as tks
|
|
8
9
|
from .imports import Import
|
|
9
10
|
from .imports import make_import
|
|
10
11
|
from .manifests import comment_out_manifest_comment
|
|
@@ -26,6 +27,9 @@ from .typing import skip_root_level_if_type_checking_block
|
|
|
26
27
|
class SrcFile:
|
|
27
28
|
path: str
|
|
28
29
|
|
|
30
|
+
src_bytes: bytes = dc.field(repr=False)
|
|
31
|
+
sha1: str = dc.field(repr=False)
|
|
32
|
+
|
|
29
33
|
src: str = dc.field(repr=False)
|
|
30
34
|
tokens: tks.Tokens = dc.field(repr=False)
|
|
31
35
|
lines: ta.Sequence[tks.Tokens] = dc.field(repr=False)
|
|
@@ -56,9 +60,12 @@ def make_src_file(
|
|
|
56
60
|
*,
|
|
57
61
|
mounts: ta.Mapping[str, str],
|
|
58
62
|
) -> SrcFile:
|
|
59
|
-
with open(path) as f:
|
|
60
|
-
|
|
63
|
+
with open(path, 'rb') as f:
|
|
64
|
+
src_bytes = f.read()
|
|
65
|
+
|
|
66
|
+
sha1 = hashlib.sha1(src_bytes).hexdigest() # noqa
|
|
61
67
|
|
|
68
|
+
src = src_bytes.decode('utf-8').strip()
|
|
62
69
|
tokens = tks.src_to_tokens(src)
|
|
63
70
|
lines = tks.split_lines(tokens)
|
|
64
71
|
|
|
@@ -115,6 +122,9 @@ def make_src_file(
|
|
|
115
122
|
return SrcFile(
|
|
116
123
|
path=path,
|
|
117
124
|
|
|
125
|
+
src_bytes=src_bytes,
|
|
126
|
+
sha1=sha1,
|
|
127
|
+
|
|
118
128
|
src=src,
|
|
119
129
|
tokens=tokens,
|
|
120
130
|
lines=lines,
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# ruff: noqa: UP045
|
|
2
|
+
# @omlish-lite
|
|
3
|
+
import typing as ta
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
##
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
AMALG_INFO_ATTR = '__omlish_amalg__'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class AmalgInfoSrcFile(ta.NamedTuple):
|
|
13
|
+
path: str
|
|
14
|
+
sha1: str
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class AmalgInfo(ta.NamedTuple):
|
|
18
|
+
src_files: ta.Sequence[AmalgInfoSrcFile]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def get_amalg_info() -> ta.Optional[AmalgInfo]:
|
|
22
|
+
try:
|
|
23
|
+
fn = globals()[AMALG_INFO_ATTR]
|
|
24
|
+
except KeyError:
|
|
25
|
+
return None
|
|
26
|
+
dct = fn()
|
|
27
|
+
dct['src_files'] = [AmalgInfoSrcFile(**sf_dct) for sf_dct in dct['src_files']]
|
|
28
|
+
return AmalgInfo(**dct)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def is_amalg() -> bool:
|
|
32
|
+
return AMALG_INFO_ATTR in globals()
|
|
@@ -14,7 +14,6 @@ import argparse
|
|
|
14
14
|
import asyncio
|
|
15
15
|
import itertools
|
|
16
16
|
import os.path
|
|
17
|
-
import sys
|
|
18
17
|
import typing as ta
|
|
19
18
|
|
|
20
19
|
from omlish.argparse.cli import ArgparseCli
|
|
@@ -23,7 +22,7 @@ from omlish.argparse.cli import argparse_cmd
|
|
|
23
22
|
from omlish.lite.check import check
|
|
24
23
|
from omlish.lite.inject import inj
|
|
25
24
|
from omlish.logs.modules import get_module_logger
|
|
26
|
-
from omlish.logs.standard import configure_standard_logging
|
|
25
|
+
from omlish.logs.std.standard import configure_standard_logging
|
|
27
26
|
|
|
28
27
|
from .cache import DirectoryFileCache
|
|
29
28
|
from .ci import Ci
|
|
@@ -260,7 +259,7 @@ async def _async_main() -> ta.Optional[int]:
|
|
|
260
259
|
def _main() -> None:
|
|
261
260
|
configure_standard_logging('DEBUG')
|
|
262
261
|
|
|
263
|
-
|
|
262
|
+
raise SystemExit(rc if isinstance(rc := asyncio.run(_async_main()), int) else 0)
|
|
264
263
|
|
|
265
264
|
|
|
266
265
|
if __name__ == '__main__':
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import dataclasses as dc
|
|
1
2
|
import inspect
|
|
2
3
|
import os
|
|
3
4
|
import re
|
|
4
5
|
import shlex
|
|
5
6
|
import subprocess
|
|
6
7
|
import sys
|
|
8
|
+
import time
|
|
7
9
|
import typing as ta
|
|
8
10
|
import urllib.parse
|
|
9
11
|
import urllib.request
|
|
@@ -13,6 +15,7 @@ from omlish import lang
|
|
|
13
15
|
from omlish.argparse import all as ap
|
|
14
16
|
from omlish.os.temp import temp_dir_context
|
|
15
17
|
|
|
18
|
+
from ..packaging.versions import Version
|
|
16
19
|
from ..pip import get_root_dists
|
|
17
20
|
from ..pip import lookup_latest_package_version
|
|
18
21
|
from . import install
|
|
@@ -87,22 +90,49 @@ class CliCli(ap.Cli):
|
|
|
87
90
|
|
|
88
91
|
#
|
|
89
92
|
|
|
93
|
+
@dc.dataclass()
|
|
94
|
+
class ReinstallWouldNotUpgradeError(Exception):
|
|
95
|
+
current_version: str
|
|
96
|
+
target_version: str
|
|
97
|
+
|
|
98
|
+
def __str__(self) -> str:
|
|
99
|
+
return f'Current version {self.current_version} is not older than target version {self.target_version} '
|
|
100
|
+
|
|
90
101
|
@ap.cmd(
|
|
91
102
|
ap.arg('--url', default=DEFAULT_REINSTALL_URL),
|
|
92
103
|
ap.arg('--local', action='store_true'),
|
|
93
104
|
ap.arg('--no-deps', action='store_true'),
|
|
94
105
|
ap.arg('--no-uv', action='store_true'),
|
|
95
106
|
ap.arg('--dry-run', action='store_true'),
|
|
107
|
+
ap.arg('--must-upgrade', action='store_true'),
|
|
108
|
+
ap.arg('--must-upgrade-loop', action='store_true'),
|
|
96
109
|
ap.arg('--version'),
|
|
97
110
|
ap.arg('extra_deps', nargs='*'),
|
|
98
111
|
)
|
|
99
112
|
def reinstall(self) -> None:
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
113
|
+
current_version = __about__.__version__
|
|
114
|
+
|
|
115
|
+
while True:
|
|
116
|
+
latest_version = _parse_latest_version_str(lookup_latest_package_version(__package__.split('.')[0]))
|
|
117
|
+
|
|
118
|
+
if self.args.version is not None:
|
|
119
|
+
target_version: str = self.args.version
|
|
120
|
+
else:
|
|
121
|
+
target_version = latest_version
|
|
122
|
+
|
|
123
|
+
if self.args.must_upgrade or self.args.must_upgrade_loop:
|
|
124
|
+
current_vo = Version(current_version)
|
|
125
|
+
target_vo = Version(target_version)
|
|
126
|
+
if not (target_vo > current_vo):
|
|
127
|
+
ex = CliCli.ReinstallWouldNotUpgradeError(current_version, target_version)
|
|
128
|
+
if self.args.must_upgrade_loop:
|
|
129
|
+
print(ex)
|
|
130
|
+
time.sleep(1)
|
|
131
|
+
continue
|
|
132
|
+
else:
|
|
133
|
+
raise ex
|
|
134
|
+
|
|
135
|
+
break
|
|
106
136
|
|
|
107
137
|
#
|
|
108
138
|
|
|
@@ -186,7 +216,7 @@ class CliCli(ap.Cli):
|
|
|
186
216
|
|
|
187
217
|
#
|
|
188
218
|
|
|
189
|
-
print(f'Current version: {
|
|
219
|
+
print(f'Current version: {current_version}')
|
|
190
220
|
print(f'Latest version: {latest_version}')
|
|
191
221
|
print(f'Target version: {target_version}')
|
|
192
222
|
print()
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import argparse
|
|
2
2
|
import os.path
|
|
3
3
|
import subprocess
|
|
4
|
-
import sys
|
|
5
4
|
import typing as ta
|
|
6
5
|
|
|
7
6
|
from omlish.formats import json
|
|
@@ -60,7 +59,7 @@ def _main() -> None:
|
|
|
60
59
|
entry_dcts = [json.loads(sl) for l in log_lines if (sl := l.strip())]
|
|
61
60
|
print(json.dumps_compact(entry_dcts))
|
|
62
61
|
|
|
63
|
-
|
|
62
|
+
raise SystemExit(rc)
|
|
64
63
|
|
|
65
64
|
|
|
66
65
|
if __name__ == '__main__':
|