omdev 0.0.0.dev486__py3-none-any.whl → 0.0.0.dev500__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/README.md +51 -0
- omdev/__about__.py +4 -2
- omdev/ci/cli.py +1 -1
- omdev/cli/clicli.py +37 -7
- omdev/dataclasses/cli.py +1 -1
- omdev/interp/cli.py +1 -1
- omdev/interp/types.py +3 -2
- omdev/interp/uv/provider.py +36 -0
- omdev/manifests/main.py +1 -1
- omdev/packaging/revisions.py +1 -1
- omdev/py/tools/pipdepup.py +150 -93
- omdev/pyproject/cli.py +1 -1
- omdev/pyproject/pkg.py +1 -1
- omdev/pyproject/reqs.py +8 -7
- omdev/pyproject/tools/aboutdeps.py +5 -0
- omdev/scripts/ci.py +361 -25
- omdev/scripts/interp.py +43 -8
- omdev/scripts/lib/logs.py +117 -21
- omdev/scripts/pyproject.py +415 -39
- omdev/tools/git/cli.py +43 -13
- omdev/tools/json/formats.py +2 -0
- omdev/tools/jsonview/cli.py +19 -61
- omdev/tools/jsonview/resources/jsonview.html.j2 +43 -0
- omdev/tools/pawk/README.md +195 -0
- omdev/tui/apps/edit/main.py +5 -1
- omdev/tui/apps/irc/app.py +28 -20
- omdev/tui/apps/irc/commands.py +1 -1
- omdev/tui/rich/__init__.py +12 -0
- omdev/tui/textual/__init__.py +41 -2
- omdev/tui/textual/app2.py +6 -1
- omdev/tui/textual/debug/__init__.py +10 -0
- omdev/tui/textual/debug/dominfo.py +151 -0
- omdev/tui/textual/debug/screen.py +24 -0
- omdev/tui/textual/devtools.py +187 -0
- omdev/tui/textual/logging2.py +20 -0
- omdev/tui/textual/types.py +45 -0
- {omdev-0.0.0.dev486.dist-info → omdev-0.0.0.dev500.dist-info}/METADATA +10 -6
- {omdev-0.0.0.dev486.dist-info → omdev-0.0.0.dev500.dist-info}/RECORD +43 -34
- {omdev-0.0.0.dev486.dist-info → omdev-0.0.0.dev500.dist-info}/WHEEL +0 -0
- {omdev-0.0.0.dev486.dist-info → omdev-0.0.0.dev500.dist-info}/entry_points.txt +0 -0
- {omdev-0.0.0.dev486.dist-info → omdev-0.0.0.dev500.dist-info}/licenses/LICENSE +0 -0
- {omdev-0.0.0.dev486.dist-info → omdev-0.0.0.dev500.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"""
|
|
2
|
+
TODO:
|
|
3
|
+
- walk textual.styles.RulesMap lol
|
|
4
|
+
"""
|
|
5
|
+
import typing as ta
|
|
6
|
+
|
|
7
|
+
from textual.dom import DOMNode
|
|
8
|
+
from textual.widget import Widget
|
|
9
|
+
|
|
10
|
+
from omlish import dataclasses as dc
|
|
11
|
+
|
|
12
|
+
from ..types import trbl_to_dict
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
##
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dc.dataclass()
|
|
19
|
+
class DomNodeInfo:
|
|
20
|
+
"""Representation of a Textual DOM node for debugging."""
|
|
21
|
+
|
|
22
|
+
# Identity
|
|
23
|
+
oid: int
|
|
24
|
+
oidx: str
|
|
25
|
+
type: str
|
|
26
|
+
dom_id: str | None
|
|
27
|
+
|
|
28
|
+
# CSS / Styling
|
|
29
|
+
classes: list[str]
|
|
30
|
+
pseudo_classes: list[str]
|
|
31
|
+
# 'styles' contains the computed values relevant to layout (margin, padding, etc)
|
|
32
|
+
styles: dict[str, ta.Any]
|
|
33
|
+
|
|
34
|
+
# Geometry
|
|
35
|
+
# Region: The actual screen space allocated (x, y, w, h)
|
|
36
|
+
region: dict[str, int] | None
|
|
37
|
+
# Virtual Size: The size the widget 'wants' to be (scrollable area)
|
|
38
|
+
virtual_size: dict[str, int] | None
|
|
39
|
+
# Content Size: The size of the content inside the padding
|
|
40
|
+
content_size: dict[str, int] | None
|
|
41
|
+
|
|
42
|
+
# Hierarchy
|
|
43
|
+
children: list['DomNodeInfo'] = dc.field(default_factory=list)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def inspect_dom_node(node: DOMNode) -> DomNodeInfo:
|
|
47
|
+
"""
|
|
48
|
+
Recursively builds a tree of DomNodeInfo objects from a Textual DOM node.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
node: The root node to inspect (usually app.screen or a specific widget).
|
|
52
|
+
|
|
53
|
+
Returns:
|
|
54
|
+
DomNodeInfo: The root of the inspected tree.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
# 1. Identity
|
|
58
|
+
|
|
59
|
+
oid = id(node)
|
|
60
|
+
oidx = f'{id(node):x}'
|
|
61
|
+
node_type = f'{type(node).__module__}.{type(node).__qualname__}'
|
|
62
|
+
dom_id = node.id
|
|
63
|
+
|
|
64
|
+
# 2. Styles
|
|
65
|
+
|
|
66
|
+
# We extract specific computed styles relevant to positioning debugging. Textual 'styles' property usually returns
|
|
67
|
+
# the computed/effective style.
|
|
68
|
+
styles_info: dict[str, ta.Any] = {}
|
|
69
|
+
|
|
70
|
+
# Extract only if the node supports styles (Most DOMNodes are Widgets, but check just in case)
|
|
71
|
+
if isinstance(node, Widget):
|
|
72
|
+
s = node.styles
|
|
73
|
+
|
|
74
|
+
# Layout Rules
|
|
75
|
+
styles_info['display'] = str(s.display)
|
|
76
|
+
styles_info['position'] = str(s.position) # relative, absolute
|
|
77
|
+
styles_info['dock'] = str(s.dock)
|
|
78
|
+
styles_info['layer'] = s.layer
|
|
79
|
+
|
|
80
|
+
# Sizing Rules (The 'constraints' set in CSS)
|
|
81
|
+
styles_info['width_rule'] = str(s.width) # e.g. '100%', 'auto', '10'
|
|
82
|
+
styles_info['height_rule'] = str(s.height)
|
|
83
|
+
styles_info['min_width'] = str(s.min_width)
|
|
84
|
+
styles_info['max_width'] = str(s.max_width)
|
|
85
|
+
styles_info['box_sizing'] = str(s.box_sizing) # border-box vs content-box
|
|
86
|
+
|
|
87
|
+
# Spacing (Critical for debugging gaps)
|
|
88
|
+
styles_info['margin'] = trbl_to_dict(s.margin)
|
|
89
|
+
styles_info['padding'] = trbl_to_dict(s.padding)
|
|
90
|
+
styles_info['border'] = trbl_to_dict(s.border)
|
|
91
|
+
|
|
92
|
+
# Alignment
|
|
93
|
+
styles_info['align'] = f'{s.align_horizontal} {s.align_vertical}'
|
|
94
|
+
|
|
95
|
+
# 3. Geometry
|
|
96
|
+
|
|
97
|
+
# Region is the absolute coordinates on the screen (or relative to parent layer). This is "What it was forced into".
|
|
98
|
+
region_info: dict[str, int] | None = None
|
|
99
|
+
if (region := getattr(node, 'region', None)) is not None:
|
|
100
|
+
region_info = {
|
|
101
|
+
'x': region.x,
|
|
102
|
+
'y': region.y,
|
|
103
|
+
'width': region.width,
|
|
104
|
+
'height': region.height,
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
# Virtual size is the scrollable area. This is often "What it wants to be" (if larger than region).
|
|
108
|
+
virtual_info: dict[str, int] | None = None
|
|
109
|
+
if (virtual_size := getattr(node, 'virtual_size', None)) is not None:
|
|
110
|
+
virtual_info = {
|
|
111
|
+
'width': virtual_size.width,
|
|
112
|
+
'height': virtual_size.height,
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
content_info: dict | None = None
|
|
116
|
+
if isinstance(node, Widget):
|
|
117
|
+
# Content region is inner size (region - padding - border)
|
|
118
|
+
content_info = {
|
|
119
|
+
'width': node.content_region.width,
|
|
120
|
+
'height': node.content_region.height,
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
# 4. Recursion & Sorting
|
|
124
|
+
|
|
125
|
+
# Sort by Y position first, then X position
|
|
126
|
+
sorted_children = sorted(
|
|
127
|
+
node.children,
|
|
128
|
+
key=lambda n: (n.region.y, n.region.x),
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
child_nodes = [
|
|
132
|
+
inspect_dom_node(child)
|
|
133
|
+
for child in sorted_children
|
|
134
|
+
]
|
|
135
|
+
|
|
136
|
+
return DomNodeInfo(
|
|
137
|
+
oid=oid,
|
|
138
|
+
oidx=oidx,
|
|
139
|
+
type=node_type,
|
|
140
|
+
dom_id=dom_id,
|
|
141
|
+
|
|
142
|
+
classes=list(node.classes),
|
|
143
|
+
pseudo_classes=list(node.pseudo_classes),
|
|
144
|
+
styles=styles_info,
|
|
145
|
+
|
|
146
|
+
region=region_info,
|
|
147
|
+
virtual_size=virtual_info,
|
|
148
|
+
content_size=content_info,
|
|
149
|
+
|
|
150
|
+
children=child_nodes,
|
|
151
|
+
)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from textual.geometry import Region
|
|
2
|
+
from textual.screen import Screen
|
|
3
|
+
from textual.widget import Widget
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
##
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def get_screen_zbuffer(screen: Screen) -> list[list[list[tuple[Widget, Region]] | None]]:
|
|
10
|
+
width, height = screen.size
|
|
11
|
+
|
|
12
|
+
zbuffer: list[list[list[tuple[Widget, Region]] | None]] = [
|
|
13
|
+
[None for _ in range(width)]
|
|
14
|
+
for _ in range(height)
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
for y in range(height):
|
|
18
|
+
for x in range(width):
|
|
19
|
+
try:
|
|
20
|
+
zbuffer[y][x] = list(screen.get_widgets_at(x, y))
|
|
21
|
+
except Exception: # noqa
|
|
22
|
+
pass
|
|
23
|
+
|
|
24
|
+
return zbuffer
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# ruff: noqa: UP037 UP045
|
|
2
|
+
import inspect
|
|
3
|
+
import logging
|
|
4
|
+
import typing as ta
|
|
5
|
+
|
|
6
|
+
import textual.constants
|
|
7
|
+
|
|
8
|
+
from omlish import check
|
|
9
|
+
from omlish import dataclasses as dc
|
|
10
|
+
from omlish import lang
|
|
11
|
+
|
|
12
|
+
from .logging2 import translate_log_level
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
with lang.auto_proxy_import(globals()):
|
|
16
|
+
from textual_dev import client as tx_dev_client
|
|
17
|
+
from textual_dev import redirect_output as tx_dev_redirect_output
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
##
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dc.dataclass(frozen=True, kw_only=True)
|
|
24
|
+
class DevtoolsConfig:
|
|
25
|
+
host: str = '127.0.0.1'
|
|
26
|
+
|
|
27
|
+
# https://github.com/Textualize/textual/blob/676045381b7178c3bc94b86901f20764e08aca49/src/textual/constants.py#L125
|
|
28
|
+
port: int = 8081
|
|
29
|
+
|
|
30
|
+
@classmethod
|
|
31
|
+
def from_env(cls) -> 'DevtoolsConfig':
|
|
32
|
+
return cls(
|
|
33
|
+
host=textual.constants.DEVTOOLS_HOST,
|
|
34
|
+
port=textual.constants.DEVTOOLS_PORT,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
async def connect_devtools(config: DevtoolsConfig) -> ta.Optional['tx_dev_client.DevtoolsClient']:
|
|
39
|
+
try:
|
|
40
|
+
from textual_dev.client import DevtoolsClient # noqa
|
|
41
|
+
except ImportError:
|
|
42
|
+
# Dev dependencies not installed
|
|
43
|
+
return None
|
|
44
|
+
|
|
45
|
+
devtools = DevtoolsClient(
|
|
46
|
+
config.host,
|
|
47
|
+
config.port,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
from textual_dev.client import DevtoolsConnectionError
|
|
51
|
+
|
|
52
|
+
try:
|
|
53
|
+
await devtools.connect()
|
|
54
|
+
except DevtoolsConnectionError as e: # noqa
|
|
55
|
+
return None
|
|
56
|
+
|
|
57
|
+
return devtools
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
##
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class DevtoolsAppMixin:
|
|
64
|
+
_skip_devtools_management: bool = False
|
|
65
|
+
|
|
66
|
+
def _install_devtools(self, devtools: 'tx_dev_client.DevtoolsClient') -> None:
|
|
67
|
+
check.none(getattr(self, 'devtools', None))
|
|
68
|
+
check.none(getattr(self, '_devtools_redirector', None))
|
|
69
|
+
|
|
70
|
+
# https://github.com/Textualize/textual/blob/676045381b7178c3bc94b86901f20764e08aca49/src/textual/app.py#L730-L741
|
|
71
|
+
setattr(self, 'devtools', devtools)
|
|
72
|
+
setattr(self, '_devtools_redirector', tx_dev_redirect_output.StdoutRedirector(devtools))
|
|
73
|
+
|
|
74
|
+
self._skip_devtools_management = True
|
|
75
|
+
|
|
76
|
+
async def _init_devtools(self) -> None:
|
|
77
|
+
if self._skip_devtools_management:
|
|
78
|
+
return
|
|
79
|
+
|
|
80
|
+
await super()._init_devtools() # type: ignore # noqa
|
|
81
|
+
|
|
82
|
+
async def _disconnect_devtools(self) -> None:
|
|
83
|
+
if self._skip_devtools_management:
|
|
84
|
+
return
|
|
85
|
+
|
|
86
|
+
await super()._disconnect_devtools() # type: ignore # noqa
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
##
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class DevtoolsSetup(lang.Func1[DevtoolsAppMixin, None]):
|
|
93
|
+
pass
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class DevtoolsManager:
|
|
97
|
+
def __init__(
|
|
98
|
+
self,
|
|
99
|
+
config: DevtoolsConfig = DevtoolsConfig(),
|
|
100
|
+
) -> None:
|
|
101
|
+
super().__init__()
|
|
102
|
+
|
|
103
|
+
self._config = config
|
|
104
|
+
self._devtools: ta.Optional['tx_dev_client.DevtoolsClient'] = None
|
|
105
|
+
self._setup: DevtoolsSetup | None = None
|
|
106
|
+
|
|
107
|
+
async def get_setup(self) -> DevtoolsSetup:
|
|
108
|
+
if self._setup is None:
|
|
109
|
+
check.none(self._devtools)
|
|
110
|
+
|
|
111
|
+
self._devtools = await connect_devtools(self._config)
|
|
112
|
+
|
|
113
|
+
self._setup = DevtoolsSetup(self._setup_app_dev_tools)
|
|
114
|
+
|
|
115
|
+
return self._setup
|
|
116
|
+
|
|
117
|
+
def _setup_app_dev_tools(self, app: DevtoolsAppMixin) -> None:
|
|
118
|
+
if (devtools := self._devtools) is None:
|
|
119
|
+
return
|
|
120
|
+
|
|
121
|
+
check.isinstance(app, DevtoolsAppMixin)._install_devtools(devtools) # noqa
|
|
122
|
+
|
|
123
|
+
async def aclose(self) -> None:
|
|
124
|
+
if (devtools := self._devtools) is not None and devtools.is_connected:
|
|
125
|
+
await devtools.disconnect()
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
##
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class DevtoolsLoggingHandler(logging.Handler):
|
|
132
|
+
"""
|
|
133
|
+
TODO:
|
|
134
|
+
- reify caller from LogContextInfos
|
|
135
|
+
- queue worker, this blocks the asyncio thread lol
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
def __init__(
|
|
139
|
+
self,
|
|
140
|
+
devtools: ta.Optional['tx_dev_client.DevtoolsClient'],
|
|
141
|
+
prototype_handler: logging.Handler | None = None,
|
|
142
|
+
) -> None:
|
|
143
|
+
super().__init__()
|
|
144
|
+
|
|
145
|
+
self._devtools = devtools
|
|
146
|
+
|
|
147
|
+
if prototype_handler is not None:
|
|
148
|
+
self.setFormatter(prototype_handler.formatter)
|
|
149
|
+
for lf in prototype_handler.filters:
|
|
150
|
+
self.addFilter(lf)
|
|
151
|
+
|
|
152
|
+
def emit(self, record: logging.LogRecord) -> None:
|
|
153
|
+
if (devtools := self._devtools) is None or not devtools.is_connected:
|
|
154
|
+
return
|
|
155
|
+
|
|
156
|
+
msg = self.format(record)
|
|
157
|
+
|
|
158
|
+
caller = inspect.Traceback(
|
|
159
|
+
filename=record.filename,
|
|
160
|
+
lineno=record.lineno,
|
|
161
|
+
function=record.funcName,
|
|
162
|
+
code_context=None,
|
|
163
|
+
index=None,
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
group, verbosity = translate_log_level(record.levelno)
|
|
167
|
+
|
|
168
|
+
devtools.log(
|
|
169
|
+
tx_dev_client.DevtoolsLog(
|
|
170
|
+
msg,
|
|
171
|
+
caller=caller,
|
|
172
|
+
),
|
|
173
|
+
group=group,
|
|
174
|
+
verbosity=verbosity,
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def set_root_logger_to_devtools(devtools: ta.Optional['tx_dev_client.DevtoolsClient']) -> None:
|
|
179
|
+
from omlish.logs.std.standard import _locking_logging_module_lock # noqa
|
|
180
|
+
from omlish.logs.std.standard import StandardConfiguredLoggingHandler
|
|
181
|
+
|
|
182
|
+
with _locking_logging_module_lock():
|
|
183
|
+
std_handler = next((h for h in logging.root.handlers if isinstance(h, StandardConfiguredLoggingHandler)), None)
|
|
184
|
+
|
|
185
|
+
dt_handler = DevtoolsLoggingHandler(devtools, std_handler)
|
|
186
|
+
|
|
187
|
+
logging.root.handlers = [dt_handler]
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from textual import LogGroup # noqa
|
|
4
|
+
from textual import LogVerbosity # noqa
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
##
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def translate_log_level(level: int) -> tuple[LogGroup, LogVerbosity]:
|
|
11
|
+
if level >= logging.ERROR:
|
|
12
|
+
return (LogGroup.ERROR, LogVerbosity.HIGH)
|
|
13
|
+
elif level >= logging.WARNING:
|
|
14
|
+
return (LogGroup.ERROR, LogVerbosity.HIGH)
|
|
15
|
+
elif level >= logging.INFO:
|
|
16
|
+
return (LogGroup.INFO, LogVerbosity.NORMAL)
|
|
17
|
+
elif level >= logging.DEBUG:
|
|
18
|
+
return (LogGroup.DEBUG, LogVerbosity.NORMAL)
|
|
19
|
+
else:
|
|
20
|
+
return (LogGroup.UNDEFINED, LogVerbosity.NORMAL)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import typing as ta
|
|
2
|
+
|
|
3
|
+
from textual.geometry import Spacing
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
##
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class TopRightBottomLeft(ta.Protocol):
|
|
10
|
+
"""
|
|
11
|
+
A ducktype for at least the following:
|
|
12
|
+
- textual.geometry.Spacing - margin, padding
|
|
13
|
+
- textual.css._style_properties.Edges - border
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
@property
|
|
17
|
+
def top(self) -> ta.Any: ...
|
|
18
|
+
|
|
19
|
+
@property
|
|
20
|
+
def right(self) -> ta.Any: ...
|
|
21
|
+
|
|
22
|
+
@property
|
|
23
|
+
def bottom(self) -> ta.Any: ...
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def left(self) -> ta.Any: ...
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@ta.overload
|
|
30
|
+
def trbl_to_dict(trbl: Spacing) -> dict[str, int]:
|
|
31
|
+
...
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@ta.overload
|
|
35
|
+
def trbl_to_dict(trbl: TopRightBottomLeft) -> dict[str, ta.Any]:
|
|
36
|
+
...
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def trbl_to_dict(trbl):
|
|
40
|
+
return {
|
|
41
|
+
'top': trbl.top,
|
|
42
|
+
'right': trbl.right,
|
|
43
|
+
'bottom': trbl.bottom,
|
|
44
|
+
'left': trbl.left,
|
|
45
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: omdev
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev500
|
|
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.dev500
|
|
18
18
|
Provides-Extra: all
|
|
19
|
-
Requires-Dist: black~=25.
|
|
19
|
+
Requires-Dist: black~=25.12; 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,9 +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~=
|
|
30
|
+
Requires-Dist: textual~=7.0; extra == "all"
|
|
31
|
+
Requires-Dist: textual-dev~=1.8; extra == "all"
|
|
32
|
+
Requires-Dist: textual-speedups~=0.2; extra == "all"
|
|
31
33
|
Provides-Extra: black
|
|
32
|
-
Requires-Dist: black~=25.
|
|
34
|
+
Requires-Dist: black~=25.12; extra == "black"
|
|
33
35
|
Provides-Extra: c
|
|
34
36
|
Requires-Dist: pycparser~=2.23; extra == "c"
|
|
35
37
|
Requires-Dist: pcpp~=1.30; extra == "c"
|
|
@@ -46,7 +48,9 @@ Provides-Extra: qr
|
|
|
46
48
|
Requires-Dist: segno~=1.6; extra == "qr"
|
|
47
49
|
Provides-Extra: tui
|
|
48
50
|
Requires-Dist: rich~=14.2; extra == "tui"
|
|
49
|
-
Requires-Dist: textual~=
|
|
51
|
+
Requires-Dist: textual~=7.0; extra == "tui"
|
|
52
|
+
Requires-Dist: textual-dev~=1.8; extra == "tui"
|
|
53
|
+
Requires-Dist: textual-speedups~=0.2; extra == "tui"
|
|
50
54
|
Dynamic: license-file
|
|
51
55
|
|
|
52
56
|
# Overview
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
omdev/.omlish-manifests.json,sha256=
|
|
2
|
-
omdev/
|
|
1
|
+
omdev/.omlish-manifests.json,sha256=v-w4De6oXGrwxviG20OgLm2GOoUNQFvxGFq2OqTCMf8,11671
|
|
2
|
+
omdev/README.md,sha256=IxhRiW6wAsK4XKR9lmOlpkTbX8vcNcQwqal8HelK0yU,3326
|
|
3
|
+
omdev/__about__.py,sha256=nMssA9q43dzIMvRbHaq2jSy1S6XNbApJ0SE9SBAXNbA,1322
|
|
3
4
|
omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
5
|
omdev/cmake.py,sha256=gu49t10_syXh_TUJs4POsxeFs8we8Y3XTOOPgIXmGvg,4608
|
|
5
6
|
omdev/imgur.py,sha256=oqei705LhSnLWQTOMHMHwRecRXcpSEP90Sg4SVINPQ0,3133
|
|
@@ -77,7 +78,7 @@ omdev/ci/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
|
77
78
|
omdev/ci/__main__.py,sha256=Jsrv3P7LX2Cg08W7ByZfZ1JQT4lgLDPW1qNAmShFuMk,75
|
|
78
79
|
omdev/ci/cache.py,sha256=aKsNvl7fTJfjpFhUrWgKCNEwgoSfTZpEcn0NUY9BOCM,8456
|
|
79
80
|
omdev/ci/ci.py,sha256=ZCBQuX5fiyzgBLFndxh1To2J-KrjoPlw4EvEruDIdjg,7923
|
|
80
|
-
omdev/ci/cli.py,sha256=
|
|
81
|
+
omdev/ci/cli.py,sha256=bqOyaPcCKIlqyUE7DMA2Yzf4SpHBqQxY2ISybrMQO-M,7257
|
|
81
82
|
omdev/ci/compose.py,sha256=SXjWuHuLN9NQttvnJ440A88VI7JPU0sSaQhfWe_-IKs,4518
|
|
82
83
|
omdev/ci/consts.py,sha256=HkSYz-_hHilcHPBvRs-SwcUxW7vMNlHXZ8OyIKnVQbQ,21
|
|
83
84
|
omdev/ci/inject.py,sha256=Yk7bT7sRC76PUN9qQ07MiveAuQmi1LZBKxah7VKOB5Q,1930
|
|
@@ -115,7 +116,7 @@ omdev/ci/github/api/v2/client.py,sha256=XuEAR46tNFZpGRPIPFgdpwTA10mC89wwj-X035Qi
|
|
|
115
116
|
omdev/cli/__init__.py,sha256=V_l6VP1SZMlJbO-8CJwSuO9TThOy2S_oaPepNYgIrbE,37
|
|
116
117
|
omdev/cli/__main__.py,sha256=mOJpgc07o0r5luQ1DlX4tk2PqZkgmbwPbdzJ3KmtjgQ,138
|
|
117
118
|
omdev/cli/_pathhack.py,sha256=ABWxtuMY29WBOPqC-4LAZK9S9PwGY3zn5aK6HavFPh0,2125
|
|
118
|
-
omdev/cli/clicli.py,sha256=
|
|
119
|
+
omdev/cli/clicli.py,sha256=eD0YNvprg1_Kgeu_r8DiGb3yVOOeYGymXE2d5h-0z4I,7422
|
|
119
120
|
omdev/cli/install.py,sha256=oB34AOwu07sqEztW_z5mgorAFoP_Tw556XiTPj2WSM0,4904
|
|
120
121
|
omdev/cli/main.py,sha256=JIyQjaoVkXpkanNYpJbQnauzvpMtzn9-nXGKu57dVls,6947
|
|
121
122
|
omdev/cli/managers.py,sha256=BV98_n30Jj63OJrFgRoVZRfICxMLXEZKoEn4rMj9LV4,1160
|
|
@@ -133,7 +134,7 @@ omdev/dataclasses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
|
|
|
133
134
|
omdev/dataclasses/__main__.py,sha256=N-a0Lf_s7D0VajuZCCY_dt8R4rSpeck9inbCsoIvciQ,175
|
|
134
135
|
omdev/dataclasses/_dumping.py,sha256=36xWx43BGYHADYoPOhNIAbhlBPHWiHulBdCyicXHWMQ,54823
|
|
135
136
|
omdev/dataclasses/_template.py,sha256=DI0L4YL-YnrIgaEA9e4bvpV4lHQWDDcvr3-tjQ-kHBc,250
|
|
136
|
-
omdev/dataclasses/cli.py,sha256=
|
|
137
|
+
omdev/dataclasses/cli.py,sha256=IyZkEcrk5Pv553q70a8-EA4YOPnCL0BlIUrY-xSiszM,549
|
|
137
138
|
omdev/dataclasses/codegen.py,sha256=SOCe8EzwPKLh7CcXFJ7xihJuDFDADoYZyQNzCgNQ4eI,10578
|
|
138
139
|
omdev/dataclasses/dumping.py,sha256=5v9U1F0LLizNWxi7STivrYP4cHYCx-q_ZWhNSqzRTB0,5570
|
|
139
140
|
omdev/dataserver/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
@@ -157,12 +158,12 @@ omdev/intellij/ides.py,sha256=5YSJZ0Sbe6UPExn6atOlZd7j3WK1hptHh4RDxSh6CkI,1639
|
|
|
157
158
|
omdev/intellij/open.py,sha256=3HlbJsGkwZ28UBi1P7dVJMRDMLbJyOGQs9QMQqgYVus,2679
|
|
158
159
|
omdev/interp/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
159
160
|
omdev/interp/__main__.py,sha256=GMCqeGYltgt5dlJzHxY9gqisa8cRkrPfmZYuZnjg4WI,162
|
|
160
|
-
omdev/interp/cli.py,sha256=
|
|
161
|
+
omdev/interp/cli.py,sha256=x7CYOY6SBf57dnSrAXwgL50KNjKtqCEN_xeM6KiTY9A,2384
|
|
161
162
|
omdev/interp/default.py,sha256=1jxTsCeCkmYX1QDgr-bPcfSTFdbkYCNKrdfdVf4_P8M,290
|
|
162
163
|
omdev/interp/inject.py,sha256=MOppFILGFCp2f4-2uwmH5fN-7erHI3RyMQJaG0kw0Gc,1569
|
|
163
164
|
omdev/interp/inspect.py,sha256=GLjqRkmNr3H0CZsiFqizM_2yfUL7hSD-BGYysNcVi_Q,3018
|
|
164
165
|
omdev/interp/resolvers.py,sha256=9ExwP0wcQ4mzyTLNurSG4Dg1AQ_IqLfR2ZyqR4VRANE,2590
|
|
165
|
-
omdev/interp/types.py,sha256=
|
|
166
|
+
omdev/interp/types.py,sha256=B5m522tu5xi4sWjxlmZgeHtcnPW5xuMPKvMbcarmfwY,2548
|
|
166
167
|
omdev/interp/venvs.py,sha256=KAnkHGP8jV8KmiarRl2wuMbya-CEgyN6hEM68irGOxs,3362
|
|
167
168
|
omdev/interp/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
168
169
|
omdev/interp/providers/base.py,sha256=zMtzMJIDvaI0q1gtsZTCvFiTc7qdhGbUcXRs6LCBmgo,1333
|
|
@@ -177,7 +178,7 @@ omdev/interp/pyenv/provider.py,sha256=YvlTqG3GET8uW03d21ba0vNOzF6aPC4IbpbiGbErGO
|
|
|
177
178
|
omdev/interp/pyenv/pyenv.py,sha256=Kf1K80v0zcw1BmBQPLczH4dz770_js_ma4Sj4_XOEcU,2654
|
|
178
179
|
omdev/interp/uv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
179
180
|
omdev/interp/uv/inject.py,sha256=nNCfjD-nrErM8wM__Z51rxqZjV3Cn0kE25jFAbkrPag,595
|
|
180
|
-
omdev/interp/uv/provider.py,sha256=
|
|
181
|
+
omdev/interp/uv/provider.py,sha256=dnQAH2cDwVqRKDejftcZnfFZvQeNxwnOH4KC1J9l9f4,1867
|
|
181
182
|
omdev/interp/uv/uv.py,sha256=NaVQOzgbcrx6LkpXPmcmR9iVknFHgnslMlbBHf8VTTc,1810
|
|
182
183
|
omdev/irc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
183
184
|
omdev/irc/messages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -211,7 +212,7 @@ omdev/manifests/__main__.py,sha256=JqyVDyV7_jo-NZ3wSs5clDU_xCMlxzJv-XFohoZWQ7E,1
|
|
|
211
212
|
omdev/manifests/_dumping.py,sha256=DRaiapOrM7pmSShcnGcMjxGBdXClntSokHCLBjKflS0,56124
|
|
212
213
|
omdev/manifests/building.py,sha256=M3IHQljk0ca0J32-xNTOcFVvW07s_7fHQ7sGsCJeurU,13908
|
|
213
214
|
omdev/manifests/dumping.py,sha256=WUIZDvOyO25AhnCPn5Nxj2OkMcZa1LRjGuCnpyx8AL8,4506
|
|
214
|
-
omdev/manifests/main.py,sha256=
|
|
215
|
+
omdev/manifests/main.py,sha256=Gch-ZmvzXyfQRZp_h56RL_hn1T_qG5ZhGCJYp57Hzro,2179
|
|
215
216
|
omdev/markdown/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
216
217
|
omdev/markdown/incparse.py,sha256=zldzPESdrgaoIjBLL9ZPZY11riXCY_3Ti4YDeLtz24Y,3824
|
|
217
218
|
omdev/markdown/tokens.py,sha256=YwFUhxaun4_BiKYXrrX3CBka4ruqdh8Ogl7G8hGvlLA,1483
|
|
@@ -236,7 +237,7 @@ omdev/packaging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
236
237
|
omdev/packaging/marshal.py,sha256=OPNqH6Ghjw5EQQsp0z2QAwThjIOE6vJ5VAoQca4aqHI,2376
|
|
237
238
|
omdev/packaging/names.py,sha256=-orp16m20gSFeKRiGkRNyqFVV4S1y_Djvjdq_5hNwpY,2533
|
|
238
239
|
omdev/packaging/requires.py,sha256=nn4ff8mlgfsdZooKzQjhASFS7mMVUCCmcb-150F0Lcg,15739
|
|
239
|
-
omdev/packaging/revisions.py,sha256=
|
|
240
|
+
omdev/packaging/revisions.py,sha256=9fqAANSRhTkfONjfsulu8veJP5gYr23c3MSh4JDvXcE,5059
|
|
240
241
|
omdev/packaging/specifiers.py,sha256=7SzsdHVtI-ilLMlvDXNgMLSoqx5JW_ePDrbtTOrx5tw,17472
|
|
241
242
|
omdev/packaging/versions.py,sha256=Bgzh6B_t-IRh-9H1CGJdoQ-j7DlpwJzT1WS813W6XdU,12307
|
|
242
243
|
omdev/packaging/wheelfile.py,sha256=lFykff73tqqJl_0HwYZCTlAOUnRMTg_ZWiOSTsG5V5U,10018
|
|
@@ -283,30 +284,30 @@ omdev/py/tokens/utils.py,sha256=_dlXx-_npiGeZkMZVbXaXQDGts9yY8UnEJcT_bwPj0A,2084
|
|
|
283
284
|
omdev/py/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
284
285
|
omdev/py/tools/importscan.py,sha256=OYPZBg__u6On416tcmYfRTMkjr1ZlFcOAy9AafJ8iuo,4648
|
|
285
286
|
omdev/py/tools/mkrelimp.py,sha256=kQAADYW1f1Y2WbIuqWOFNWJl96oT7nqW38XPCkLIyjQ,4039
|
|
286
|
-
omdev/py/tools/pipdepup.py,sha256=
|
|
287
|
+
omdev/py/tools/pipdepup.py,sha256=3s3rTlj0KcVriEw_x3wLuoqQnRjdPCydDWW7fhliUl4,20082
|
|
287
288
|
omdev/pyproject/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
288
289
|
omdev/pyproject/__main__.py,sha256=gn3Rl1aYPYdiTtEqa9ifi0t-e4ZwPY0vhJ4UXvYdJDY,165
|
|
289
|
-
omdev/pyproject/cli.py,sha256=
|
|
290
|
+
omdev/pyproject/cli.py,sha256=qrFlVI_s_viIWE_vmccNNVuQaQP9-cArLJDP2ClqwTM,8753
|
|
290
291
|
omdev/pyproject/configs.py,sha256=baNRwHtUW8S8DKCxuKlMbV3Gduujd1PyNURxQ48Nnxk,2813
|
|
291
292
|
omdev/pyproject/inject.py,sha256=Von8_8ofkITLoCEwDHNRAwY0AEdFQg7r2ILS8kcTMuY,325
|
|
292
|
-
omdev/pyproject/pkg.py,sha256=
|
|
293
|
-
omdev/pyproject/reqs.py,sha256=
|
|
293
|
+
omdev/pyproject/pkg.py,sha256=BrC8DQFIQ1ZKFGoNAJ2wdK8PB8N_fpCVaKFKDh82w4s,19460
|
|
294
|
+
omdev/pyproject/reqs.py,sha256=ZMx-UFQXiSkV0gVpO81zJPa-djvvBrvmY-1kFzxioNk,3369
|
|
294
295
|
omdev/pyproject/venvs.py,sha256=PNgfVrGlw9NFKJgUyzyWH5H5nAIzUDPTHRVUNBM0bKs,2187
|
|
295
296
|
omdev/pyproject/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
296
297
|
omdev/pyproject/resources/docker-dev.sh,sha256=DHkz5D18jok_oDolfg2mqrvGRWFoCe9GQo04dR1czcc,838
|
|
297
298
|
omdev/pyproject/resources/python.sh,sha256=rFaN4SiJ9hdLDXXsDTwugI6zsw6EPkgYMmtacZeTbvw,749
|
|
298
299
|
omdev/pyproject/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
299
|
-
omdev/pyproject/tools/aboutdeps.py,sha256=
|
|
300
|
+
omdev/pyproject/tools/aboutdeps.py,sha256=XmvSKsn3kdY0K2Llh-jhNskm4sK46Y8fWnUlPXBrI34,1592
|
|
300
301
|
omdev/rs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
301
302
|
omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
|
|
302
|
-
omdev/scripts/ci.py,sha256=
|
|
303
|
-
omdev/scripts/interp.py,sha256=
|
|
304
|
-
omdev/scripts/pyproject.py,sha256=
|
|
303
|
+
omdev/scripts/ci.py,sha256=YhYd0S2osBCOvgdZu_BHD8-qS6PBmFnlBgjK81jQaMg,448272
|
|
304
|
+
omdev/scripts/interp.py,sha256=CvrxfmIuZ6xsL8PcebgKaqCiVm-WT5Z5I8ByhWIstt4,174830
|
|
305
|
+
omdev/scripts/pyproject.py,sha256=oSSX0LXPKN5av_uq9e1Vb9WccqkA0hlWscKtoBRbGRY,371173
|
|
305
306
|
omdev/scripts/slowcat.py,sha256=PwdT-pg62imEEb6kcOozl9_YUi-4KopvjvzWT1OmGb0,2717
|
|
306
307
|
omdev/scripts/tmpexec.py,sha256=t0nErDRALjTk7H0X8ADjZUIDFjlPNzOOokmjCjBHdzs,1431
|
|
307
308
|
omdev/scripts/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
308
309
|
omdev/scripts/lib/inject.py,sha256=oygdsbyucoy6f4giWw-H-bYSmHvhywX2gaTrOuf5L_I,55188
|
|
309
|
-
omdev/scripts/lib/logs.py,sha256=
|
|
310
|
+
omdev/scripts/lib/logs.py,sha256=NHUFy2I4--mm1S2XefH0V9w4HDKCqxHtE1gCVT5WP2w,67003
|
|
310
311
|
omdev/scripts/lib/marshal.py,sha256=m6lZYAebgyiXz-yO9NQ1doo2Ths2dvQJH4Gu79hA7dg,48289
|
|
311
312
|
omdev/tools/__init__.py,sha256=iVJAOQ0viGTQOm0DLX4uZLro-9jOioYJGLg9s0kDx1A,78
|
|
312
313
|
omdev/tools/cloc.py,sha256=BiIf2PnnoRH6ByH4mnua69Vv-ZDPHsSAPUds7giRolI,6013
|
|
@@ -324,54 +325,62 @@ omdev/tools/shell.py,sha256=5hF_8DCtB3XrzJSfmQDsr7X3Fi9KRV4M70q9qp0KREA,2341
|
|
|
324
325
|
omdev/tools/sqlrepl.py,sha256=TcLJlElzfXqYUkfIOwhJHtXiQjXOg4xBTwSoSRDpNkg,5758
|
|
325
326
|
omdev/tools/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
326
327
|
omdev/tools/git/__main__.py,sha256=gI87SBUgTkKUcUM-RtZWnei-UUDDqzbr5aPztb-gvbE,168
|
|
327
|
-
omdev/tools/git/cli.py,sha256=
|
|
328
|
+
omdev/tools/git/cli.py,sha256=P2uzPavBmbklgc_it7XB1d9TrmSo29g-A1MzUePkoOo,17697
|
|
328
329
|
omdev/tools/git/cloning.py,sha256=CNGBBMoWaTBJW4SZTf1VvhDFSm0yg7qDfNwZun_PFbU,891
|
|
329
330
|
omdev/tools/git/consts.py,sha256=JuXivUNDkNhM4pe97icjRVAKM8cNRbrODquHINNKqOE,40
|
|
330
331
|
omdev/tools/git/messages.py,sha256=R39pXfXt8394eC99rpTdRlbcMrAdLxwsgTR4pwRRa-o,2321
|
|
331
332
|
omdev/tools/json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
332
333
|
omdev/tools/json/__main__.py,sha256=wqpkN_NsQyNwKW4qjVj8ADJ4_C98KhrFBtE-Z1UamfU,168
|
|
333
334
|
omdev/tools/json/cli.py,sha256=d7i5aPsFGIfHirY1U845t7gARpy3mu1YtvYa-qBkQF4,10142
|
|
334
|
-
omdev/tools/json/formats.py,sha256=
|
|
335
|
+
omdev/tools/json/formats.py,sha256=dhIvWkB7HjvxSBUgk3psTiXLzQ8tksrOK5jKNUbUgx8,2677
|
|
335
336
|
omdev/tools/json/io.py,sha256=sfj2hJS9Hy3aUR8a_lLzOrYcmL9fSKyvOHiofdUASsI,1427
|
|
336
337
|
omdev/tools/json/parsing.py,sha256=R7h-UkwFm3Q0L8oHTk-aLtQN6x32-vkDXwLUxExL0tI,2000
|
|
337
338
|
omdev/tools/json/processing.py,sha256=sSfL6iMB7Znp5ntAFeXYCog0GLA49dPfvoXRoG0D_AY,2525
|
|
338
339
|
omdev/tools/json/rendering.py,sha256=dsZki-47lPuYP_-x7gFFl57IZnCJUXHS-NBGpQZjvk0,2628
|
|
339
340
|
omdev/tools/jsonview/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
340
341
|
omdev/tools/jsonview/__main__.py,sha256=BF-MVWpPJJeQYUqJA48G395kxw0lEJnV-hRLV_F9G2A,173
|
|
341
|
-
omdev/tools/jsonview/cli.py,sha256=
|
|
342
|
+
omdev/tools/jsonview/cli.py,sha256=KhnR_DavUUkCll5xXdpwG_ChUu7VQBm6OCvzOJfeLnk,4040
|
|
342
343
|
omdev/tools/jsonview/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
343
344
|
omdev/tools/jsonview/resources/jsonview.css,sha256=RqQMm98EnQkbVM-8BgjNduzUfsVDMzgNC_NjjwG0bqI,579
|
|
345
|
+
omdev/tools/jsonview/resources/jsonview.html.j2,sha256=SmrVKW6OQONmQ8Y7i_kYs1BCGxEW3Zl4BpGLI64NQxM,1016
|
|
344
346
|
omdev/tools/jsonview/resources/jsonview.js,sha256=faDvXDOXKvEvjOuIlz4D3F2ReQXb_buXDU27hKuuqAw,1648
|
|
347
|
+
omdev/tools/pawk/README.md,sha256=wso8RBdIKv7mbu40hFA-mdzMjT2Dj8gMMknVk98Pemg,6065
|
|
345
348
|
omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
346
349
|
omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
|
|
347
350
|
omdev/tools/pawk/pawk.py,sha256=HZIkXOXCH5NdIFsMF2upf5n-TePuRABoZg4_l1A9jrM,11465
|
|
348
351
|
omdev/tui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
349
352
|
omdev/tui/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
350
353
|
omdev/tui/apps/edit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
351
|
-
omdev/tui/apps/edit/main.py,sha256=
|
|
354
|
+
omdev/tui/apps/edit/main.py,sha256=38JwC_lOdSC4ZpwHBa2CZrT7XH9YFJsXyhF8cTNxn8U,4464
|
|
352
355
|
omdev/tui/apps/irc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
353
356
|
omdev/tui/apps/irc/__main__.py,sha256=d23loR_cKfTYZwYiqpt_CmKI7dd5WcYFgIYzqMep75E,68
|
|
354
|
-
omdev/tui/apps/irc/app.py,sha256=
|
|
357
|
+
omdev/tui/apps/irc/app.py,sha256=y7i9-fcFRG4zDZJVRecadoNEHXtEQ9FUV6mXFuj4CLs,9238
|
|
355
358
|
omdev/tui/apps/irc/client.py,sha256=H4oO-TO_2XTMWMMezqCurj46n6ARO25gCEaCCCkQgc8,5869
|
|
356
|
-
omdev/tui/apps/irc/commands.py,sha256=
|
|
359
|
+
omdev/tui/apps/irc/commands.py,sha256=vWxsquwE4GP-LgPxzWq4a10Zj2DTEFf6kHc_uwFqiDk,5648
|
|
357
360
|
omdev/tui/apps/irc/main.py,sha256=ptsSjKE3LDmPERCExivcjTN7SOfYY7WVnIlDXSL_XQA,510
|
|
358
361
|
omdev/tui/apps/markdown/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
359
362
|
omdev/tui/apps/markdown/__main__.py,sha256=Xy-G2-8Ymx8QMBbRzA4LoiAMZqvtC944mMjFEWd69CA,182
|
|
360
363
|
omdev/tui/apps/markdown/cli.py,sha256=K1vH7f3ZqLv4xTPluhJBEZH8nx8n42_vXIALEV07Q50,469
|
|
361
|
-
omdev/tui/rich/__init__.py,sha256=
|
|
364
|
+
omdev/tui/rich/__init__.py,sha256=2WPxYFGWqwxxLdFBqWpU2nS2DmT7LLFUWXHOrqbqjnQ,1331
|
|
362
365
|
omdev/tui/rich/console2.py,sha256=BYYLbbD65If9TvfPI6qUcMQKUWJbuWwykEzPplvkf6A,342
|
|
363
366
|
omdev/tui/rich/markdown2.py,sha256=fBcjG_34XzUf4WclBL_MxvBj5NUwvLCANhHCx3R0akw,6139
|
|
364
|
-
omdev/tui/textual/__init__.py,sha256=
|
|
365
|
-
omdev/tui/textual/app2.py,sha256=
|
|
367
|
+
omdev/tui/textual/__init__.py,sha256=U1TSKwGgLU_P--9q9iNylFxkNbOef6ZAcGlU9elPmfo,11722
|
|
368
|
+
omdev/tui/textual/app2.py,sha256=j_Naee14VqvJo3ujxiafva6ILkhHBYYYet066vM5WdY,294
|
|
369
|
+
omdev/tui/textual/devtools.py,sha256=iGs4zQo-o2ncspRk4IYyuvYKGC2ZVkYyPy8ugy7wvf4,5137
|
|
366
370
|
omdev/tui/textual/drivers2.py,sha256=ZVxI9n6cyczjrdjqKOAjE51pF0yppACJOVmqLaWuJuM,1402
|
|
371
|
+
omdev/tui/textual/logging2.py,sha256=At6TUBfR0ixFXmS6G2tEqtjcR3AmCwoiid70NDleg-8,576
|
|
372
|
+
omdev/tui/textual/types.py,sha256=jOUGL10Ie29uCZODlloulPINL0VwN8kj5vjWRkgzHEI,782
|
|
367
373
|
omdev/tui/textual/autocomplete/LICENSE,sha256=E4XIgwSRB-UmqQi5b3HvRUfmpR9vfi99rvxGjnkS6BI,1069
|
|
368
374
|
omdev/tui/textual/autocomplete/__init__.py,sha256=m0EGewct7SoATrTcsCSmeRQyPucP5Sqew5qZOIQUgKI,1442
|
|
369
375
|
omdev/tui/textual/autocomplete/matching.py,sha256=joxUxF4jfs47E4JK0DAo_l0lwoNe9mU6iJzxI2FlVYI,6801
|
|
370
376
|
omdev/tui/textual/autocomplete/paths.py,sha256=Z3ZlTkPZezKBaFgB23d6IFJXanJc8OueBm-S0kExdRM,7242
|
|
371
377
|
omdev/tui/textual/autocomplete/widget.py,sha256=1UgWqDT0d9wD6w7MNaZBjgj0o9FohYXydifocPErdks,22629
|
|
372
|
-
omdev
|
|
373
|
-
omdev
|
|
374
|
-
omdev
|
|
375
|
-
omdev-0.0.0.
|
|
376
|
-
omdev-0.0.0.
|
|
377
|
-
omdev-0.0.0.
|
|
378
|
+
omdev/tui/textual/debug/__init__.py,sha256=RW9-Toj5_JnXBJCnRiXpXLpRA__MxG01xW1h_iNuUTY,189
|
|
379
|
+
omdev/tui/textual/debug/dominfo.py,sha256=1iH1xbZY-zUoIyfmdvSzVNjGqeeOnBcjeDI2V1Xn3rg,4401
|
|
380
|
+
omdev/tui/textual/debug/screen.py,sha256=w4cbRJWemcu5jBomGDmVtgtjiaWOS1Wkw1Mc6mu-5Zc,594
|
|
381
|
+
omdev-0.0.0.dev500.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
|
382
|
+
omdev-0.0.0.dev500.dist-info/METADATA,sha256=fiCGLsJUucH2fOHkoQysgb-UVJe6znlno9c5XmKK2NQ,5374
|
|
383
|
+
omdev-0.0.0.dev500.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
384
|
+
omdev-0.0.0.dev500.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
|
|
385
|
+
omdev-0.0.0.dev500.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
|
|
386
|
+
omdev-0.0.0.dev500.dist-info/RECORD,,
|