omlish 0.0.0.dev60__py3-none-any.whl → 0.0.0.dev62__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- omlish/__about__.py +2 -2
- omlish/bootstrap/diag.py +19 -0
- omlish/bootstrap/harness.py +0 -2
- omlish/bootstrap/main.py +22 -2
- omlish/diag/debug.py +26 -0
- omlish/marshal/base.py +6 -3
- omlish/reflect/__init__.py +22 -20
- omlish/reflect/types.py +88 -69
- {omlish-0.0.0.dev60.dist-info → omlish-0.0.0.dev62.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev60.dist-info → omlish-0.0.0.dev62.dist-info}/RECORD +14 -13
- {omlish-0.0.0.dev60.dist-info → omlish-0.0.0.dev62.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev60.dist-info → omlish-0.0.0.dev62.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev60.dist-info → omlish-0.0.0.dev62.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev60.dist-info → omlish-0.0.0.dev62.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
omlish/bootstrap/diag.py
CHANGED
@@ -17,6 +17,7 @@ if ta.TYPE_CHECKING:
|
|
17
17
|
import cProfile # noqa
|
18
18
|
import pstats
|
19
19
|
|
20
|
+
from ..diag import debug as ddbg
|
20
21
|
from ..diag import pycharm as diagpc
|
21
22
|
from ..diag import replserver as diagrs
|
22
23
|
from ..diag import threads as diagt
|
@@ -25,6 +26,7 @@ else:
|
|
25
26
|
cProfile = lang.proxy_import('cProfile') # noqa
|
26
27
|
pstats = lang.proxy_import('pstats')
|
27
28
|
|
29
|
+
ddbg = lang.proxy_import('..diag.debug', __package__)
|
28
30
|
diagpc = lang.proxy_import('..diag.pycharm', __package__)
|
29
31
|
diagrs = lang.proxy_import('..diag.replserver', __package__)
|
30
32
|
diagt = lang.proxy_import('..diag.threads', __package__)
|
@@ -200,3 +202,20 @@ class ReplServerBootstrap(ContextBootstrap['ReplServerBootstrap.Config']):
|
|
200
202
|
thread.start()
|
201
203
|
|
202
204
|
yield
|
205
|
+
|
206
|
+
|
207
|
+
##
|
208
|
+
|
209
|
+
|
210
|
+
class DebugBootstrap(ContextBootstrap['DebugBootstrap.Config']):
|
211
|
+
@dc.dataclass(frozen=True)
|
212
|
+
class Config(Bootstrap.Config):
|
213
|
+
enable: bool = False
|
214
|
+
|
215
|
+
@contextlib.contextmanager
|
216
|
+
def enter(self) -> ta.Iterator[None]:
|
217
|
+
if not self._config.enable:
|
218
|
+
return
|
219
|
+
|
220
|
+
with ddbg.debugging_on_exception():
|
221
|
+
yield
|
omlish/bootstrap/harness.py
CHANGED
omlish/bootstrap/main.py
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
"""
|
2
2
|
TODO:
|
3
3
|
- -x / --exec - os.exec entrypoint
|
4
|
-
|
4
|
+
- refuse to install non-exec-relevant Bootstraps when chosen
|
5
5
|
"""
|
6
6
|
# ruff: noqa: UP006 UP007
|
7
7
|
import argparse
|
8
8
|
import dataclasses as dc
|
9
9
|
import io
|
10
10
|
import itertools
|
11
|
+
import os
|
12
|
+
import shutil
|
11
13
|
import sys
|
12
14
|
import typing as ta
|
13
15
|
|
@@ -152,18 +154,36 @@ def _main() -> int:
|
|
152
154
|
_add_arguments(parser)
|
153
155
|
|
154
156
|
parser.add_argument('-m', '--module', action='store_true')
|
157
|
+
parser.add_argument('-c', '--code', action='store_true')
|
158
|
+
parser.add_argument('-x', '--exec', action='store_true')
|
155
159
|
parser.add_argument('target')
|
156
160
|
parser.add_argument('args', nargs=argparse.REMAINDER)
|
157
161
|
|
158
162
|
args = parser.parse_args()
|
163
|
+
|
164
|
+
if len([a for a in ('module', 'code', 'exec') if getattr(args, a)]) > 1:
|
165
|
+
raise Exception('Multiple exec mode specified')
|
166
|
+
|
159
167
|
cfgs = _process_arguments(args)
|
160
168
|
|
161
169
|
with bootstrap(*cfgs):
|
162
170
|
tgt = args.target
|
163
171
|
|
172
|
+
if args.exec:
|
173
|
+
exe = shutil.which(tgt)
|
174
|
+
if exe is None:
|
175
|
+
raise FileNotFoundError(exe)
|
176
|
+
|
177
|
+
os.execl(exe, exe, *args.args)
|
178
|
+
|
179
|
+
return 0 # type: ignore # noqa
|
180
|
+
|
164
181
|
sys.argv = [tgt, *(args.args or ())]
|
165
182
|
|
166
|
-
if args.
|
183
|
+
if args.code:
|
184
|
+
exec(tgt, {}, {})
|
185
|
+
|
186
|
+
elif args.module:
|
167
187
|
runpy._run_module_as_main(tgt) # type: ignore # noqa
|
168
188
|
|
169
189
|
else:
|
omlish/diag/debug.py
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
"""
|
2
|
+
TODO:
|
3
|
+
- select best debugger: ipdb, pudb,
|
4
|
+
"""
|
5
|
+
import contextlib
|
6
|
+
import sys
|
7
|
+
import traceback
|
8
|
+
import typing as ta
|
9
|
+
|
10
|
+
|
11
|
+
@contextlib.contextmanager
|
12
|
+
def debugging_on_exception(
|
13
|
+
*,
|
14
|
+
silent: bool = False,
|
15
|
+
) -> ta.Iterator[None]:
|
16
|
+
import pdb # noqa
|
17
|
+
|
18
|
+
try:
|
19
|
+
yield
|
20
|
+
except Exception:
|
21
|
+
if not silent:
|
22
|
+
traceback.print_exc()
|
23
|
+
|
24
|
+
pdb.post_mortem(sys.exc_info()[2])
|
25
|
+
|
26
|
+
raise
|
omlish/marshal/base.py
CHANGED
@@ -164,9 +164,12 @@ class BaseContext(lang.Abstract):
|
|
164
164
|
options: col.TypeMap[Option] = col.TypeMap()
|
165
165
|
|
166
166
|
def _reflect(self, o: ta.Any) -> rfl.Type:
|
167
|
-
|
168
|
-
|
169
|
-
|
167
|
+
def override(o):
|
168
|
+
if (ovr := self.registry.get_of(o, ReflectOverride)):
|
169
|
+
return ovr[-1].rty
|
170
|
+
return None
|
171
|
+
|
172
|
+
return rfl.Reflector(override=override).type(o)
|
170
173
|
|
171
174
|
|
172
175
|
@dc.dataclass(frozen=True)
|
omlish/reflect/__init__.py
CHANGED
@@ -1,18 +1,6 @@
|
|
1
|
-
from .
|
2
|
-
|
3
|
-
|
4
|
-
Any,
|
5
|
-
Generic,
|
6
|
-
NewType,
|
7
|
-
TYPES,
|
8
|
-
Type,
|
9
|
-
Union,
|
10
|
-
get_orig_bases,
|
11
|
-
get_orig_class,
|
12
|
-
get_params,
|
13
|
-
is_type,
|
14
|
-
is_union_type,
|
15
|
-
type_,
|
1
|
+
from .isinstance import ( # noqa
|
2
|
+
KNOWN_ISINSTANCE_GENERICS,
|
3
|
+
isinstance_of,
|
16
4
|
)
|
17
5
|
|
18
6
|
from .ops import ( # noqa
|
@@ -24,11 +12,6 @@ from .ops import ( # noqa
|
|
24
12
|
types_equivalent,
|
25
13
|
)
|
26
14
|
|
27
|
-
from .isinstance import ( # noqa
|
28
|
-
KNOWN_ISINSTANCE_GENERICS,
|
29
|
-
isinstance_of,
|
30
|
-
)
|
31
|
-
|
32
15
|
from .subst import ( # noqa
|
33
16
|
ALIAS_UPDATING_GENERIC_SUBSTITUTION,
|
34
17
|
DEFAULT_GENERIC_SUBSTITUTION,
|
@@ -38,3 +21,22 @@ from .subst import ( # noqa
|
|
38
21
|
get_type_var_replacements,
|
39
22
|
replace_type_vars,
|
40
23
|
)
|
24
|
+
|
25
|
+
from .types import ( # noqa
|
26
|
+
ANY,
|
27
|
+
Annotated,
|
28
|
+
Any,
|
29
|
+
DEFAULT_REFLECTOR,
|
30
|
+
Generic,
|
31
|
+
NewType,
|
32
|
+
Reflector,
|
33
|
+
TYPES,
|
34
|
+
Type,
|
35
|
+
Union,
|
36
|
+
get_orig_bases,
|
37
|
+
get_orig_class,
|
38
|
+
get_params,
|
39
|
+
is_type,
|
40
|
+
is_union_type,
|
41
|
+
type_,
|
42
|
+
)
|
omlish/reflect/types.py
CHANGED
@@ -195,92 +195,111 @@ TYPES: tuple[type, ...] = (
|
|
195
195
|
##
|
196
196
|
|
197
197
|
|
198
|
-
|
199
|
-
|
200
|
-
|
198
|
+
class Reflector:
|
199
|
+
def __init__(
|
200
|
+
self,
|
201
|
+
*,
|
202
|
+
override: ta.Callable[[ta.Any], ta.Any] | None = None,
|
203
|
+
) -> None:
|
204
|
+
super().__init__()
|
201
205
|
|
202
|
-
|
206
|
+
self._override = override
|
203
207
|
|
204
|
-
|
205
|
-
|
208
|
+
def is_type(self, obj: ta.Any) -> bool:
|
209
|
+
if isinstance(obj, (Union, Generic, ta.TypeVar, NewType, Any)): # noqa
|
210
|
+
return True
|
206
211
|
|
207
|
-
|
212
|
+
oty = type(obj)
|
208
213
|
|
209
|
-
|
210
|
-
|
211
|
-
oty is _CallableGenericAlias
|
212
|
-
) or
|
214
|
+
return (
|
215
|
+
oty is _UnionGenericAlias or oty is types.UnionType or # noqa
|
213
216
|
|
214
|
-
|
217
|
+
isinstance(obj, ta.NewType) or # noqa
|
215
218
|
|
216
|
-
|
217
|
-
|
219
|
+
(
|
220
|
+
is_simple_generic_alias_type(oty) or
|
221
|
+
oty is _CallableGenericAlias
|
222
|
+
) or
|
218
223
|
|
224
|
+
isinstance(obj, type) or
|
219
225
|
|
220
|
-
|
221
|
-
|
222
|
-
return ANY
|
226
|
+
isinstance(obj, _SpecialGenericAlias)
|
227
|
+
)
|
223
228
|
|
224
|
-
|
225
|
-
|
229
|
+
def type(self, obj: ta.Any) -> Type:
|
230
|
+
if self._override is not None:
|
231
|
+
if (ovr := self._override(obj)) is not None:
|
232
|
+
return ovr
|
226
233
|
|
227
|
-
|
234
|
+
if obj is ta.Any:
|
235
|
+
return ANY
|
228
236
|
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
if isinstance(obj, ta.NewType): # noqa
|
233
|
-
return NewType(obj)
|
234
|
-
|
235
|
-
if (
|
236
|
-
is_simple_generic_alias_type(oty) or
|
237
|
-
oty is _CallableGenericAlias
|
238
|
-
):
|
239
|
-
origin = ta.get_origin(obj)
|
240
|
-
args = ta.get_args(obj)
|
241
|
-
if oty is _CallableGenericAlias:
|
242
|
-
p, r = args
|
243
|
-
if p is Ellipsis or isinstance(p, ta.ParamSpec):
|
244
|
-
raise TypeError(f'Callable argument not yet supported for {obj=}')
|
245
|
-
args = (*p, r)
|
246
|
-
params = _KNOWN_SPECIAL_TYPE_VARS[:len(args)]
|
247
|
-
elif origin is ta.Generic:
|
248
|
-
params = args
|
249
|
-
else:
|
250
|
-
params = get_params(origin)
|
251
|
-
if len(args) != len(params):
|
252
|
-
raise TypeError(f'Mismatched {args=} and {params=} for {obj=}')
|
253
|
-
return Generic(
|
254
|
-
origin,
|
255
|
-
tuple(type_(a) for a in args),
|
256
|
-
params,
|
257
|
-
obj,
|
258
|
-
)
|
237
|
+
if isinstance(obj, (Union, Generic, ta.TypeVar, NewType, Any)): # noqa
|
238
|
+
return obj
|
259
239
|
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
240
|
+
oty = type(obj)
|
241
|
+
|
242
|
+
if oty is _UnionGenericAlias or oty is types.UnionType:
|
243
|
+
return Union(frozenset(self.type(a) for a in ta.get_args(obj)))
|
244
|
+
|
245
|
+
if isinstance(obj, ta.NewType): # noqa
|
246
|
+
return NewType(obj)
|
247
|
+
|
248
|
+
if (
|
249
|
+
is_simple_generic_alias_type(oty) or
|
250
|
+
oty is _CallableGenericAlias
|
251
|
+
):
|
252
|
+
origin = ta.get_origin(obj)
|
253
|
+
args = ta.get_args(obj)
|
254
|
+
if oty is _CallableGenericAlias:
|
255
|
+
p, r = args
|
256
|
+
if p is Ellipsis or isinstance(p, ta.ParamSpec):
|
257
|
+
raise TypeError(f'Callable argument not yet supported for {obj=}')
|
258
|
+
args = (*p, r)
|
259
|
+
params = _KNOWN_SPECIAL_TYPE_VARS[:len(args)]
|
260
|
+
elif origin is ta.Generic:
|
261
|
+
params = args
|
262
|
+
else:
|
263
|
+
params = get_params(origin)
|
264
|
+
if len(args) != len(params):
|
265
|
+
raise TypeError(f'Mismatched {args=} and {params=} for {obj=}')
|
266
|
+
return Generic(
|
267
|
+
origin,
|
268
|
+
tuple(self.type(a) for a in args),
|
269
|
+
params,
|
270
|
+
obj,
|
271
|
+
)
|
272
|
+
|
273
|
+
if isinstance(obj, type):
|
274
|
+
if issubclass(obj, ta.Generic): # type: ignore
|
275
|
+
params = get_params(obj)
|
276
|
+
if params:
|
277
|
+
return Generic(
|
278
|
+
obj,
|
279
|
+
params,
|
280
|
+
params,
|
281
|
+
obj,
|
282
|
+
)
|
283
|
+
return obj
|
284
|
+
|
285
|
+
if isinstance(obj, _SpecialGenericAlias):
|
286
|
+
if (ks := _KNOWN_SPECIALS_BY_ALIAS.get(obj)) is not None:
|
287
|
+
params = _KNOWN_SPECIAL_TYPE_VARS[:ks.nparams]
|
264
288
|
return Generic(
|
265
|
-
|
289
|
+
ks.origin,
|
266
290
|
params,
|
267
291
|
params,
|
268
292
|
obj,
|
269
293
|
)
|
270
|
-
return obj
|
271
294
|
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
return Generic(
|
276
|
-
ks.origin,
|
277
|
-
params,
|
278
|
-
params,
|
279
|
-
obj,
|
280
|
-
)
|
295
|
+
if isinstance(obj, _AnnotatedAlias):
|
296
|
+
o = ta.get_args(obj)[0]
|
297
|
+
return Annotated(self.type(o), md=obj.__metadata__, obj=obj)
|
281
298
|
|
282
|
-
|
283
|
-
o = ta.get_args(obj)[0]
|
284
|
-
return Annotated(type_(o), md=obj.__metadata__, obj=obj)
|
299
|
+
raise TypeError(obj)
|
285
300
|
|
286
|
-
|
301
|
+
|
302
|
+
DEFAULT_REFLECTOR = Reflector()
|
303
|
+
|
304
|
+
is_type = DEFAULT_REFLECTOR.is_type
|
305
|
+
type_ = DEFAULT_REFLECTOR.type
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=jvyoQ7x8UJ9lpRgkh7eElwJ8qnzyG5aUGameT9Yk8GM,1419
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=u-gRUFmrAMM8C-1-u6UfjGvA_1qc3iVQiZLYnMGHQxg,3420
|
3
3
|
omlish/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
omlish/argparse.py,sha256=Vr70_85EVLJLgEkRtwOr264tMRtqtlN7ncFfXRUk5aM,6914
|
5
5
|
omlish/c3.py,sha256=4vogWgwPb8TbNS2KkZxpoWbwjj7MuHG2lQG-hdtkvjI,8062
|
@@ -89,9 +89,9 @@ omlish/asyncs/trio_asyncio.py,sha256=oqdOHy0slj9PjVxaDf3gJkq9AAgg7wYZbB469jOftVw
|
|
89
89
|
omlish/bootstrap/__init__.py,sha256=-Rtsg7uPQNhh1dIT9nqrz96XlqizwoLnWf-FwOEstJI,730
|
90
90
|
omlish/bootstrap/__main__.py,sha256=4jCwsaogp0FrJjJZ85hzF4-WqluPeheHbfeoKynKvNs,194
|
91
91
|
omlish/bootstrap/base.py,sha256=d8hqn4hp1XMMi5PgcJBQXPKmW47epu8CxBlqDZiRZb4,1073
|
92
|
-
omlish/bootstrap/diag.py,sha256=
|
93
|
-
omlish/bootstrap/harness.py,sha256=
|
94
|
-
omlish/bootstrap/main.py,sha256=
|
92
|
+
omlish/bootstrap/diag.py,sha256=LADLhusbJ1tKxVD8-gmia1HShX1VeszRO1OApIQhSpI,5507
|
93
|
+
omlish/bootstrap/harness.py,sha256=VW8YP-yENGyXIuJ8GL_xintArF13nafwpz-iAghPt34,1967
|
94
|
+
omlish/bootstrap/main.py,sha256=ripSWAlYz3LVyv6S_Js9MWYO3QNKgBSaFQv3gqGjuRM,5885
|
95
95
|
omlish/bootstrap/marshal.py,sha256=ZxdAeMNd2qXRZ1HUK89HmEhz8tqlS9OduW34QBscKw0,516
|
96
96
|
omlish/bootstrap/sys.py,sha256=i6veZeE83wO0HTl9b6ykj_pEN05fqu0enoAv4sw5Ayc,8742
|
97
97
|
omlish/collections/__init__.py,sha256=tGUzvS_ZjiqALsLRy7JX3h4KZRQX2CmtdAfTRD7UwMk,1677
|
@@ -151,6 +151,7 @@ omlish/dataclasses/impl/slots.py,sha256=_sm-x9v1tPnXEHBHNUMTHZocgVyhZaPdvamIPPBU
|
|
151
151
|
omlish/dataclasses/impl/utils.py,sha256=aER2iL3UAtgS1BdLuEvTr9Tr2wC28wk1kiOeO-jIymw,6138
|
152
152
|
omlish/diag/__init__.py,sha256=BYQoq12W2qU0O7m2Z-RLCX6YLIYEW9MmfN7_i9--Yk0,132
|
153
153
|
omlish/diag/asts.py,sha256=BveUUNUcaAm4Hg55f4ZxGSI313E4L8cCZ5XjHpEkKVI,3325
|
154
|
+
omlish/diag/debug.py,sha256=YPzQXiBAJMYHYpBKzx0QhlLMZokjR5kkAVLodA3yddQ,424
|
154
155
|
omlish/diag/procfs.py,sha256=vBovaMvAUKdl7FbtFq3TNsSmdhs8DaYfhoEsKeWYta8,9704
|
155
156
|
omlish/diag/procstats.py,sha256=UkqxREqfd-38xPYZ9T1SIJISz5ARQCEhTtOZrxtm2dE,777
|
156
157
|
omlish/diag/ps.py,sha256=1JWxZen3fVG-20R6ZZ8BtO_gpzw_5bhHZiKdoHkgxoU,1004
|
@@ -288,7 +289,7 @@ omlish/logs/noisy.py,sha256=Ubc-eTH6ZbGYsLfUUi69JAotwuUwzb-SJBeGo_0dIZI,348
|
|
288
289
|
omlish/logs/utils.py,sha256=MgGovbP0zUrZ3FGD3qYNQWn-l0jy0Y0bStcQvv5BOmQ,391
|
289
290
|
omlish/marshal/__init__.py,sha256=G0MDeBStBjz9Njq-rt5C6WbuCik6c8st7cipwMVw668,2139
|
290
291
|
omlish/marshal/any.py,sha256=e82OyYK3Emm1P1ClnsnxP7fIWC2iNVyW0H5nK4mLmWM,779
|
291
|
-
omlish/marshal/base.py,sha256=
|
292
|
+
omlish/marshal/base.py,sha256=_ZKSSuv6p9r86sja_jaxI09WYpjCBFi0KTsOiZCYyk0,6587
|
292
293
|
omlish/marshal/base64.py,sha256=F-3ogJdcFCtWINRgJgWT0rErqgx6f4qahhcg8OrkqhE,1089
|
293
294
|
omlish/marshal/dataclasses.py,sha256=G6Uh8t4vvNBAx2BhzH8ksj8Hq_bo6npFphQhyF298VU,6892
|
294
295
|
omlish/marshal/datetimes.py,sha256=0ffg8cEvx9SMKIXZGD9b7MqpLfmgw0uKKdn6YTfoqok,3714
|
@@ -318,11 +319,11 @@ omlish/math/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
318
319
|
omlish/math/bits.py,sha256=yip1l8agOYzT7bFyMGc0RR3XlnGCfHMpjw_SECLLh1I,3477
|
319
320
|
omlish/math/floats.py,sha256=UimhOT7KRl8LXTzOI5cQWoX_9h6WNWe_3vcOuO7-h_8,327
|
320
321
|
omlish/math/stats.py,sha256=MegzKVsmv2kra4jDWLOUgV0X7Ee2Tbl5u6ql1v4-dEY,10053
|
321
|
-
omlish/reflect/__init__.py,sha256=
|
322
|
+
omlish/reflect/__init__.py,sha256=eJzSLlCWcjGWn7NGzIR66vANvxiHQym73YJeMwB7mCw,725
|
322
323
|
omlish/reflect/isinstance.py,sha256=x5T9S2634leinBT4hl3CZZkRttvdvvlxChkC_x9Qu2s,1176
|
323
324
|
omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
|
324
325
|
omlish/reflect/subst.py,sha256=JM2RGv2-Rcex8wCqhmgvRG59zD242P9jM3O2QLjKWWo,3586
|
325
|
-
omlish/reflect/types.py,sha256=
|
326
|
+
omlish/reflect/types.py,sha256=8EhhLU-ko-Uepk3Xa0v22w8LBS7MbjPwJ4HNM_Dtf5g,7779
|
326
327
|
omlish/secrets/__init__.py,sha256=SGB1KrlNrxlNpazEHYy95NTzteLi8ndoEgMhU7luBl8,420
|
327
328
|
omlish/secrets/crypto.py,sha256=6CsLy0UEqCrBK8Xx_3-iFF6SKtu2GlEqUQ8-MliY3tk,3709
|
328
329
|
omlish/secrets/marshal.py,sha256=U9uSRTWzZmumfNZeh_dROwVdGrARsp155TylRbjilP8,2048
|
@@ -407,9 +408,9 @@ omlish/text/delimit.py,sha256=ubPXcXQmtbOVrUsNh5gH1mDq5H-n1y2R4cPL5_DQf68,4928
|
|
407
408
|
omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,3296
|
408
409
|
omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
|
409
410
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
410
|
-
omlish-0.0.0.
|
411
|
-
omlish-0.0.0.
|
412
|
-
omlish-0.0.0.
|
413
|
-
omlish-0.0.0.
|
414
|
-
omlish-0.0.0.
|
415
|
-
omlish-0.0.0.
|
411
|
+
omlish-0.0.0.dev62.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
412
|
+
omlish-0.0.0.dev62.dist-info/METADATA,sha256=mt0fT8Bk_wKy64eUKY_AYPNxHg-yruiGNd2EYcnYUPw,4167
|
413
|
+
omlish-0.0.0.dev62.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
414
|
+
omlish-0.0.0.dev62.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
415
|
+
omlish-0.0.0.dev62.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
416
|
+
omlish-0.0.0.dev62.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|