omdev 0.0.0.dev98__py3-none-any.whl → 0.0.0.dev100__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of omdev might be problematic. Click here for more details.

omdev/precheck/scripts.py CHANGED
@@ -3,9 +3,8 @@ import os
3
3
  import stat
4
4
  import typing as ta
5
5
 
6
- from omdev import findimports
7
- from omdev import findmagic
8
-
6
+ from .. import findimports
7
+ from .. import magic
9
8
  from .base import Precheck
10
9
  from .base import PrecheckContext
11
10
 
@@ -22,10 +21,10 @@ class ScriptDepsPrecheck(Precheck['ScriptDepsPrecheck.Config']):
22
21
  super().__init__(context, config)
23
22
 
24
23
  async def run(self) -> ta.AsyncGenerator[Precheck.Violation, None]:
25
- for fp in findmagic.find_magic(
24
+ for fp in magic.find_magic_files(
25
+ magic.PY_MAGIC_STYLE,
26
26
  self._context.src_roots,
27
- ['# @omlish-script'],
28
- ['py'],
27
+ keys=['@omlish-script'],
29
28
  ):
30
29
  if not (stat.S_IXUSR & os.stat(fp).st_mode):
31
30
  yield Precheck.Violation(self, f'script {fp} is not executable')
omdev/pyproject/pkg.py CHANGED
@@ -40,7 +40,7 @@ from omlish.lite.logs import log
40
40
  from omlish.lite.subprocesses import subprocess_check_call
41
41
 
42
42
  from ..cexts.magic import CextMagic
43
- from ..findmagic import find_magic
43
+ from ..magic.find import find_magic_files
44
44
  from ..revisions import GitRevisionAdder
45
45
  from ..toml.writer import TomlWriter
46
46
 
@@ -403,10 +403,10 @@ class _PyprojectCextPackageGenerator(BasePyprojectPackageGenerator):
403
403
 
404
404
  @cached_nullary
405
405
  def find_cext_srcs(self) -> ta.Sequence[str]:
406
- return sorted(find_magic(
406
+ return sorted(find_magic_files(
407
+ CextMagic.STYLE,
407
408
  [self._dir_name],
408
- [CextMagic.MAGIC_COMMENT],
409
- CextMagic.FILE_EXTENSIONS,
409
+ keys=[CextMagic.KEY],
410
410
  ))
411
411
 
412
412
  #
@@ -99,84 +99,6 @@ UnparsedVersionVar = ta.TypeVar('UnparsedVersionVar', bound=UnparsedVersion)
99
99
  CallableVersionOperator = ta.Callable[['Version', str], bool]
100
100
 
101
101
 
102
- ########################################
103
- # ../../cexts/magic.py
104
-
105
-
106
- class CextMagic:
107
- MAGIC = '@omlish-cext'
108
- MAGIC_COMMENT = f'// {MAGIC}'
109
-
110
- FILE_EXTENSIONS = ('c', 'cc', 'cpp')
111
-
112
-
113
- ########################################
114
- # ../../findmagic.py
115
-
116
-
117
- def compile_magic_pat(m: str) -> re.Pattern:
118
- return re.compile('^' + re.escape(m) + r'($|(\s.*))')
119
-
120
-
121
- def find_magic(
122
- roots: ta.Sequence[str],
123
- magics: ta.Sequence[str],
124
- exts: ta.Sequence[str],
125
- *,
126
- py: bool = False,
127
- ) -> ta.Iterator[str]:
128
- if isinstance(roots, str):
129
- raise TypeError(roots)
130
- if isinstance(magics, str):
131
- raise TypeError(magics)
132
- if isinstance(exts, str):
133
- raise TypeError(exts)
134
-
135
- if not magics:
136
- raise Exception('Must specify magics')
137
- if not exts:
138
- raise Exception('Must specify extensions')
139
-
140
- pats = [compile_magic_pat(m) for m in magics]
141
-
142
- for root in roots:
143
- for dp, dns, fns in os.walk(root): # noqa
144
- for fn in fns:
145
- if not any(fn.endswith(f'.{x}') for x in exts):
146
- continue
147
-
148
- fp = os.path.join(dp, fn)
149
- try:
150
- with open(fp) as f:
151
- src = f.read()
152
- except UnicodeDecodeError:
153
- continue
154
-
155
- if not any(
156
- any(pat.fullmatch(l) for pat in pats)
157
- for l in src.splitlines()
158
- ):
159
- continue
160
-
161
- if py:
162
- if fn == '__init__.py':
163
- out = dp.replace(os.sep, '.')
164
- elif fn.endswith('.py'):
165
- out = fp[:-3].replace(os.sep, '.')
166
- else:
167
- out = fp
168
- else:
169
- out = fp
170
- yield out
171
-
172
-
173
- # # @omlish-manifest
174
- # _CLI_MODULE = {'$omdev.cli.types.CliModule': {
175
- # 'cmd_name': 'py/findmagic',
176
- # 'mod_name': __name__,
177
- # }}
178
-
179
-
180
102
  ########################################
181
103
  # ../../git.py
182
104
 
@@ -280,6 +202,87 @@ def get_git_revision(
280
202
  return dirty_rev + ('-untracked' if has_untracked else '')
281
203
 
282
204
 
205
+ ########################################
206
+ # ../../magic/magic.py
207
+
208
+
209
+ @dc.dataclass(frozen=True)
210
+ class Magic:
211
+ key: str
212
+
213
+ file: ta.Optional[str]
214
+
215
+ start_line: int
216
+ end_line: int
217
+
218
+ body: str
219
+
220
+ prepared: ta.Any
221
+
222
+
223
+ ########################################
224
+ # ../../magic/prepare.py
225
+
226
+
227
+ class MagicPrepareError(Exception):
228
+ pass
229
+
230
+
231
+ def py_compile_magic_preparer(src: str) -> ta.Any:
232
+ try:
233
+ prepared = compile(f'({src})', '<magic>', 'eval')
234
+ except SyntaxError:
235
+ raise MagicPrepareError # noqa
236
+ return prepared
237
+
238
+
239
+ def py_eval_magic_preparer(src: str) -> ta.Any:
240
+ code = py_compile_magic_preparer(src)
241
+ return eval(code) # noqa
242
+
243
+
244
+ def json_magic_preparer(src: str) -> ta.Any:
245
+ try:
246
+ prepared = json.loads(src)
247
+ except json.JSONDecodeError:
248
+ raise MagicPrepareError # noqa
249
+ return prepared
250
+
251
+
252
+ ########################################
253
+ # ../../magic/styles.py
254
+
255
+
256
+ MAGIC_KEY_PREFIX = '@omlish-'
257
+
258
+
259
+ @dc.dataclass(frozen=True)
260
+ class MagicStyle:
261
+ name: str
262
+
263
+ exts: ta.FrozenSet[str] = frozenset()
264
+
265
+ key_prefix: str = MAGIC_KEY_PREFIX
266
+
267
+ line_prefix: ta.Optional[str] = None
268
+ block_prefix_suffix: ta.Optional[ta.Tuple[str, str]] = None
269
+
270
+
271
+ PY_MAGIC_STYLE = MagicStyle(
272
+ name='py',
273
+ exts=frozenset(['py']),
274
+ line_prefix='# ',
275
+ )
276
+
277
+
278
+ C_MAGIC_STYLE = MagicStyle(
279
+ name='c',
280
+ exts=frozenset(['c', 'cc', 'cpp']),
281
+ line_prefix='// ',
282
+ block_prefix_suffix=('/* ', '*/'),
283
+ )
284
+
285
+
283
286
  ########################################
284
287
  # ../../packaging/versions.py
285
288
  # Copyright (c) Donald Stufft and individual contributors.
@@ -2077,6 +2080,241 @@ def format_num_bytes(num_bytes: int) -> str:
2077
2080
  return f'{num_bytes / 1024 ** (len(FORMAT_NUM_BYTES_SUFFIXES) - 1):.2f}{FORMAT_NUM_BYTES_SUFFIXES[-1]}'
2078
2081
 
2079
2082
 
2083
+ ########################################
2084
+ # ../../cexts/magic.py
2085
+
2086
+
2087
+ class CextMagic:
2088
+ KEY = '@omlish-cext'
2089
+ STYLE = C_MAGIC_STYLE
2090
+
2091
+
2092
+ ########################################
2093
+ # ../../magic/find.py
2094
+
2095
+
2096
+ ##
2097
+
2098
+
2099
+ def compile_magic_style_pat(
2100
+ style: MagicStyle,
2101
+ *,
2102
+ keys: ta.Optional[ta.Iterable[str]] = None,
2103
+ ) -> re.Pattern:
2104
+ ps: ta.List[str] = []
2105
+ if style.line_prefix is not None:
2106
+ ps.append(style.line_prefix)
2107
+ if style.block_prefix_suffix is not None:
2108
+ ps.append(style.block_prefix_suffix[0])
2109
+ if not ps:
2110
+ raise Exception('No prefixes')
2111
+
2112
+ ms: ta.List[str] = []
2113
+ if keys is not None:
2114
+ if isinstance(keys, str):
2115
+ raise TypeError(keys)
2116
+ for k in keys:
2117
+ if not k.startswith(style.key_prefix):
2118
+ raise Exception(f'Key does not start with prefix: {k!r} {style.key_prefix!r}')
2119
+ ms.extend([re.escape(p + k) for p in ps])
2120
+ else:
2121
+ ms = [re.escape(p + style.key_prefix) + r'\S*' for p in ps]
2122
+ if not ms:
2123
+ raise Exception('No matchers')
2124
+
2125
+ b = '|'.join(f'({m})' for m in ms)
2126
+ s = '^(' + b + r')($|(\s.*))'
2127
+ return re.compile(s)
2128
+
2129
+
2130
+ ##
2131
+
2132
+
2133
+ def chop_magic_lines(
2134
+ magic_key: str,
2135
+ prefix: str,
2136
+ lines: ta.Iterable[str],
2137
+ ) -> ta.Optional[ta.List[str]]:
2138
+ out: ta.List[str] = []
2139
+ for i, line in enumerate(lines):
2140
+ if not i:
2141
+ if not line.startswith(prefix + magic_key):
2142
+ return None
2143
+ out.append(line[len(prefix) + len(magic_key) + 1:])
2144
+ else:
2145
+ if not line.startswith(prefix):
2146
+ return None
2147
+ out.append(line[len(prefix):])
2148
+ return out
2149
+
2150
+
2151
+ def chop_magic_block(
2152
+ magic_key: str,
2153
+ prefix: str,
2154
+ suffix: str,
2155
+ lines: ta.Iterable[str],
2156
+ ) -> ta.Optional[ta.List[str]]:
2157
+ out: ta.List[str] = []
2158
+ for i, line in enumerate(lines):
2159
+ if not i:
2160
+ if not line.startswith(prefix + magic_key):
2161
+ return None
2162
+ s = line[len(prefix) + len(magic_key) + 1:]
2163
+ if s.rstrip().endswith(suffix):
2164
+ out.append(s.rstrip()[:-len(suffix)])
2165
+ break
2166
+ out.append(s)
2167
+ elif line.rstrip().endswith(suffix):
2168
+ out.append(line.rstrip()[:-len(suffix)])
2169
+ break
2170
+ else:
2171
+ out.append(line)
2172
+ return out
2173
+
2174
+
2175
+ ##
2176
+
2177
+
2178
+ def find_magic(
2179
+ style: MagicStyle,
2180
+ lines: ta.Sequence[str],
2181
+ *,
2182
+ file: ta.Optional[str] = None,
2183
+ preparer: ta.Callable[[str], ta.Any] = py_compile_magic_preparer,
2184
+ ) -> ta.List[Magic]:
2185
+ out: ta.List[Magic] = []
2186
+
2187
+ start = 0
2188
+ while start < len(lines):
2189
+ start_line = lines[start]
2190
+
2191
+ chopper: ta.Callable[[ta.Iterable[str]], ta.Optional[ta.List[str]]]
2192
+ if (
2193
+ style.line_prefix is not None and
2194
+ start_line.startswith(style.line_prefix + style.key_prefix)
2195
+ ):
2196
+ key = start_line[len(style.line_prefix):].split()[0]
2197
+ chopper = functools.partial(
2198
+ chop_magic_lines,
2199
+ key,
2200
+ style.line_prefix,
2201
+ )
2202
+
2203
+ elif (
2204
+ style.block_prefix_suffix is not None and
2205
+ start_line.startswith(style.block_prefix_suffix[0] + style.key_prefix)
2206
+ ):
2207
+ key = start_line[len(style.block_prefix_suffix[0]):].split()[0]
2208
+ chopper = functools.partial(
2209
+ chop_magic_block,
2210
+ key,
2211
+ *style.block_prefix_suffix,
2212
+ )
2213
+
2214
+ else:
2215
+ start += 1
2216
+ continue
2217
+
2218
+ end = start
2219
+ magic: ta.Optional[Magic] = None
2220
+ while end < len(lines):
2221
+ block_lines = chopper(lines[start:end + 1])
2222
+ if block_lines is None:
2223
+ raise Exception(f'Failed to find magic block terminator : {file=} {start=} {end=}')
2224
+
2225
+ block_src = ''.join(block_lines)
2226
+ if not block_src:
2227
+ prepared = None
2228
+ else:
2229
+ try:
2230
+ prepared = preparer(block_src)
2231
+ except MagicPrepareError:
2232
+ end += 1
2233
+ continue
2234
+
2235
+ magic = Magic(
2236
+ key=key,
2237
+ file=file,
2238
+ start_line=start + 1,
2239
+ end_line=end + 1,
2240
+ body=block_src,
2241
+ prepared=prepared,
2242
+ )
2243
+ break
2244
+
2245
+ if magic is None:
2246
+ raise Exception(f'Failed to find magic block terminator : {file=} {start=} {end=}')
2247
+
2248
+ out.append(magic)
2249
+ start = end + 1
2250
+
2251
+ return out
2252
+
2253
+
2254
+ ##
2255
+
2256
+
2257
+ def find_magic_files(
2258
+ style: MagicStyle,
2259
+ roots: ta.Sequence[str],
2260
+ *,
2261
+ keys: ta.Optional[ta.Iterable[str]] = None,
2262
+ ) -> ta.Iterator[str]:
2263
+ if isinstance(roots, str):
2264
+ raise TypeError(roots)
2265
+
2266
+ pat = compile_magic_style_pat(
2267
+ style,
2268
+ keys=keys,
2269
+ )
2270
+
2271
+ for root in roots:
2272
+ for dp, dns, fns in os.walk(root): # noqa
2273
+ for fn in fns:
2274
+ if not any(fn.endswith(f'.{x}') for x in style.exts):
2275
+ continue
2276
+
2277
+ fp = os.path.join(dp, fn)
2278
+ try:
2279
+ with open(fp) as f:
2280
+ src = f.read()
2281
+ except UnicodeDecodeError:
2282
+ continue
2283
+
2284
+ if not any(pat.fullmatch(l) for l in src.splitlines()):
2285
+ continue
2286
+
2287
+ yield fp
2288
+
2289
+
2290
+ def find_magic_py_modules(
2291
+ roots: ta.Sequence[str],
2292
+ *,
2293
+ style: MagicStyle = PY_MAGIC_STYLE,
2294
+ **kwargs: ta.Any,
2295
+ ) -> ta.Iterator[str]:
2296
+ for fp in find_magic_files(style, roots, **kwargs):
2297
+ dp = os.path.dirname(fp)
2298
+ fn = os.path.basename(fp)
2299
+
2300
+ if fn == '__init__.py':
2301
+ yield dp.replace(os.sep, '.')
2302
+ elif fn.endswith('.py'):
2303
+ yield fp[:-3].replace(os.sep, '.')
2304
+ else:
2305
+ yield fp
2306
+
2307
+
2308
+ ##
2309
+
2310
+
2311
+ # # @omlish-manifest
2312
+ # _CLI_MODULE = {'$omdev.cli.types.CliModule': {
2313
+ # 'cmd_name': 'py/findmagic',
2314
+ # 'mod_name': __name__,
2315
+ # }}
2316
+
2317
+
2080
2318
  ########################################
2081
2319
  # ../../packaging/specifiers.py
2082
2320
  # Copyright (c) Donald Stufft and individual contributors.
@@ -4162,10 +4400,10 @@ class _PyprojectCextPackageGenerator(BasePyprojectPackageGenerator):
4162
4400
 
4163
4401
  @cached_nullary
4164
4402
  def find_cext_srcs(self) -> ta.Sequence[str]:
4165
- return sorted(find_magic(
4403
+ return sorted(find_magic_files(
4404
+ CextMagic.STYLE,
4166
4405
  [self._dir_name],
4167
- [CextMagic.MAGIC_COMMENT],
4168
- CextMagic.FILE_EXTENSIONS,
4406
+ keys=[CextMagic.KEY],
4169
4407
  ))
4170
4408
 
4171
4409
  #
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev98
3
+ Version: 0.0.0.dev100
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.dev98
15
+ Requires-Dist: omlish ==0.0.0.dev100
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black ~=24.10 ; extra == 'all'
18
18
  Requires-Dist: pycparser ~=2.22 ; extra == 'all'
@@ -1,11 +1,10 @@
1
- omdev/.manifests.json,sha256=EyJdfAeMmdF7DSbwubowYqeoe_nnLE5-8VdZh0UuK7w,6781
1
+ omdev/.manifests.json,sha256=nBS0fk7qpXG5VCITHxGUgJgh8Ghd3LyckoYCcfwb8Qc,6713
2
2
  omdev/__about__.py,sha256=ON7EnhbxbwLsMj60wkd9OEYPloXZ7jmnMMzeLg44LXY,1225
3
3
  omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  omdev/bracepy.py,sha256=I8EdqtDvxzAi3I8TuMEW-RBfwXfqKbwp06CfOdj3L1o,2743
5
5
  omdev/classdot.py,sha256=YOvgy6x295I_8NKBbBlRVd3AN7Osirm_Lqt4Wj0j9rY,1631
6
6
  omdev/cmake.py,sha256=Diy2ry65806dQP125DAstD3w46z_wszMH7PwC2-6iik,4578
7
7
  omdev/findimports.py,sha256=2t8QP852saEEJFeXySEzhi_nxRSxghlkXz2jVdvy08M,2392
8
- omdev/findmagic.py,sha256=XoKPGjSM0qn1PCiiBPwfTHkpqJYQJmLW8v_4QFJ16Mk,2486
9
8
  omdev/git.py,sha256=riM2KqSpQPC3N89uipd7Vm3kVgv4EYYDBU9tV1Z8juM,2208
10
9
  omdev/imgur.py,sha256=il12R3t19tALolteYCZywvcdQUEOcgvPyUYgWtKiqt4,2993
11
10
  omdev/revisions.py,sha256=U657hf4zeEN32y3g4CzqCAodx_HlfkHj2cIIKALNFDo,5009
@@ -14,7 +13,7 @@ omdev/tokens.py,sha256=GusxQ1Cd_eiScuR8XTTtc9QFhOgYviYGBZmFnn3Hj7s,756
14
13
  omdev/wheelfile.py,sha256=yfupGcGkbFlmzGzKU64k_vmOKpaKnUlDWxeGn2KdekU,10005
15
14
  omdev/amalg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
15
  omdev/amalg/__main__.py,sha256=h94M-VqZ3AFBU2a8zOsjeKK7RF6uINhTHl6OiGbVMgw,163
17
- omdev/amalg/amalg.py,sha256=v_4Y9b6eUWUArhIRnTkboe8ZNMr_mHJTWi8GajdDvUs,15139
16
+ omdev/amalg/amalg.py,sha256=b5lo2EZno62_5HbQV-TSMcsLe5ztm4vz3QrJ1-h_ppo,15140
18
17
  omdev/antlr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
18
  omdev/antlr/consts.py,sha256=8pR6r0m0P3hAiyiAoJZ-nptd2GYbZ98mxwPL9cpaRuw,279
20
19
  omdev/antlr/gen.py,sha256=QnPyVWUrJYqHoOc3XsXA8fJdoiwAj6pyUwdG-DVrIeA,2953
@@ -38,10 +37,10 @@ omdev/cache/data/specs.py,sha256=0a9NPJ76Wz69s94KlNbr1Xma3UQ0z2oCAQN7s6uXe4w,249
38
37
  omdev/cexts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
38
  omdev/cexts/_boilerplate.cc,sha256=sbpXEgdFrkdzZXgaNWFFNN27fL9TZu6VrwvMY4-nnFM,1726
40
39
  omdev/cexts/build.py,sha256=F3z1-CjDlEM-Gzi5IunKUBO52qdH_pMsFylobTdGJnI,2654
41
- omdev/cexts/cmake.py,sha256=H-fafsK5TCHAoxOcxvZm83CXFAJl3Gf-nm9GjXfa8SU,9833
40
+ omdev/cexts/cmake.py,sha256=m7Md-mZP252EMa05TZVHRjy8vzhS9tw0nhO1GVQtkQU,9816
42
41
  omdev/cexts/importhook.py,sha256=ko0KRxah_ZHhLVcCigYIIDvNHCfHpJ8qhmmuHKbCOt4,3546
43
- omdev/cexts/magic.py,sha256=FxMfciRvbrcyH-kfQgcAgZL7ekyp5BdkyQ5IC9YjFzo,136
44
- omdev/cexts/scan.py,sha256=_U5DX9ksHP1845PdGxWh4Rf1a6x_sG1MH3uL_hwBnKY,1669
42
+ omdev/cexts/magic.py,sha256=MPmdhGANFVRaA3351BSTBrXm214dWXro1RMRHaJ2_O0,126
43
+ omdev/cexts/scan.py,sha256=fTDy4DKgGQHdyf2Pp80Z_Ra5o984jFF9LeKfJm39IyM,1665
45
44
  omdev/cexts/_distutils/LICENSE,sha256=22p14FIRp3F4Cb7Mj_GK33PKr25issFGHC2JN6dg9vc,1023
46
45
  omdev/cexts/_distutils/__init__.py,sha256=c1zImtnPh3uY8BUTV4RLKtGKqTPx3c_pBbhA6tPtNsE,297
47
46
  omdev/cexts/_distutils/build_ext.py,sha256=STHl9Rq2KeWJ3dQ8j8LwIQ-vFc4-3XsYWQ8Qc5_VByU,13833
@@ -79,8 +78,13 @@ omdev/interp/resolvers.py,sha256=tpzlmqGp1C4QKdA6TfcPmtmaygu7mb6WK2RPSbyNQ6s,302
79
78
  omdev/interp/standalone.py,sha256=XcltiL7ypcfV89C82_3knQ3Kx7aW4wnnxf2056ZXC3A,7731
80
79
  omdev/interp/system.py,sha256=bI-JhX4GVJqW7wMxnIa-DGJWnCLmFcIsnl9pc1RGY2g,3513
81
80
  omdev/interp/types.py,sha256=EMN3StEMkFoQAMUIZd7JYL4uUWqzFGY-2hTL8EBznYM,2437
81
+ omdev/magic/__init__.py,sha256=CBzRB71RLyylkrj8dph6JUEddA8KSMJvDgriHqFfJGU,478
82
+ omdev/magic/find.py,sha256=tTmpWXAleaXG3_kNOsRF7s8D0CpYMXbdz6-HbCNBW90,7070
83
+ omdev/magic/magic.py,sha256=h1nxoW6CV1MRCiHjDt3sO4kmG0qTtTRbkDNiPLGo2BE,224
84
+ omdev/magic/prepare.py,sha256=V5jYT2AeFmazzPwk9sNismSouLwFXEoik6FwKcWCNUY,589
85
+ omdev/magic/styles.py,sha256=YZrLend-O5-7TKrIu4Ukxk1q0I2yaQtxwa6tn7TRbJM,599
82
86
  omdev/manifests/__init__.py,sha256=P2B0dpT8D7l5lJwRGPA92IcQj6oeXfd90X5-q9BJrKg,51
83
- omdev/manifests/build.py,sha256=omRyKmj4NhZ6PrhmoJIKYCTYaU1OB7bZEtfso29hIEo,10831
87
+ omdev/manifests/build.py,sha256=E7BelbrJEJes-BEbAUZCVLVs79sYuC0fbthgXAoxaOk,10865
84
88
  omdev/manifests/load.py,sha256=LtEsluDdd8CkNGj0QGBxee3twBn095Fru0xz2mtr7uk,4788
85
89
  omdev/manifests/types.py,sha256=Jv6PAdVLPb9Hh4y6vDhPlWuMNBBViin1bC_u83jfsH4,234
86
90
  omdev/mypy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -94,10 +98,10 @@ omdev/precheck/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
98
  omdev/precheck/__main__.py,sha256=UEuS4z5-heIrwTtB-ONe1KeXJdqj8tYXMqWMpuO10so,165
95
99
  omdev/precheck/base.py,sha256=a_lGoFM-QhL8u8XDUYFhb-feEyfPbP4j8lcmNO51sHY,732
96
100
  omdev/precheck/git.py,sha256=APC5Ln7x0zDrQiGPRWPsBcVJK3vWhbU-brqR5M63JQA,849
97
- omdev/precheck/lite.py,sha256=d8D-BY-Z0rqQigQ_aR9QXxdB3EBCHJc7WgBJngGiEiE,3871
101
+ omdev/precheck/lite.py,sha256=z99pgTO4SAmLEqSj6qaKd4hcs0WpwixYkQZn75lZRX8,3883
98
102
  omdev/precheck/main.py,sha256=2YizDZSDhMeQaZKVH83s99pBmtOUL9B-8dXwIcw6fQQ,2674
99
103
  omdev/precheck/manifests.py,sha256=YfXqt6u0hlFXY0QkBMec6V_6Y9T4eCVAmrJDkQkB13U,774
100
- omdev/precheck/scripts.py,sha256=qq6MXkxgrYngPg5pWnXH4uRSuRkP3mFqbeml1UmvGBc,1265
104
+ omdev/precheck/scripts.py,sha256=Xw9kkQzlDd_2V9av9qlaNpNZG9jZdy3TTo7x60MeR2I,1273
101
105
  omdev/ptk/__init__.py,sha256=StAwXQ96e8Xkkg7ciR9oBBhcSgqHT76vhoZML82BuY0,447
102
106
  omdev/ptk/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
107
  omdev/ptk/apps/ncdu.py,sha256=ov6AEjne2NyVE45XiAtteq5SmbxXHQkUsybuu5KSwRQ,4479
@@ -106,7 +110,7 @@ omdev/pyproject/__main__.py,sha256=gn3Rl1aYPYdiTtEqa9ifi0t-e4ZwPY0vhJ4UXvYdJDY,1
106
110
  omdev/pyproject/cexts.py,sha256=x13piOOnNrYbA17qZLDVuR0p1sqhgEwpk4FtImX-klM,4281
107
111
  omdev/pyproject/cli.py,sha256=kw0Jyzywwt6QOc6QHDevWW9p85aXT7jvVFFb8Sb_EAU,11365
108
112
  omdev/pyproject/configs.py,sha256=K9H5cGwVLgHi8wKwtYvlXHZ9ThtmnI4jo8JAb-t1-70,2859
109
- omdev/pyproject/pkg.py,sha256=rNKzJOIgPDrtT2i14Pebldoboz45w00sKb5l_kYFaRI,14562
113
+ omdev/pyproject/pkg.py,sha256=WB9k3zEpHSAR24H09kikgAnLMWUz-bk9f0aB-2L_ITw,14560
110
114
  omdev/pyproject/reqs.py,sha256=8feZ71YnGzwKbLK4zO28CDQeNcZIIuq6cnkBhs6M-7E,2406
111
115
  omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
112
116
  omdev/scripts/bumpversion.py,sha256=Kn7fo73Hs8uJh3Hi3EIyLOlzLPWAC6dwuD_lZ3cIzuY,1064
@@ -114,27 +118,27 @@ omdev/scripts/execrss.py,sha256=hJTWBig_-XqKIj1DphYTfeVDtdQTM1XUl-Hvzs2x9iY,451
114
118
  omdev/scripts/exectime.py,sha256=dBdn3KV2jR6tCrzGvb9dTl2uGe2vNpLxmHMtExmnaiM,410
115
119
  omdev/scripts/importtrace.py,sha256=Jbo3Yk2RAbE8_tJ97iTcVNpoxCJxrRb2tl1W_CV3NG0,14067
116
120
  omdev/scripts/interp.py,sha256=ls04OE3g_TpiK5_inRfOzUvBGUtBgSt5vnkqC3eZhTM,72076
117
- omdev/scripts/pyproject.py,sha256=g5f0AyRii_DSY-D6mMDUVqKNPNxWXAQJoWrYi1F2KGM,158772
121
+ omdev/scripts/pyproject.py,sha256=0etqlpe2wL2lRLKgRo6X5llzpvM-I7AHbu1oWqdV-6M,164318
118
122
  omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
119
123
  omdev/toml/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
120
124
  omdev/toml/parser.py,sha256=84bn09uhYHwQGyfww6Rw6y1RxPAE_HDltODOSakcqDM,29186
121
125
  omdev/toml/writer.py,sha256=lk3on3YXVbWuLJa-xsOzOhs1bBAT1vXqw4mBbluZl_w,3040
122
126
  omdev/tools/__init__.py,sha256=iVJAOQ0viGTQOm0DLX4uZLro-9jOioYJGLg9s0kDx1A,78
123
- omdev/tools/dockertools.py,sha256=k2BrVvFYwyGov064CPHd_HWo9aqR1zHc2UeEsVwPth4,6827
124
- omdev/tools/doctools.py,sha256=mv9XfitzqXl3vFHSenv01xHCxWf8g03rUAb_sqoty98,2556
125
- omdev/tools/gittools.py,sha256=1Oa2AgdZIJZ2eusso9yFzkd9zLWH3d4lTiVFzwg0uDM,3808
127
+ omdev/tools/doc.py,sha256=mv9XfitzqXl3vFHSenv01xHCxWf8g03rUAb_sqoty98,2556
128
+ omdev/tools/docker.py,sha256=k2BrVvFYwyGov064CPHd_HWo9aqR1zHc2UeEsVwPth4,6827
129
+ omdev/tools/git.py,sha256=1Oa2AgdZIJZ2eusso9yFzkd9zLWH3d4lTiVFzwg0uDM,3808
126
130
  omdev/tools/importscan.py,sha256=QeGjR3UGcuuuDUiisFuAXWHlcKJScGxGEcU6tfOh2CM,4069
127
131
  omdev/tools/mkrelimp.py,sha256=wsJAjTIf3nqcSfnT9TkDpS1VUOoM9W2Az5tZdWuzyLM,4054
128
- omdev/tools/nbtools.py,sha256=M8Xi_gfZdlahnyFLtp0RBgYZPSHWQStMMDYZc71Zync,3494
129
- omdev/tools/piptools.py,sha256=-jR5q3w4sHqntxCLExFCBNIARB788FUsAbJ62PK2sBU,2774
130
- omdev/tools/proftools.py,sha256=8ZU9x_Dq8eT2ZFwU9sJpDIvxcIn9qBc8y2ELKPb5e5M,1382
132
+ omdev/tools/notebook.py,sha256=M8Xi_gfZdlahnyFLtp0RBgYZPSHWQStMMDYZc71Zync,3494
133
+ omdev/tools/pip.py,sha256=-jR5q3w4sHqntxCLExFCBNIARB788FUsAbJ62PK2sBU,2774
134
+ omdev/tools/prof.py,sha256=8ZU9x_Dq8eT2ZFwU9sJpDIvxcIn9qBc8y2ELKPb5e5M,1382
131
135
  omdev/tools/sqlrepl.py,sha256=tmFZh80-xsGM62dyQ7_UGLebChrj7IHbIPYBWDJMgVk,5741
132
136
  omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
137
  omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
134
138
  omdev/tools/pawk/pawk.py,sha256=Eckymn22GfychCQcQi96BFqRo_LmiJ-EPhC8TTUJdB4,11446
135
- omdev-0.0.0.dev98.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
136
- omdev-0.0.0.dev98.dist-info/METADATA,sha256=iTM12k8q9OTLBHP1Ed0J-xxukNVE65PUwPPCoOOOV9M,1702
137
- omdev-0.0.0.dev98.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
138
- omdev-0.0.0.dev98.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
139
- omdev-0.0.0.dev98.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
140
- omdev-0.0.0.dev98.dist-info/RECORD,,
139
+ omdev-0.0.0.dev100.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
140
+ omdev-0.0.0.dev100.dist-info/METADATA,sha256=jBN-gpjo8p3RwVShev6g75Sg2bNhC4oAAfL5Nj-Pqm0,1704
141
+ omdev-0.0.0.dev100.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
142
+ omdev-0.0.0.dev100.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
143
+ omdev-0.0.0.dev100.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
144
+ omdev-0.0.0.dev100.dist-info/RECORD,,