omlish 0.0.0.dev438__py3-none-any.whl → 0.0.0.dev440__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/dataclasses/impl/api/classes/make.py +1 -1
- omlish/dataclasses/tools/static.py +1 -1
- omlish/formats/json/stream/__init__.py +2 -2
- omlish/formats/json/stream/building.py +2 -2
- omlish/formats/json/stream/parsing.py +4 -4
- omlish/formats/json/stream/rendering.py +6 -6
- omlish/formats/json/stream/utils.py +2 -2
- omlish/inject/__init__.py +1 -0
- omlish/iterators/__init__.py +2 -0
- omlish/iterators/transforms.py +204 -0
- omlish/lang/classes/bindable.py +1 -1
- omlish/lang/classes/restrict.py +8 -0
- omlish/lifecycles/contextmanagers.py +1 -1
- omlish/lifecycles/controller.py +1 -1
- omlish/lite/attrops.py +9 -3
- omlish/lite/inject.py +1 -0
- omlish/lite/marshal.py +1 -0
- omlish/logs/_amalg.py +8 -0
- omlish/reflect/types.py +2 -2
- omlish/sql/queries/_marshal.py +1 -1
- {omlish-0.0.0.dev438.dist-info → omlish-0.0.0.dev440.dist-info}/METADATA +2 -2
- {omlish-0.0.0.dev438.dist-info → omlish-0.0.0.dev440.dist-info}/RECORD +27 -25
- {omlish-0.0.0.dev438.dist-info → omlish-0.0.0.dev440.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev438.dist-info → omlish-0.0.0.dev440.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev438.dist-info → omlish-0.0.0.dev440.dist-info}/licenses/LICENSE +0 -0
- {omlish-0.0.0.dev438.dist-info → omlish-0.0.0.dev440.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
@@ -142,7 +142,7 @@ def make_dataclass( # noqa
|
|
142
142
|
|
143
143
|
if module is None:
|
144
144
|
try:
|
145
|
-
module = sys._getframemodulename(_frame_offset) or '__main__' #
|
145
|
+
module = sys._getframemodulename(_frame_offset) or '__main__' # noqa
|
146
146
|
except AttributeError:
|
147
147
|
with contextlib.suppress(AttributeError, ValueError):
|
148
148
|
module = sys._getframe(_frame_offset).f_globals.get('__name__', '__main__') # noqa
|
@@ -142,7 +142,7 @@ class Static(lang.Abstract):
|
|
142
142
|
n_md[_ExtraFieldParamsMetadata] = {
|
143
143
|
fs_f.name: getattr(x_fs, fs_f.name)
|
144
144
|
for fs_f in dc.fields(FieldSpec) # noqa
|
145
|
-
if fs_f not in dc.Field.__slots__
|
145
|
+
if fs_f not in dc.Field.__slots__
|
146
146
|
and fs_f.name not in ('default', 'default_factory')
|
147
147
|
}
|
148
148
|
new_fld.metadata = n_md # type: ignore[assignment]
|
@@ -5,8 +5,8 @@ from .parsing import BeginArray
|
|
5
5
|
from .parsing import BeginObject
|
6
6
|
from .parsing import EndArray
|
7
7
|
from .parsing import EndObject
|
8
|
+
from .parsing import Event
|
8
9
|
from .parsing import JsonStreamObject
|
9
|
-
from .parsing import JsonStreamParserEvent
|
10
10
|
from .parsing import Key
|
11
11
|
|
12
12
|
|
@@ -62,7 +62,7 @@ class JsonValueBuilder:
|
|
62
62
|
else:
|
63
63
|
raise self.StateError
|
64
64
|
|
65
|
-
def __call__(self, e:
|
65
|
+
def __call__(self, e: Event) -> ta.Iterable[ta.Any]:
|
66
66
|
stk = self._stack
|
67
67
|
|
68
68
|
#
|
@@ -35,7 +35,7 @@ class EndArray(lang.Marker):
|
|
35
35
|
pass
|
36
36
|
|
37
37
|
|
38
|
-
|
38
|
+
Event: ta.TypeAlias = ta.Union[ # noqa
|
39
39
|
type[BeginObject],
|
40
40
|
Key,
|
41
41
|
type[EndObject],
|
@@ -47,7 +47,7 @@ JsonStreamParserEvent: ta.TypeAlias = ta.Union[ # noqa
|
|
47
47
|
]
|
48
48
|
|
49
49
|
|
50
|
-
class
|
50
|
+
class Events(lang.Namespace):
|
51
51
|
BeginObject = BeginObject
|
52
52
|
Key = Key
|
53
53
|
EndObject = EndObject
|
@@ -59,7 +59,7 @@ class JsonStreamParserEvents(lang.Namespace):
|
|
59
59
|
##
|
60
60
|
|
61
61
|
|
62
|
-
def yield_parser_events(obj: ta.Any) -> ta.
|
62
|
+
def yield_parser_events(obj: ta.Any) -> ta.Iterator[Event]:
|
63
63
|
if isinstance(obj, SCALAR_VALUE_TYPES):
|
64
64
|
yield obj # type: ignore
|
65
65
|
|
@@ -95,7 +95,7 @@ class JsonStreamObject(list):
|
|
95
95
|
return f'{self.__class__.__name__}({super().__repr__()})'
|
96
96
|
|
97
97
|
|
98
|
-
class JsonStreamParser(GenMachine[Token,
|
98
|
+
class JsonStreamParser(GenMachine[Token, Event]):
|
99
99
|
def __init__(
|
100
100
|
self,
|
101
101
|
*,
|
@@ -7,14 +7,14 @@ from .parsing import BeginArray
|
|
7
7
|
from .parsing import BeginObject
|
8
8
|
from .parsing import EndArray
|
9
9
|
from .parsing import EndObject
|
10
|
-
from .parsing import
|
10
|
+
from .parsing import Event
|
11
11
|
from .parsing import Key
|
12
12
|
|
13
13
|
|
14
14
|
##
|
15
15
|
|
16
16
|
|
17
|
-
class StreamJsonRenderer(AbstractJsonRenderer[ta.Iterable[
|
17
|
+
class StreamJsonRenderer(AbstractJsonRenderer[ta.Iterable[Event]]):
|
18
18
|
def __init__(
|
19
19
|
self,
|
20
20
|
*,
|
@@ -36,7 +36,7 @@ class StreamJsonRenderer(AbstractJsonRenderer[ta.Iterable[JsonStreamParserEvent]
|
|
36
36
|
self,
|
37
37
|
o: ta.Any,
|
38
38
|
state: AbstractJsonRenderer.State = AbstractJsonRenderer.State.VALUE,
|
39
|
-
) -> ta.
|
39
|
+
) -> ta.Iterator[str]:
|
40
40
|
if self._style is not None:
|
41
41
|
pre, post = self._style(o, state)
|
42
42
|
yield pre
|
@@ -52,7 +52,7 @@ class StreamJsonRenderer(AbstractJsonRenderer[ta.Iterable[JsonStreamParserEvent]
|
|
52
52
|
if post:
|
53
53
|
yield post
|
54
54
|
|
55
|
-
def _render(self, e:
|
55
|
+
def _render(self, e: Event) -> ta.Iterator[str]:
|
56
56
|
if self._need_delimit:
|
57
57
|
yield self._delimiter
|
58
58
|
self._need_delimit = False
|
@@ -124,12 +124,12 @@ class StreamJsonRenderer(AbstractJsonRenderer[ta.Iterable[JsonStreamParserEvent]
|
|
124
124
|
else:
|
125
125
|
raise TypeError(e)
|
126
126
|
|
127
|
-
def render(self, events: ta.Iterable[
|
127
|
+
def render(self, events: ta.Iterable[Event]) -> ta.Iterator[str]:
|
128
128
|
for e in events:
|
129
129
|
yield from self._render(e)
|
130
130
|
|
131
131
|
@classmethod
|
132
|
-
def render_str(cls, i: ta.Iterable[
|
132
|
+
def render_str(cls, i: ta.Iterable[Event], /, **kwargs: ta.Any) -> str:
|
133
133
|
out = io.StringIO()
|
134
134
|
for s in cls(**kwargs).render(i):
|
135
135
|
out.write(s)
|
@@ -31,8 +31,8 @@ from .building import JsonValueBuilder
|
|
31
31
|
from .errors import JsonStreamError
|
32
32
|
from .lexing import JsonStreamLexer
|
33
33
|
from .lexing import Token
|
34
|
+
from .parsing import Event
|
34
35
|
from .parsing import JsonStreamParser
|
35
|
-
from .parsing import JsonStreamParserEvent
|
36
36
|
|
37
37
|
|
38
38
|
##
|
@@ -110,7 +110,7 @@ class DebugJsonStreamValueParser(JsonStreamValueParser):
|
|
110
110
|
|
111
111
|
self._chars: list[str] = []
|
112
112
|
self._tokens: list[Token] = []
|
113
|
-
self._events: list[
|
113
|
+
self._events: list[Event] = []
|
114
114
|
self._values: list[ta.Any] = []
|
115
115
|
|
116
116
|
def feed(self, i: ta.Iterable[str]) -> ta.Iterator[ta.Any]:
|
omlish/inject/__init__.py
CHANGED
omlish/iterators/__init__.py
CHANGED
@@ -0,0 +1,204 @@
|
|
1
|
+
import abc
|
2
|
+
import dataclasses as dc
|
3
|
+
import itertools
|
4
|
+
import typing as ta
|
5
|
+
|
6
|
+
from .. import lang
|
7
|
+
|
8
|
+
|
9
|
+
T = ta.TypeVar('T')
|
10
|
+
U = ta.TypeVar('U')
|
11
|
+
|
12
|
+
Transform: ta.TypeAlias = ta.Callable[[ta.Iterable[T]], ta.Iterable[U]]
|
13
|
+
|
14
|
+
X0 = ta.TypeVar('X0')
|
15
|
+
X1 = ta.TypeVar('X1')
|
16
|
+
X2 = ta.TypeVar('X2')
|
17
|
+
X3 = ta.TypeVar('X3')
|
18
|
+
X4 = ta.TypeVar('X4')
|
19
|
+
X5 = ta.TypeVar('X5')
|
20
|
+
|
21
|
+
|
22
|
+
##
|
23
|
+
|
24
|
+
|
25
|
+
_filter = filter
|
26
|
+
_map = map
|
27
|
+
_zip = zip
|
28
|
+
|
29
|
+
|
30
|
+
##
|
31
|
+
|
32
|
+
|
33
|
+
class Transform_(lang.Abstract, ta.Generic[T, U]): # noqa
|
34
|
+
@abc.abstractmethod
|
35
|
+
def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[U]:
|
36
|
+
raise NotImplementedError
|
37
|
+
|
38
|
+
|
39
|
+
##
|
40
|
+
|
41
|
+
|
42
|
+
@dc.dataclass(frozen=True)
|
43
|
+
class Filter(Transform_[T, T]):
|
44
|
+
fn: ta.Callable[[T], bool] | None
|
45
|
+
|
46
|
+
def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[T]:
|
47
|
+
return _filter(self.fn, it)
|
48
|
+
|
49
|
+
|
50
|
+
filter = Filter # noqa
|
51
|
+
|
52
|
+
|
53
|
+
##
|
54
|
+
|
55
|
+
|
56
|
+
@dc.dataclass(frozen=True)
|
57
|
+
class Map(Transform_[T, U]):
|
58
|
+
fn: ta.Callable[[T], U]
|
59
|
+
|
60
|
+
def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[U]:
|
61
|
+
return _map(self.fn, it)
|
62
|
+
|
63
|
+
|
64
|
+
map = Map # noqa
|
65
|
+
|
66
|
+
|
67
|
+
##
|
68
|
+
|
69
|
+
|
70
|
+
@dc.dataclass(frozen=True)
|
71
|
+
class Apply(Transform_[T, T]):
|
72
|
+
fn: ta.Callable[[T], ta.Any]
|
73
|
+
|
74
|
+
def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[T]:
|
75
|
+
return _map(lambda e: (self.fn(e), e)[1], it)
|
76
|
+
|
77
|
+
|
78
|
+
apply = Apply
|
79
|
+
|
80
|
+
|
81
|
+
##
|
82
|
+
|
83
|
+
|
84
|
+
@dc.dataclass(frozen=True)
|
85
|
+
class Flatten(Transform_[ta.Iterable[T], T]):
|
86
|
+
def __call__(self, it: ta.Iterable[ta.Iterable[T]]) -> ta.Iterable[U]:
|
87
|
+
return itertools.chain.from_iterable(it) # type: ignore[arg-type]
|
88
|
+
|
89
|
+
|
90
|
+
flatten = Flatten
|
91
|
+
|
92
|
+
|
93
|
+
##
|
94
|
+
|
95
|
+
|
96
|
+
@dc.dataclass(frozen=True)
|
97
|
+
class FlatMap(Transform_[T, U]):
|
98
|
+
fn: ta.Callable[[T], ta.Iterable[U]]
|
99
|
+
|
100
|
+
def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[U]:
|
101
|
+
return itertools.chain.from_iterable(_map(self.fn, it))
|
102
|
+
|
103
|
+
|
104
|
+
flat_map = FlatMap
|
105
|
+
|
106
|
+
# Alternatively:
|
107
|
+
# def flat_map(fn: ta.Callable[[T], ta.Iterable[U]]) -> Transform[T, U]:
|
108
|
+
# return compose(map(fn), flatten())
|
109
|
+
|
110
|
+
|
111
|
+
##
|
112
|
+
|
113
|
+
|
114
|
+
@dc.dataclass(frozen=True)
|
115
|
+
class Compose(Transform_[T, U]):
|
116
|
+
tfs: ta.Sequence[Transform]
|
117
|
+
|
118
|
+
def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[U]:
|
119
|
+
for tf in self.tfs:
|
120
|
+
it = tf(it)
|
121
|
+
return it # type: ignore[return-value]
|
122
|
+
|
123
|
+
|
124
|
+
@ta.overload
|
125
|
+
def compose(
|
126
|
+
tf0: Transform[T, U],
|
127
|
+
) -> Transform[T, U]:
|
128
|
+
...
|
129
|
+
|
130
|
+
|
131
|
+
@ta.overload
|
132
|
+
def compose(
|
133
|
+
tf0: Transform[T, X0],
|
134
|
+
tf1: Transform[X0, U],
|
135
|
+
) -> Transform[T, U]:
|
136
|
+
...
|
137
|
+
|
138
|
+
|
139
|
+
@ta.overload
|
140
|
+
def compose(
|
141
|
+
tf0: Transform[T, X0],
|
142
|
+
tf1: Transform[X0, X1],
|
143
|
+
tf2: Transform[X1, U],
|
144
|
+
) -> Transform[T, U]:
|
145
|
+
...
|
146
|
+
|
147
|
+
|
148
|
+
@ta.overload
|
149
|
+
def compose(
|
150
|
+
tf0: Transform[T, X0],
|
151
|
+
tf1: Transform[X0, X1],
|
152
|
+
tf2: Transform[X1, X2],
|
153
|
+
tf3: Transform[X2, U],
|
154
|
+
) -> Transform[T, U]:
|
155
|
+
...
|
156
|
+
|
157
|
+
|
158
|
+
@ta.overload
|
159
|
+
def compose(
|
160
|
+
tf0: Transform[T, X0],
|
161
|
+
tf1: Transform[X0, X1],
|
162
|
+
tf2: Transform[X1, X2],
|
163
|
+
tf3: Transform[X2, X3],
|
164
|
+
tf4: Transform[X3, U],
|
165
|
+
) -> Transform[T, U]:
|
166
|
+
...
|
167
|
+
|
168
|
+
|
169
|
+
@ta.overload
|
170
|
+
def compose(
|
171
|
+
tf0: Transform[T, X0],
|
172
|
+
tf1: Transform[X0, X1],
|
173
|
+
tf2: Transform[X1, X2],
|
174
|
+
tf3: Transform[X2, X3],
|
175
|
+
tf4: Transform[X3, X4],
|
176
|
+
tf5: Transform[X4, U],
|
177
|
+
) -> Transform[T, U]:
|
178
|
+
...
|
179
|
+
|
180
|
+
|
181
|
+
@ta.overload
|
182
|
+
def compose(
|
183
|
+
tf0: Transform[T, X0],
|
184
|
+
tf1: Transform[X0, X1],
|
185
|
+
tf2: Transform[X1, X2],
|
186
|
+
tf3: Transform[X2, X3],
|
187
|
+
tf4: Transform[X3, X4],
|
188
|
+
tf5: Transform[X4, X5],
|
189
|
+
tf6: Transform[X5, U],
|
190
|
+
) -> Transform[T, U]:
|
191
|
+
...
|
192
|
+
|
193
|
+
|
194
|
+
@ta.overload
|
195
|
+
def compose(
|
196
|
+
*tf: Transform,
|
197
|
+
) -> Transform:
|
198
|
+
...
|
199
|
+
|
200
|
+
|
201
|
+
def compose(tf0, *tfn):
|
202
|
+
if not tfn:
|
203
|
+
return tf0
|
204
|
+
return Compose([tf0, *tfn])
|
omlish/lang/classes/bindable.py
CHANGED
@@ -19,7 +19,7 @@ class _ClassOrInstanceMethod:
|
|
19
19
|
|
20
20
|
class BindableClass(ta.Generic[T]):
|
21
21
|
# FIXME: apparently can't have TypeVars in ClassVars, but could stick in a @classmethod (which gets transformed)...
|
22
|
-
_bound: ta.ClassVar[type[T] | None] = None
|
22
|
+
_bound: ta.ClassVar[type[T] | None] = None
|
23
23
|
|
24
24
|
def __init__(self, *, _bound):
|
25
25
|
super().__init__()
|
omlish/lang/classes/restrict.py
CHANGED
@@ -32,6 +32,14 @@ class Final(Abstract):
|
|
32
32
|
elif Final in base.__mro__:
|
33
33
|
raise FinalTypeError(base)
|
34
34
|
|
35
|
+
# Per `ta.final`:
|
36
|
+
try:
|
37
|
+
cls.__final__ = True # type: ignore[attr-defined]
|
38
|
+
except (AttributeError, TypeError):
|
39
|
+
# Skip the attribute silently if it is not writable. AttributeError happens if the object has __slots__ or
|
40
|
+
# a read-only property, TypeError if it's a builtin class.
|
41
|
+
pass
|
42
|
+
|
35
43
|
|
36
44
|
##
|
37
45
|
|
@@ -36,7 +36,7 @@ class LifecycleContextManager(ta.Generic[LifecycleT]):
|
|
36
36
|
self._lifecycle = lifecycle
|
37
37
|
self._controller = lifecycle if isinstance(lifecycle, LifecycleController) else LifecycleController(lifecycle)
|
38
38
|
|
39
|
-
__repr__ = lang.attr_ops(
|
39
|
+
__repr__ = lang.attr_ops(lambda o: (o.lifecycle, o.state)).repr
|
40
40
|
|
41
41
|
@property
|
42
42
|
def lifecycle(self) -> LifecycleT:
|
omlish/lifecycles/controller.py
CHANGED
@@ -47,7 +47,7 @@ class AnyLifecycleController(AnyLifecycle[R], lang.Abstract, ta.Generic[AnyLifec
|
|
47
47
|
self._state = LifecycleStates.NEW
|
48
48
|
self._listeners: list[AnyLifecycleListener[AnyLifecycleT, R]] = []
|
49
49
|
|
50
|
-
__repr__ = lang.attr_ops(
|
50
|
+
__repr__ = lang.attr_ops(lambda o: (o.lifecycle, o.state)).repr
|
51
51
|
|
52
52
|
@property
|
53
53
|
def lifecycle(self) -> AnyLifecycleT:
|
omlish/lite/attrops.py
CHANGED
@@ -51,6 +51,7 @@ class AttrOps(ta.Generic[T]):
|
|
51
51
|
o: ta.Union[
|
52
52
|
str,
|
53
53
|
ta.Tuple[str, str],
|
54
|
+
ta.Mapping[str, ta.Any],
|
54
55
|
'AttrOps.Attr',
|
55
56
|
],
|
56
57
|
) -> 'AttrOps.Attr':
|
@@ -58,12 +59,16 @@ class AttrOps(ta.Generic[T]):
|
|
58
59
|
return o
|
59
60
|
elif isinstance(o, str):
|
60
61
|
return cls(o)
|
61
|
-
|
62
|
+
elif isinstance(o, tuple):
|
62
63
|
name, disp = o
|
63
64
|
return cls(
|
64
65
|
name,
|
65
66
|
display=disp,
|
66
67
|
)
|
68
|
+
elif isinstance(o, ta.Mapping):
|
69
|
+
return cls(**o)
|
70
|
+
else:
|
71
|
+
raise TypeError(o)
|
67
72
|
|
68
73
|
@property
|
69
74
|
def name(self) -> str:
|
@@ -87,6 +92,7 @@ class AttrOps(ta.Generic[T]):
|
|
87
92
|
*attrs: ta.Sequence[ta.Union[
|
88
93
|
str,
|
89
94
|
ta.Tuple[str, str],
|
95
|
+
ta.Mapping[str, ta.Any],
|
90
96
|
Attr,
|
91
97
|
]],
|
92
98
|
with_module: bool = False,
|
@@ -171,8 +177,8 @@ class AttrOps(ta.Generic[T]):
|
|
171
177
|
|
172
178
|
attrs: ta.List[AttrOps.Attr] = []
|
173
179
|
for o in raw:
|
174
|
-
if isinstance(o, AttrOps.Attr):
|
175
|
-
attrs.append(o)
|
180
|
+
if isinstance(o, (AttrOps.Attr, ta.Mapping)):
|
181
|
+
attrs.append(AttrOps.Attr.of(o))
|
176
182
|
continue
|
177
183
|
|
178
184
|
if isinstance(o, tuple):
|
omlish/lite/inject.py
CHANGED
omlish/lite/marshal.py
CHANGED
omlish/logs/_amalg.py
ADDED
omlish/reflect/types.py
CHANGED
@@ -225,7 +225,7 @@ def is_simple_generic_alias_type(oty: type) -> bool:
|
|
225
225
|
|
226
226
|
def get_params(obj: ta.Any) -> tuple[ta.TypeVar, ...]:
|
227
227
|
if isinstance(obj, type):
|
228
|
-
if issubclass(obj, ta.Generic):
|
228
|
+
if issubclass(obj, ta.Generic):
|
229
229
|
return obj.__dict__.get('__parameters__', ()) # noqa
|
230
230
|
|
231
231
|
if (ks := _KNOWN_SPECIALS.get_by_origin(obj)) is not None:
|
@@ -591,7 +591,7 @@ class Reflector:
|
|
591
591
|
obj,
|
592
592
|
)
|
593
593
|
|
594
|
-
if issubclass(obj, ta.Generic):
|
594
|
+
if issubclass(obj, ta.Generic):
|
595
595
|
params = get_params(obj)
|
596
596
|
if params:
|
597
597
|
return Generic(
|
omlish/sql/queries/_marshal.py
CHANGED
@@ -40,7 +40,7 @@ class OpMarshalerUnmarshaler(msh.Marshaler, msh.Unmarshaler):
|
|
40
40
|
return col.make_map(((o.name, o) for _, o in self.ns), strict=True)
|
41
41
|
|
42
42
|
def marshal(self, ctx: msh.MarshalContext, o: ta.Any) -> msh.Value:
|
43
|
-
return check.isinstance(o, self.ty).name
|
43
|
+
return check.isinstance(o, self.ty).name
|
44
44
|
|
45
45
|
def unmarshal(self, ctx: msh.UnmarshalContext, v: msh.Value) -> ta.Any:
|
46
46
|
return self.by_name[check.isinstance(v, str)]
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omlish
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev440
|
4
4
|
Summary: omlish
|
5
5
|
Author: wrmsr
|
6
6
|
License-Expression: BSD-3-Clause
|
@@ -150,7 +150,7 @@ dependencies of any kind**.
|
|
150
150
|
- **[identity](https://github.com/wrmsr/omlish/blob/master/omlish/collections/identity.py)** - Identity-keyed
|
151
151
|
collections.
|
152
152
|
- **[sorted](https://github.com/wrmsr/omlish/blob/master/omlish/collections/sorted)** - Interfaces for value-sorted
|
153
|
-
collections and key-sorted mappings, and a simple but
|
153
|
+
collections and key-sorted mappings, and a simple but correct skiplist-backed implementation.
|
154
154
|
- **[persistent](https://github.com/wrmsr/omlish/blob/master/omlish/collections/persistent)** - Interfaces for
|
155
155
|
[persistent](https://en.wikipedia.org/wiki/Persistent_data_structure) maps, and a simple but correct treap-backed
|
156
156
|
implementation.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.omlish-manifests.json,sha256=FLw7xkPiSXuImZgqSP8BwrEib2R1doSzUPLUkc-QUIA,8410
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=ztLqhA0Gv6PdeLN7Br7ZcSzbhP8AxdZD1iLcFEWqcI4,3575
|
3
3
|
omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
|
4
4
|
omlish/c3.py,sha256=ZNIMl1kwg3qdei4DiUrJPQe5M81S1e76N-GuNSwLBAE,8683
|
5
5
|
omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
|
@@ -146,7 +146,7 @@ omlish/dataclasses/impl/api/__init__.py,sha256=k5iS9QOwf_f4iOfGffYhnqDOcmEIwEUUT
|
|
146
146
|
omlish/dataclasses/impl/api/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
147
147
|
omlish/dataclasses/impl/api/classes/conversion.py,sha256=T1I-aZKui2tv8rknuw9yCvGQLTrFnzTuHDFoezhE0ko,908
|
148
148
|
omlish/dataclasses/impl/api/classes/decorator.py,sha256=LqkAjNFpUeLThnnkzt1tIYKtIf8maDCkjrZzSbABZbg,4067
|
149
|
-
omlish/dataclasses/impl/api/classes/make.py,sha256=
|
149
|
+
omlish/dataclasses/impl/api/classes/make.py,sha256=xcah0foeKtHa8r3H3Osr2xXBNpkIa_kImW0zfoECBVI,5214
|
150
150
|
omlish/dataclasses/impl/api/classes/metadata.py,sha256=sMZgtoZaybfCoBKOVj7hKc-xqfU2Lca9WFrqg8UAAsE,2773
|
151
151
|
omlish/dataclasses/impl/api/classes/params.py,sha256=cJAMxLHgW6xyKURlCnDQpA-TYfOgWpVBCavie-IZTOM,2000
|
152
152
|
omlish/dataclasses/impl/api/fields/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -201,7 +201,7 @@ omlish/dataclasses/tools/modifiers.py,sha256=zSw7wmYtkKXY2UTDdbVJppIEAGqkrFHBGTv
|
|
201
201
|
omlish/dataclasses/tools/only_.py,sha256=hPpqzr9YW09YmlX_QJNU2aePHYJEIrbGCPwmnvVS_to,849
|
202
202
|
omlish/dataclasses/tools/replace.py,sha256=izM9lPT6AhEtjqn22auqaofa0j69KO7iootF-2Uj4cY,396
|
203
203
|
omlish/dataclasses/tools/repr.py,sha256=KFvF6uv2YYIKq8O3ZNbEAS1tqRQALsJ-SUlBNPd5_GI,190
|
204
|
-
omlish/dataclasses/tools/static.py,sha256=
|
204
|
+
omlish/dataclasses/tools/static.py,sha256=byDnPc0W15s3YPQNC9oyCASKVNxCytrHGLvDky4RGNc,8753
|
205
205
|
omlish/diag/__init__.py,sha256=c1q8vuapGH1YiYdU300FIJXMI1MOcnLNBZXr-zc8BXk,1181
|
206
206
|
omlish/diag/asts.py,sha256=MWh9XAG3m9L10FIJCyoNT2aU4Eft6tun_x9K0riq6Dk,3332
|
207
207
|
omlish/diag/debug.py,sha256=ClED7kKXeVMyKrjGIxcq14kXk9kvUJfytBQwK9y7c4Q,1637
|
@@ -273,13 +273,13 @@ omlish/formats/json/backends/jiter.py,sha256=8qv_XWGpcupPtVm6Z_egHio_iY1Kk8eqkvX
|
|
273
273
|
omlish/formats/json/backends/orjson.py,sha256=X2jhKgUYYwaVuAppPQmfyncbOs2PJ7drqH5BioP-AYI,3831
|
274
274
|
omlish/formats/json/backends/std.py,sha256=Hhiug5CkC1TXLFrE9rnMR2on7xP-RliSvfYA9ill_U0,3159
|
275
275
|
omlish/formats/json/backends/ujson.py,sha256=U3iOlAURfiCdXbiNlXfIjDdtJDbDaLZsSuZriTUvbxs,2307
|
276
|
-
omlish/formats/json/stream/__init__.py,sha256=
|
277
|
-
omlish/formats/json/stream/building.py,sha256=
|
276
|
+
omlish/formats/json/stream/__init__.py,sha256=LoYSkdUX3lkQ4g9JB_F6YOeexlOEporKW8bW8tv3YXg,859
|
277
|
+
omlish/formats/json/stream/building.py,sha256=QAQaTyXuw9vkfhvzWIh_DSlypD1-HgzO855Dgz3_wFM,2517
|
278
278
|
omlish/formats/json/stream/errors.py,sha256=c8M8UAYmIZ-vWZLeKD2jMj4EDCJbr9QR8Jq_DyHjujQ,43
|
279
279
|
omlish/formats/json/stream/lexing.py,sha256=GkEhuDqAgZTOJRkroP4F_U396XtMQVNMjEqXKiCCtnU,13605
|
280
|
-
omlish/formats/json/stream/parsing.py,sha256=
|
281
|
-
omlish/formats/json/stream/rendering.py,sha256=
|
282
|
-
omlish/formats/json/stream/utils.py,sha256=
|
280
|
+
omlish/formats/json/stream/parsing.py,sha256=bnTaYcCMRh0i_mByQgq4qtVf53zJnmjPvUDwJ7-zL64,7154
|
281
|
+
omlish/formats/json/stream/rendering.py,sha256=E5SXMGcbBtgtUYYznTPZFHD4tmV_X7K3MK50V11ESRk,3611
|
282
|
+
omlish/formats/json/stream/utils.py,sha256=vX69i90DVCjAAAohpiLgsT3ZinFS_cYUfneTvx-3dxU,4959
|
283
283
|
omlish/formats/json5/__init__.py,sha256=3rwU5w5N_-dYME5kwMvXgexl-Vvo4BAmOg1N-I9Wf0M,194
|
284
284
|
omlish/formats/json5/codec.py,sha256=mywk74R7F77z7xprQd19qoJZ8sNPUEkiBD9jNCKTh0c,1603
|
285
285
|
omlish/formats/json5/errors.py,sha256=AHkR9ySjAoQdUrizpqgL8fg0M5oe5mHZkml3KZHEvC4,38
|
@@ -343,7 +343,7 @@ omlish/http/coro/server/fdio.py,sha256=qZE4g5y4XESsTObSKyVggI-yzig57gSGJb4Z0rcHv
|
|
343
343
|
omlish/http/coro/server/server.py,sha256=1B98Jj8TeZpnLVA8W-VJDHIRfxeFx2EvVbEFyEq1n7o,18697
|
344
344
|
omlish/http/coro/server/simple.py,sha256=j1RZ3niKrgGM2qFnjdYWn_eniZzay5j49Ca4L3u8vO4,3296
|
345
345
|
omlish/http/coro/server/sockets.py,sha256=24gU6wpIZuzYWKQD8UsHyYfTZlbcUFvkqXq5KVgWpQo,2261
|
346
|
-
omlish/inject/__init__.py,sha256=
|
346
|
+
omlish/inject/__init__.py,sha256=8ik0yhn0LCdDr2UMACBeatENs76yprB8pDXUNllXRWg,2954
|
347
347
|
omlish/inject/binder.py,sha256=_TNPGcqtaVqCLoxMx2LBVSvZWmAUs4JcxAqnCpy7PG0,5253
|
348
348
|
omlish/inject/bindings.py,sha256=PlvOnUREjvc6F8nOJdzl1k9SAf80icRB4qWFqDop87M,536
|
349
349
|
omlish/inject/eagers.py,sha256=JBY7PcjXt-Rg9scQ1ol9xpcoTLXkXC_Ie9uwTWdzUkA,340
|
@@ -408,10 +408,11 @@ omlish/io/fdio/handlers.py,sha256=fJDNZz_MBBMU5C1HClFOHi-G9bCzL1v8KiSswb0BvE4,14
|
|
408
408
|
omlish/io/fdio/kqueue.py,sha256=xRxDPKcOw5_bMDS0buF5xi12WHok4reNnnaYTX4kkCk,3843
|
409
409
|
omlish/io/fdio/manager.py,sha256=I4KDZGo8fkBe0LAhpN0rmP9KJHyXRynypcCYsTzEjS4,1261
|
410
410
|
omlish/io/fdio/pollers.py,sha256=5buOA47raq2PRwDuQ9pNwsahX0rP7nBm30CMcleiL08,5553
|
411
|
-
omlish/iterators/__init__.py,sha256=
|
411
|
+
omlish/iterators/__init__.py,sha256=Gy1KT06UjxL53EpqaSBzxfMrmgt1soR8mnIGZootP_c,557
|
412
412
|
omlish/iterators/iterators.py,sha256=RxW35yQ5ed8vBQ22IqpDXFx-i5JiLQdp7-pkMZXhJJ8,3159
|
413
413
|
omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,472
|
414
414
|
omlish/iterators/tools.py,sha256=M16LXrJhMdsz5ea2qH0vws30ZvhQuQSCVFSLpRf_gTg,2096
|
415
|
+
omlish/iterators/transforms.py,sha256=YHVdD9nBkS1k4kogi4Ba0UOTU_pKkuX9jGw1Tqj3UMw,3598
|
415
416
|
omlish/iterators/unique.py,sha256=BSE-eanva8byFCJi09Nt2zzTsVr8LnTqY1PIInGYRs0,1396
|
416
417
|
omlish/lang/__init__.py,sha256=HqVWUkrUArOsjGoWrL-Ck6Zz2U6kKpj2DzbpHed-k1o,10431
|
417
418
|
omlish/lang/asyncs.py,sha256=LV_4I3-WbLY8-SUXYJvKlzfL-Hd5ASFOlyPi3uMJYJk,2266
|
@@ -446,10 +447,10 @@ omlish/lang/cached/function.py,sha256=epDPy9WyGc_VaKTrEQJ3dZun-NLsvdvbbNd7jbaUM2
|
|
446
447
|
omlish/lang/cached/property.py,sha256=a4E8knrNk5LDcaW2M39RQH2Y8oqjvOm-Rps6jIJ_oeY,2780
|
447
448
|
omlish/lang/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
448
449
|
omlish/lang/classes/abstract.py,sha256=ALHIEL1ZFeXPkrxUlAm9pFH6KmWPSPXG5UIjn-k_kLs,1715
|
449
|
-
omlish/lang/classes/bindable.py,sha256=
|
450
|
+
omlish/lang/classes/bindable.py,sha256=dyTqU1udGb9W5GNdztnRdgo7AU1VvVgghKIvkFoSKEQ,1211
|
450
451
|
omlish/lang/classes/namespaces.py,sha256=RVecCT38W5h6rjf5fYBLvomyDwwFqPRWjhs40gaLHPE,3933
|
451
452
|
omlish/lang/classes/protocols.py,sha256=T98ZsHLgzw8hPvvNluxoreevoF8fD4zs8SwcnTXkLuY,701
|
452
|
-
omlish/lang/classes/restrict.py,sha256=
|
453
|
+
omlish/lang/classes/restrict.py,sha256=xHLIK20MQ_jJPQ7JVzMNhyN4Xc4eLBgrcxqDnTbeKBI,4480
|
453
454
|
omlish/lang/classes/simple.py,sha256=3AJSs-plVg2flq4SC6I39LxP0nBaB241puv3D5YCP5I,2973
|
454
455
|
omlish/lang/classes/virtual.py,sha256=J4y-uiv1RaP2rfFeptXqQ1a4MRek0TMlAFFraO_lzhs,3397
|
455
456
|
omlish/lang/imports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -463,8 +464,8 @@ omlish/lang/imports/traversal.py,sha256=pbFQIa880NGjSfcLsno2vE_G41_CLwDHb-7gWg2J
|
|
463
464
|
omlish/lifecycles/__init__.py,sha256=zOuvV4pErPwxcKUSgshmME2Duw9GrjwckpNmW3FPKng,810
|
464
465
|
omlish/lifecycles/abstract.py,sha256=1nMCFVislFq-boMD6TK9APIkRm_5OzcpSsDs2XnByVQ,2248
|
465
466
|
omlish/lifecycles/base.py,sha256=sCmzj2F-JcFD2qDsjNOPhKSbDIJaT9CEKK19RqkP-sg,2462
|
466
|
-
omlish/lifecycles/contextmanagers.py,sha256=
|
467
|
-
omlish/lifecycles/controller.py,sha256=
|
467
|
+
omlish/lifecycles/contextmanagers.py,sha256=8-i1WJA79b_Jsv-tqvEkD4hh13UaHKXDOrhYZBIGz7E,2090
|
468
|
+
omlish/lifecycles/controller.py,sha256=oFYc8m9TNwBSb6vqHxt9mFcpED7FdqehDfrIoli7fc4,4768
|
468
469
|
omlish/lifecycles/manager.py,sha256=92s1IH_gDP25PM5tFuPMP2hD_6s5fPi_VzZiDS5549g,5449
|
469
470
|
omlish/lifecycles/states.py,sha256=6gTdY3hn7-1sJ60lA3GeMx5RVKvXtFBBXE4KEjoO1Hs,1297
|
470
471
|
omlish/lifecycles/transitions.py,sha256=3IFdWGtAeoy3XRlIyW7yCKV4e4Iof9ytkqklGMRFYQs,1944
|
@@ -472,16 +473,16 @@ omlish/lite/__init__.py,sha256=cyZEpGob7XjU8DohyNxVe5CQRk4CQ5vrHL42OdhQb8w,148
|
|
472
473
|
omlish/lite/abstract.py,sha256=Z3kLviPNGLkmA8m8BZILzWxez_sP18OyzgMP3-c2-RI,4068
|
473
474
|
omlish/lite/args.py,sha256=ILJXAiN3KjIoJwY42aKpYPngUdxHIy9ssVIExFVz3fE,978
|
474
475
|
omlish/lite/asyncs.py,sha256=sTXTUTTVI8m1a1P6NxObQKk-NFKlmpcnNbucr4Fg-NU,937
|
475
|
-
omlish/lite/attrops.py,sha256=
|
476
|
+
omlish/lite/attrops.py,sha256=qmXNDpbjel3qbH2kl-gRhdu6QYepw8lnC_Z_UEBI6Y8,9039
|
476
477
|
omlish/lite/cached.py,sha256=ocQcppTwGdSnKPYMz75VoH526UUT8YtDJeRczBX0-wI,1306
|
477
478
|
omlish/lite/check.py,sha256=ytCkwZoKfOlJqylL-AGm8C2WfsWJd2q3kFbnZCzX3_M,13844
|
478
479
|
omlish/lite/configs.py,sha256=4-1uVxo-aNV7vMKa7PVNhM610eejG1WepB42-Dw2xQI,914
|
479
480
|
omlish/lite/contextmanagers.py,sha256=usDzBoNqJi98AccVlwgZoMvoBXOe9wyx2MreZtWhJy4,5863
|
480
481
|
omlish/lite/dataclasses.py,sha256=aRSCZz1jN_UI-CWJhN0SJeKxa-79vXNUZ6YOMgG31SE,3610
|
481
482
|
omlish/lite/imports.py,sha256=GyEDKL-WuHtdOKIL-cc8aFd0-bHwZFDEjAB52ItabX0,1341
|
482
|
-
omlish/lite/inject.py,sha256=
|
483
|
+
omlish/lite/inject.py,sha256=BQgjBj2mzJgMimLam-loSpQzcb31-8NYPVRQgHVv3cQ,29159
|
483
484
|
omlish/lite/json.py,sha256=m0Ce9eqUZG23-H7-oOp8n1sf4fzno5vtK4AK_4Vc-Mg,706
|
484
|
-
omlish/lite/marshal.py,sha256=
|
485
|
+
omlish/lite/marshal.py,sha256=oVqVwqTArFUj9lYhmKg_MVgnqlCAUvOnYgtU3bBu_bk,23020
|
485
486
|
omlish/lite/maybes.py,sha256=NusCpK0FVqkIutw6_Wldn69G5VyKYhat7SegBIQmGpk,4412
|
486
487
|
omlish/lite/maysync.py,sha256=NiltEfX_mc7jWgWZ9XAqkDzMlLVprTAZvXRObXJT_IE,14926
|
487
488
|
omlish/lite/objects.py,sha256=HzN_4J6w6WDLKDrW8jSNUKgfAR5vUsB42rtSCu04oqQ,1921
|
@@ -497,6 +498,7 @@ omlish/lite/types.py,sha256=QM9whf55r7TmmQBRApIWSlyVKsl1p_jcut_YheyZMFY,146
|
|
497
498
|
omlish/lite/typing.py,sha256=m2CyJTz2OVOCPRvp-0UuEx7oleZgXqs3rYXijE0bTsA,1280
|
498
499
|
omlish/lite/wrappers.py,sha256=d00Ls2kFHuogKd5wEBaU65VNCN10YXIZtiwu1mbMpmA,530
|
499
500
|
omlish/logs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
501
|
+
omlish/logs/_amalg.py,sha256=XTfwEPyxNLHgDq3rEDa5WnotoyFIxvvcAKeqOFZxBY8,204
|
500
502
|
omlish/logs/all.py,sha256=GqST35bRnHgpGmQXvtHih7kLaw5DcFgB32uxPGAsgSI,1717
|
501
503
|
omlish/logs/base.py,sha256=Z1hfwYS2LgMJxFIyHiOvYa2meu2MH3kQDkhaWRNzt0M,5698
|
502
504
|
omlish/logs/contexts.py,sha256=qMX-BrOKmYIBOXIlSntKJT9mcsRryTqfcTFp9K1GJmE,4836
|
@@ -626,7 +628,7 @@ omlish/reflect/__init__.py,sha256=omD3VLFQtYTwPxrTH6gLATQIax9sTGGKc-7ps96-q0g,12
|
|
626
628
|
omlish/reflect/inspect.py,sha256=dUrVz8VfAdLVFtFpW416DxzVC17D80cvFb_g2Odzgq8,1823
|
627
629
|
omlish/reflect/ops.py,sha256=4mGvFMw5D6XGbhDhdCqZ1dZsiqezUTenDv63FIDohpY,3029
|
628
630
|
omlish/reflect/subst.py,sha256=_lfNS2m2UiJgqARQtmGLTGo7CrSm9OMvVzt6GWOEX6M,4590
|
629
|
-
omlish/reflect/types.py,sha256=
|
631
|
+
omlish/reflect/types.py,sha256=4Plo_1cHIk8-68lu8_c_SUEohy19exTNDsgvuVbOJ5A,16066
|
630
632
|
omlish/secrets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
631
633
|
omlish/secrets/all.py,sha256=qBxUFIqxCExADL71taNH_W6FYT9QvOrdcaMeUUPO3aw,298
|
632
634
|
omlish/secrets/crypto.py,sha256=q0Hca5oMwvh39r0hrupN_ewxhlllbdDgAgVoloYFmDg,3714
|
@@ -720,7 +722,7 @@ omlish/sql/api/queries.py,sha256=OVsVqNyXXJQVDPfV3GFE2gwnHyGEenS65rTQRTNGx1Y,735
|
|
720
722
|
omlish/sql/api/resources.py,sha256=RcjnsNoyFWG0VR8YDijwuyZtnxlGQe8jiPQVl_inzIc,2266
|
721
723
|
omlish/sql/api/rows.py,sha256=Jo3AA_6Wt7tlwLO6-rp0arzYFqZXSxPudGPkW2xCYgQ,1346
|
722
724
|
omlish/sql/queries/__init__.py,sha256=qoikGQZuwDkOBwGKdUVov_Ur3I-mezSDLLdzqwRw6l8,1567
|
723
|
-
omlish/sql/queries/_marshal.py,sha256=
|
725
|
+
omlish/sql/queries/_marshal.py,sha256=PwfcCmf-qeKsiL61c_GjUID6flLCiDiltFndPBhQIAM,2992
|
724
726
|
omlish/sql/queries/base.py,sha256=nsavenCsZgzpITSI1zGEAi95K3cRDfAxRgNJKJmYul0,3502
|
725
727
|
omlish/sql/queries/binary.py,sha256=dcEzeEn104AMPuQ7QrJU2O-YCN3SUdxB5S4jaWKOUqY,2253
|
726
728
|
omlish/sql/queries/exprs.py,sha256=dG9L218QtJM1HtDYIMWqHimK03N6AL1WONk3FvVRcXY,1480
|
@@ -825,9 +827,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
|
|
825
827
|
omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
|
826
828
|
omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
|
827
829
|
omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
|
828
|
-
omlish-0.0.0.
|
829
|
-
omlish-0.0.0.
|
830
|
-
omlish-0.0.0.
|
831
|
-
omlish-0.0.0.
|
832
|
-
omlish-0.0.0.
|
833
|
-
omlish-0.0.0.
|
830
|
+
omlish-0.0.0.dev440.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
831
|
+
omlish-0.0.0.dev440.dist-info/METADATA,sha256=WRE_PtouG98WjbjgEJLQjuvkhq2VcrgDl50Q5B3UmXA,19003
|
832
|
+
omlish-0.0.0.dev440.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
833
|
+
omlish-0.0.0.dev440.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
834
|
+
omlish-0.0.0.dev440.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
835
|
+
omlish-0.0.0.dev440.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|