omdev 0.0.0.dev500__py3-none-any.whl → 0.0.0.dev506__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/.omlish-manifests.json +1 -1
- omdev/__about__.py +2 -2
- omdev/markdown/incparse.py +392 -0
- omdev/pyproject/cli.py +1 -35
- omdev/pyproject/configs.py +1 -1
- omdev/pyproject/tools/pyversions.py +47 -0
- omdev/pyproject/versions.py +40 -0
- omdev/scripts/ci.py +8 -1
- omdev/scripts/interp.py +8 -1
- omdev/scripts/lib/inject.py +8 -1
- omdev/scripts/pyproject.py +66 -39
- omdev/tools/sqlrepl.py +189 -78
- omdev/tui/rich/markdown2.py +219 -18
- {omdev-0.0.0.dev500.dist-info → omdev-0.0.0.dev506.dist-info}/METADATA +6 -6
- {omdev-0.0.0.dev500.dist-info → omdev-0.0.0.dev506.dist-info}/RECORD +19 -17
- {omdev-0.0.0.dev500.dist-info → omdev-0.0.0.dev506.dist-info}/WHEEL +0 -0
- {omdev-0.0.0.dev500.dist-info → omdev-0.0.0.dev506.dist-info}/entry_points.txt +0 -0
- {omdev-0.0.0.dev500.dist-info → omdev-0.0.0.dev506.dist-info}/licenses/LICENSE +0 -0
- {omdev-0.0.0.dev500.dist-info → omdev-0.0.0.dev506.dist-info}/top_level.txt +0 -0
omdev/tui/rich/markdown2.py
CHANGED
|
@@ -130,6 +130,8 @@ class NaiveMarkdownLiveStream(MarkdownLiveStream):
|
|
|
130
130
|
|
|
131
131
|
|
|
132
132
|
class IncrementalMarkdownLiveStream(MarkdownLiveStream):
|
|
133
|
+
# @omlish-llm-author "gemini-3-pro"
|
|
134
|
+
|
|
133
135
|
def __init__(
|
|
134
136
|
self,
|
|
135
137
|
*,
|
|
@@ -147,40 +149,239 @@ class IncrementalMarkdownLiveStream(MarkdownLiveStream):
|
|
|
147
149
|
ip_out = self._inc_parser.feed2(s)
|
|
148
150
|
|
|
149
151
|
if ip_out.new_stable:
|
|
150
|
-
#
|
|
151
|
-
# srs = getattr(self, '_srs')
|
|
152
|
-
# except AttributeError:
|
|
153
|
-
# setattr(self, '_srs', srs := [])
|
|
154
|
-
# from ...markdown.tokens import token_repr, flatten_tokens
|
|
155
|
-
# srs.extend(map(token_repr, flatten_tokens(ip_out.new_stable)))
|
|
156
|
-
|
|
152
|
+
# Render the stable lines
|
|
157
153
|
stable_lines = self._console_render(markdown_from_tokens(ip_out.new_stable))
|
|
158
|
-
|
|
159
|
-
|
|
154
|
+
|
|
155
|
+
# Overlap Detection
|
|
156
|
+
already_printed_count = min(self._lines_printed_to_scrollback, len(stable_lines))
|
|
157
|
+
|
|
158
|
+
if already_printed_count < len(stable_lines):
|
|
159
|
+
new_stable_lines = stable_lines[already_printed_count:]
|
|
160
|
+
# Ensure no_wrap=True is used here to match strict line counting
|
|
161
|
+
self._live.console.print(rich.text.Text.from_ansi('\n'.join(new_stable_lines), no_wrap=True))
|
|
162
|
+
|
|
163
|
+
# Adjust counter
|
|
160
164
|
self._lines_printed_to_scrollback = max(0, self._lines_printed_to_scrollback - len(stable_lines))
|
|
161
165
|
|
|
162
166
|
unstable_lines = self._console_render(markdown_from_tokens(ip_out.unstable))
|
|
163
167
|
|
|
164
|
-
# Calculate how many lines fit in the live window
|
|
165
168
|
available_height = self._console.height - 2
|
|
166
|
-
|
|
167
|
-
# Determine which lines overflow and need to be printed to scrollback
|
|
168
169
|
total_lines = len(unstable_lines)
|
|
170
|
+
|
|
169
171
|
if total_lines > available_height:
|
|
170
|
-
#
|
|
171
|
-
|
|
172
|
+
# We calculate lines allowed in scrollback, but we subtract 1. This ensures the very bottom line (often a
|
|
173
|
+
# transient border) stays in the Live window and is not committed to history until more content pushes it
|
|
174
|
+
# up.
|
|
175
|
+
lines_for_scrollback = max(0, total_lines - available_height - 1)
|
|
172
176
|
|
|
173
|
-
# Print any new lines that weren't already printed
|
|
174
177
|
if lines_for_scrollback > self._lines_printed_to_scrollback:
|
|
175
178
|
new_lines_to_print = unstable_lines[self._lines_printed_to_scrollback:lines_for_scrollback]
|
|
176
|
-
|
|
179
|
+
|
|
180
|
+
# Ensure no_wrap=True is used here to prevent auto-wrap from creating "phantom" lines that desync our
|
|
181
|
+
# line counts.
|
|
182
|
+
self._live.console.print(rich.text.Text.from_ansi('\n'.join(new_lines_to_print), no_wrap=True))
|
|
183
|
+
|
|
177
184
|
self._lines_printed_to_scrollback = lines_for_scrollback
|
|
178
185
|
|
|
179
|
-
# Show only the bottom portion in the live window
|
|
180
186
|
visible_lines = unstable_lines[-available_height:]
|
|
181
187
|
|
|
182
188
|
else:
|
|
183
189
|
visible_lines = unstable_lines
|
|
184
190
|
|
|
185
|
-
# Update the live display
|
|
186
191
|
self._live.update(rich.text.Text.from_ansi('\n'.join(visible_lines)))
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
class SteppedIncrementalMarkdownLiveStream(MarkdownLiveStream):
|
|
195
|
+
# @omlish-llm-author "gemini-3-pro"
|
|
196
|
+
|
|
197
|
+
def __init__(
|
|
198
|
+
self,
|
|
199
|
+
*,
|
|
200
|
+
parser: ta.Optional['md.MarkdownIt'] = None,
|
|
201
|
+
console: ta.Optional['rich.console.Console'] = None,
|
|
202
|
+
scroll_step: int | None = None,
|
|
203
|
+
) -> None:
|
|
204
|
+
super().__init__(
|
|
205
|
+
parser=parser,
|
|
206
|
+
console=console,
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
self._inc_parser = IncrementalMarkdownParser(parser=self._parser)
|
|
210
|
+
self._scroll_step = scroll_step
|
|
211
|
+
|
|
212
|
+
def feed(self, s: str) -> None:
|
|
213
|
+
ip_out = self._inc_parser.feed2(s)
|
|
214
|
+
|
|
215
|
+
##
|
|
216
|
+
# Handle stable content
|
|
217
|
+
|
|
218
|
+
if ip_out.new_stable:
|
|
219
|
+
stable_lines = self._console_render(markdown_from_tokens(ip_out.new_stable))
|
|
220
|
+
|
|
221
|
+
# Overlap Detection: Determine how many lines of this now-stable block were already pushed to scrollback
|
|
222
|
+
# while they were in the "unstable" phase.
|
|
223
|
+
already_printed_count = min(self._lines_printed_to_scrollback, len(stable_lines))
|
|
224
|
+
|
|
225
|
+
if already_printed_count < len(stable_lines):
|
|
226
|
+
new_stable_lines = stable_lines[already_printed_count:]
|
|
227
|
+
# Force no_wrap=True to ensure 1:1 line counting
|
|
228
|
+
self._live.console.print(rich.text.Text.from_ansi('\n'.join(new_stable_lines), no_wrap=True))
|
|
229
|
+
|
|
230
|
+
# Adjust the global scrollback counter. We effectively shift the "start" of the unstable window down by the
|
|
231
|
+
# size of the stable block.
|
|
232
|
+
self._lines_printed_to_scrollback = max(0, self._lines_printed_to_scrollback - len(stable_lines))
|
|
233
|
+
|
|
234
|
+
##
|
|
235
|
+
# Handle unstable content
|
|
236
|
+
|
|
237
|
+
unstable_lines = self._console_render(markdown_from_tokens(ip_out.unstable))
|
|
238
|
+
total_lines = len(unstable_lines)
|
|
239
|
+
available_height = self._console.height - 2
|
|
240
|
+
|
|
241
|
+
# Calculate the absolute minimum lines that MUST be in scrollback to fit the current content. We subtract 1 to
|
|
242
|
+
# hold back the bottom-most line (e.g., table borders) from history until it is pushed up by further content.
|
|
243
|
+
min_needed_scrollback = max(0, total_lines - available_height - 1)
|
|
244
|
+
|
|
245
|
+
if min_needed_scrollback > self._lines_printed_to_scrollback:
|
|
246
|
+
# We need to scroll. Calculate how much.
|
|
247
|
+
diff = min_needed_scrollback - self._lines_printed_to_scrollback
|
|
248
|
+
|
|
249
|
+
# Use the step size if configured, otherwise just satisfy the immediate difference. If the difference is
|
|
250
|
+
# larger than the step (e.g., big paste), we jump the full difference.
|
|
251
|
+
step = self._scroll_step if self._scroll_step is not None else 1
|
|
252
|
+
jump_size = max(diff, step)
|
|
253
|
+
|
|
254
|
+
# Calculate the new target scrollback index. We must clamp this to 'total_lines - 1' to ensure we never push
|
|
255
|
+
# the strictly held-back last line into history.
|
|
256
|
+
max_pushable_index = max(0, total_lines - 1)
|
|
257
|
+
target_scrollback = min(self._lines_printed_to_scrollback + jump_size, max_pushable_index)
|
|
258
|
+
|
|
259
|
+
if target_scrollback > self._lines_printed_to_scrollback:
|
|
260
|
+
new_lines_to_print = unstable_lines[self._lines_printed_to_scrollback:target_scrollback]
|
|
261
|
+
self._live.console.print(rich.text.Text.from_ansi('\n'.join(new_lines_to_print), no_wrap=True))
|
|
262
|
+
self._lines_printed_to_scrollback = target_scrollback
|
|
263
|
+
|
|
264
|
+
# Update the live display. We slice from '_lines_printed_to_scrollback' to the end. If we just performed a large
|
|
265
|
+
# 'jump', this will naturally result in fewer lines than 'available_height', creating the desired visual "void"
|
|
266
|
+
# at the bottom.
|
|
267
|
+
visible_lines = unstable_lines[self._lines_printed_to_scrollback:]
|
|
268
|
+
self._live.update(rich.text.Text.from_ansi('\n'.join(visible_lines)))
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
##
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
class ClaudeIncrementalMarkdownLiveStream(MarkdownLiveStream):
|
|
275
|
+
# @omlish-llm-author "claude-opus-4-5"
|
|
276
|
+
|
|
277
|
+
def __init__(
|
|
278
|
+
self,
|
|
279
|
+
*,
|
|
280
|
+
parser: ta.Optional['md.MarkdownIt'] = None,
|
|
281
|
+
console: ta.Optional['rich.console.Console'] = None,
|
|
282
|
+
) -> None:
|
|
283
|
+
super().__init__(
|
|
284
|
+
parser=parser,
|
|
285
|
+
console=console,
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
from ...markdown.incparse import ClaudeIncrementalMarkdownParser # noqa
|
|
289
|
+
self._inc_parser = ClaudeIncrementalMarkdownParser(parser=self._parser)
|
|
290
|
+
self._last_unstable_line_count = 0
|
|
291
|
+
|
|
292
|
+
def _enter_contexts(self) -> None:
|
|
293
|
+
super()._enter_contexts()
|
|
294
|
+
|
|
295
|
+
# Override to configure Live with explicit vertical overflow handling
|
|
296
|
+
self._live = self._enter_context(rich.live.Live(
|
|
297
|
+
rich.text.Text(''),
|
|
298
|
+
console=self._console,
|
|
299
|
+
refresh_per_second=10,
|
|
300
|
+
vertical_overflow='crop',
|
|
301
|
+
))
|
|
302
|
+
|
|
303
|
+
def feed(self, s: str) -> None:
|
|
304
|
+
ip_out = self._inc_parser.feed2(s)
|
|
305
|
+
|
|
306
|
+
if ip_out.new_stable:
|
|
307
|
+
# Stop live display to commit stable content cleanly
|
|
308
|
+
self._live.stop()
|
|
309
|
+
|
|
310
|
+
# Render and print stable content to true scrollback
|
|
311
|
+
stable_lines = self._console_render(markdown_from_tokens(ip_out.new_stable))
|
|
312
|
+
for line in stable_lines:
|
|
313
|
+
self._console.print(rich.text.Text.from_ansi(line), highlight=False)
|
|
314
|
+
|
|
315
|
+
# Reset tracking state since we're starting fresh with new unstable content
|
|
316
|
+
self._last_unstable_line_count = 0
|
|
317
|
+
self._lines_printed_to_scrollback = 0
|
|
318
|
+
|
|
319
|
+
# Restart live display
|
|
320
|
+
self._live.start()
|
|
321
|
+
|
|
322
|
+
# Render current unstable content
|
|
323
|
+
unstable_lines = self._console_render(markdown_from_tokens(ip_out.unstable))
|
|
324
|
+
current_line_count = len(unstable_lines)
|
|
325
|
+
|
|
326
|
+
# Calculate available display height
|
|
327
|
+
available_height = self._console.height - 2
|
|
328
|
+
|
|
329
|
+
# Handle content that exceeds available height. Key insight: never commit unstable content to scrollback since
|
|
330
|
+
# it may change.
|
|
331
|
+
if current_line_count > available_height:
|
|
332
|
+
# Only show the bottom portion that fits
|
|
333
|
+
visible_lines = unstable_lines[-available_height:]
|
|
334
|
+
else:
|
|
335
|
+
visible_lines = unstable_lines
|
|
336
|
+
|
|
337
|
+
# Handle shrinking content: if we had more lines before and now have fewer, we need to ensure the live region is
|
|
338
|
+
# properly cleared.
|
|
339
|
+
if current_line_count < self._last_unstable_line_count:
|
|
340
|
+
# Pad with empty lines to prevent artifacts from previous longer content. This ensures the live region fully
|
|
341
|
+
# overwrites its previous state.
|
|
342
|
+
lines_to_clear = min(
|
|
343
|
+
self._last_unstable_line_count - current_line_count,
|
|
344
|
+
available_height - len(visible_lines),
|
|
345
|
+
)
|
|
346
|
+
if lines_to_clear > 0:
|
|
347
|
+
visible_lines = visible_lines + [''] * lines_to_clear
|
|
348
|
+
|
|
349
|
+
self._last_unstable_line_count = current_line_count
|
|
350
|
+
|
|
351
|
+
# Update the live display
|
|
352
|
+
display_text = '\n'.join(visible_lines)
|
|
353
|
+
self._live.update(rich.text.Text.from_ansi(display_text))
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
class GptIncrementalMarkdownLiveStream(MarkdownLiveStream):
|
|
357
|
+
# @omlish-llm-author "gpt-5.2"
|
|
358
|
+
|
|
359
|
+
def __init__(
|
|
360
|
+
self,
|
|
361
|
+
*,
|
|
362
|
+
parser: ta.Optional['md.MarkdownIt'] = None,
|
|
363
|
+
console: ta.Optional['rich.console.Console'] = None,
|
|
364
|
+
) -> None:
|
|
365
|
+
super().__init__(
|
|
366
|
+
parser=parser,
|
|
367
|
+
console=console,
|
|
368
|
+
)
|
|
369
|
+
|
|
370
|
+
from ...markdown.incparse import GptIncrementalMarkdownParser # noqa
|
|
371
|
+
self._inc_parser = GptIncrementalMarkdownParser(parser=self._parser)
|
|
372
|
+
|
|
373
|
+
def feed(self, s: str) -> None:
|
|
374
|
+
ip_out = self._inc_parser.feed2(s)
|
|
375
|
+
|
|
376
|
+
# Permanently commit only content the parser marked as stable. This avoids *all* "scrollback delta accounting"
|
|
377
|
+
# and the associated duplication/gap bugs when the rendered tail shrinks / reflows / reinterprets (streaming
|
|
378
|
+
# markdown is non-monotonic).
|
|
379
|
+
if ip_out.new_stable:
|
|
380
|
+
# Print stable renderables directly through Rich (avoid ANSI round-tripping / splitlines). Use end="" so we
|
|
381
|
+
# don't inject extra blank lines beyond what the markdown renderable produces.
|
|
382
|
+
self._live.console.print(markdown_from_tokens(ip_out.new_stable), end='')
|
|
383
|
+
|
|
384
|
+
# Show the remaining (unstable) tail in the live region. We intentionally do *not* try to "spill overflow of
|
|
385
|
+
# unstable to scrollback", since those lines are not provably stable and may retroactively change; printing them
|
|
386
|
+
# would violate correctness.
|
|
387
|
+
self._live.update(markdown_from_tokens(ip_out.unstable))
|
|
@@ -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,9 +14,9 @@ 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"
|
|
@@ -27,11 +27,11 @@ 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~=7.
|
|
30
|
+
Requires-Dist: textual~=7.3; extra == "all"
|
|
31
31
|
Requires-Dist: textual-dev~=1.8; extra == "all"
|
|
32
32
|
Requires-Dist: textual-speedups~=0.2; extra == "all"
|
|
33
33
|
Provides-Extra: black
|
|
34
|
-
Requires-Dist: black~=
|
|
34
|
+
Requires-Dist: black~=26.1; extra == "black"
|
|
35
35
|
Provides-Extra: c
|
|
36
36
|
Requires-Dist: pycparser~=2.23; extra == "c"
|
|
37
37
|
Requires-Dist: pcpp~=1.30; extra == "c"
|
|
@@ -48,7 +48,7 @@ Provides-Extra: qr
|
|
|
48
48
|
Requires-Dist: segno~=1.6; extra == "qr"
|
|
49
49
|
Provides-Extra: tui
|
|
50
50
|
Requires-Dist: rich~=14.2; extra == "tui"
|
|
51
|
-
Requires-Dist: textual~=7.
|
|
51
|
+
Requires-Dist: textual~=7.3; extra == "tui"
|
|
52
52
|
Requires-Dist: textual-dev~=1.8; extra == "tui"
|
|
53
53
|
Requires-Dist: textual-speedups~=0.2; extra == "tui"
|
|
54
54
|
Dynamic: license-file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
omdev/.omlish-manifests.json,sha256=
|
|
1
|
+
omdev/.omlish-manifests.json,sha256=5Iang5DNd0hsSQQnKms9H4OA_xphlpE1SOWk6NNePOE,11671
|
|
2
2
|
omdev/README.md,sha256=IxhRiW6wAsK4XKR9lmOlpkTbX8vcNcQwqal8HelK0yU,3326
|
|
3
|
-
omdev/__about__.py,sha256=
|
|
3
|
+
omdev/__about__.py,sha256=VvUiwWTVeZ3cQDNaFD-3L3juUvkoLH-o7WR4DfXGexE,1321
|
|
4
4
|
omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
omdev/cmake.py,sha256=gu49t10_syXh_TUJs4POsxeFs8we8Y3XTOOPgIXmGvg,4608
|
|
6
6
|
omdev/imgur.py,sha256=oqei705LhSnLWQTOMHMHwRecRXcpSEP90Sg4SVINPQ0,3133
|
|
@@ -214,7 +214,7 @@ omdev/manifests/building.py,sha256=M3IHQljk0ca0J32-xNTOcFVvW07s_7fHQ7sGsCJeurU,1
|
|
|
214
214
|
omdev/manifests/dumping.py,sha256=WUIZDvOyO25AhnCPn5Nxj2OkMcZa1LRjGuCnpyx8AL8,4506
|
|
215
215
|
omdev/manifests/main.py,sha256=Gch-ZmvzXyfQRZp_h56RL_hn1T_qG5ZhGCJYp57Hzro,2179
|
|
216
216
|
omdev/markdown/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
217
|
-
omdev/markdown/incparse.py,sha256=
|
|
217
|
+
omdev/markdown/incparse.py,sha256=SUDYAGS0BF2wADlLyIvqL_1tCNF4KOKeqQqzOKxFlCA,17952
|
|
218
218
|
omdev/markdown/tokens.py,sha256=YwFUhxaun4_BiKYXrrX3CBka4ruqdh8Ogl7G8hGvlLA,1483
|
|
219
219
|
omdev/mypy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
220
220
|
omdev/mypy/debug.py,sha256=VskRcr9trNhyPG2ErZZ7IX_v1DLKTLBOjp34o-fEWaM,3294
|
|
@@ -287,26 +287,28 @@ omdev/py/tools/mkrelimp.py,sha256=kQAADYW1f1Y2WbIuqWOFNWJl96oT7nqW38XPCkLIyjQ,40
|
|
|
287
287
|
omdev/py/tools/pipdepup.py,sha256=3s3rTlj0KcVriEw_x3wLuoqQnRjdPCydDWW7fhliUl4,20082
|
|
288
288
|
omdev/pyproject/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
289
289
|
omdev/pyproject/__main__.py,sha256=gn3Rl1aYPYdiTtEqa9ifi0t-e4ZwPY0vhJ4UXvYdJDY,165
|
|
290
|
-
omdev/pyproject/cli.py,sha256=
|
|
291
|
-
omdev/pyproject/configs.py,sha256=
|
|
290
|
+
omdev/pyproject/cli.py,sha256=erEo9VT7c-Fwtq0lJbb_IkWBPqBAAtiui8Xna93yk3Y,7874
|
|
291
|
+
omdev/pyproject/configs.py,sha256=jrHIRHW5pLU5FI8Yz7TJJfFJ2UQE20fEshwT0qDcCws,2825
|
|
292
292
|
omdev/pyproject/inject.py,sha256=Von8_8ofkITLoCEwDHNRAwY0AEdFQg7r2ILS8kcTMuY,325
|
|
293
293
|
omdev/pyproject/pkg.py,sha256=BrC8DQFIQ1ZKFGoNAJ2wdK8PB8N_fpCVaKFKDh82w4s,19460
|
|
294
294
|
omdev/pyproject/reqs.py,sha256=ZMx-UFQXiSkV0gVpO81zJPa-djvvBrvmY-1kFzxioNk,3369
|
|
295
295
|
omdev/pyproject/venvs.py,sha256=PNgfVrGlw9NFKJgUyzyWH5H5nAIzUDPTHRVUNBM0bKs,2187
|
|
296
|
+
omdev/pyproject/versions.py,sha256=em85cHKpp9dHL-k4CyjCvM6_ZEJbaQd1sN6RHfbjlPw,1016
|
|
296
297
|
omdev/pyproject/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
297
298
|
omdev/pyproject/resources/docker-dev.sh,sha256=DHkz5D18jok_oDolfg2mqrvGRWFoCe9GQo04dR1czcc,838
|
|
298
299
|
omdev/pyproject/resources/python.sh,sha256=rFaN4SiJ9hdLDXXsDTwugI6zsw6EPkgYMmtacZeTbvw,749
|
|
299
300
|
omdev/pyproject/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
300
301
|
omdev/pyproject/tools/aboutdeps.py,sha256=XmvSKsn3kdY0K2Llh-jhNskm4sK46Y8fWnUlPXBrI34,1592
|
|
302
|
+
omdev/pyproject/tools/pyversions.py,sha256=CV6qV5nlrt1or7OQVf3bYIKLfyEdjmgedQVVlr-DroM,1047
|
|
301
303
|
omdev/rs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
302
304
|
omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
|
|
303
|
-
omdev/scripts/ci.py,sha256=
|
|
304
|
-
omdev/scripts/interp.py,sha256=
|
|
305
|
-
omdev/scripts/pyproject.py,sha256=
|
|
305
|
+
omdev/scripts/ci.py,sha256=nvRAD4zoEhtHuyMcuEjpD0u8VQ464w_cZ268AHRFV6k,448422
|
|
306
|
+
omdev/scripts/interp.py,sha256=FWgA_JAXOZkfOf6-y9GZdrZRl6iAtT6Q5ga3-cAdAEA,174980
|
|
307
|
+
omdev/scripts/pyproject.py,sha256=UHkDHGOlAuBC3BWLD3JWnBKPgvrrTbQ1A28YdQd4KLg,371851
|
|
306
308
|
omdev/scripts/slowcat.py,sha256=PwdT-pg62imEEb6kcOozl9_YUi-4KopvjvzWT1OmGb0,2717
|
|
307
309
|
omdev/scripts/tmpexec.py,sha256=t0nErDRALjTk7H0X8ADjZUIDFjlPNzOOokmjCjBHdzs,1431
|
|
308
310
|
omdev/scripts/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
309
|
-
omdev/scripts/lib/inject.py,sha256=
|
|
311
|
+
omdev/scripts/lib/inject.py,sha256=TSwiXPkLll9wdltttHjaFyrdwBA5goyDKXZDkK_jk-s,55338
|
|
310
312
|
omdev/scripts/lib/logs.py,sha256=NHUFy2I4--mm1S2XefH0V9w4HDKCqxHtE1gCVT5WP2w,67003
|
|
311
313
|
omdev/scripts/lib/marshal.py,sha256=m6lZYAebgyiXz-yO9NQ1doo2Ths2dvQJH4Gu79hA7dg,48289
|
|
312
314
|
omdev/tools/__init__.py,sha256=iVJAOQ0viGTQOm0DLX4uZLro-9jOioYJGLg9s0kDx1A,78
|
|
@@ -322,7 +324,7 @@ omdev/tools/prof.py,sha256=-nei6BgAQpaSfVi5cqeRXPc9zIAW-DgMJxnKoD520Zg,3560
|
|
|
322
324
|
omdev/tools/qr.py,sha256=1p4tMJmImDa4YTQQNPwQPkM8FnhGRYj6J79BJR-MNHo,1742
|
|
323
325
|
omdev/tools/shadow.py,sha256=4E2ilxa16liIvQxvgU37ITkOMrP6ufShRQfeW7wwtRc,1697
|
|
324
326
|
omdev/tools/shell.py,sha256=5hF_8DCtB3XrzJSfmQDsr7X3Fi9KRV4M70q9qp0KREA,2341
|
|
325
|
-
omdev/tools/sqlrepl.py,sha256=
|
|
327
|
+
omdev/tools/sqlrepl.py,sha256=b0YzE1Z5Zox97J-aFpolqYCI-sXX2i6rRf-XD6NJHRc,8131
|
|
326
328
|
omdev/tools/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
327
329
|
omdev/tools/git/__main__.py,sha256=gI87SBUgTkKUcUM-RtZWnei-UUDDqzbr5aPztb-gvbE,168
|
|
328
330
|
omdev/tools/git/cli.py,sha256=P2uzPavBmbklgc_it7XB1d9TrmSo29g-A1MzUePkoOo,17697
|
|
@@ -363,7 +365,7 @@ omdev/tui/apps/markdown/__main__.py,sha256=Xy-G2-8Ymx8QMBbRzA4LoiAMZqvtC944mMjFE
|
|
|
363
365
|
omdev/tui/apps/markdown/cli.py,sha256=K1vH7f3ZqLv4xTPluhJBEZH8nx8n42_vXIALEV07Q50,469
|
|
364
366
|
omdev/tui/rich/__init__.py,sha256=2WPxYFGWqwxxLdFBqWpU2nS2DmT7LLFUWXHOrqbqjnQ,1331
|
|
365
367
|
omdev/tui/rich/console2.py,sha256=BYYLbbD65If9TvfPI6qUcMQKUWJbuWwykEzPplvkf6A,342
|
|
366
|
-
omdev/tui/rich/markdown2.py,sha256=
|
|
368
|
+
omdev/tui/rich/markdown2.py,sha256=c6A9a9YAtff4uAZzl3_1JiBVpepT5iGqf8tfSdHY1-c,14899
|
|
367
369
|
omdev/tui/textual/__init__.py,sha256=U1TSKwGgLU_P--9q9iNylFxkNbOef6ZAcGlU9elPmfo,11722
|
|
368
370
|
omdev/tui/textual/app2.py,sha256=j_Naee14VqvJo3ujxiafva6ILkhHBYYYet066vM5WdY,294
|
|
369
371
|
omdev/tui/textual/devtools.py,sha256=iGs4zQo-o2ncspRk4IYyuvYKGC2ZVkYyPy8ugy7wvf4,5137
|
|
@@ -378,9 +380,9 @@ omdev/tui/textual/autocomplete/widget.py,sha256=1UgWqDT0d9wD6w7MNaZBjgj0o9FohYXy
|
|
|
378
380
|
omdev/tui/textual/debug/__init__.py,sha256=RW9-Toj5_JnXBJCnRiXpXLpRA__MxG01xW1h_iNuUTY,189
|
|
379
381
|
omdev/tui/textual/debug/dominfo.py,sha256=1iH1xbZY-zUoIyfmdvSzVNjGqeeOnBcjeDI2V1Xn3rg,4401
|
|
380
382
|
omdev/tui/textual/debug/screen.py,sha256=w4cbRJWemcu5jBomGDmVtgtjiaWOS1Wkw1Mc6mu-5Zc,594
|
|
381
|
-
omdev-0.0.0.
|
|
382
|
-
omdev-0.0.0.
|
|
383
|
-
omdev-0.0.0.
|
|
384
|
-
omdev-0.0.0.
|
|
385
|
-
omdev-0.0.0.
|
|
386
|
-
omdev-0.0.0.
|
|
383
|
+
omdev-0.0.0.dev506.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
|
384
|
+
omdev-0.0.0.dev506.dist-info/METADATA,sha256=-JBWJ65uIhhMinlsBPjrg_JJrobPzIkX4v5epiaEjig,5372
|
|
385
|
+
omdev-0.0.0.dev506.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
386
|
+
omdev-0.0.0.dev506.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
|
|
387
|
+
omdev-0.0.0.dev506.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
|
|
388
|
+
omdev-0.0.0.dev506.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|