omdev 0.0.0.dev282__py3-none-any.whl → 0.0.0.dev284__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
@@ -11,18 +11,6 @@
11
11
  }
12
12
  }
13
13
  },
14
- {
15
- "module": ".bracepy",
16
- "attr": "_CLI_MODULE",
17
- "file": "omdev/bracepy.py",
18
- "line": 88,
19
- "value": {
20
- "$.cli.types.CliModule": {
21
- "cmd_name": "bracepy",
22
- "mod_name": "omdev.bracepy"
23
- }
24
- }
25
- },
26
14
  {
27
15
  "module": ".cc.__main__",
28
16
  "attr": "_CLI_MODULE",
@@ -47,18 +35,6 @@
47
35
  }
48
36
  }
49
37
  },
50
- {
51
- "module": ".classdot",
52
- "attr": "_CLI_MODULE",
53
- "file": "omdev/classdot.py",
54
- "line": 62,
55
- "value": {
56
- "$.cli.types.CliModule": {
57
- "cmd_name": "py/classdot",
58
- "mod_name": "omdev.classdot"
59
- }
60
- }
61
- },
62
38
  {
63
39
  "module": ".cli.clicli",
64
40
  "attr": "_CLI_MODULE",
@@ -71,23 +47,11 @@
71
47
  }
72
48
  }
73
49
  },
74
- {
75
- "module": ".findimports",
76
- "attr": "_CLI_MODULE",
77
- "file": "omdev/findimports.py",
78
- "line": 81,
79
- "value": {
80
- "$.cli.types.CliModule": {
81
- "cmd_name": "py/findimports",
82
- "mod_name": "omdev.findimports"
83
- }
84
- }
85
- },
86
50
  {
87
51
  "module": ".imgur",
88
52
  "attr": "_FOO_CLI_MODULE",
89
53
  "file": "omdev/imgur.py",
90
- "line": 130,
54
+ "line": 133,
91
55
  "value": {
92
56
  "$.cli.types.CliModule": {
93
57
  "cmd_name": "imgur",
@@ -156,50 +120,122 @@
156
120
  }
157
121
  },
158
122
  {
159
- "module": ".pyproject.__main__",
123
+ "module": ".py.attrdocs",
160
124
  "attr": "_CLI_MODULE",
161
- "file": "omdev/pyproject/__main__.py",
162
- "line": 4,
125
+ "file": "omdev/py/attrdocs.py",
126
+ "line": 146,
163
127
  "value": {
164
128
  "$.cli.types.CliModule": {
165
- "cmd_name": "pyproject",
166
- "mod_name": "omdev.pyproject.__main__"
129
+ "cmd_name": "py/attrdocs",
130
+ "mod_name": "omdev.py.attrdocs"
131
+ }
132
+ }
133
+ },
134
+ {
135
+ "module": ".py.bracepy",
136
+ "attr": "_CLI_MODULE",
137
+ "file": "omdev/py/bracepy.py",
138
+ "line": 94,
139
+ "value": {
140
+ "$.cli.types.CliModule": {
141
+ "cmd_name": "bracepy",
142
+ "mod_name": "omdev.py.bracepy"
143
+ }
144
+ }
145
+ },
146
+ {
147
+ "module": ".py.classdot",
148
+ "attr": "_CLI_MODULE",
149
+ "file": "omdev/py/classdot.py",
150
+ "line": 63,
151
+ "value": {
152
+ "$.cli.types.CliModule": {
153
+ "cmd_name": "py/classdot",
154
+ "mod_name": "omdev.py.classdot"
155
+ }
156
+ }
157
+ },
158
+ {
159
+ "module": ".py.findimports",
160
+ "attr": "_CLI_MODULE",
161
+ "file": "omdev/py/findimports.py",
162
+ "line": 87,
163
+ "value": {
164
+ "$.cli.types.CliModule": {
165
+ "cmd_name": "py/findimports",
166
+ "mod_name": "omdev.py.findimports"
167
167
  }
168
168
  }
169
169
  },
170
170
  {
171
- "module": ".scripts.execrss",
171
+ "module": ".py.scripts.execrss",
172
172
  "attr": "_CLI_MODULE",
173
- "file": "omdev/scripts/execrss.py",
173
+ "file": "omdev/py/scripts/execrss.py",
174
174
  "line": 11,
175
175
  "value": {
176
176
  "$.cli.types.CliModule": {
177
177
  "cmd_name": "py/execrss",
178
- "mod_name": "omdev.scripts.execrss"
178
+ "mod_name": "omdev.py.scripts.execrss"
179
179
  }
180
180
  }
181
181
  },
182
182
  {
183
- "module": ".scripts.exectime",
183
+ "module": ".py.scripts.exectime",
184
184
  "attr": "_CLI_MODULE",
185
- "file": "omdev/scripts/exectime.py",
185
+ "file": "omdev/py/scripts/exectime.py",
186
186
  "line": 66,
187
187
  "value": {
188
188
  "$.cli.types.CliModule": {
189
189
  "cmd_name": "py/exectime",
190
- "mod_name": "omdev.scripts.exectime"
190
+ "mod_name": "omdev.py.scripts.exectime"
191
191
  }
192
192
  }
193
193
  },
194
194
  {
195
- "module": ".scripts.importtrace",
195
+ "module": ".py.scripts.importtrace",
196
196
  "attr": "_CLI_MODULE",
197
- "file": "omdev/scripts/importtrace.py",
197
+ "file": "omdev/py/scripts/importtrace.py",
198
198
  "line": 477,
199
199
  "value": {
200
200
  "$.cli.types.CliModule": {
201
201
  "cmd_name": "py/importtrace",
202
- "mod_name": "omdev.scripts.importtrace"
202
+ "mod_name": "omdev.py.scripts.importtrace"
203
+ }
204
+ }
205
+ },
206
+ {
207
+ "module": ".py.tools.importscan",
208
+ "attr": "_CLI_MODULE",
209
+ "file": "omdev/py/tools/importscan.py",
210
+ "line": 178,
211
+ "value": {
212
+ "$.cli.types.CliModule": {
213
+ "cmd_name": "py/importscan",
214
+ "mod_name": "omdev.py.tools.importscan"
215
+ }
216
+ }
217
+ },
218
+ {
219
+ "module": ".py.tools.mkrelimp",
220
+ "attr": "_CLI_MODULE",
221
+ "file": "omdev/py/tools/mkrelimp.py",
222
+ "line": 146,
223
+ "value": {
224
+ "$.cli.types.CliModule": {
225
+ "cmd_name": "py/mkrelimp",
226
+ "mod_name": "omdev.py.tools.mkrelimp"
227
+ }
228
+ }
229
+ },
230
+ {
231
+ "module": ".pyproject.__main__",
232
+ "attr": "_CLI_MODULE",
233
+ "file": "omdev/pyproject/__main__.py",
234
+ "line": 4,
235
+ "value": {
236
+ "$.cli.types.CliModule": {
237
+ "cmd_name": "pyproject",
238
+ "mod_name": "omdev.pyproject.__main__"
203
239
  }
204
240
  }
205
241
  },
@@ -303,18 +339,6 @@
303
339
  }
