omlish 0.0.0.dev67__py3-none-any.whl → 0.0.0.dev69__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.
- omlish/__about__.py +2 -2
- omlish/diag/__init__.py +28 -0
- omlish/diag/_pycharm/runhack.py +25 -59
- omlish/lang/imports.py +17 -2
- omlish/lang/objects.py +1 -1
- omlish/libc.py +1 -1
- omlish/testing/__init__.py +0 -1
- omlish/testing/pytest/plugins/managermarks.py +1 -1
- omlish/testing/pytest/skip.py +2 -2
- omlish/testing/testing.py +0 -10
- {omlish-0.0.0.dev67.dist-info → omlish-0.0.0.dev69.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev67.dist-info → omlish-0.0.0.dev69.dist-info}/RECORD +16 -16
- {omlish-0.0.0.dev67.dist-info → omlish-0.0.0.dev69.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev67.dist-info → omlish-0.0.0.dev69.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev67.dist-info → omlish-0.0.0.dev69.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev67.dist-info → omlish-0.0.0.dev69.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
omlish/diag/__init__.py
CHANGED
@@ -1,4 +1,32 @@
|
|
1
1
|
"""
|
2
2
|
TODO:
|
3
3
|
- https://github.com/aristocratos/btop/blob/00c90884c328eb3e44a0ab094e833161092aae9c/src/linux/btop_collect.cpp#L443
|
4
|
+
|
5
|
+
==
|
6
|
+
|
7
|
+
Repls
|
8
|
+
- python - https://docs.python.org/3/tutorial/interpreter.html
|
9
|
+
- ipython - https://github.com/ipython/ipython/
|
10
|
+
- ptpython - https://github.com/prompt-toolkit/ptpython
|
11
|
+
- bpython - https://github.com/bpython/bpython
|
12
|
+
|
13
|
+
Debuggers
|
14
|
+
- pdb - https://docs.python.org/3/library/pdb.html
|
15
|
+
- ipdb - https://github.com/gotcha/ipdb
|
16
|
+
- pdub - https://github.com/inducer/pudb/
|
17
|
+
|
18
|
+
CPU Profilers
|
19
|
+
- cProfile - https://docs.python.org/3/library/profile.html
|
20
|
+
- pyinstrument - https://github.com/joerick/pyinstrument
|
21
|
+
- py-pspy - https://github.com/benfred/py-spy
|
22
|
+
- austin-dist - https://github.com/P403n1x87/austin
|
23
|
+
- yappi - https://github.com/sumerc/yappi
|
24
|
+
|
25
|
+
Memory Profilers
|
26
|
+
- tracemalloc - https://docs.python.org/3/library/tracemalloc.html
|
27
|
+
- guppy3 - https://github.com/zhuyifei1999/guppy3/
|
28
|
+
- objgraph - https://github.com/mgedmin/objgraph
|
29
|
+
- memory-profiler - https://github.com/pythonprofilers/memory_profiler
|
30
|
+
- memray - https://github.com/bloomberg/memray
|
31
|
+
- pympler - https://github.com/pympler/pympler
|
4
32
|
"""
|
omlish/diag/_pycharm/runhack.py
CHANGED
@@ -100,12 +100,17 @@ def _get_env_path_list(k): # type: (str) -> list[str]
|
|
100
100
|
##
|
101
101
|
|
102
102
|
|
103
|
-
class
|
104
|
-
|
105
|
-
|
103
|
+
class AttrsClass:
|
104
|
+
__attrs__ = () # type: tuple[str, ...]
|
105
|
+
|
106
|
+
def __repr__(self) -> str:
|
107
|
+
return _attr_repr(self, *self.__attrs__)
|
108
|
+
|
109
|
+
def attrs_dict(self): # type: () -> dict[str, object]
|
110
|
+
return {a: getattr(self, a) for a in self.__attrs__}
|
106
111
|
|
107
112
|
def replace(self, **kwargs):
|
108
|
-
return self.__class__(**{**self.
|
113
|
+
return self.__class__(**{**self.attrs_dict(), **kwargs})
|
109
114
|
|
110
115
|
|
111
116
|
class AsJson:
|
@@ -116,7 +121,7 @@ class AsJson:
|
|
116
121
|
##
|
117
122
|
|
118
123
|
|
119
|
-
class RunEnv(AsJson):
|
124
|
+
class RunEnv(AttrsClass, AsJson):
|
120
125
|
def __init__(
|
121
126
|
self,
|
122
127
|
*,
|
@@ -171,7 +176,7 @@ class RunEnv(AsJson):
|
|
171
176
|
sys_path = list(sys.path)
|
172
177
|
self._sys_path = sys_path
|
173
178
|
|
174
|
-
|
179
|
+
__attrs__ = (
|
175
180
|
'argv',
|
176
181
|
'orig_argv',
|
177
182
|
|
@@ -186,12 +191,6 @@ class RunEnv(AsJson):
|
|
186
191
|
'sys_path',
|
187
192
|
)
|
188
193
|
|
189
|
-
def as_json(self): # type: () -> dict[str, object]
|
190
|
-
return {a: getattr(self, a) for a in self._ATTRS}
|
191
|
-
|
192
|
-
def __repr__(self) -> str:
|
193
|
-
return _attr_repr(self, *self._ATTRS)
|
194
|
-
|
195
194
|
@property
|
196
195
|
def argv(self): # type: () -> list[str]
|
197
196
|
return self._argv
|
@@ -228,6 +227,9 @@ class RunEnv(AsJson):
|
|
228
227
|
def sys_path(self): # type: () -> list[str]
|
229
228
|
return self._sys_path
|
230
229
|
|
230
|
+
def as_json(self): # type: () -> dict[str, object]
|
231
|
+
return self.attrs_dict()
|
232
|
+
|
231
233
|
|
232
234
|
##
|
233
235
|
|
@@ -495,7 +497,7 @@ def render_args(args): # type: (list[Arg]) -> list[str]
|
|
495
497
|
##
|
496
498
|
|
497
499
|
|
498
|
-
class Target(
|
500
|
+
class Target(AttrsClass, AsJson):
|
499
501
|
pass
|
500
502
|
|
501
503
|
|
@@ -530,16 +532,10 @@ class FileTarget(UserTarget):
|
|
530
532
|
def file(self) -> str:
|
531
533
|
return self._file
|
532
534
|
|
533
|
-
|
534
|
-
|
535
|
-
def __repr__(self) -> str:
|
536
|
-
return _attr_repr(self, *self._ATTRS)
|
537
|
-
|
538
|
-
def as_dict(self): # type: () -> dict[str, object]
|
539
|
-
return _attr_dict(self, *self._ATTRS)
|
535
|
+
__attrs__ = ('file', 'argv')
|
540
536
|
|
541
537
|
def as_json(self): # type: () -> dict[str, object]
|
542
|
-
return self.
|
538
|
+
return self.attrs_dict()
|
543
539
|
|
544
540
|
|
545
541
|
class ModuleTarget(UserTarget):
|
@@ -556,16 +552,10 @@ class ModuleTarget(UserTarget):
|
|
556
552
|
def module(self) -> str:
|
557
553
|
return self._module
|
558
554
|
|
559
|
-
|
560
|
-
|
561
|
-
def __repr__(self) -> str:
|
562
|
-
return _attr_repr(self, *self._ATTRS)
|
563
|
-
|
564
|
-
def as_dict(self): # type: () -> dict[str, object]
|
565
|
-
return _attr_dict(self, *self._ATTRS)
|
555
|
+
__attrs__ = ('module', 'argv')
|
566
556
|
|
567
557
|
def as_json(self): # type: () -> dict[str, object]
|
568
|
-
return self.
|
558
|
+
return self.attrs_dict()
|
569
559
|
|
570
560
|
|
571
561
|
#
|
@@ -604,13 +594,7 @@ class DebuggerTarget(PycharmTarget):
|
|
604
594
|
def target(self) -> Target:
|
605
595
|
return self._target
|
606
596
|
|
607
|
-
|
608
|
-
|
609
|
-
def __repr__(self) -> str:
|
610
|
-
return _attr_repr(self, *self._ATTRS)
|
611
|
-
|
612
|
-
def as_dict(self): # type: () -> dict[str, object]
|
613
|
-
return _attr_dict(self, *self._ATTRS)
|
597
|
+
__attrs__ = ('file', 'args', 'target')
|
614
598
|
|
615
599
|
def as_json(self): # type: () -> dict[str, object]
|
616
600
|
return {
|
@@ -662,13 +646,7 @@ class TestRunnerTarget(PycharmTarget):
|
|
662
646
|
def tests(self): # type: () -> list[Test]
|
663
647
|
return self._tests
|
664
648
|
|
665
|
-
|
666
|
-
|
667
|
-
def __repr__(self) -> str:
|
668
|
-
return _attr_repr(self, *self._ATTRS)
|
669
|
-
|
670
|
-
def as_dict(self): # type: () -> dict[str, object]
|
671
|
-
return _attr_dict(self, *self._ATTRS)
|
649
|
+
__attrs__ = ('file', 'args', 'tests')
|
672
650
|
|
673
651
|
def as_json(self): # type: () -> dict[str, object]
|
674
652
|
return {
|
@@ -884,7 +862,7 @@ def render_target_args(tgt): # type: (Target) -> list[str]
|
|
884
862
|
##
|
885
863
|
|
886
864
|
|
887
|
-
class Exec(
|
865
|
+
class Exec(AttrsClass, AsJson):
|
888
866
|
def __init__(
|
889
867
|
self,
|
890
868
|
exe: str,
|
@@ -909,13 +887,7 @@ class Exec(AsDict, AsJson):
|
|
909
887
|
def target(self) -> Target:
|
910
888
|
return self._target
|
911
889
|
|
912
|
-
|
913
|
-
|
914
|
-
def __repr__(self) -> str:
|
915
|
-
return _attr_repr(self, *self._ATTRS)
|
916
|
-
|
917
|
-
def as_dict(self): # type: () -> dict[str, object]
|
918
|
-
return _attr_dict(self, *self._ATTRS)
|
890
|
+
__attrs__ = ('exe', 'exe_args', 'target')
|
919
891
|
|
920
892
|
def as_json(self): # type: () -> dict[str, object]
|
921
893
|
return {
|
@@ -979,7 +951,7 @@ def render_exec_args(exe): # type: (Exec) -> list[str]
|
|
979
951
|
##
|
980
952
|
|
981
953
|
|
982
|
-
class ExecDecision(
|
954
|
+
class ExecDecision(AttrsClass, AsJson):
|
983
955
|
def __init__(
|
984
956
|
self,
|
985
957
|
target: Target,
|
@@ -1020,7 +992,7 @@ class ExecDecision(AsDict, AsJson):
|
|
1020
992
|
def os_exec(self) -> bool:
|
1021
993
|
return self._os_exec
|
1022
994
|
|
1023
|
-
|
995
|
+
__attrs__ = (
|
1024
996
|
'target',
|
1025
997
|
'cwd',
|
1026
998
|
'python_path',
|
@@ -1028,12 +1000,6 @@ class ExecDecision(AsDict, AsJson):
|
|
1028
1000
|
'os_exec',
|
1029
1001
|
)
|
1030
1002
|
|
1031
|
-
def __repr__(self) -> str:
|
1032
|
-
return _attr_repr(self, *self._ATTRS)
|
1033
|
-
|
1034
|
-
def as_dict(self): # type: () -> dict[str, object]
|
1035
|
-
return _attr_dict(self, *self._ATTRS)
|
1036
|
-
|
1037
1003
|
def as_json(self): # type: () -> dict[str, object]
|
1038
1004
|
return {
|
1039
1005
|
'target': self._target.as_json(),
|
omlish/lang/imports.py
CHANGED
@@ -12,7 +12,12 @@ from .cached import cached_function
|
|
12
12
|
|
13
13
|
|
14
14
|
def can_import(name: str, package: str | None = None) -> bool:
|
15
|
-
|
15
|
+
try:
|
16
|
+
spec = importlib.util.find_spec(name, package)
|
17
|
+
except ImportError:
|
18
|
+
return False
|
19
|
+
else:
|
20
|
+
return spec is not None
|
16
21
|
|
17
22
|
|
18
23
|
##
|
@@ -22,13 +27,23 @@ def lazy_import(name: str, package: str | None = None) -> ta.Callable[[], ta.Any
|
|
22
27
|
return cached_function(functools.partial(importlib.import_module, name, package=package))
|
23
28
|
|
24
29
|
|
25
|
-
def proxy_import(
|
30
|
+
def proxy_import(
|
31
|
+
name: str,
|
32
|
+
package: str | None = None,
|
33
|
+
extras: ta.Iterable[str] | None = None,
|
34
|
+
) -> types.ModuleType:
|
35
|
+
if isinstance(extras, str):
|
36
|
+
raise TypeError(extras)
|
37
|
+
|
26
38
|
omod = None
|
27
39
|
|
28
40
|
def __getattr__(att): # noqa
|
29
41
|
nonlocal omod
|
30
42
|
if omod is None:
|
31
43
|
omod = importlib.import_module(name, package=package)
|
44
|
+
if extras:
|
45
|
+
for x in extras:
|
46
|
+
importlib.import_module(f'{name}.{x}', package=package)
|
32
47
|
return getattr(omod, att)
|
33
48
|
|
34
49
|
lmod = types.ModuleType(name)
|
omlish/lang/objects.py
CHANGED
@@ -87,7 +87,7 @@ def super_meta(
|
|
87
87
|
##
|
88
88
|
|
89
89
|
|
90
|
-
def deep_subclasses(cls: type, *, concrete_only: bool = False) -> ta.Iterator[type]:
|
90
|
+
def deep_subclasses(cls: type[T], *, concrete_only: bool = False) -> ta.Iterator[type[T]]:
|
91
91
|
seen = set()
|
92
92
|
todo = list(reversed(cls.__subclasses__()))
|
93
93
|
while todo:
|
omlish/libc.py
CHANGED
omlish/testing/__init__.py
CHANGED
@@ -37,7 +37,7 @@ class ManagerMarksPlugin:
|
|
37
37
|
def mark_classes(self) -> ta.Mapping[str, type[ManagerMark]]:
|
38
38
|
return {
|
39
39
|
cls.__name__: cls
|
40
|
-
for cls in
|
40
|
+
for cls in lang.deep_subclasses(ManagerMark) # type: ignore[type-abstract]
|
41
41
|
if not lang.is_abstract_class(cls)
|
42
42
|
}
|
43
43
|
|
omlish/testing/pytest/skip.py
CHANGED
@@ -5,11 +5,11 @@ import typing as ta
|
|
5
5
|
|
6
6
|
import pytest
|
7
7
|
|
8
|
-
from
|
8
|
+
from ... import lang
|
9
9
|
|
10
10
|
|
11
11
|
def if_cant_import(module: str, *args, **kwargs):
|
12
|
-
return pytest.mark.skipif(not can_import(module, *args, **kwargs), reason=f'requires import {module}')
|
12
|
+
return pytest.mark.skipif(not lang.can_import(module, *args, **kwargs), reason=f'requires import {module}')
|
13
13
|
|
14
14
|
|
15
15
|
def if_not_on_path(exe: str):
|
omlish/testing/testing.py
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
import functools
|
2
|
-
import importlib
|
3
2
|
import os
|
4
3
|
import sys
|
5
4
|
import threading
|
@@ -89,15 +88,6 @@ def waitpid_with_timeout(
|
|
89
88
|
raise timeout_exception
|
90
89
|
|
91
90
|
|
92
|
-
def can_import(*args, **kwargs) -> bool:
|
93
|
-
try:
|
94
|
-
importlib.import_module(*args, **kwargs)
|
95
|
-
except ImportError:
|
96
|
-
return False
|
97
|
-
else:
|
98
|
-
return True
|
99
|
-
|
100
|
-
|
101
91
|
def xfail(fn):
|
102
92
|
@functools.wraps(fn)
|
103
93
|
def inner(*args, **kwargs):
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=TXvFdkAU0Zr2FKdo7fyvt9nr3UjCtrnAZ0diZXSAteE,1430
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=IwGGP6Oe4Sux6iaJWcinkD3DfkrJmksEYnKmYdTly1I,3420
|
3
3
|
omlish/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
omlish/argparse.py,sha256=Dc73G8lyoQBLvXhMYUbzQUh4SJu_OTvKUXjSUxq_ang,7499
|
5
5
|
omlish/c3.py,sha256=4vogWgwPb8TbNS2KkZxpoWbwjj7MuHG2lQG-hdtkvjI,8062
|
@@ -12,7 +12,7 @@ omlish/fnpairs.py,sha256=Sl8CMFNyDS-1JYAjSWqnT5FmUm9Lj6o7FxSRo7g4jww,10875
|
|
12
12
|
omlish/fnpipes.py,sha256=AJkgz9nvRRm7oqw7ZgYyz21klu276LWi54oYCLg-vOg,2196
|
13
13
|
omlish/genmachine.py,sha256=LCMiqvK32dAWtrlB6lKw9tXdQFiXC8rRdk4TMQYIroU,1603
|
14
14
|
omlish/iterators.py,sha256=GGLC7RIT86uXMjhIIIqnff_Iu5SI_b9rXYywYGFyzmo,7292
|
15
|
-
omlish/libc.py,sha256=
|
15
|
+
omlish/libc.py,sha256=8r7Ejyhttk9ruCfBkxNTrlzir5WPbDE2vmY7VPlceMA,15362
|
16
16
|
omlish/matchfns.py,sha256=I1IlQGfEyk_AcFSy6ulVS3utC-uwyZM2YfUXYHc9Bw0,6152
|
17
17
|
omlish/multiprocessing.py,sha256=QZT4C7I-uThCAjaEY3xgUYb-5GagUlnE4etN01LDyU4,5186
|
18
18
|
omlish/os.py,sha256=vO1sZCzAhVxo46tDFLrD52q2KuMFWQwu5MPJgSsnliI,3107
|
@@ -149,7 +149,7 @@ omlish/dataclasses/impl/repr.py,sha256=oLXBTxqp88NKmz82HrJeGiTEiwK4l5LlXQT9Q0-tX
|
|
149
149
|
omlish/dataclasses/impl/simple.py,sha256=EovA-GpmQYtB_svItO2byTAWqbKGF4njz0MdQts3QBU,3157
|
150
150
|
omlish/dataclasses/impl/slots.py,sha256=_sm-x9v1tPnXEHBHNUMTHZocgVyhZaPdvamIPPBUVyk,2635
|
151
151
|
omlish/dataclasses/impl/utils.py,sha256=aER2iL3UAtgS1BdLuEvTr9Tr2wC28wk1kiOeO-jIymw,6138
|
152
|
-
omlish/diag/__init__.py,sha256=
|
152
|
+
omlish/diag/__init__.py,sha256=4S8v0myJM4Zld6_FV6cPe_nSv0aJb6kXftEit0HkiGE,1141
|
153
153
|
omlish/diag/asts.py,sha256=BveUUNUcaAm4Hg55f4ZxGSI313E4L8cCZ5XjHpEkKVI,3325
|
154
154
|
omlish/diag/debug.py,sha256=YPzQXiBAJMYHYpBKzx0QhlLMZokjR5kkAVLodA3yddQ,424
|
155
155
|
omlish/diag/procfs.py,sha256=vBovaMvAUKdl7FbtFq3TNsSmdhs8DaYfhoEsKeWYta8,9704
|
@@ -158,7 +158,7 @@ omlish/diag/ps.py,sha256=1JWxZen3fVG-20R6ZZ8BtO_gpzw_5bhHZiKdoHkgxoU,1004
|
|
158
158
|
omlish/diag/pydevd.py,sha256=Fsx9rfCOnwLD6RLBqH0uAdtq75rbNeBAQfiDvIBd3e0,7295
|
159
159
|
omlish/diag/threads.py,sha256=1-x02VCDZ407gfbtXm1pWK-ubqhqfePm9PMqkHCVoqk,3642
|
160
160
|
omlish/diag/_pycharm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
161
|
-
omlish/diag/_pycharm/runhack.py,sha256=
|
161
|
+
omlish/diag/_pycharm/runhack.py,sha256=LFxuv7WibkC6Q7JmcKtPdytzinYFMZWqjane7YjPiVI,34463
|
162
162
|
omlish/diag/pycharm/__init__.py,sha256=sT-ub7flKeCCbM_i32z9-eGV8hgGJ45hwdcqtGDkVRY,153
|
163
163
|
omlish/diag/pycharm/cli.py,sha256=7SRh6yj8S5YGda4bq9BD4Kzwtgg4_Wa-K202ReZN2iI,1011
|
164
164
|
omlish/diag/pycharm/pycharm.py,sha256=g-IfF8FBH93o6k_KDrLy8kIiFSLe3n39I2URipfFy0Q,3115
|
@@ -249,10 +249,10 @@ omlish/lang/datetimes.py,sha256=ehI_DhQRM-bDxAavnp470XcekbbXc4Gdw9y1KpHDJT0,223
|
|
249
249
|
omlish/lang/descriptors.py,sha256=RRBbkMgTzg82fFFE4D0muqobpM-ZZaOta6yB1lpX3s8,6617
|
250
250
|
omlish/lang/exceptions.py,sha256=qJBo3NU1mOWWm-NhQUHCY5feYXR3arZVyEHinLsmRH4,47
|
251
251
|
omlish/lang/functions.py,sha256=kkPfcdocg-OmyN7skIqrFxNvqAv89Zc_kXKYAN8vw8g,3895
|
252
|
-
omlish/lang/imports.py,sha256=
|
252
|
+
omlish/lang/imports.py,sha256=Oy7iInOTqgZv6nyRbnvGrPv4cKKIAzPbhfDXCajDUcc,6626
|
253
253
|
omlish/lang/iterables.py,sha256=_q6rHbdFfW3VBqez0IV3rUABoNxsA_oBv_sykm5zsbQ,2243
|
254
254
|
omlish/lang/maybes.py,sha256=NYHZDjqDtwPMheDrj2VtUVujxRPf8Qpgk4ZlZCTvBZc,3492
|
255
|
-
omlish/lang/objects.py,sha256=
|
255
|
+
omlish/lang/objects.py,sha256=t7Pvj9ILoxfdAMy5HC7bb9LfUokW5WfpLaoH2YYyTjQ,4460
|
256
256
|
omlish/lang/resolving.py,sha256=OuN2mDTPNyBUbcrswtvFKtj4xgH4H4WglgqSKv3MTy0,1606
|
257
257
|
omlish/lang/resources.py,sha256=-NmVTrSMKFZ6smVfOMz46ekZYVGgYh8cPooxQlFpG6s,2135
|
258
258
|
omlish/lang/strings.py,sha256=BsciSYnckD4vGtC6kmtnugR9IN6CIHdcjO4nZu-pSAw,3898
|
@@ -386,12 +386,12 @@ omlish/sql/alchemy/duckdb.py,sha256=kr7pIhiBLNAuZrcigHDtFg9zHkVcrRW3LfryO9VJ4mk,
|
|
386
386
|
omlish/sql/alchemy/exprs.py,sha256=gO4Fj4xEY-PuDgV-N8hBMy55glZz7O-4H7v1LWabfZY,323
|
387
387
|
omlish/sql/alchemy/secrets.py,sha256=EMfy4EfTbEvrlv_41oOhn8qsoF-eTkY7HciPenIE6rI,178
|
388
388
|
omlish/sql/alchemy/sqlean.py,sha256=RbkuOuFIfM4fowwKk8-sQ6Dxk-tTUwxS94nY5Kxt52s,403
|
389
|
-
omlish/testing/__init__.py,sha256=
|
390
|
-
omlish/testing/testing.py,sha256=
|
389
|
+
omlish/testing/__init__.py,sha256=M_BQrcCHkoL-ZvE-UpQ8XxXNYRRawhjUz4rCJnAqM2A,152
|
390
|
+
omlish/testing/testing.py,sha256=TT2wwSzPZ_KhIvKxpM1qc1yHKD-LHDNgGrcr_h8vs7c,2895
|
391
391
|
omlish/testing/pytest/__init__.py,sha256=B2nyJrjIoNcEopbg0IZ5UUDs4OHmQ8qqElFJfGcDdas,257
|
392
392
|
omlish/testing/pytest/helpers.py,sha256=TJpD60mBtLi9FtxX4TThfuXvg5FIRPSiZk1aeRwe-D4,197
|
393
393
|
omlish/testing/pytest/marks.py,sha256=ExuwitbMr1txMbaAcWZ652pYa30M-i3wVacnjqschTs,424
|
394
|
-
omlish/testing/pytest/skip.py,sha256=
|
394
|
+
omlish/testing/pytest/skip.py,sha256=NxTkAQiS3HKZR3sfFdxOR2LCFwtCveY6Ap-qtexiZbw,839
|
395
395
|
omlish/testing/pytest/inject/__init__.py,sha256=pdRKv1HcDmJ_yArKJbYITPXXZthRSGgBJWqITr0Er38,117
|
396
396
|
omlish/testing/pytest/inject/harness.py,sha256=v4DaKJ0KL8oQjzIMK43Gh8GHP4hiI6-lY37O9lyOHRk,5724
|
397
397
|
omlish/testing/pytest/plugins/__init__.py,sha256=ys1zXrYrNm7Uo6YOIVJ6Bd3dQo6kv387k7MbTYlqZSI,467
|
@@ -399,7 +399,7 @@ omlish/testing/pytest/plugins/_registry.py,sha256=IK04KlBgiOJxKAyCCgjpX2R-9tE-bt
|
|
399
399
|
omlish/testing/pytest/plugins/asyncs.py,sha256=SV6oKCy50CGkzLGYX-CT4MfWNqsrH8ONEbIWC3tFcHA,5324
|
400
400
|
omlish/testing/pytest/plugins/depskip.py,sha256=xithY-OMtjwhv8mcRNkv-WI_PSQtHldQ8H1s60MIXkk,2673
|
401
401
|
omlish/testing/pytest/plugins/logging.py,sha256=1zs6Xe54wiaSjabCviaFXwKkoN97CKm3mA5mEoUeJGs,380
|
402
|
-
omlish/testing/pytest/plugins/managermarks.py,sha256=
|
402
|
+
omlish/testing/pytest/plugins/managermarks.py,sha256=AP3ty-QB-8O5DkulwUOudBlUOvXMHhBfNyY-0yCmejk,1520
|
403
403
|
omlish/testing/pytest/plugins/pydevd.py,sha256=u1fxfCgFw4wGKBkMV_H_l9WI8JoUwlRff4iHEr_WYeE,319
|
404
404
|
omlish/testing/pytest/plugins/repeat.py,sha256=flSQzE9GFOWksVKz-mUGnpxJpv3yRqn1G4K8pW7JHs0,498
|
405
405
|
omlish/testing/pytest/plugins/skips.py,sha256=EoZDg1uWccgbAegmzqI85c7RliycD1e2J4Y7vfDRhwM,1041
|
@@ -412,9 +412,9 @@ omlish/text/delimit.py,sha256=ubPXcXQmtbOVrUsNh5gH1mDq5H-n1y2R4cPL5_DQf68,4928
|
|
412
412
|
omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,3296
|
413
413
|
omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
|
414
414
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
415
|
-
omlish-0.0.0.
|
416
|
-
omlish-0.0.0.
|
417
|
-
omlish-0.0.0.
|
418
|
-
omlish-0.0.0.
|
419
|
-
omlish-0.0.0.
|
420
|
-
omlish-0.0.0.
|
415
|
+
omlish-0.0.0.dev69.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
416
|
+
omlish-0.0.0.dev69.dist-info/METADATA,sha256=60bC4G8a17heJL6mUwr4rCB1VrowRiVCdww0ArlUTXk,4167
|
417
|
+
omlish-0.0.0.dev69.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
|
418
|
+
omlish-0.0.0.dev69.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
419
|
+
omlish-0.0.0.dev69.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
420
|
+
omlish-0.0.0.dev69.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|