omdev 0.0.0.dev398__py3-none-any.whl → 0.0.0.dev400__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.
omdev/.manifests.json CHANGED
@@ -224,7 +224,7 @@
224
224
  "module": ".py.findimports",
225
225
  "attr": "_CLI_MODULE",
226
226
  "file": "omdev/py/findimports.py",
227
- "line": 89,
227
+ "line": 136,
228
228
  "value": {
229
229
  "$.cli.types.CliModule": {
230
230
  "cmd_name": "py/findimports",
@@ -236,7 +236,7 @@
236
236
  "module": ".py.scripts.execstat",
237
237
  "attr": "_CLI_MODULE",
238
238
  "file": "omdev/py/scripts/execstat.py",
239
- "line": 82,
239
+ "line": 84,
240
240
  "value": {
241
241
  "$.cli.types.CliModule": {
242
242
  "cmd_name": "py/execstat",
@@ -248,7 +248,7 @@
248
248
  "module": ".py.scripts.importtrace",
249
249
  "attr": "_CLI_MODULE",
250
250
  "file": "omdev/py/scripts/importtrace.py",
251
- "line": 490,
251
+ "line": 491,
252
252
  "value": {
253
253
  "$.cli.types.CliModule": {
254
254
  "cmd_name": "py/importtrace",
omdev/ci/utils.py CHANGED
@@ -7,7 +7,7 @@ import typing as ta
7
7
 
8
8
 
9
9
  def read_yaml_file(yaml_file: str) -> ta.Any:
10
- yaml = __import__('yaml')
10
+ import yaml # noqa
11
11
 
12
12
  with open(yaml_file) as f:
13
13
  return yaml.safe_load(f)
@@ -7,6 +7,7 @@ TODO:
7
7
  - !! manifests for dataclass config?
8
8
  - more sparse / diffuse intent, not package-level
9
9
  """
10
+ import importlib
10
11
  import logging
11
12
  import os.path
12
13
  import typing as ta
@@ -46,7 +47,6 @@ class DataclassCodeGen:
46
47
  sub_pkgs = sorted(lang.yield_importable(
47
48
  pkg_root,
48
49
  recursive=True,
49
- include_special=True,
50
50
  ))
51
51
 
52
52
  for sub_pkg in sub_pkgs:
@@ -62,7 +62,7 @@ class DataclassCodeGen:
62
62
  with processing_options_context(CodegenProcessingOption(callback)):
63
63
  print(f'{sub_pkg=}')
64
64
  try:
65
- __import__(sub_pkg)
65
+ importlib.import_module(sub_pkg)
66
66
  except ImportError as e:
67
67
  print(repr(e))
68
68
 
omdev/oci/tars.py CHANGED
@@ -92,10 +92,12 @@ class OciDataTarWriter(ExitStacked):
92
92
  )
93
93
 
94
94
  elif self._compression is OciCompression.ZSTD:
95
- zc = __import__('zstandard').ZstdCompressor(
95
+ import zstandard # noqa
96
+
97
+ zc = zstandard.ZstdCompressor(
96
98
  level=self._zstd_level,
97
99
  )
98
- self._cf = self._enter_context(zc.stream_writer(self._cw))
100
+ self._cf = self._enter_context(zc.stream_writer(self._cw)) # type: ignore
99
101
 
100
102
  elif self._compression is None:
101
103
  self._cf = self._cw # type: ignore
omdev/precheck/scripts.py CHANGED
@@ -41,7 +41,19 @@ class ScriptDepsPrecheck(Precheck['ScriptDepsPrecheck.Config']):
41
41
  if not src.startswith('#!/usr/bin/env python3\n'):
42
42
  yield Precheck.Violation(self, f'script {fp} lacks correct shebang')
43
43
 
44
- imps = findimports.find_imports(fp)
45
- deps = findimports.get_import_deps(imps)
44
+ deps: set[str] = set()
45
+
46
+ imp_finder = findimports.ImportFinder()
47
+ for imp in imp_finder.yield_file_imports(fp):
48
+ # FIXME: lame
49
+ if imp.line and 'noqa' in [p.strip() for p in imp.line.split('#')]:
50
+ continue
51
+
52
+ if (imp_tgts := imp_finder.get_import_node_targets(imp.node)) is None:
53
+ continue
54
+
55
+ imp_deps = imp_finder.get_import_deps(imp_tgts)
56
+ deps.update(imp_deps)
57
+
46
58
  if deps:
47
59
  yield Precheck.Violation(self, f'script {fp} has deps: {deps}')
omdev/py/findimports.py CHANGED
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env python3
2
2
  # @omlish-script
3
3
  """
4
+ Note: Not lite as supporting old ast grammars is annoying and a non-goal.
5
+
4
6
  TODO:
5
7
  - !! FIX: from omlish import lang - try lang as a subpackage
6
8
  - multiple commands:
@@ -8,6 +10,7 @@ TODO:
8
10
  - graphviz
9
11
  """
10
12
  import ast
13
+ import dataclasses as dc
11
14
  import importlib.machinery
12
15
  import importlib.util
13
16
  import os.path
@@ -18,69 +21,113 @@ import typing as ta
18
21
  ##
19
22
 
20
23
 
21
- _BUILTIN_MODULE_NAMES = frozenset([*sys.builtin_module_names, *sys.stdlib_module_names])
24
+ class ImportFinder:
25
+ def __init__(
26
+ self,
27
+ *,
28
+ builtin_module_names: ta.AbstractSet[str] | None = None,
29
+ ) -> None:
30
+ super().__init__()
31
+
32
+ if builtin_module_names is None:
33
+ builtin_module_names = self.DEFAULT_BUILTIN_MODULE_NAMES
34
+ self._builtin_module_names = builtin_module_names
22
35
 
36
+ self._whichmod_cache: dict[str, ta.Any] = {}
23
37
 
24
- def whichmod(i: str) -> ta.Literal['bad', 'builtin', 'dep']:
25
- try:
26
- l = importlib.util.find_spec(i)
27
- except (ImportError, ValueError):
28
- return 'bad'
38
+ #
29
39
 
30
- if not isinstance(l, importlib.machinery.ModuleSpec) or not l.origin:
31
- return 'bad'
40
+ @dc.dataclass(frozen=True)
41
+ class Import:
42
+ fp: str
43
+ node: ast.AST
44
+ line: str | None
32
45
 
33
- # if l.origin.startswith(sys.base_prefix) or l.origin == 'frozen':
34
- # return 'builtin'
46
+ def yield_file_imports(self, fp: str) -> ta.Iterator[Import]:
47
+ # if not os.path.isfile(os.path.join(os.path.dirname(fp), '__init__.py')):
48
+ # return
35
49
 
36
- if i in _BUILTIN_MODULE_NAMES:
37
- return 'builtin'
50
+ with open(fp) as f:
51
+ buf = f.read()
38
52
 
39
- return 'dep'
53
+ lines = buf.splitlines(keepends=True)
40
54
 
55
+ for node in ast.walk(ast.parse(buf)):
56
+ if isinstance(node, (ast.Import, ast.ImportFrom)):
57
+ yield ImportFinder.Import(
58
+ fp,
59
+ node,
60
+ lines[node.lineno - 1] if node.lineno is not None else None,
61
+ )
41
62
 
42
- def yield_imports(fp: str) -> set[str]:
43
- # if not os.path.isfile(os.path.join(os.path.dirname(fp), '__init__.py')):
44
- # return
63
+ def yield_imports(self, *rootps: str) -> ta.Iterator[Import]:
64
+ for rootp in rootps:
65
+ if os.path.isfile(rootp):
66
+ if rootp.endswith('.py'):
67
+ yield from self.yield_file_imports(os.path.join(os.path.dirname(rootp), os.path.basename(rootp)))
45
68
 
46
- with open(fp) as f:
47
- buf = f.read()
69
+ else:
70
+ for dp, dns, fns in os.walk(os.path.expanduser(rootp)): # noqa
71
+ for fn in fns:
72
+ if fn.endswith('.py'):
73
+ yield from self.yield_file_imports(os.path.join(dp, fn))
48
74
 
49
- nodes: list[ast.AST] = []
75
+ #
50
76
 
51
- def rec(n):
52
- nodes.append(n)
53
- for c in ast.iter_child_nodes(n):
54
- rec(c)
77
+ def get_import_node_targets(self, node: ast.AST) -> set[str] | None:
78
+ if isinstance(node, ast.Import):
79
+ return {na.name for na in node.names}
55
80
 
56
- rec(ast.parse(buf))
81
+ elif isinstance(node, ast.ImportFrom):
82
+ return {node.module} if node.module and not node.level else set()
57
83
 
58
- return {
59
- *(na.name for i in nodes if isinstance(i, ast.Import) for na in i.names),
60
- *(i.module for i in nodes if isinstance(i, ast.ImportFrom) if i.module and not i.level),
61
- }
84
+ else:
85
+ return None
62
86
 
87
+ def find_import_targets(self, *rootps: str) -> set[str]:
88
+ ret: set[str] = set()
89
+ for imp in self.yield_imports(*rootps):
90
+ if (imp_tgts := self.get_import_node_targets(imp.node)):
91
+ ret.update(imp_tgts)
92
+ return ret
63
93
 
64
- def find_imports(*rootps: str) -> set[str]:
65
- imps: set[str] = set()
94
+ #
66
95
 
67
- for rootp in rootps:
68
- if os.path.isfile(rootp):
69
- if rootp.endswith('.py'):
70
- imps.update(yield_imports(os.path.join(os.path.dirname(rootp), os.path.basename(rootp))))
96
+ DEFAULT_BUILTIN_MODULE_NAMES: ta.ClassVar[ta.AbstractSet[str]] = frozenset([
97
+ *sys.builtin_module_names,
98
+ *sys.stdlib_module_names,
99
+ ])
71
100
 
72
- else:
73
- for dp, dns, fns in os.walk(os.path.expanduser(rootp)): # noqa
74
- for fn in fns:
75
- if fn.endswith('.py'):
76
- imps.update(yield_imports(os.path.join(dp, fn)))
101
+ def _whichmod(self, i: str) -> ta.Literal['bad', 'builtin', 'dep']:
102
+ try:
103
+ l = importlib.util.find_spec(i)
104
+ except (ImportError, ValueError):
105
+ return 'bad'
106
+
107
+ if not isinstance(l, importlib.machinery.ModuleSpec) or not l.origin:
108
+ return 'bad'
109
+
110
+ # if l.origin.startswith(sys.base_prefix) or l.origin == 'frozen':
111
+ # return 'builtin'
112
+
113
+ if i in self._builtin_module_names:
114
+ return 'builtin'
115
+
116
+ return 'dep'
77
117
 
78
- return imps
118
+ def whichmod(self, i: str) -> ta.Literal['bad', 'builtin', 'dep']:
119
+ try:
120
+ return self._whichmod_cache[i]
121
+ except KeyError:
122
+ pass
79
123
 
124
+ ret = self._whichmod(i)
125
+ self._whichmod_cache[i] = ret
126
+ return ret
80
127
 
81
- def get_import_deps(imps: set[str]) -> set[str]:
82
- eimps = {n for n in imps for n in [n.split('.')[0]] if n not in sys.builtin_module_names}
83
- return {i for i in eimps if whichmod(i) != 'builtin'}
128
+ def get_import_deps(self, imps: set[str]) -> set[str]:
129
+ eimps = {n for n in imps for n in [n.split('.')[0]] if n not in sys.builtin_module_names}
130
+ return {i for i in eimps if self.whichmod(i) != 'builtin'}
84
131
 
85
132
 
86
133
  ##
@@ -95,8 +142,9 @@ _CLI_MODULE = {'$omdev.cli.types.CliModule': {
95
142
 
96
143
  if __name__ == '__main__':
97
144
  def _main() -> None:
98
- imps = find_imports(*sys.argv[1:])
99
- deps = get_import_deps(imps)
145
+ imp_finder = ImportFinder()
146
+ imps = imp_finder.find_import_targets(*sys.argv[1:])
147
+ deps = imp_finder.get_import_deps(imps)
100
148
  print(chr(10).join(sorted(deps)))
101
149
 
102
150
  _main()
@@ -36,8 +36,10 @@ def _run(
36
36
 
37
37
  #
38
38
 
39
+ ns: dict = {}
40
+
39
41
  if setup:
40
- exec(setup)
42
+ exec(setup, globals(), ns)
41
43
 
42
44
  code = compile(src, '', 'exec')
43
45
 
@@ -54,7 +56,7 @@ def _run(
54
56
 
55
57
  #
56
58
 
57
- exec(code)
59
+ exec(code, globals(), ns)
58
60
 
59
61
  #
60
62
 
@@ -3,6 +3,7 @@
3
3
  # ruff: noqa: UP006 UP007 UP045
4
4
  """
5
5
  TODO:
6
+ - !! amalg !!
6
7
  - hoist first stacktrace file to a full field
7
8
  - no psutil on lin / togglable on mac
8
9
  - create table paths(path varchar(1024); - norm, dedupe, index, etc (bonus points for 32bit key)
omdev/scripts/ci.py CHANGED
@@ -237,7 +237,7 @@ class ShellCmd:
237
237
 
238
238
 
239
239
  def read_yaml_file(yaml_file: str) -> ta.Any:
240
- yaml = __import__('yaml')
240
+ import yaml # noqa
241
241
 
242
242
  with open(yaml_file) as f:
243
243
  return yaml.safe_load(f)
@@ -7793,10 +7793,12 @@ class OciDataTarWriter(ExitStacked):
7793
7793
  )
7794
7794
 
7795
7795
  elif self._compression is OciCompression.ZSTD:
7796
- zc = __import__('zstandard').ZstdCompressor(
7796
+ import zstandard # noqa
7797
+
7798
+ zc = zstandard.ZstdCompressor(
7797
7799
  level=self._zstd_level,
7798
7800
  )
7799
- self._cf = self._enter_context(zc.stream_writer(self._cw))
7801
+ self._cf = self._enter_context(zc.stream_writer(self._cw)) # type: ignore
7800
7802
 
7801
7803
  elif self._compression is None:
7802
7804
  self._cf = self._cw # type: ignore
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev398
3
+ Version: 0.0.0.dev400
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ 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.dev398
17
+ Requires-Dist: omlish==0.0.0.dev400
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=25.1; extra == "all"
20
20
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -1,4 +1,4 @@
1
- omdev/.manifests.json,sha256=vqg148YzWHn61WpGqC2PuTiOIR2HcH5O55XZZGTcnVw,12452
1
+ omdev/.manifests.json,sha256=oCm2YooCueFdF1vxjY3VXUVdcdJSUf7j5PxXeB4rEgY,12453
2
2
  omdev/__about__.py,sha256=fQNmzSa1MntcPSrzg_Vpo6JRU2RbXik2NqRz0oQCApE,1202
3
3
  omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  omdev/cmake.py,sha256=9rfSvFHPmKDj9ngvfDB2vK8O-xO_ZwUm7hMKLWA-yOw,4578
@@ -79,7 +79,7 @@ omdev/ci/consts.py,sha256=HkSYz-_hHilcHPBvRs-SwcUxW7vMNlHXZ8OyIKnVQbQ,21
79
79
  omdev/ci/inject.py,sha256=Yk7bT7sRC76PUN9qQ07MiveAuQmi1LZBKxah7VKOB5Q,1930
80
80
  omdev/ci/requirements.py,sha256=oDk-xEj-woNHElVQ0RbHWvG7mN-_2IopkpFLQU4QyTs,2111
81
81
  omdev/ci/shell.py,sha256=YzYqIgRbSaScgSyMwaM-HP54B3HQW0dPr0mXhdsB-70,841
82
- omdev/ci/utils.py,sha256=NHbac08-TfG9uIrIWe2a6ES-KEsLwMXOBdnMOFNyHTI,310
82
+ omdev/ci/utils.py,sha256=vedSrhoHKZdhzIkVUrQgETz8ox60UGewKw1qjNQ090w,304
83
83
  omdev/ci/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
84
  omdev/ci/docker/buildcaching.py,sha256=ge6TOKkffqVJMHMPJJl4sWy7hOkUeXgjmfq2cVJEsus,1839
85
85
  omdev/ci/docker/cache.py,sha256=Psk9EX9iDJ2Fk-tDGzbBa4TD8xgucroGoY_AErjgzDo,2120
@@ -128,7 +128,7 @@ omdev/cmdlog/cmdlog.py,sha256=MJqfCG7sVWjSK_i1shD7cgWpFZXZkPvGhGEh-yd6iwM,1982
128
128
  omdev/dataclasses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
129
  omdev/dataclasses/__main__.py,sha256=N-a0Lf_s7D0VajuZCCY_dt8R4rSpeck9inbCsoIvciQ,175
130
130
  omdev/dataclasses/cli.py,sha256=j5GfpJQSkA_jmV94XTVb3amCFYjgrasMs-bp_zJEkqE,445
131
- omdev/dataclasses/codegen.py,sha256=T9SYsTjmNrM1HMUFVMO46-Szd3DH0Em0B-I_UTan6qg,3029
131
+ omdev/dataclasses/codegen.py,sha256=sxWe791RvRQqqBTofwiEknbT7XV2TZHTXuR6FbR3zzU,3025
132
132
  omdev/dataserver/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
133
133
  omdev/dataserver/handlers.py,sha256=YTuRfZehP9panTwq8dPReHZwXF1_fFIueh-_ZoztA98,5446
134
134
  omdev/dataserver/http.py,sha256=SMS6w-GVevG58FypqmPytcEqW8aUWpd2_F6JlBDIuBc,1730
@@ -197,7 +197,7 @@ omdev/oci/dataserver.py,sha256=YGYrVW2X3rwa4i0FudfjGeZl39F2dDNPnoGH9xOZMhI,1869
197
197
  omdev/oci/loading.py,sha256=ZKy2x-j0KkpyAt4zlslSOP5mk9UBxNMQWMGu9TygoXA,3861
198
198
  omdev/oci/media.py,sha256=lI8b-zw3OPXx_y9m0uqeqb38MWE5sdzVWHrafwl1hlY,5357
199
199
  omdev/oci/repositories.py,sha256=SG31QBMuMCuC9gJCUKmxG6O_Anze9XF1aTsV_zEvMxI,4519
200
- omdev/oci/tars.py,sha256=LgC72-Hw-z-v9NRZkuPQg9UB-pxo_zIXA-SEG56I1Bk,3368
200
+ omdev/oci/tars.py,sha256=UCO1y8zoZMBOg6DOvw7dtMs3W9PVGRQ-bIvf349PFDk,3408
201
201
  omdev/oci/pack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
202
202
  omdev/oci/pack/packing.py,sha256=zsvQN-VD-7MaMjiylUpg_jXicp1YDbtyUktrR7ek6Ug,5419
203
203
  omdev/oci/pack/repositories.py,sha256=Ogh4Wj2ySvIMnuDFb2OeBc67hHtc0WWkAfBxOkNE5aA,4954
@@ -219,7 +219,7 @@ omdev/precheck/imports.py,sha256=3loQxHMrpI0ce4-le77NCSxutLac_5vDW4UDX7KWWg8,256
219
219
  omdev/precheck/lite.py,sha256=qd6nXWEVut8aBSRD_NxnxXGRNa9ue8mu8ND8rGLisE4,4710
220
220
  omdev/precheck/main.py,sha256=_1A5wiu9p2th1dn_17w1ZIFtMmCIOaTFpWyvK0jopEA,4374
221
221
  omdev/precheck/manifests.py,sha256=96deAjSGCqKPJz8sAqzx8YY3SCbMzO9v-hytfxPPDJU,789
222
- omdev/precheck/scripts.py,sha256=244Jq5xee2QErn0gvpt0hmdYg95TYtuefMDXaE9YPws,1344
222
+ omdev/precheck/scripts.py,sha256=6nb_lDgyX7u9kdF_BU6ubY01q_jGk96VH9q9gpOieng,1753
223
223
  omdev/precheck/unicode.py,sha256=VUNDCrlfUas_U8ugV_q0eFUXuBgKjS8YdCFm0FXREXo,2583
224
224
  omdev/ptk/__init__.py,sha256=4zhIfvhebFj4TJRRN1SQkcAe-7elizcfZLsD-fIlZsI,5198
225
225
  omdev/ptk/confirm.py,sha256=11MJArDEMSm7L1Qx68B07Qfsu43_ACyk48tbub7P9jk,1611
@@ -239,7 +239,7 @@ omdev/py/__init__.py,sha256=u7tLEfRTnPVtWPmKK_ZIvnFkZwTe1q44UQ53cvsix3k,41
239
239
  omdev/py/attrdocs.py,sha256=FcMSUFw8_zyNYducsWnZKEKi_WDox3-b3Xjw0DrHUcs,5180
240
240
  omdev/py/bracepy.py,sha256=PPPoTMj4FJ5Lk3GGPEEWBGU7Kl1eCJBApSJnRvRj2Ms,2753
241
241
  omdev/py/classdot.py,sha256=CAHL39nhQWnELVe1L6HIOyLha2h3pf4f1vKyLZTHhkM,1666
242
- omdev/py/findimports.py,sha256=V3GcFhqYOiPQtAOpTi4Pmeb3_c5mKqlEwah7v9vCBjg,2476
242
+ omdev/py/findimports.py,sha256=-ADbdLAFKW05lMwHxT8bf0hZsKFW8XJLoG-5oVRlK2g,4246
243
243
  omdev/py/srcheaders.py,sha256=cMopJr-QpOmzEBow-4mVupxdULE8QdSaSLH2aJV5Xxg,1993
244
244
  omdev/py/docstrings/LICENSE,sha256=xcpUBjP2UnH0P7dk-v45ilWGJr0Ydn0vgMvGReKMTVA,1084
245
245
  omdev/py/docstrings/__init__.py,sha256=HFzqco1oj6M7KQ80i48W9gYABVJU8oM_1wpl9ndBNAA,413
@@ -252,8 +252,8 @@ omdev/py/docstrings/parser.py,sha256=umJEgQBkSXLwWIKZrBbFCfNrz847vpTNDqTTEwlvHpA
252
252
  omdev/py/docstrings/rest.py,sha256=c2xPYg_W01W9eYY_KLKX69E4qu4jpkgUshi5K5EyVv8,5221
253
253
  omdev/py/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
254
254
  omdev/py/scripts/bumpversion.py,sha256=UDMtTd_wfkqsmrtHqTKDilWVzUBigzZAOCVND7t9jyw,1124
255
- omdev/py/scripts/execstat.py,sha256=eyk_TCeJt-xtMGqaW3X7pnEBe7JZbXrTYsODn_m6lfM,3869
256
- omdev/py/scripts/importtrace.py,sha256=F5K7ZH57S2kekigDZBXpuDjm8HgozfEQ39BNCjkmUrE,14241
255
+ omdev/py/scripts/execstat.py,sha256=eeOJ6LcNi-SS-EJKPubuHNvUbEnbqouliWvz6fjwjwM,3918
256
+ omdev/py/scripts/importtrace.py,sha256=Plh2ixN8NxTekrNoac6l9wg9B4x1647sEOvQTSy_Hbk,14256
257
257
  omdev/py/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
258
258
  omdev/py/tools/importscan.py,sha256=4dCH0coX0OqNwesteKaTE8GxuSfLhgXYQlzNUXLiSNY,4640
259
259
  omdev/py/tools/mkrelimp.py,sha256=kuzfS4GWcGi-ItyhEHSW4hV9ZcfDJL6inDMhDp1V2lE,4049
@@ -270,7 +270,7 @@ omdev/pyproject/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
270
270
  omdev/pyproject/resources/docker-dev.sh,sha256=DHkz5D18jok_oDolfg2mqrvGRWFoCe9GQo04dR1czcc,838
271
271
  omdev/pyproject/resources/python.sh,sha256=rFaN4SiJ9hdLDXXsDTwugI6zsw6EPkgYMmtacZeTbvw,749
272
272
  omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
273
- omdev/scripts/ci.py,sha256=sReH_mR0BiE3-KPBD2VVEyKrUJNJhcTF0oeSm7pmyyg,362502
273
+ omdev/scripts/ci.py,sha256=0a_DmI9q44dl9wvE64IvJwbMICVFC0O5cj3LCZC5EJs,362536
274
274
  omdev/scripts/interp.py,sha256=2xNG-ObiPC-F5eV_nTHq2u-V3Hyuo_6KblPFCBhm2mA,158487
275
275
  omdev/scripts/pyproject.py,sha256=DL5q2gsnGChTTuzSHn1PprW2kl3ti_K60JXnKLZdA40,269992
276
276
  omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
@@ -321,9 +321,9 @@ omdev/tools/jsonview/resources/jsonview.js,sha256=faDvXDOXKvEvjOuIlz4D3F2ReQXb_b
321
321
  omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
322
322
  omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
323
323
  omdev/tools/pawk/pawk.py,sha256=ao5mdrpiSU4AZ8mBozoEaV3UVlmVTnRG9wD9XP70MZE,11429
324
- omdev-0.0.0.dev398.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
325
- omdev-0.0.0.dev398.dist-info/METADATA,sha256=jXwyfyqVmgin9nqWzjmmywMrgJuN7ei5cWIa9M07zNU,5094
326
- omdev-0.0.0.dev398.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
327
- omdev-0.0.0.dev398.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
328
- omdev-0.0.0.dev398.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
329
- omdev-0.0.0.dev398.dist-info/RECORD,,
324
+ omdev-0.0.0.dev400.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
325
+ omdev-0.0.0.dev400.dist-info/METADATA,sha256=MATrBsUxzjUtEfAhaAxoSZG-gp7WXDVaGKR52qDdI8c,5094
326
+ omdev-0.0.0.dev400.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
327
+ omdev-0.0.0.dev400.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
328
+ omdev-0.0.0.dev400.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
329
+ omdev-0.0.0.dev400.dist-info/RECORD,,