304
340
  }
305
341
  },
306
- {
307
- "module": ".tools.importscan",
308
- "attr": "_CLI_MODULE",
309
- "file": "omdev/tools/importscan.py",
310
- "line": 178,
311
- "value": {
312
- "$.cli.types.CliModule": {
313
- "cmd_name": "py/importscan",
314
- "mod_name": "omdev.tools.importscan"
315
- }
316
- }
317
- },
318
342
  {
319
343
  "module": ".tools.intellij",
320
344
  "attr": "_CLI_MODULE",
@@ -371,18 +395,6 @@
371
395
  }
372
396
  }
373
397
  },
374
- {
375
- "module": ".tools.mkrelimp",
376
- "attr": "_CLI_MODULE",
377
- "file": "omdev/tools/mkrelimp.py",
378
- "line": 146,
379
- "value": {
380
- "$.cli.types.CliModule": {
381
- "cmd_name": "py/mkrelimp",
382
- "mod_name": "omdev.tools.mkrelimp"
383
- }
384
- }
385
- },
386
398
  {
387
399
  "module": ".tools.notebook",
388
400
  "attr": "_CLI_MODULE",
omdev/__about__.py CHANGED
@@ -24,7 +24,7 @@ class Project(ProjectBase):
24
24
  'doc': [
25
25
  'docutils ~= 0.21',
26
26
 
27
- 'markdown-it-py ~= 3.7',
27
+ 'markdown-it-py ~= 3.0',
28
28
  # 'mdit-py-plugins ~= 0.4',
29
29
  ],
30
30
 
@@ -33,7 +33,7 @@ class Project(ProjectBase):
33
33
  ],
34
34
 
35
35
  'prof': [
36
- 'gprof2dot ~= 2024.6',
36
+ 'gprof2dot ~= 2025.4',
37
37
  ],
38
38
 
39
39
  'ptk': [
@@ -43,10 +43,6 @@ class Project(ProjectBase):
43
43
  'qr': [
44
44
  'segno ~= 1.6',
45
45
  ],
46
-
47
- 'wheel': [
48
- 'wheel ~= 0.45',
49
- ],
50
46
  }
51
47
 
