omdev 0.0.0.dev322__py3-none-any.whl → 0.0.0.dev324__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/__about__.py CHANGED
@@ -31,7 +31,7 @@ class Project(ProjectBase):
31
31
  ],
32
32
 
33
33
  'mypy': [
34
- 'mypy ~= 1.15',
34
+ 'mypy ~= 1.16',
35
35
  ],
36
36
 
37
37
  'prof': [
omdev/cache/data/cache.py CHANGED
@@ -87,11 +87,11 @@ def _url_retrieve(
87
87
  if size >= 0 and read < size:
88
88
  raise urllib.error.ContentTooShortError(
89
89
  f'retrieval incomplete: got only {read} out of {size} bytes',
90
- result, # type: ignore
90
+ result,
91
91
  )
92
92
 
93
93
  success = True
94
- return result # type: ignore
94
+ return result
95
95
 
96
96
 
97
97
  class Cache:
omdev/mypy/debug.py CHANGED
@@ -3,6 +3,9 @@ import re
3
3
  import sys
4
4
 
5
5
 
6
+ ##
7
+
8
+
6
9
  def _is_instance_or_subclass(obj, cls):
7
10
  return (isinstance(obj, type) and issubclass(obj, cls)) or isinstance(obj, cls)
8
11
 
@@ -11,44 +14,57 @@ class MypyDebugPathFinder(importlib.machinery.PathFinder):
11
14
  @classmethod
12
15
  def _get_spec(cls, fullname, path, target=None): # noqa
13
16
  namespace_path = []
17
+
14
18
  for entry in path:
15
19
  if not isinstance(entry, (str, bytes)):
16
20
  continue
21
+
17
22
  finder = cls._path_importer_cache(entry) # type: ignore # noqa
18
23
  if finder is not None:
19
24
  if isinstance(finder, importlib.machinery.FileFinder):
20
25
  finder = importlib.machinery.FileFinder(
21
26
  finder.path,
22
27
  *[
23
- (i, [s]) for s, i in finder._loaders # type: ignore # noqa
28
+ (i, [s])
29
+ for s, i in finder._loaders # type: ignore # noqa
24
30
  if not _is_instance_or_subclass(i, importlib.machinery.ExtensionFileLoader)
25
31
  ],
26
32
  )
33
+
27
34
  if hasattr(finder, 'find_spec'):
28
35
  spec = finder.find_spec(fullname, target)
29
36
  else:
30
37
  spec = cls._legacy_get_spec(fullname, finder) # type: ignore # noqa
38
+
31
39
  if spec is None:
32
40
  continue
41
+
33
42
  if spec.loader is not None:
34
43
  return spec
44
+
35
45
  portions = spec.submodule_search_locations
36
46
  if portions is None:
37
47
  raise ImportError('spec missing loader')
48
+
38
49
  namespace_path.extend(portions)
50
+
39
51
  return None
40
52
 
41
53
  @classmethod
42
54
  def find_spec(cls, fullname, path=None, target=None): # noqa
43
55
  if not fullname.startswith('mypy.') and fullname != 'mypy':
44
56
  return None
57
+
45
58
  if path is None:
46
59
  path = sys.path
60
+
47
61
  spec = cls._get_spec(fullname, path, target)
48
62
  if spec is None:
49
63
  return None
64
+
50
65
  elif spec.loader is None:
51
66
  namespace_path = spec.submodule_search_locations
67
+
52
68
  if namespace_path:
53
69
  spec.origin = None
54
70
  spec.submodule_search_locations = importlib.machinery._NamespacePath( # type: ignore # noqa
@@ -57,29 +73,50 @@ class MypyDebugPathFinder(importlib.machinery.PathFinder):
57
73
  cls._get_spec,
58
74
  )
59
75
  return spec
76
+
60
77
  else:
61
78
  return None
79
+
62
80
  else:
63
81
  return spec
64
82
 
65
83
 
66
- def _main():
84
+ def install_debug_path_finder() -> None:
67
85
  for i, e in enumerate(sys.meta_path): # noqa
68
86
  if _is_instance_or_subclass(e, importlib.machinery.PathFinder):
69
87
  break
88
+
70
89
  sys.meta_path.insert(i, MypyDebugPathFinder) # noqa
71
90
  sys.path_importer_cache.clear()
72
91
  importlib.invalidate_caches()
73
92
 
93
+
94
+ ##
95
+
96
+
97
+ def run_mypy_main(
98
+ *,
99
+ show_traceback: bool = False,
100
+ ) -> None:
74
101
  from mypy.__main__ import console_entry # noqa
75
102
 
76
103
  sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
77
104
 
78
- if not any(k in sys.argv[1:] for k in ['--show-traceback', '--tb']):
79
- sys.argv.insert(1, '--show-traceback')
105
+ if show_traceback:
106
+ if not any(k in sys.argv[1:] for k in ['--show-traceback', '--tb']):
107
+ sys.argv.insert(1, '--show-traceback')
80
108
 
81
109
  console_entry()
82
110
 
83
111
 
112
+ ##
113
+
114
+
115
+ def _main() -> None:
116
+ install_debug_path_finder()
117
+
118
+ run_mypy_main(show_traceback=True)
119
+
120
+
84
121
  if __name__ == '__main__':
85
122
  _main()
omdev/mypy/report.py ADDED
@@ -0,0 +1,82 @@
1
+ """
2
+ TODO:
3
+ - alt mode: --output=json, subprocess / tee
4
+ """
5
+ import collections
6
+ import dataclasses as dc
7
+ import typing as ta
8
+
9
+ from .debug import install_debug_path_finder
10
+ from .debug import run_mypy_main
11
+
12
+
13
+ if ta.TYPE_CHECKING:
14
+ import mypy.build
15
+ import mypy.errors
16
+
17
+
18
+ ##
19
+
20
+
21
+ @dc.dataclass(frozen=True, kw_only=True)
22
+ class JsonOutputError:
23
+ file: str
24
+ line: int
25
+ column: int
26
+ message: str
27
+ hint: ta.Any | None
28
+ code: str
29
+ severity: str # 'error' | 'note'
30
+
31
+
32
+ ##
33
+
34
+
35
+ def _report_build_result(
36
+ result: 'mypy.build.BuildResult',
37
+ ) -> None:
38
+ errors: ta.Sequence[mypy.errors.ErrorInfo] = [
39
+ e
40
+ for es in result.manager.errors.error_info_map.values()
41
+ for e in es
42
+ ]
43
+ if errors:
44
+ count_by_code = collections.Counter(
45
+ e.code.code
46
+ for e in errors
47
+ if e.code is not None
48
+ )
49
+
50
+ print()
51
+ max_code_len = max(map(len, count_by_code))
52
+ for code, count in sorted(count_by_code.items(), key=lambda kv: -kv[1]):
53
+ print(f'{code.rjust(max_code_len)} : {count}')
54
+ print()
55
+
56
+
57
+ ##
58
+
59
+
60
+ def _main() -> None:
61
+ install_debug_path_finder()
62
+
63
+ ##
64
+
65
+ import mypy.main
66
+
67
+ old_run_build = mypy.main.run_build
68
+
69
+ def new_run_build(*args, **kwargs):
70
+ ret = old_run_build(*args, **kwargs)
71
+ _report_build_result(ta.cast('mypy.build.BuildResult', ret[0]))
72
+ return ret
73
+
74
+ mypy.main.run_build = new_run_build
75
+
76
+ ##
77
+
78
+ run_mypy_main()
79
+
80
+
81
+ if __name__ == '__main__':
82
+ _main()
@@ -190,7 +190,7 @@ class Specifier(BaseSpecifier):
190
190
 
191
191
  self._prereleases = prereleases
192
192
 
193
- @property # type: ignore
193
+ @property
194
194
  def prereleases(self) -> bool:
195
195
  if self._prereleases is not None:
196
196
  return self._prereleases
@@ -210,7 +210,7 @@ class ImportTracer:
210
210
 
211
211
  for child in node.children:
212
212
  seq = self._fixup_node(child, depth=depth + 1, seq=seq + 1)
213
- node.child_stats += child.stats # type: ignore
213
+ node.child_stats += child.stats
214
214
 
215
215
  node.self_stats = node.stats - node.child_stats # type: ignore
216
216
  return seq
omdev/scripts/ci.py CHANGED
@@ -1797,7 +1797,7 @@ class ProxyLogHandler(ProxyLogFilterer, logging.Handler):
1797
1797
  self._underlying.set_name(name)
1798
1798
 
1799
1799
  @property
1800
- def name(self):
1800
+ def name(self): # type: ignore[override]
1801
1801
  return self._underlying.name
1802
1802
 
1803
1803
  @property
omdev/scripts/interp.py CHANGED
@@ -1739,7 +1739,7 @@ class ProxyLogHandler(ProxyLogFilterer, logging.Handler):
1739
1739
  self._underlying.set_name(name)
1740
1740
 
1741
1741
  @property
1742
- def name(self):
1742
+ def name(self): # type: ignore[override]
1743
1743
  return self._underlying.name
1744
1744
 
1745
1745
  @property
@@ -1972,7 +1972,7 @@ class Specifier(BaseSpecifier):
1972
1972
 
1973
1973
  self._prereleases = prereleases
1974
1974
 
1975
- @property # type: ignore
1975
+ @property
1976
1976
  def prereleases(self) -> bool:
1977
1977
  if self._prereleases is not None:
1978
1978
  return self._prereleases
@@ -3203,7 +3203,7 @@ class ProxyLogHandler(ProxyLogFilterer, logging.Handler):
3203
3203
  self._underlying.set_name(name)
3204
3204
 
3205
3205
  @property
3206
- def name(self):
3206
+ def name(self): # type: ignore[override]
3207
3207
  return self._underlying.name
3208
3208
 
3209
3209
  @property
@@ -3667,7 +3667,7 @@ class Specifier(BaseSpecifier):
3667
3667
 
3668
3668
  self._prereleases = prereleases
3669
3669
 
3670
- @property # type: ignore
3670
+ @property
3671
3671
  def prereleases(self) -> bool:
3672
3672
  if self._prereleases is not None:
3673
3673
  return self._prereleases
@@ -1,12 +1,14 @@
1
1
  """
2
2
  TODO:
3
3
  - options lol - csv header, newline, etc
4
+ - edn
4
5
  """
5
6
  import dataclasses as dc
6
7
  import enum
7
8
  import json
8
9
  import typing as ta
9
10
 
11
+ from omlish import check
10
12
  from omlish import lang
11
13
 
12
14
 
@@ -44,6 +46,12 @@ class Format:
44
46
  load: ta.Callable[[ta.TextIO], ta.Any]
45
47
 
46
48
 
49
+ def _load_xml(f: ta.TextIO) -> dict[str, ta.Any]:
50
+ tree = xml.parse_tree(f.read())
51
+ sel = xml.build_simple_element(check.not_none(tree.getroot()))
52
+ return sel.se_dict()
53
+
54
+
47
55
  class Formats(enum.Enum):
48
56
  JSON = Format(['json'], json.load)
49
57
 
@@ -59,7 +67,7 @@ class Formats(enum.Enum):
59
67
 
60
68
  PY = Format(['py', 'python', 'repr'], lambda f: ast.literal_eval(f.read()))
61
69
 
62
- XML = Format(['xml'], lambda f: xml.build_simple_element(xml.parse_tree(f.read()).getroot()).se_dict())
70
+ XML = Format(['xml'], _load_xml)
63
71
 
64
72
  CSV = Format(['csv'], lambda f: list(csv.DictReader(f)))
65
73
  TSV = Format(['tsv'], lambda f: list(csv.DictReader(f, delimiter='\t')))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev322
3
+ Version: 0.0.0.dev324
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.dev322
15
+ Requires-Dist: omlish==0.0.0.dev324
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -21,7 +21,7 @@ Requires-Dist: docutils~=0.21; extra == "all"
21
21
  Requires-Dist: markdown-it-py~=3.0; extra == "all"
22
22
  Requires-Dist: mdit-py-plugins~=0.4; extra == "all"
23
23
  Requires-Dist: pygments~=2.19; extra == "all"
24
- Requires-Dist: mypy~=1.15; extra == "all"
24
+ Requires-Dist: mypy~=1.16; extra == "all"
25
25
  Requires-Dist: gprof2dot~=2025.4; extra == "all"
26
26
  Requires-Dist: prompt-toolkit~=3.0; extra == "all"
27
27
  Requires-Dist: segno~=1.6; extra == "all"
@@ -36,7 +36,7 @@ Requires-Dist: markdown-it-py~=3.0; extra == "doc"
36
36
  Requires-Dist: mdit-py-plugins~=0.4; extra == "doc"
37
37
  Requires-Dist: pygments~=2.19; extra == "doc"
38
38
  Provides-Extra: mypy
39
- Requires-Dist: mypy~=1.15; extra == "mypy"
39
+ Requires-Dist: mypy~=1.16; extra == "mypy"
40
40
  Provides-Extra: prof
41
41
  Requires-Dist: gprof2dot~=2025.4; extra == "prof"
42
42
  Provides-Extra: ptk
@@ -1,5 +1,5 @@
1
1
  omdev/.manifests.json,sha256=7rHwJQCTz0jmkxij_rlIAw0D1A38Rb3QqcmJNiRIhOM,11257
2
- omdev/__about__.py,sha256=16xa_1BdZanTpZbkjAOQ11_x5kJcb1m1tKdvb06J7VI,1202
2
+ omdev/__about__.py,sha256=2_6pQyjxqAspvwBSJUWQgdBBcGaDO3zX8yETLaspUQE,1202
3
3
  omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  omdev/cmake.py,sha256=9rfSvFHPmKDj9ngvfDB2vK8O-xO_ZwUm7hMKLWA-yOw,4578
5
5
  omdev/imgur.py,sha256=4XolajBnAJ1U2zvT6Y0fiUyBi_a8G9arXffvPxf3w-M,3103
@@ -27,7 +27,7 @@ omdev/cache/compute/storage.py,sha256=woCUqHg8ZrwLEejRG3zu1L5ZXxGNNXveh3E8FnlEkj
27
27
  omdev/cache/compute/types.py,sha256=dW6S1g_-MklWf8JDPXFMamuOZinjKFOlonfMyWg4L3o,2645
28
28
  omdev/cache/data/__init__.py,sha256=SQXtugLceRif463rcoklpQ33pxYLgEIm0xiI6NvOI6M,301
29
29
  omdev/cache/data/actions.py,sha256=Mv7eXeZuohCjQLpmLyvqvGjjBacXIvTYzIRMVpEh-zM,1037
30
- omdev/cache/data/cache.py,sha256=aZJotj9kpVHBK7O0UdqMdeV7PtCqf9Rd8tqIwgWtQlQ,7664
30
+ omdev/cache/data/cache.py,sha256=oveyGl6gfTmQ4fKVO-NbB5Zx4rmEcti3BdZIvv5C6CU,7632
31
31
  omdev/cache/data/consts.py,sha256=d6W_aeMqgah6PmPYi9RA8Be54oQ4BcNCy8kDQ7FlB_Q,26
32
32
  omdev/cache/data/defaults.py,sha256=NL_mT7kaSLm2Mk9VO5wdSu-DIcHTR1KgcihJqdSd4TY,312
33
33
  omdev/cache/data/manifests.py,sha256=4BparztsMZo9DDVVPhv6iv5g4kK7QAi8Vqtj3PbKkco,989
@@ -168,7 +168,8 @@ omdev/manifests/build.py,sha256=1Ah6NhNylAT-bIfDlKDOVlfitxe9UNYPudOwxO0s1aY,1002
168
168
  omdev/manifests/dumping.py,sha256=mYXO58oXWQdTIn7A9XTnGv2-3LRPvO_uQmqkwPn9cMw,3470
169
169
  omdev/manifests/main.py,sha256=7zRlyE0BDPqITEbChlTBRGulAvG1nUZPHXrerNExriE,2126
170
170
  omdev/mypy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
171
- omdev/mypy/debug.py,sha256=iTPfTQj9RO8k8GKqhS_lMa8QNQpFpXC5RH1SUq8yMYY,3002
171
+ omdev/mypy/debug.py,sha256=VskRcr9trNhyPG2ErZZ7IX_v1DLKTLBOjp34o-fEWaM,3294
172
+ omdev/mypy/report.py,sha256=ZpBWibI5PBK28DgGhx5tLHvuL-qdcmG1MT4HSWdFsnc,1515
172
173
  omdev/oci/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
174
  omdev/oci/building.py,sha256=g1TY-a2eHgEamYv0mt1L6rOevwOgdp_cW1xdVdjDzTw,5695
174
175
  omdev/oci/compression.py,sha256=5hs7u0hImsm22GcQBHGYnP6g9dr-lBZ3E_PzdNVD4WY,134
@@ -188,7 +189,7 @@ omdev/packaging/marshal.py,sha256=YMXXkoWkjYoOAyD6RHsmaHGwlIsDQjnMtfa6e9-l4_A,23
188
189
  omdev/packaging/names.py,sha256=-a7AykFPVR1i6EYJepbe3ABRrZQ_tPPmK5olzbn9HLI,2528
189
190
  omdev/packaging/requires.py,sha256=PGbH1m17lkFEBvSp3znF-o9dmgFrRCM_PHBl0ARa6lw,15679
190
191
  omdev/packaging/revisions.py,sha256=3u-6vY0mq01tgRENcncozsMLXSgtaQWXuQp0kRkEHvg,4986
191
- omdev/packaging/specifiers.py,sha256=X8xOcwRLXTQYx5mYAS3ijqoTLlCtYESyUu4fX9bvblY,17447
192
+ omdev/packaging/specifiers.py,sha256=S4WZwSFaXz5LB8BiaXcowo1OFXEuY0YsXVxgpLfsl3Y,17431
192
193
  omdev/packaging/versions.py,sha256=K4eUOUvLmYcR4aeUywekeWTBqAvZchrIxLf7dl07MS4,12261
193
194
  omdev/packaging/wheelfile.py,sha256=yfupGcGkbFlmzGzKU64k_vmOKpaKnUlDWxeGn2KdekU,10005
194
195
  omdev/precheck/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -233,7 +234,7 @@ omdev/py/docstrings/rest.py,sha256=c2xPYg_W01W9eYY_KLKX69E4qu4jpkgUshi5K5EyVv8,5
233
234
  omdev/py/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
234
235
  omdev/py/scripts/bumpversion.py,sha256=2NnfRsJiZNTg-LubIwXCm2vklG7-kIR8_xFUEZNxtiY,1119
235
236
  omdev/py/scripts/execstat.py,sha256=eyk_TCeJt-xtMGqaW3X7pnEBe7JZbXrTYsODn_m6lfM,3869
236
- omdev/py/scripts/importtrace.py,sha256=TqALDqR6ODpbMyAtk2q84Xrvmn0UPGaKAdcNB7E62bA,14035
237
+ omdev/py/scripts/importtrace.py,sha256=ry2PwV4h8KvFUHm4pIKN76TAwxC5lFT1A3CzccXlj2o,14019
237
238
  omdev/py/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
238
239
  omdev/py/tools/importscan.py,sha256=4dCH0coX0OqNwesteKaTE8GxuSfLhgXYQlzNUXLiSNY,4640
239
240
  omdev/py/tools/mkrelimp.py,sha256=L6TksQixUc_DQGXKFMOKnYJ-JixeP3ldgkDqHeEs2Ww,4044
@@ -250,9 +251,9 @@ omdev/pyproject/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
250
251
  omdev/pyproject/resources/docker-dev.sh,sha256=DHkz5D18jok_oDolfg2mqrvGRWFoCe9GQo04dR1czcc,838
251
252
  omdev/pyproject/resources/python.sh,sha256=rFaN4SiJ9hdLDXXsDTwugI6zsw6EPkgYMmtacZeTbvw,749
252
253
  omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
253
- omdev/scripts/ci.py,sha256=1IeNGWCyHtonK1PHaKETW7IqCyXMkIkMafXUVlFCtQo,357043
254
- omdev/scripts/interp.py,sha256=ByjO0DdnYF8VDYu04v6oIops4CknA8bUTOmcbjmlXGk,155590
255
- omdev/scripts/pyproject.py,sha256=psPWxTp0FAPrRTMEoLTvHOsbv15fkIf_Lh8LBl3pYZE,265071
254
+ omdev/scripts/ci.py,sha256=UMyGSv7_16YaG-rrrqnMU2bLJg-Vp74WriB_vmtfW6U,357069
255
+ omdev/scripts/interp.py,sha256=eI43dKT99L0LniXC6PDYou2Y5fOU-lrVyElVvPYu92s,155600
256
+ omdev/scripts/pyproject.py,sha256=7vcQBcXd64vnAiVdC9wQ-4z1jGf-un7xyKrt-K_tVwA,265081
256
257
  omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
257
258
  omdev/scripts/tmpexec.py,sha256=WTYcf56Tj2qjYV14AWmV8SfT0u6Y8eIU6cKgQRvEK3c,1442
258
259
  omdev/tokens/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -286,7 +287,7 @@ omdev/tools/git/messages.py,sha256=NWztIK0nAKJIOVzuVQcR_5LHZUgqyVkrOlpl7dFLMdU,2
286
287
  omdev/tools/json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
287
288
  omdev/tools/json/__main__.py,sha256=wqpkN_NsQyNwKW4qjVj8ADJ4_C98KhrFBtE-Z1UamfU,168
288
289
  omdev/tools/json/cli.py,sha256=WQ8VQ9EkGD6IeIuUci8hLPwfx6y2B8ZzFlTTizwwKXU,9598
289
- omdev/tools/json/formats.py,sha256=RgtPdcs294o9n9czjafHppg1iSzD-olsIc3v8ApM9Os,1908
290
+ omdev/tools/json/formats.py,sha256=0IXHUIkcbKnTVP0a53wYWsBMpfVtGTrHN04zRAs2JZo,2049
290
291
  omdev/tools/json/io.py,sha256=sfj2hJS9Hy3aUR8a_lLzOrYcmL9fSKyvOHiofdUASsI,1427
291
292
  omdev/tools/json/parsing.py,sha256=csoTuG2C2AJB7PgG4TKt2XqdiBAQXtpXRWBxoMkk14g,2103
292
293
  omdev/tools/json/processing.py,sha256=iFm5VqaxJ97WHaun2ed7NEjMxhFeJqf28bLNfoDJft0,1209
@@ -294,9 +295,9 @@ omdev/tools/json/rendering.py,sha256=3HhdlKSetS6iK1tjF2aILzsl8Mb3D8wW92vYwGpRdVA
294
295
  omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
295
296
  omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
296
297
  omdev/tools/pawk/pawk.py,sha256=zsEkfQX0jF5bn712uqPAyBSdJt2dno1LH2oeSMNfXQI,11424
297
- omdev-0.0.0.dev322.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
298
- omdev-0.0.0.dev322.dist-info/METADATA,sha256=W2vWvN3Vn1arS7DSnKfNgJXZZN8e584bozi9b0sKUvE,1674
299
- omdev-0.0.0.dev322.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
300
- omdev-0.0.0.dev322.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
301
- omdev-0.0.0.dev322.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
302
- omdev-0.0.0.dev322.dist-info/RECORD,,
298
+ omdev-0.0.0.dev324.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
299
+ omdev-0.0.0.dev324.dist-info/METADATA,sha256=in-kTKRjJPv5TbNAvuzjie-QDRSqE7zfOG-7hHk4-Fc,1674
300
+ omdev-0.0.0.dev324.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
301
+ omdev-0.0.0.dev324.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
302
+ omdev-0.0.0.dev324.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
303
+ omdev-0.0.0.dev324.dist-info/RECORD,,