52
48
  entry_points = {
@@ -90,7 +90,7 @@ class Object(lang.Abstract):
90
90
 
91
91
 
92
92
  @dc.dataclass(frozen=True)
93
- @dc.extra_params(cache_hash=True)
93
+ @dc.extra_class_params(cache_hash=True)
94
94
  class CacheKey(lang.Abstract, ta.Generic[NameT]):
95
95
  name: NameT
96
96
 
omdev/cmake.py CHANGED
@@ -4,6 +4,9 @@ import typing as ta
4
4
  from omlish import dataclasses as dc
5
5
 
6
6
 
7
+ ##
8
+
9
+
7
10
  @dc.dataclass(frozen=True)
8
11
  class Command:
9
12
  name: str
omdev/imgur.py CHANGED
@@ -36,6 +36,9 @@ from .cli import CliModule
36
36
  from .home.secrets import load_secrets
37
37
 
38
38
 
39
+ ##
40
+
41
+
39
42
  @dc.dataclass(frozen=True)
40
43
  @msh.update_object_metadata(unknown_field='x')
41
44
  class ImageUploadData:
omdev/precheck/scripts.py CHANGED
@@ -3,8 +3,8 @@ import os
3
3
  import stat
4
4
  import typing as ta
5
5
 
6
- from .. import findimports
7
6
  from .. import magic
7
+ from ..py import findimports
8
8
  from .base import Precheck
9
9
  from .base import PrecheckContext
10
10
 
omdev/py/__init__.py ADDED
@@ -0,0 +1,3 @@
1
+ """
2
+ Python source-related utilities.
3
+ """
omdev/py/attrdocs.py ADDED
@@ -0,0 +1,177 @@
1
+ # ruff: noqa: N802
2
+ import ast
3
+ import dataclasses as dc
4
+ import inspect
5
+ import typing as ta
6
+
7
+ from omlish import check
8
+ from omlish import lang
9
+
10
+ from ..tokens import all as tks
11
+
12
+
13
+ ##
14
+
15
+
16
+ @dc.dataclass(frozen=True)
17
+ class AttrDoc:
18
+ docstring: str | None = None
19
+ trailing_comment: str | None = None
20
+ preceding_comment: str | None = None
21
+
22
+ __repr__ = lang.AttrRepr.of(
23
+ 'docstring',
24
+ 'trailing_comment',
25
+ 'preceding_comment',
26
+ value_filter=bool,
27
+ )
28
+
29
+
30
+ _EMPTY_ATTR_DOC = AttrDoc()
31
+
32
+
33
+ ##
34
+
35
+
36
+ class _AttrDocAstVisitor(ast.NodeVisitor):
37
+ def __init__(
38
+ self,
39
+ *,
40
+ tok_lines: ta.Sequence[tks.Tokens] | None = None,
41
+ ) -> None:
42
+ super().__init__()
43
+
44
+ self._tok_lines = tok_lines
45
+
46
+ self._attr_docs: dict[str, AttrDoc] = {}
47
+ self._target: str | None = None
48
+ self._prev_node_type: type[ast.AST] | None = None
49
+
50
+ @property
51
+ def attr_docs(self) -> ta.Mapping[str, AttrDoc]:
52
+ return self._attr_docs
53
+
54
+ #
55
+
56
+ def visit(self, node: ast.AST) -> ta.Any:
57
+ if isinstance(node, (ast.AsyncFunctionDef, ast.FunctionDef)):
58
+ self._prev_node_type = None
59
+ return None
60
+ node_result = super().visit(node)
61
+ self._prev_node_type = type(node)
62
+ return node_result
63
+
64
+ #
65
+
66
+ @staticmethod
67
+ def _comment_tok_src(tok: tks.Token) -> str:
68
+ check.state(tok.name == 'COMMENT')
69
+ tc = tok.src
70
+ check.state(tc[0] == '#')
71
+ return tc[1:].lstrip()
72
+
73
+ def _set_target(self, node: ast.Name) -> None:
74
+ self._target = node.id
75
+
76
+ ad = _EMPTY_ATTR_DOC
77
+
78
+ if self._tok_lines is not None:
79
+ line = self._tok_lines[node.lineno - 1]
80
+ for t in reversed(line):
81
+ if t.name not in tks.WS_NAMES:
82
+ break
83
+ if t.name == 'COMMENT':
84
+ ad = dc.replace(ad, trailing_comment=self._comment_tok_src(t))
85
+ break
86
+
87
+ pll: list[str] = []
88
+ pln = node.lineno - 1
89
+ while pln > 0:
90
+ line = self._tok_lines[pln - 1]
91
+ no_ws_line = list(tks.ignore_ws(line, keep={'COMMENT'}))
92
+ if not no_ws_line or no_ws_line[0].name != 'COMMENT': # noqa
93
+ break
94
+ pll.append(self._comment_tok_src(no_ws_line[0]))
95
+ pln -= 1
96
+ if pll:
97
+ ad = dc.replace(ad, preceding_comment='\n'.join(reversed(pll)))
98
+
99
+ if ad is not _EMPTY_ATTR_DOC:
100
+ self._attr_docs[node.id] = ad
101
+
102
+ def visit_AnnAssign(self, node: ast.AnnAssign) -> ta.Any:
103
+ if isinstance(target := node.target, ast.Name):
104
+ self._set_target(target)
105
+
106
+ def visit_Assign(self, node: ast.Assign) -> ta.Any:
107
+ if len(node.targets) == 1 and isinstance(target := node.targets[0], ast.Name):
108
+ self._set_target(target) # noqa
109
+
110
+ #
111
+
112
+ def visit_Expr(self, node: ast.Expr) -> ta.Any:
113
+ if (
114
+ isinstance(node.value, ast.Constant) and
115
+ isinstance(node.value.value, str) and
116
+ self._prev_node_type in (ast.Assign, ast.AnnAssign)
117
+ ):
118
+ docstring = inspect.cleandoc(node.value.value)
119
+ if self._target:
120
+ ex = self._attr_docs.get(self._target, _EMPTY_ATTR_DOC)
121
+ check.none(ex.docstring)
122
+ self._attr_docs[self._target] = dc.replace(ex, docstring=docstring)
123
+ self._target = None
124
+
125
+
126
+ def extract_attr_docs(src: str) -> ta.Mapping[str, AttrDoc]:
127
+ if not src:
128
+ return {}
129
+
130
+ toks = tks.src_to_tokens(src)
131
+ tok_lines = tks.split_lines_dense(toks)
132
+
133
+ src_ast = ast.parse(src)
134
+
135
+ # import astpretty
136
+ # astpretty.pprint(src_ast)
137
+
138
+ ast_visitor = _AttrDocAstVisitor(tok_lines=tok_lines)
139
+ ast_visitor.visit(src_ast)
140
+ return ast_visitor.attr_docs
141
+
142
+
143
+ ##
144
+
145
+
146
+ # @omlish-manifest
147
+ _CLI_MODULE = {'$omdev.cli.types.CliModule': {
148
+ 'cmd_name': 'py/attrdocs',
149
+ 'mod_name': __name__,
150
+ }}
151
+
152
+
153
+ if __name__ == '__main__':
154
+ def _main() -> None:
155
+ import argparse
156
+
157
+ parser = argparse.ArgumentParser()
158
+ parser.add_argument('file')
159
+ args = parser.parse_args()
160
+
161
+ #
162
+
163
+ with open(args.file) as f:
164
+ src = f.read()
165
+
166
+ attr_docs = extract_attr_docs(src)
167
+
168
+ #
169
+
170
+ import json
171
+
172
+ print(json.dumps({
173
+ a: {k: v for k, v in dc.asdict(ad).items() if v}
174
+ for a, ad in sorted(attr_docs.items(), key=lambda t: t[0])
175
+ }))
176
+
177
+ _main()
@@ -7,6 +7,9 @@ import io
7
7
  import tokenize
8
8
 
9
9
 
10
+ ##
11
+
12
+
10
13
  def translate_brace_python(
11
14
  s: str,
12
15
  *,
@@ -85,6 +88,9 @@ def translate_brace_python(
85
88
  return ret.getvalue()
86
89
 
87
90
 
91
+ ##
92
+
93
+
88
94
  # @omlish-manifest
89
95
  _CLI_MODULE = {'$omdev.cli.types.CliModule': {
90
96
  'cmd_name': 'bracepy',
@@ -7,7 +7,8 @@ import typing as ta
7
7
 
8
8
  from omlish.graphs import dot
9
9
 
10
- from .cli import CliModule
10
+
11
+ ##
11
12
 
12
13
 
13
14
  def gen_class_dot(roots: ta.Iterable[type]) -> dot.Graph:
@@ -60,7 +61,10 @@ def _main() -> None:
60
61
 
61
62
 
62
63
  # @omlish-manifest
63
- _CLI_MODULE = CliModule('py/classdot', __name__)
64
+ _CLI_MODULE = {'$omdev.cli.types.CliModule': {
65
+ 'cmd_name': 'py/classdot',
66
+ 'mod_name': __name__,
67
+ }}
64
68
 
65
69
 
66
70
  if __name__ == '__main__':
@@ -13,6 +13,9 @@ import sys
13
13
  import typing as ta
14
14
 
15
15
 
16
+ ##
17
+
18
+
16
19
  _BUILTIN_MODULE_NAMES = frozenset([*sys.builtin_module_names, *sys.stdlib_module_names])
17
20
 
18
21
 
@@ -78,6 +81,9 @@ def get_import_deps(imps: set[str]) -> set[str]:
78
81
  return {i for i in eimps if whichmod(i) != 'builtin'}
79
82
 
80
83
 
84
+ ##
85
+
86
+
81
87
  # @omlish-manifest
82
88
  _CLI_MODULE = {'$omdev.cli.types.CliModule': {
83
89
  'cmd_name': 'py/findimports',
File without changes
File without changes
@@ -26,7 +26,7 @@ from omlish import check
26
26
  from omlish import concurrent as cu
27
27
  from omlish import lang
28
28
 
29
- from ..cli import CliModule
29
+ from ...cli import CliModule
30
30
 
31
31
 
32
32
  ##
@@ -6,8 +6,8 @@ import typing as ta
6
6
 
7
7
  from omlish.logs import all as logs
8
8
 
9
- from ..cli import CliModule
10
- from ..tokens import all as tks
9
+ from ...cli import CliModule
10
+ from ...tokens import all as tks
11
11
 
12
12
 
13
13
  T = ta.TypeVar('T')
omdev/scripts/ci.py CHANGED
@@ -50,6 +50,7 @@ import json
50
50
  import logging
51
51
  import os
52
52
  import os.path
53
+ import re
53
54
  import selectors
54
55
  import shlex
55
56
  import shutil
@@ -5572,19 +5573,77 @@ class StringMangler:
5572
5573
  check.not_in(self.escape, self.escaped)
5573
5574
  check.arg(len(set(self.escaped)) == len(self.escaped))
5574
5575
 
5576
+ #
5577
+
5578
+ @cached_nullary
5579
+ def replaced(self) -> ta.Tuple[str, ...]:
5580
+ return (self.escape, *self.escaped)
5581
+
5582
+ @cached_nullary
5583
+ def replaced_set(self) -> ta.FrozenSet[str]:
5584
+ return frozenset(self.replaced())
5585
+
5586
+ @cached_nullary
5587
+ def replaced_indexes(self) -> ta.Mapping[str, int]:
5588
+ return {s: i for i, s in enumerate(self.replaced())}
5589
+
5590
+ @cached_nullary
5591
+ def replaced_pat(self) -> re.Pattern:
5592
+ return re.compile('|'.join(re.escape(k) for k in self.replaced()))
5593
+
5594
+ #
5595
+
5596
+ @cached_nullary
5597
+ def replacement_pad(self) -> int:
5598
+ return len('%x' % (len(self.replaced()),)) # noqa
5599
+
5575
5600
  @cached_nullary
5576
5601
  def replacements(self) -> ta.Sequence[ta.Tuple[str, str]]:
5577
- return [(l, self.escape + str(i)) for i, l in enumerate([self.escape, *self.escaped])]
5602
+ fmt = f'%0{self.replacement_pad()}x'
5603
+ return [
5604
+ (l, self.escape + fmt % (i,))
5605
+ for i, l in enumerate(self.replaced())
5606
+ ]
5607
+
5608
+ @cached_nullary
5609
+ def replacements_dict(self) -> ta.Mapping[str, str]:
5610
+ return dict(self.replacements())
5611
+
5612
+ @cached_nullary
5613
+ def inverse_replacements_dict(self) -> ta.Mapping[str, str]:
5614
+ return {v: k for k, v in self.replacements()}
5615
+
5616
+ @cached_nullary
5617
+ def replacements_pat(self) -> re.Pattern:
5618
+ return re.compile(''.join([re.escape(self.escape), '.' * self.replacement_pad()]))
5619
+
5620
+ #
5621
+
5622
+ # def mangle(self, s: str) -> str:
5623
+ # ecs = sorted(
5624
+ # frozenset(s) & self.replaced_set(),
5625
+ # key=self.replaced_indexes().__getitem__,
5626
+ # )
5627
+ # rd = self.replacements_dict()
5628
+ # for l in ecs:
5629
+ # r = rd[l]
5630
+ # s = s.replace(l, r)
5631
+ # return s
5578
5632
 
5579
5633
  def mangle(self, s: str) -> str:
5580
- for l, r in self.replacements():
5581
- s = s.replace(l, r)
5582
- return s
5634
+ rd = self.replacements_dict()
5635
+ return self.replaced_pat().sub(lambda m: rd[m.group(0)], s)
5636
+
5637
+ #
5638
+
5639
+ # def unmangle(self, s: str) -> str:
5640
+ # for l, r in reversed(self.replacements()):
5641
+ # s = s.replace(r, l)
5642
+ # return s
5583
5643
 
5584
5644
  def unmangle(self, s: str) -> str:
5585
- for l, r in reversed(self.replacements()):
5586
- s = s.replace(r, l)
5587
- return s
5645
+ ird = self.inverse_replacements_dict()
5646
+ return self.replacements_pat().sub(lambda m: ird[m.group(0)], s)
5588
5647
 
5589
5648
 
5590
5649
  ########################################
omdev/tokens/all.py CHANGED
@@ -14,6 +14,7 @@ from .utils import ( # noqa
14
14
  ignore_ws,
15
15
 
16
16
  split_lines,
17
+ split_lines_dense,
17
18
  join_toks,
18
19
  join_lines,
19
20
 
omdev/tokens/utils.py CHANGED
@@ -28,6 +28,8 @@ def ignore_ws(
28
28
  *,
29
29
  keep: ta.Container[str] = (),
30
30
  ) -> ta.Iterable[Token]:
31
+ if isinstance(keep, str):
32
+ raise TypeError(keep)
31
33
  return (
32
34
  t
33
35
  for t in toks
@@ -42,6 +44,15 @@ def split_lines(ts: Tokens) -> list[Tokens]:
42
44
  return [list(it) for g, it in itertools.groupby(ts, lambda t: t.line)]
43
45
 
44
46
 
47
+ def split_lines_dense(ts: Tokens) -> list[Tokens]:
48
+ lines: list[list[Token]] = []
49
+ for t in ts:
50
+ while len(lines) < (t.line or 0):
51
+ lines.append([])
52
+ lines[-1].append(t)
53
+ return lines # type: ignore[return-value]
54
+
55
+
45
56
  def join_toks(ts: Tokens) -> str:
46
57
  return ''.join(t.src for t in ts)
47
58
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev282
3
+ Version: 0.0.0.dev284
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,18 +12,17 @@ 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.dev282
15
+ Requires-Dist: omlish==0.0.0.dev284
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
19
19
  Requires-Dist: pcpp~=1.30; extra == "all"
20
20
  Requires-Dist: docutils~=0.21; extra == "all"
21
- Requires-Dist: markdown-it-py~=3.7; extra == "all"
21
+ Requires-Dist: markdown-it-py~=3.0; extra == "all"
22
22
  Requires-Dist: mypy~=1.15; extra == "all"
23
- Requires-Dist: gprof2dot~=2024.6; extra == "all"
23
+ Requires-Dist: gprof2dot~=2025.4; extra == "all"
24
24
  Requires-Dist: prompt-toolkit~=3.0; extra == "all"
25
25
  Requires-Dist: segno~=1.6; extra == "all"
26
- Requires-Dist: wheel~=0.45; extra == "all"
27
26
  Provides-Extra: black
28
27
  Requires-Dist: black~=25.1; extra == "black"
29
28
  Provides-Extra: c
@@ -31,15 +30,13 @@ Requires-Dist: pycparser~=2.22; extra == "c"
31
30
  Requires-Dist: pcpp~=1.30; extra == "c"
32
31
  Provides-Extra: doc
33
32
  Requires-Dist: docutils~=0.21; extra == "doc"
34
- Requires-Dist: markdown-it-py~=3.7; extra == "doc"
33
+ Requires-Dist: markdown-it-py~=3.0; extra == "doc"
35
34
  Provides-Extra: mypy
36
35
  Requires-Dist: mypy~=1.15; extra == "mypy"
37
36
  Provides-Extra: prof
38
- Requires-Dist: gprof2dot~=2024.6; extra == "prof"
37
+ Requires-Dist: gprof2dot~=2025.4; extra == "prof"
39
38
  Provides-Extra: ptk
40
39
  Requires-Dist: prompt-toolkit~=3.0; extra == "ptk"
41
40
  Provides-Extra: qr
42
41
  Requires-Dist: segno~=1.6; extra == "qr"
43
- Provides-Extra: wheel
44
- Requires-Dist: wheel~=0.45; extra == "wheel"
45
42
  Dynamic: license-file
@@ -1,11 +1,8 @@
1
- omdev/.manifests.json,sha256=6ctfThA3b81KIbdc0sNzL63fepwPCfqzH7uRp0edxfc,10078
2
- omdev/__about__.py,sha256=TeZN9riO-ekcaVodONcH5Es3OsQwWS7lu_dQHdzY_t4,1231
1
+ omdev/.manifests.json,sha256=7l1mn-QsFPcRMz9DHpN9yS8F27pYW6tsyDOAS2cREWU,10406
2
+ omdev/__about__.py,sha256=OgO_8azOzKriF2qPeDWRLcRe9p1XW5kYdJCq5vewff0,1171
3
3
  omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- omdev/bracepy.py,sha256=I8EdqtDvxzAi3I8TuMEW-RBfwXfqKbwp06CfOdj3L1o,2743
5
- omdev/classdot.py,sha256=YOvgy6x295I_8NKBbBlRVd3AN7Osirm_Lqt4Wj0j9rY,1631
6
- omdev/cmake.py,sha256=oBAp1K8h-iCDd9uCn-OpNpZ6n36oYFkWLIiTyQw4irU,4573
7
- omdev/findimports.py,sha256=2t8QP852saEEJFeXySEzhi_nxRSxghlkXz2jVdvy08M,2392
8
- omdev/imgur.py,sha256=Uyz8nkORlhfXXK5Sty16tX8ro8s-b7LrxjOECv4_sB0,3005
4
+ omdev/cmake.py,sha256=9rfSvFHPmKDj9ngvfDB2vK8O-xO_ZwUm7hMKLWA-yOw,4578
5
+ omdev/imgur.py,sha256=TkjK_M4nDarEmbP-FhVkt_VzSY2jHkZnKGnhnZ1zJAs,3010
9
6
  omdev/pip.py,sha256=PqzAWDO_CbiZvXzJAZcCkFqWynUDls1jIgBWlrswQyA,2012
10
7
  omdev/tagstrings.py,sha256=zIP7nzcsZf5te0lphu6k36ND_cOvNFRg00neoTcoCs8,5484
11
8
  omdev/amalg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -30,7 +27,7 @@ omdev/cache/compute/currents.py,sha256=D1Ls5Sd7FX2aPO5wpyEwTSmkz50sxkwCs37Amb0ur
30
27
  omdev/cache/compute/fns.py,sha256=_1xU7qw1O57OsTp17RFjFTBO1M2t54RL-CGdl-0cTBk,4175
31
28
  omdev/cache/compute/resolvers.py,sha256=9dq0mt__emp8CdNDWPVUr_dCkTOn7ar6nw0F2QH6XpQ,566
32
29
  omdev/cache/compute/storage.py,sha256=woCUqHg8ZrwLEejRG3zu1L5ZXxGNNXveh3E8FnlEkjc,941
33
- omdev/cache/compute/types.py,sha256=NpCTTJHDmpERjrbO6dh9TEzHuP6-vOuoX3ym9sA0ukc,2639
30
+ omdev/cache/compute/types.py,sha256=dW6S1g_-MklWf8JDPXFMamuOZinjKFOlonfMyWg4L3o,2645
34
31
  omdev/cache/data/__init__.py,sha256=SQXtugLceRif463rcoklpQ33pxYLgEIm0xiI6NvOI6M,301
35
32
  omdev/cache/data/actions.py,sha256=Mv7eXeZuohCjQLpmLyvqvGjjBacXIvTYzIRMVpEh-zM,1037
36
33
  omdev/cache/data/cache.py,sha256=aZJotj9kpVHBK7O0UdqMdeV7PtCqf9Rd8tqIwgWtQlQ,7664
@@ -192,10 +189,23 @@ omdev/precheck/git.py,sha256=APC5Ln7x0zDrQiGPRWPsBcVJK3vWhbU-brqR5M63JQA,849
192
189
  omdev/precheck/lite.py,sha256=WFi7Ox2XD_L-jx8rdjXucoGMi5AiEFkDGYWhCW8ZH6g,4692
193
190
  omdev/precheck/main.py,sha256=XkwQnC_4YH-0P9YYkVxKUHAAj0o6iXiCu6S-oU_WaQk,2948
194
191
  omdev/precheck/manifests.py,sha256=ulwuYeZ0vnRsj8uTUbQGifoBNwI82MAsJuffs3rVIak,760
195
- omdev/precheck/scripts.py,sha256=Xw9kkQzlDd_2V9av9qlaNpNZG9jZdy3TTo7x60MeR2I,1273
192
+ omdev/precheck/scripts.py,sha256=Sm-HLJZVX2bjl1iGAW7mbtEbpGI-WIAlRDK1OSk40oM,1275
196
193
  omdev/ptk/__init__.py,sha256=Km0B3IYeljiFfSo7uywH55EU7mo1fZOrbUs8tN735rI,4957
197
194
  omdev/ptk/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
195
  omdev/ptk/apps/ncdu.py,sha256=dOkEJoc2Wjv1u_Uge7Vpei_LvXldoPP5833Eia355tc,4548
196
+ omdev/py/__init__.py,sha256=u7tLEfRTnPVtWPmKK_ZIvnFkZwTe1q44UQ53cvsix3k,41
197
+ omdev/py/attrdocs.py,sha256=AiPVoGP3919cNK3a4tDxXEtnLMf6QG967xxCla1LwS4,4529
198
+ omdev/py/bracepy.py,sha256=PPPoTMj4FJ5Lk3GGPEEWBGU7Kl1eCJBApSJnRvRj2Ms,2753
199
+ omdev/py/classdot.py,sha256=CAHL39nhQWnELVe1L6HIOyLha2h3pf4f1vKyLZTHhkM,1666
200
+ omdev/py/findimports.py,sha256=CDorwWr9hdIGnV-gvYQykdiz9hEsu8JrEZAF5sD_89w,2402
201
+ omdev/py/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
202
+ omdev/py/scripts/bumpversion.py,sha256=2NnfRsJiZNTg-LubIwXCm2vklG7-kIR8_xFUEZNxtiY,1119
203
+ omdev/py/scripts/execrss.py,sha256=mR0G0wERBYtQmVIn63lCIIFb5zkCM6X_XOENDFYDBKc,651
204
+ omdev/py/scripts/exectime.py,sha256=S2O4MgtzTsFOY2IUJxsrnOIame9tEFc6aOlKP-F1JSg,1541
205
+ omdev/py/scripts/importtrace.py,sha256=NjRilVNBugswrNflIhPCPHRTd-vIijqSZ8C7J8lariI,14038
206
+ omdev/py/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
207
+ omdev/py/tools/importscan.py,sha256=4dCH0coX0OqNwesteKaTE8GxuSfLhgXYQlzNUXLiSNY,4640
208
+ omdev/py/tools/mkrelimp.py,sha256=L6TksQixUc_DQGXKFMOKnYJ-JixeP3ldgkDqHeEs2Ww,4044
199
209
  omdev/pyproject/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
200
210
  omdev/pyproject/__main__.py,sha256=gn3Rl1aYPYdiTtEqa9ifi0t-e4ZwPY0vhJ4UXvYdJDY,165
201
211
  omdev/pyproject/cexts.py,sha256=x13piOOnNrYbA17qZLDVuR0p1sqhgEwpk4FtImX-klM,4281
@@ -209,29 +219,23 @@ omdev/pyproject/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
209
219
  omdev/pyproject/resources/docker-dev.sh,sha256=DHkz5D18jok_oDolfg2mqrvGRWFoCe9GQo04dR1czcc,838
210
220
  omdev/pyproject/resources/python.sh,sha256=rFaN4SiJ9hdLDXXsDTwugI6zsw6EPkgYMmtacZeTbvw,749
211
221
  omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
212
- omdev/scripts/bumpversion.py,sha256=2NnfRsJiZNTg-LubIwXCm2vklG7-kIR8_xFUEZNxtiY,1119
213
- omdev/scripts/ci.py,sha256=Z2Tufq5f072q7BQzvcqBpwLkvhBaqagA7lEbeazLXMg,333891
214
- omdev/scripts/execrss.py,sha256=mR0G0wERBYtQmVIn63lCIIFb5zkCM6X_XOENDFYDBKc,651
215
- omdev/scripts/exectime.py,sha256=S2O4MgtzTsFOY2IUJxsrnOIame9tEFc6aOlKP-F1JSg,1541
216
- omdev/scripts/importtrace.py,sha256=NjRilVNBugswrNflIhPCPHRTd-vIijqSZ8C7J8lariI,14038
222
+ omdev/scripts/ci.py,sha256=DJC8KuvR5wUr5ffVUlN6PbJYldsnVbowZuIViNCHyTM,335543
217
223
  omdev/scripts/interp.py,sha256=HPJQlV2PEdVCcDto3MI9SWS-LmngPGJ05jbGXMCsx3g,151611
218
224
  omdev/scripts/pyproject.py,sha256=dcWEUuHsE8_zIJ26s8MMlPlFgJzlE49kVhh2sQLDlKQ,260661
219
225
  omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
220
226
  omdev/scripts/tmpexec.py,sha256=WTYcf56Tj2qjYV14AWmV8SfT0u6Y8eIU6cKgQRvEK3c,1442
221
227
  omdev/tokens/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
222
- omdev/tokens/all.py,sha256=4t_3NnU-ph_ehyC3XLB_J_lIda7KD1Xvc7rKexOVBAo,686
228
+ omdev/tokens/all.py,sha256=YT7d-jrEssJBCTC8ljVcQT7BPrCW_r1JCmE8OFzbgFg,709
223
229
  omdev/tokens/tokenizert.py,sha256=-KM5ajybESWCMtqxSm_5ktyu8s-p1MdTgYA4ungyrkM,7840
224
- omdev/tokens/utils.py,sha256=DJA2jsDzrtQxnO0bdkUk1-GmenX4ECugdhl1xOBe7QI,1448
230
+ omdev/tokens/utils.py,sha256=vF2c8vHwe1zfSXNeU0q1CaA_66oZl0YdkqBKzNhFsAM,1758
225
231
  omdev/tools/__init__.py,sha256=iVJAOQ0viGTQOm0DLX4uZLro-9jOioYJGLg9s0kDx1A,78
226
232
  omdev/tools/cloc.py,sha256=jYlMHBae9oGKN4VKeBGuqjiQNcM2be7KIoTF0oNwx_I,5205
227
233
  omdev/tools/diff.py,sha256=_ThKWXFE-bG5SPDYNs8GqstEUPzL_PTWb03nJN0laLg,515
228
234
  omdev/tools/doc.py,sha256=mUV7yNJ6EN-E0TAWad3rGwGtw2w5R9b0zP-JwkSNIyU,2570
229
235
  omdev/tools/docker.py,sha256=Ekn8q0vo5KZPnz5Fz2P_NDeZkN3c2bdnMvh0SOLWNps,7184
230
- omdev/tools/importscan.py,sha256=nhJIhtjDY6eFVlReP7fegvv6L5ZjN-Z2VeyhsBonev4,4639
231
236
  omdev/tools/intellij.py,sha256=yy6Uw2hcYyEWLZESAupKvd3U6omirYMbjnbw7UllhV4,5834
232
237
  omdev/tools/linehisto.py,sha256=0ZNm34EuiZBE9Q2YC6KNLNNydNT8QPSOwvYzXiU9S2Q,8881
233
238
  omdev/tools/mkenv.py,sha256=G2tu5bmiyKFyZuqtUoM7Z-6AI6CI86F2LwoIozoWOvo,2300
234
- omdev/tools/mkrelimp.py,sha256=p_35JBGDec0gvD6AHQ279iHcjU39E7Si6LcEDCMrJpo,4042
235
239
  omdev/tools/notebook.py,sha256=q1YMGwM1skHv-dPbtT_cM7UOGFNiMEAxjr6rr6rbobk,3494
236
240
  omdev/tools/pip.py,sha256=eBD41hp-V3thGfhUBM3Erxl4CSG-5LG6Szo1sA76P2k,3459
237
241
  omdev/tools/prof.py,sha256=hQakAsViJD4gLJpLLZnTkOqmTDAwM48Nx5q-O_aFlYM,1467
@@ -254,9 +258,9 @@ omdev/tools/json/rendering.py,sha256=tMcjOW5edfozcMSTxxvF7WVTsbYLoe9bCKFh50qyaGw
254
258
  omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
255
259
  omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
256
260
  omdev/tools/pawk/pawk.py,sha256=zsEkfQX0jF5bn712uqPAyBSdJt2dno1LH2oeSMNfXQI,11424
257
- omdev-0.0.0.dev282.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
258
- omdev-0.0.0.dev282.dist-info/METADATA,sha256=r2Lfs-wg3GiySKVrdY6UMsqfmklwBh7KSNswxGHChU0,1588
259
- omdev-0.0.0.dev282.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
260
- omdev-0.0.0.dev282.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
261
- omdev-0.0.0.dev282.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
262
- omdev-0.0.0.dev282.dist-info/RECORD,,
261
+ omdev-0.0.0.dev284.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
262
+ omdev-0.0.0.dev284.dist-info/METADATA,sha256=PuIpBv6sIl65j4pZDae-UaHB5zJvArbZ4hnvjGEC-o8,1478
263
+ omdev-0.0.0.dev284.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
264
+ omdev-0.0.0.dev284.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
265
+ omdev-0.0.0.dev284.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
266
+ omdev-0.0.0.dev284.dist-info/RECORD,,
File without changes
File without changes
File without changes
File without changes