omlish 0.0.0.dev11__py3-none-any.whl → 0.0.0.dev13__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 +32 -27
- omlish/check.py +1 -1
- omlish/collections/__init__.py +1 -1
- omlish/collections/mappings.py +1 -1
- omlish/fnpairs.py +74 -2
- omlish/marshal/__init__.py +2 -0
- omlish/marshal/iterables.py +9 -1
- omlish/marshal/mappings.py +8 -1
- omlish/marshal/maybes.py +59 -0
- omlish/marshal/polymorphism.py +1 -0
- omlish/marshal/standard.py +4 -0
- omlish/reflect/types.py +7 -6
- omlish-0.0.0.dev13.dist-info/METADATA +80 -0
- {omlish-0.0.0.dev11.dist-info → omlish-0.0.0.dev13.dist-info}/RECORD +17 -16
- {omlish-0.0.0.dev11.dist-info → omlish-0.0.0.dev13.dist-info}/WHEEL +1 -1
- omlish-0.0.0.dev11.dist-info/METADATA +0 -77
- {omlish-0.0.0.dev11.dist-info → omlish-0.0.0.dev13.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev11.dist-info → omlish-0.0.0.dev13.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
__version__ = '0.0.0.
|
1
|
+
__version__ = '0.0.0.dev13'
|
2
|
+
__revision__ = 'f2f50e897e4a3bd440a1e07e06abe526a6f4c1bd'
|
2
3
|
|
3
4
|
|
4
5
|
#
|
@@ -9,7 +10,7 @@ class ProjectBase:
|
|
9
10
|
authors = [{'name': 'wrmsr'}]
|
10
11
|
urls = {'source': 'https://github.com/wrmsr/omlish'}
|
11
12
|
license = {'text': 'BSD-3-Clause'}
|
12
|
-
requires_python = '
|
13
|
+
requires_python = '~=3.12'
|
13
14
|
|
14
15
|
version = __version__
|
15
16
|
|
@@ -29,61 +30,65 @@ class Project(ProjectBase):
|
|
29
30
|
|
30
31
|
optional_dependencies = {
|
31
32
|
'async': [
|
32
|
-
'anyio
|
33
|
-
'sniffio
|
33
|
+
'anyio ~= 4.4',
|
34
|
+
'sniffio ~= 1.3',
|
34
35
|
|
35
|
-
'greenlet
|
36
|
+
'greenlet ~= 3.0; python_version < "3.13"',
|
36
37
|
|
37
|
-
'trio
|
38
|
-
'trio-asyncio
|
38
|
+
'trio ~= 0.26',
|
39
|
+
'trio-asyncio ~= 0.15; python_version < "3.13"',
|
39
40
|
],
|
40
41
|
|
41
42
|
'compression': [
|
42
|
-
'lz4
|
43
|
-
'python-snappy
|
44
|
-
'zstd
|
43
|
+
'lz4 ~= 4.0',
|
44
|
+
'python-snappy ~= 0.7; python_version < "3.13"',
|
45
|
+
'zstd ~= 1.5',
|
46
|
+
],
|
47
|
+
|
48
|
+
'diag': [
|
49
|
+
'psutil ~= 6.0',
|
45
50
|
],
|
46
51
|
|
47
52
|
'formats': [
|
53
|
+
'cloudpickle ~= 3.0',
|
54
|
+
'json5 ~= 0.9',
|
48
55
|
'orjson > 3.10',
|
49
|
-
'
|
50
|
-
'pyyaml >= 5',
|
56
|
+
'pyyaml ~= 5.0',
|
51
57
|
],
|
52
58
|
|
53
59
|
'http': [
|
54
|
-
'httpx[http2]
|
60
|
+
'httpx[http2] ~= 0.27',
|
55
61
|
],
|
56
62
|
|
57
63
|
'misc': [
|
58
|
-
'jinja2
|
59
|
-
'
|
60
|
-
'wrapt >= 1.14',
|
64
|
+
'jinja2 ~= 3.1',
|
65
|
+
'wrapt ~= 1.14',
|
61
66
|
],
|
62
67
|
|
63
68
|
'secrets': [
|
64
|
-
'cryptography
|
69
|
+
'cryptography ~= 43.0',
|
65
70
|
],
|
66
71
|
|
67
72
|
'sql': [
|
68
|
-
'sqlalchemy
|
69
|
-
'sqlalchemy[asyncio]
|
73
|
+
'sqlalchemy ~= 2.0; python_version ~= "3.13"',
|
74
|
+
'sqlalchemy[asyncio] ~= 2.0; python_version < "3.13"',
|
70
75
|
|
71
|
-
'pg8000
|
72
|
-
'pymysql
|
76
|
+
'pg8000 ~= 1.31',
|
77
|
+
'pymysql ~= 1.1',
|
73
78
|
|
74
|
-
'aiomysql
|
75
|
-
'aiosqlite
|
76
|
-
'asyncpg
|
79
|
+
'aiomysql ~= 0.2',
|
80
|
+
'aiosqlite ~= 0.20',
|
81
|
+
'asyncpg ~= 0.29; python_version < "3.13"',
|
77
82
|
],
|
78
83
|
|
79
84
|
'sqlx': [
|
80
|
-
'sqlean.py
|
85
|
+
'sqlean.py ~= 3.45; python_version < "3.13"',
|
81
86
|
|
82
|
-
'duckdb
|
87
|
+
'duckdb ~= 1.0',
|
83
88
|
],
|
84
89
|
|
85
90
|
'testing': [
|
86
|
-
'pytest
|
91
|
+
'pytest ~= 8.0',
|
87
92
|
],
|
88
93
|
}
|
89
94
|
|
omlish/check.py
CHANGED
omlish/collections/__init__.py
CHANGED
omlish/collections/mappings.py
CHANGED
omlish/fnpairs.py
CHANGED
@@ -6,6 +6,15 @@ TODO:
|
|
6
6
|
- cbor
|
7
7
|
- alt json backends
|
8
8
|
- wrapped (wait for usecase)
|
9
|
+
- streams
|
10
|
+
- fileobj -> fileobj?
|
11
|
+
|
12
|
+
Compression choice:
|
13
|
+
- lzma if-available minimal-space
|
14
|
+
- lz4 if-available write-once
|
15
|
+
- zstd if-available
|
16
|
+
- bz2 write-once (but no parallel decompress)
|
17
|
+
- gz
|
9
18
|
"""
|
10
19
|
import abc
|
11
20
|
import codecs
|
@@ -52,9 +61,7 @@ else:
|
|
52
61
|
|
53
62
|
|
54
63
|
F = ta.TypeVar('F')
|
55
|
-
F2 = ta.TypeVar('F2')
|
56
64
|
T = ta.TypeVar('T')
|
57
|
-
T2 = ta.TypeVar('T2')
|
58
65
|
U = ta.TypeVar('U')
|
59
66
|
|
60
67
|
|
@@ -121,6 +128,9 @@ class Inverted(FnPair[F, T]):
|
|
121
128
|
return self.fp.forward(t)
|
122
129
|
|
123
130
|
|
131
|
+
##
|
132
|
+
|
133
|
+
|
124
134
|
@dc.dataclass(frozen=True)
|
125
135
|
class Composite(FnPair[F, T]):
|
126
136
|
children: ta.Sequence[FnPair]
|
@@ -136,7 +146,69 @@ class Composite(FnPair[F, T]):
|
|
136
146
|
return ta.cast(F, t)
|
137
147
|
|
138
148
|
|
149
|
+
I0 = ta.TypeVar('I0')
|
150
|
+
I1 = ta.TypeVar('I1')
|
151
|
+
I2 = ta.TypeVar('I2')
|
152
|
+
I3 = ta.TypeVar('I3')
|
153
|
+
I4 = ta.TypeVar('I4')
|
154
|
+
|
155
|
+
|
156
|
+
@ta.overload
|
157
|
+
def compose(
|
158
|
+
fp0: FnPair[F, I0],
|
159
|
+
f01: FnPair[I0, T],
|
160
|
+
) -> FnPair[F, T]:
|
161
|
+
...
|
162
|
+
|
163
|
+
|
164
|
+
@ta.overload
|
165
|
+
def compose(
|
166
|
+
fp0: FnPair[F, I0],
|
167
|
+
f01: FnPair[I0, I1],
|
168
|
+
fp2: FnPair[I1, T],
|
169
|
+
) -> FnPair[F, T]:
|
170
|
+
...
|
171
|
+
|
172
|
+
|
173
|
+
@ta.overload
|
174
|
+
def compose(
|
175
|
+
fp0: FnPair[F, I0],
|
176
|
+
f01: FnPair[I0, I1],
|
177
|
+
fp2: FnPair[I1, I2],
|
178
|
+
fp3: FnPair[I2, T],
|
179
|
+
) -> FnPair[F, T]:
|
180
|
+
...
|
181
|
+
|
182
|
+
|
183
|
+
@ta.overload
|
184
|
+
def compose(
|
185
|
+
fp0: FnPair[F, I0],
|
186
|
+
f01: FnPair[I0, I1],
|
187
|
+
fp2: FnPair[I1, I2],
|
188
|
+
fp3: FnPair[I2, I3],
|
189
|
+
fp4: FnPair[I3, T],
|
190
|
+
) -> FnPair[F, T]:
|
191
|
+
...
|
192
|
+
|
193
|
+
|
194
|
+
@ta.overload
|
195
|
+
def compose(
|
196
|
+
fp0: FnPair[F, I0],
|
197
|
+
f01: FnPair[I0, I1],
|
198
|
+
fp2: FnPair[I1, I2],
|
199
|
+
fp3: FnPair[I2, I3],
|
200
|
+
fp4: FnPair[I3, I4],
|
201
|
+
fp5: FnPair[I4, T],
|
202
|
+
) -> FnPair[F, T]:
|
203
|
+
...
|
204
|
+
|
205
|
+
|
206
|
+
@ta.overload
|
139
207
|
def compose(*ps: FnPair) -> FnPair:
|
208
|
+
...
|
209
|
+
|
210
|
+
|
211
|
+
def compose(*ps):
|
140
212
|
if not ps:
|
141
213
|
return NOP
|
142
214
|
if len(ps) == 1:
|
omlish/marshal/__init__.py
CHANGED
omlish/marshal/iterables.py
CHANGED
@@ -15,6 +15,13 @@ from .base import UnmarshalerFactoryMatchClass
|
|
15
15
|
from .values import Value
|
16
16
|
|
17
17
|
|
18
|
+
DEFAULT_ITERABLE_CONCRETE_TYPES: dict[type[collections.abc.Iterable], type[collections.abc.Iterable]] = {
|
19
|
+
collections.abc.Iterable: tuple, # type: ignore
|
20
|
+
collections.abc.Sequence: tuple, # type: ignore
|
21
|
+
collections.abc.MutableSequence: list, # type: ignore
|
22
|
+
}
|
23
|
+
|
24
|
+
|
18
25
|
@dc.dataclass(frozen=True)
|
19
26
|
class IterableMarshaler(Marshaler):
|
20
27
|
e: Marshaler
|
@@ -47,7 +54,8 @@ class IterableUnmarshalerFactory(UnmarshalerFactoryMatchClass):
|
|
47
54
|
@mfs.simple(lambda _, ctx, rty: isinstance(rty, rfl.Generic) and issubclass(rty.cls, collections.abc.Iterable))
|
48
55
|
def _build_generic(self, ctx: UnmarshalContext, rty: rfl.Type) -> Unmarshaler:
|
49
56
|
gty = check.isinstance(rty, rfl.Generic)
|
50
|
-
|
57
|
+
cty = DEFAULT_ITERABLE_CONCRETE_TYPES.get(gty.cls, gty.cls) # noqa
|
58
|
+
return IterableUnmarshaler(cty, ctx.make(check.single(gty.args)))
|
51
59
|
|
52
60
|
@mfs.simple(lambda _, ctx, rty: isinstance(rty, type) and issubclass(rty, collections.abc.Iterable))
|
53
61
|
def _build_concrete(self, ctx: UnmarshalContext, rty: rfl.Type) -> Unmarshaler:
|
omlish/marshal/mappings.py
CHANGED
@@ -14,6 +14,12 @@ from .base import UnmarshalerFactoryMatchClass
|
|
14
14
|
from .values import Value
|
15
15
|
|
16
16
|
|
17
|
+
DEFAULT_MAPPING_CONCRETE_TYPES: dict[type[collections.abc.Mapping], type[collections.abc.Mapping]] = {
|
18
|
+
collections.abc.Mapping: dict, # type: ignore
|
19
|
+
collections.abc.MutableMapping: dict, # type: ignore
|
20
|
+
}
|
21
|
+
|
22
|
+
|
17
23
|
@dc.dataclass(frozen=True)
|
18
24
|
class MappingMarshaler(Marshaler):
|
19
25
|
ke: Marshaler
|
@@ -55,8 +61,9 @@ class MappingUnmarshalerFactory(UnmarshalerFactoryMatchClass):
|
|
55
61
|
@mfs.simple(lambda _, ctx, rty: isinstance(rty, rfl.Generic) and issubclass(rty.cls, collections.abc.Mapping))
|
56
62
|
def _build_generic(self, ctx: UnmarshalContext, rty: rfl.Type) -> Unmarshaler:
|
57
63
|
gty = check.isinstance(rty, rfl.Generic)
|
64
|
+
cty = DEFAULT_MAPPING_CONCRETE_TYPES.get(gty.cls, gty.cls) # noqa
|
58
65
|
kt, vt = gty.args
|
59
|
-
return MappingUnmarshaler(
|
66
|
+
return MappingUnmarshaler(cty, ctx.make(kt), ctx.make(vt))
|
60
67
|
|
61
68
|
@mfs.simple(lambda _, ctx, rty: isinstance(rty, type) and issubclass(rty, collections.abc.Mapping))
|
62
69
|
def _build_concrete(self, ctx: UnmarshalContext, rty: rfl.Type) -> Unmarshaler:
|
omlish/marshal/maybes.py
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
import dataclasses as dc
|
2
|
+
import typing as ta
|
3
|
+
|
4
|
+
from .. import check
|
5
|
+
from .. import lang
|
6
|
+
from .. import matchfns as mfs
|
7
|
+
from .. import reflect as rfl
|
8
|
+
from .base import MarshalContext
|
9
|
+
from .base import Marshaler
|
10
|
+
from .base import MarshalerFactoryMatchClass
|
11
|
+
from .base import UnmarshalContext
|
12
|
+
from .base import Unmarshaler
|
13
|
+
from .base import UnmarshalerFactoryMatchClass
|
14
|
+
from .values import Value
|
15
|
+
|
16
|
+
|
17
|
+
@dc.dataclass(frozen=True)
|
18
|
+
class MaybeMarshaler(Marshaler):
|
19
|
+
e: Marshaler
|
20
|
+
|
21
|
+
def marshal(self, ctx: MarshalContext, o: ta.Any) -> Value:
|
22
|
+
m: lang.Maybe = o
|
23
|
+
if m.present:
|
24
|
+
return [self.e.marshal(ctx, m.must())]
|
25
|
+
else:
|
26
|
+
return []
|
27
|
+
|
28
|
+
|
29
|
+
class MaybeMarshalerFactory(MarshalerFactoryMatchClass):
|
30
|
+
@mfs.simple(lambda _, ctx, rty: isinstance(rty, rfl.Generic) and rty.cls is lang.Maybe)
|
31
|
+
def _build_generic(self, ctx: MarshalContext, rty: rfl.Type) -> Marshaler:
|
32
|
+
gty = check.isinstance(rty, rfl.Generic)
|
33
|
+
return MaybeMarshaler(ctx.make(check.single(gty.args)))
|
34
|
+
|
35
|
+
@mfs.simple(lambda _, ctx, rty: isinstance(rty, type) and issubclass(rty, lang.Maybe))
|
36
|
+
def _build_concrete(self, ctx: MarshalContext, rty: rfl.Type) -> Marshaler:
|
37
|
+
return MaybeMarshaler(ctx.make(ta.Any))
|
38
|
+
|
39
|
+
|
40
|
+
@dc.dataclass(frozen=True)
|
41
|
+
class MaybeUnmarshaler(Unmarshaler):
|
42
|
+
e: Unmarshaler
|
43
|
+
|
44
|
+
def unmarshal(self, ctx: UnmarshalContext, v: Value) -> ta.Any:
|
45
|
+
if v:
|
46
|
+
return lang.just(self.e.unmarshal(ctx, check.single(v))) # type: ignore
|
47
|
+
else:
|
48
|
+
return lang.empty()
|
49
|
+
|
50
|
+
|
51
|
+
class MaybeUnmarshalerFactory(UnmarshalerFactoryMatchClass):
|
52
|
+
@mfs.simple(lambda _, ctx, rty: isinstance(rty, rfl.Generic) and rty.cls is lang.Maybe)
|
53
|
+
def _build_generic(self, ctx: UnmarshalContext, rty: rfl.Type) -> Unmarshaler:
|
54
|
+
gty = check.isinstance(rty, rfl.Generic)
|
55
|
+
return MaybeUnmarshaler(ctx.make(check.single(gty.args)))
|
56
|
+
|
57
|
+
@mfs.simple(lambda _, ctx, rty: isinstance(rty, type) and issubclass(rty, lang.Maybe))
|
58
|
+
def _build_concrete(self, ctx: UnmarshalContext, rty: rfl.Type) -> Unmarshaler:
|
59
|
+
return MaybeUnmarshaler(ctx.make(ta.Any))
|
omlish/marshal/polymorphism.py
CHANGED
omlish/marshal/standard.py
CHANGED
@@ -19,6 +19,8 @@ from .iterables import IterableMarshalerFactory
|
|
19
19
|
from .iterables import IterableUnmarshalerFactory
|
20
20
|
from .mappings import MappingMarshalerFactory
|
21
21
|
from .mappings import MappingUnmarshalerFactory
|
22
|
+
from .maybes import MaybeMarshalerFactory
|
23
|
+
from .maybes import MaybeUnmarshalerFactory
|
22
24
|
from .numbers import NUMBERS_MARSHALER_FACTORY
|
23
25
|
from .numbers import NUMBERS_UNMARSHALER_FACTORY
|
24
26
|
from .optionals import OptionalMarshalerFactory
|
@@ -41,6 +43,7 @@ STANDARD_MARSHALER_FACTORIES: list[MarshalerFactory] = [
|
|
41
43
|
UUID_MARSHALER_FACTORY,
|
42
44
|
BASE64_MARSHALER_FACTORY,
|
43
45
|
DATETIME_MARSHALER_FACTORY,
|
46
|
+
MaybeMarshalerFactory(),
|
44
47
|
MappingMarshalerFactory(),
|
45
48
|
IterableMarshalerFactory(),
|
46
49
|
ANY_MARSHALER_FACTORY,
|
@@ -69,6 +72,7 @@ STANDARD_UNMARSHALER_FACTORIES: list[UnmarshalerFactory] = [
|
|
69
72
|
UUID_UNMARSHALER_FACTORY,
|
70
73
|
BASE64_UNMARSHALER_FACTORY,
|
71
74
|
DATETIME_UNMARSHALER_FACTORY,
|
75
|
+
MaybeUnmarshalerFactory(),
|
72
76
|
MappingUnmarshalerFactory(),
|
73
77
|
IterableUnmarshalerFactory(),
|
74
78
|
ANY_UNMARSHALER_FACTORY,
|
omlish/reflect/types.py
CHANGED
@@ -250,12 +250,13 @@ def type_(obj: ta.Any) -> Type:
|
|
250
250
|
if isinstance(obj, type):
|
251
251
|
if issubclass(obj, ta.Generic): # type: ignore
|
252
252
|
params = get_params(obj)
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
253
|
+
if params:
|
254
|
+
return Generic(
|
255
|
+
obj,
|
256
|
+
params,
|
257
|
+
params,
|
258
|
+
obj,
|
259
|
+
)
|
259
260
|
return obj
|
260
261
|
|
261
262
|
if isinstance(obj, _SpecialGenericAlias):
|
@@ -0,0 +1,80 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: omlish
|
3
|
+
Version: 0.0.0.dev13
|
4
|
+
Summary: omlish
|
5
|
+
Author: wrmsr
|
6
|
+
License: BSD-3-Clause
|
7
|
+
Project-URL: source, https://github.com/wrmsr/omlish
|
8
|
+
Classifier: License :: OSI Approved :: BSD License
|
9
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
10
|
+
Classifier: Intended Audience :: Developers
|
11
|
+
Classifier: Operating System :: OS Independent
|
12
|
+
Classifier: Operating System :: POSIX
|
13
|
+
Requires-Python: ~=3.12
|
14
|
+
License-File: LICENSE
|
15
|
+
Provides-Extra: all
|
16
|
+
Requires-Dist: anyio ~=4.4 ; extra == 'all'
|
17
|
+
Requires-Dist: sniffio ~=1.3 ; extra == 'all'
|
18
|
+
Requires-Dist: trio ~=0.26 ; extra == 'all'
|
19
|
+
Requires-Dist: lz4 ~=4.0 ; extra == 'all'
|
20
|
+
Requires-Dist: zstd ~=1.5 ; extra == 'all'
|
21
|
+
Requires-Dist: psutil ~=6.0 ; extra == 'all'
|
22
|
+
Requires-Dist: cloudpickle ~=3.0 ; extra == 'all'
|
23
|
+
Requires-Dist: json5 ~=0.9 ; extra == 'all'
|
24
|
+
Requires-Dist: orjson >3.10 ; extra == 'all'
|
25
|
+
Requires-Dist: pyyaml ~=5.0 ; extra == 'all'
|
26
|
+
Requires-Dist: httpx[http2] ~=0.27 ; extra == 'all'
|
27
|
+
Requires-Dist: jinja2 ~=3.1 ; extra == 'all'
|
28
|
+
Requires-Dist: wrapt ~=1.14 ; extra == 'all'
|
29
|
+
Requires-Dist: cryptography ~=43.0 ; extra == 'all'
|
30
|
+
Requires-Dist: pg8000 ~=1.31 ; extra == 'all'
|
31
|
+
Requires-Dist: pymysql ~=1.1 ; extra == 'all'
|
32
|
+
Requires-Dist: aiomysql ~=0.2 ; extra == 'all'
|
33
|
+
Requires-Dist: aiosqlite ~=0.20 ; extra == 'all'
|
34
|
+
Requires-Dist: duckdb ~=1.0 ; extra == 'all'
|
35
|
+
Requires-Dist: pytest ~=8.0 ; extra == 'all'
|
36
|
+
Requires-Dist: greenlet ~=3.0 ; (python_version < "3.13") and extra == 'all'
|
37
|
+
Requires-Dist: trio-asyncio ~=0.15 ; (python_version < "3.13") and extra == 'all'
|
38
|
+
Requires-Dist: python-snappy ~=0.7 ; (python_version < "3.13") and extra == 'all'
|
39
|
+
Requires-Dist: sqlalchemy[asyncio] ~=2.0 ; (python_version < "3.13") and extra == 'all'
|
40
|
+
Requires-Dist: asyncpg ~=0.29 ; (python_version < "3.13") and extra == 'all'
|
41
|
+
Requires-Dist: sqlean.py ~=3.45 ; (python_version < "3.13") and extra == 'all'
|
42
|
+
Requires-Dist: sqlalchemy ~=2.0 ; (python_version ~= "3.13") and extra == 'all'
|
43
|
+
Provides-Extra: async
|
44
|
+
Requires-Dist: anyio ~=4.4 ; extra == 'async'
|
45
|
+
Requires-Dist: sniffio ~=1.3 ; extra == 'async'
|
46
|
+
Requires-Dist: trio ~=0.26 ; extra == 'async'
|
47
|
+
Requires-Dist: greenlet ~=3.0 ; (python_version < "3.13") and extra == 'async'
|
48
|
+
Requires-Dist: trio-asyncio ~=0.15 ; (python_version < "3.13") and extra == 'async'
|
49
|
+
Provides-Extra: compression
|
50
|
+
Requires-Dist: lz4 ~=4.0 ; extra == 'compression'
|
51
|
+
Requires-Dist: zstd ~=1.5 ; extra == 'compression'
|
52
|
+
Requires-Dist: python-snappy ~=0.7 ; (python_version < "3.13") and extra == 'compression'
|
53
|
+
Provides-Extra: diag
|
54
|
+
Requires-Dist: psutil ~=6.0 ; extra == 'diag'
|
55
|
+
Provides-Extra: formats
|
56
|
+
Requires-Dist: cloudpickle ~=3.0 ; extra == 'formats'
|
57
|
+
Requires-Dist: json5 ~=0.9 ; extra == 'formats'
|
58
|
+
Requires-Dist: orjson >3.10 ; extra == 'formats'
|
59
|
+
Requires-Dist: pyyaml ~=5.0 ; extra == 'formats'
|
60
|
+
Provides-Extra: http
|
61
|
+
Requires-Dist: httpx[http2] ~=0.27 ; extra == 'http'
|
62
|
+
Provides-Extra: misc
|
63
|
+
Requires-Dist: jinja2 ~=3.1 ; extra == 'misc'
|
64
|
+
Requires-Dist: wrapt ~=1.14 ; extra == 'misc'
|
65
|
+
Provides-Extra: secrets
|
66
|
+
Requires-Dist: cryptography ~=43.0 ; extra == 'secrets'
|
67
|
+
Provides-Extra: sql
|
68
|
+
Requires-Dist: pg8000 ~=1.31 ; extra == 'sql'
|
69
|
+
Requires-Dist: pymysql ~=1.1 ; extra == 'sql'
|
70
|
+
Requires-Dist: aiomysql ~=0.2 ; extra == 'sql'
|
71
|
+
Requires-Dist: aiosqlite ~=0.20 ; extra == 'sql'
|
72
|
+
Requires-Dist: sqlalchemy[asyncio] ~=2.0 ; (python_version < "3.13") and extra == 'sql'
|
73
|
+
Requires-Dist: asyncpg ~=0.29 ; (python_version < "3.13") and extra == 'sql'
|
74
|
+
Requires-Dist: sqlalchemy ~=2.0 ; (python_version ~= "3.13") and extra == 'sql'
|
75
|
+
Provides-Extra: sqlx
|
76
|
+
Requires-Dist: duckdb ~=1.0 ; extra == 'sqlx'
|
77
|
+
Requires-Dist: sqlean.py ~=3.45 ; (python_version < "3.13") and extra == 'sqlx'
|
78
|
+
Provides-Extra: testing
|
79
|
+
Requires-Dist: pytest ~=8.0 ; extra == 'testing'
|
80
|
+
|
@@ -1,16 +1,16 @@
|
|
1
|
-
omlish/__about__.py,sha256=
|
1
|
+
omlish/__about__.py,sha256=rd9IPhIdkU2Ms31XzGtptpE8YDJMdbhHyMr3c29JSLQ,2416
|
2
2
|
omlish/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
3
|
omlish/argparse.py,sha256=QRQmX9G0-L_nATkFtGHvpd4qrpYzKATdjuFLbBqzJPM,6224
|
4
4
|
omlish/bootstrap.py,sha256=3pGNiHlUcQl81q76_Wesd4pblmy82EOKkcdgectF15Q,18820
|
5
5
|
omlish/c3.py,sha256=W5EwYx9Por3rWYLkKUitJ6OoRMLLgVTfLTyroOz41Y0,8047
|
6
6
|
omlish/cached.py,sha256=UAizxlH4eMWHPzQtmItmyE6FEpFEUFzIkxaO2BHWZ5s,196
|
7
|
-
omlish/check.py,sha256=
|
7
|
+
omlish/check.py,sha256=o3UJnIEmmRsv9ggIIDtz8fDSudW1CatxbwxP42M4dno,5543
|
8
8
|
omlish/concurrent.py,sha256=3KkTj5TOPmvNOcuK9LtOQwmkuLzoEYQfcuaHTXSQ0Ts,5424
|
9
9
|
omlish/datetimes.py,sha256=HajeM1kBvwlTa-uR1TTZHmZ3zTPnnUr1uGGQhiO1XQ0,2152
|
10
10
|
omlish/defs.py,sha256=N8O1murtr4mdSE_vjAcWGfnN7GyBXbW8rJM4qPF8na0,4737
|
11
11
|
omlish/docker.py,sha256=5WyXJyFwqIJJ11QWwPIjHjDHnsaOVZszZAjyTvg3xew,4693
|
12
12
|
omlish/dynamic.py,sha256=35C_cCX_Vq2HrHzGk5T-zbrMvmUdiIiwDzDNixczoDo,6541
|
13
|
-
omlish/fnpairs.py,sha256=
|
13
|
+
omlish/fnpairs.py,sha256=tKX991ICOtBgWJrZsuSVryzVOmNkCobwUXyk4uNpsCY,10600
|
14
14
|
omlish/iterators.py,sha256=GGLC7RIT86uXMjhIIIqnff_Iu5SI_b9rXYywYGFyzmo,7292
|
15
15
|
omlish/libc.py,sha256=u0481imCiTFqP_e-v9g0pD-0WD249j5vYzhtn-fnNkY,15308
|
16
16
|
omlish/matchfns.py,sha256=o2evI7q0CAMHR8RQ_Jks6L0UoNpEDltnLjOiamJDtmU,6155
|
@@ -28,7 +28,7 @@ omlish/asyncs/bridge.py,sha256=AabrRVz5k75dTB59M70DWkl6JrLusjhpvsaj5jld9io,8151
|
|
28
28
|
omlish/asyncs/flavors.py,sha256=kp1RdcsNrvDQZMB4Q_hlHyjrREJqEWjY9BI1lbE1AQ8,4820
|
29
29
|
omlish/asyncs/trio.py,sha256=GKG3wgelFr7gIKKHZhcflvMyCvxXHNZe862KB0Xw2uA,370
|
30
30
|
omlish/asyncs/trio_asyncio.py,sha256=oqdOHy0slj9PjVxaDf3gJkq9AAgg7wYZbB469jOftVw,1327
|
31
|
-
omlish/collections/__init__.py,sha256=
|
31
|
+
omlish/collections/__init__.py,sha256=h7gXQNMI_46hRRlIAI3PTaewMV8H381FV_KlONReg9s,1660
|
32
32
|
omlish/collections/_abc.py,sha256=sP7BpTVhx6s6C59mTFeosBi4rHOWC6tbFBYbxdZmvh0,2365
|
33
33
|
omlish/collections/_io_abc.py,sha256=Cxs8KB1B_69rxpUYxI-MTsilAmNooJJn3w07DKqYKkE,1255
|
34
34
|
omlish/collections/coerce.py,sha256=o11AMrUiyoadd8WkdqeKPIpXf2xd0LyylzNCyJivCLU,7036
|
@@ -36,7 +36,7 @@ omlish/collections/exceptions.py,sha256=shcS-NCnEUudF8qC_SmO2TQyjivKlS4TDjaz_faq
|
|
36
36
|
omlish/collections/frozen.py,sha256=DGxemj_pVID85tSBm-Wns_x4ov0wOEIT6X5bVgJtmkA,4152
|
37
37
|
omlish/collections/identity.py,sha256=jhEpC8tnfh3Sg-MJff1Fp9eMydt150wits_UeVdctUk,2723
|
38
38
|
omlish/collections/indexed.py,sha256=YHs_q0GALisXPKKMgeDQxZ6hMzYndqDL3m3ag8cnzH0,2143
|
39
|
-
omlish/collections/mappings.py,sha256=
|
39
|
+
omlish/collections/mappings.py,sha256=eEifLZez-BWunTuj6974bGxBFfNRODZpu6Oa7_2ME94,3190
|
40
40
|
omlish/collections/ordered.py,sha256=RzEC3fHvrDeJQSWThVDNYQKke263Vje1II5YwtDwT1Q,2335
|
41
41
|
omlish/collections/persistent.py,sha256=KG471s0bhhReQrjlmX0xaN9HeAIcrtT264ddZCxsExo,875
|
42
42
|
omlish/collections/skiplist.py,sha256=xjuKZtSScp1VnOi9lpf7I090vGp1DnjA5ELjFhMeGps,5987
|
@@ -194,7 +194,7 @@ omlish/logs/_abc.py,sha256=UgrCUQVUi_PvT3p1CEkb3P74CFrFcZq2AFby3GEUv9M,5974
|
|
194
194
|
omlish/logs/configs.py,sha256=Dnd5nm6OUD_n4YDtP4VuDo8flIofU-xf7xlw-t9FVv8,1285
|
195
195
|
omlish/logs/formatters.py,sha256=AFs9C6-qrFkgXZ0nL39wih_LGck1Tc79alvGyibBdQo,720
|
196
196
|
omlish/logs/utils.py,sha256=MgGovbP0zUrZ3FGD3qYNQWn-l0jy0Y0bStcQvv5BOmQ,391
|
197
|
-
omlish/marshal/__init__.py,sha256=
|
197
|
+
omlish/marshal/__init__.py,sha256=ggU_UVW-CyXZnsaGwx-Cxj4PUAY0QsXmaXVLFO8T4rQ,1453
|
198
198
|
omlish/marshal/any.py,sha256=e82OyYK3Emm1P1ClnsnxP7fIWC2iNVyW0H5nK4mLmWM,779
|
199
199
|
omlish/marshal/base.py,sha256=Oa9FIF4SVDao7QYvPIHPMp_kp4sA6JfLSV4aEcprYTk,5931
|
200
200
|
omlish/marshal/base64.py,sha256=Q3ibujdhgFgDaeHahSe7WdcqvOyalWigwUlV-U-2ckQ,1018
|
@@ -205,16 +205,17 @@ omlish/marshal/exceptions.py,sha256=jwQWn4LcPnadT2KRI_1JJCOSkwWh0yHnYK9BmSkNN4U,
|
|
205
205
|
omlish/marshal/factories.py,sha256=UV2Svjok-lTWsRqKGh-CeuAhvlohw9uJe7ZLyoKMvTM,2968
|
206
206
|
omlish/marshal/forbidden.py,sha256=BNshzm4lN5O8sUZ1YvxrSYq3WPklq9NMQCRZ7RC3DLM,865
|
207
207
|
omlish/marshal/global_.py,sha256=8XCjPcIjA65StESshzNfQiSyuckVaEiiWROmC3qk0mo,1117
|
208
|
-
omlish/marshal/iterables.py,sha256=
|
209
|
-
omlish/marshal/mappings.py,sha256
|
208
|
+
omlish/marshal/iterables.py,sha256=6I_ZdJemLSQtJ4J5NrB9wi-eyxiJZS61HzHXp1yeiX8,2592
|
209
|
+
omlish/marshal/mappings.py,sha256=zhLtyot7tzQtBNj7C4RBxjMELxA5r2q2Mth8Br7xkFs,2803
|
210
|
+
omlish/marshal/maybes.py,sha256=tKkVsJATERgbVcEfBnsHBK_2_LCQIVyBzca-cA-9KH0,2112
|
210
211
|
omlish/marshal/naming.py,sha256=UCviMAXTTUpW1lyAGymybGP2rFUAW44P1X0zrIVbvi4,464
|
211
212
|
omlish/marshal/numbers.py,sha256=oY_yMNJEnJhjfLh89gpPXvKqeUyhQcaTcQB6ecyHiG8,1704
|
212
213
|
omlish/marshal/objects.py,sha256=JD7GBY1hYUyRpCufpxDAwgII98ewzGDct2IF0HxgFN0,2767
|
213
214
|
omlish/marshal/optionals.py,sha256=r0XB5rqfasvgZJNrKYd6Unq2U4nHt3JURi26j0dYHlw,1499
|
214
|
-
omlish/marshal/polymorphism.py,sha256=
|
215
|
+
omlish/marshal/polymorphism.py,sha256=gyvNYUAkmQVhWrcXBLzXINxqx6RHyulf9n16Iv38PFI,5597
|
215
216
|
omlish/marshal/primitives.py,sha256=-gLR_RTPTM8YP6t6PL5sNM1lAtwcZDHc9lxkimoQ9jw,1097
|
216
217
|
omlish/marshal/registries.py,sha256=GI2KogcxawMkk02Ky7-TsnijChoe1I7YTOPIbUNwSAI,1665
|
217
|
-
omlish/marshal/standard.py,sha256=
|
218
|
+
omlish/marshal/standard.py,sha256=059gc16ycgqFbBz1F3rCkbi5lgxH9sQt9We-ghiLpBs,2803
|
218
219
|
omlish/marshal/utils.py,sha256=puKJpwPpuDlMOIrKMcLTRLJyMiL6n_Xs-p59AuDEymA,543
|
219
220
|
omlish/marshal/uuids.py,sha256=H4B7UX_EPNmP2tC8bubcKrPLTS4aQu98huvbXQ3Zv2g,910
|
220
221
|
omlish/marshal/values.py,sha256=ssHiWdg_L6M17kAn8GiGdPW7UeQOm3RDikWkvwblf5I,263
|
@@ -222,7 +223,7 @@ omlish/reflect/__init__.py,sha256=iWDCNJNP4afPcv-MxZRJSIRQ4NRw6XYPyRHhBXb5YIA,66
|
|
222
223
|
omlish/reflect/isinstance.py,sha256=x5T9S2634leinBT4hl3CZZkRttvdvvlxChkC_x9Qu2s,1176
|
223
224
|
omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
|
224
225
|
omlish/reflect/subst.py,sha256=JM2RGv2-Rcex8wCqhmgvRG59zD242P9jM3O2QLjKWWo,3586
|
225
|
-
omlish/reflect/types.py,sha256=
|
226
|
+
omlish/reflect/types.py,sha256=R9AH5YnOvdZs6QhzJ6VmjvcvGibQEQi6YqK25f5VUxw,6862
|
226
227
|
omlish/secrets/__init__.py,sha256=VKB2IF9vz4h4RXcZxgXj36KXOLcGBzfqVnxPgPDWpmg,408
|
227
228
|
omlish/secrets/crypto.py,sha256=6CsLy0UEqCrBK8Xx_3-iFF6SKtu2GlEqUQ8-MliY3tk,3709
|
228
229
|
omlish/secrets/marshal.py,sha256=nVzsvQH5w3T2oMP7DCc1SLKxyR5e66psM57VOQoL0QA,2086
|
@@ -260,8 +261,8 @@ omlish/text/delimit.py,sha256=ubPXcXQmtbOVrUsNh5gH1mDq5H-n1y2R4cPL5_DQf68,4928
|
|
260
261
|
omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,3296
|
261
262
|
omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
|
262
263
|
omlish/text/parts.py,sha256=KGgo0wHOIMVMZtDso-rhSWKAcAkYAH2IGpg9tULabu8,6505
|
263
|
-
omlish-0.0.0.
|
264
|
-
omlish-0.0.0.
|
265
|
-
omlish-0.0.0.
|
266
|
-
omlish-0.0.0.
|
267
|
-
omlish-0.0.0.
|
264
|
+
omlish-0.0.0.dev13.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
265
|
+
omlish-0.0.0.dev13.dist-info/METADATA,sha256=zXBJPWS8RkxC5EOYp7pRpHnfosQB5vAF6LksMXR7wHI,3716
|
266
|
+
omlish-0.0.0.dev13.dist-info/WHEEL,sha256=uCRv0ZEik_232NlR4YDw4Pv3Ajt5bKvMH13NUU7hFuI,91
|
267
|
+
omlish-0.0.0.dev13.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
268
|
+
omlish-0.0.0.dev13.dist-info/RECORD,,
|
@@ -1,77 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: omlish
|
3
|
-
Version: 0.0.0.dev11
|
4
|
-
Summary: omlish
|
5
|
-
Author: wrmsr
|
6
|
-
License: BSD-3-Clause
|
7
|
-
Project-URL: source, https://github.com/wrmsr/omlish
|
8
|
-
Classifier: License :: OSI Approved :: BSD License
|
9
|
-
Classifier: Development Status :: 2 - Pre-Alpha
|
10
|
-
Classifier: Intended Audience :: Developers
|
11
|
-
Classifier: Operating System :: OS Independent
|
12
|
-
Classifier: Operating System :: POSIX
|
13
|
-
Requires-Python: >=3.12
|
14
|
-
License-File: LICENSE
|
15
|
-
Provides-Extra: all
|
16
|
-
Requires-Dist: anyio >=4.4 ; extra == 'all'
|
17
|
-
Requires-Dist: sniffio >=1.3 ; extra == 'all'
|
18
|
-
Requires-Dist: trio >=0.26 ; extra == 'all'
|
19
|
-
Requires-Dist: lz4 >=4 ; extra == 'all'
|
20
|
-
Requires-Dist: zstd >=1.5 ; extra == 'all'
|
21
|
-
Requires-Dist: orjson >3.10 ; extra == 'all'
|
22
|
-
Requires-Dist: cloudpickle >=3 ; extra == 'all'
|
23
|
-
Requires-Dist: pyyaml >=5 ; extra == 'all'
|
24
|
-
Requires-Dist: httpx[http2] >=0.27 ; extra == 'all'
|
25
|
-
Requires-Dist: jinja2 >=3.1 ; extra == 'all'
|
26
|
-
Requires-Dist: psutil >=6 ; extra == 'all'
|
27
|
-
Requires-Dist: wrapt >=1.14 ; extra == 'all'
|
28
|
-
Requires-Dist: cryptography >=43 ; extra == 'all'
|
29
|
-
Requires-Dist: pg8000 >=1.31 ; extra == 'all'
|
30
|
-
Requires-Dist: pymysql >=1.1 ; extra == 'all'
|
31
|
-
Requires-Dist: aiomysql >=0.2 ; extra == 'all'
|
32
|
-
Requires-Dist: aiosqlite >=0.20 ; extra == 'all'
|
33
|
-
Requires-Dist: duckdb >=1 ; extra == 'all'
|
34
|
-
Requires-Dist: pytest >=8 ; extra == 'all'
|
35
|
-
Requires-Dist: greenlet >=3 ; (python_version < "3.13") and extra == 'all'
|
36
|
-
Requires-Dist: trio-asyncio >=0.15 ; (python_version < "3.13") and extra == 'all'
|
37
|
-
Requires-Dist: python-snappy >=0.7 ; (python_version < "3.13") and extra == 'all'
|
38
|
-
Requires-Dist: sqlalchemy[asyncio] >=2 ; (python_version < "3.13") and extra == 'all'
|
39
|
-
Requires-Dist: asyncpg >=0.29 ; (python_version < "3.13") and extra == 'all'
|
40
|
-
Requires-Dist: sqlean.py >=3.45 ; (python_version < "3.13") and extra == 'all'
|
41
|
-
Requires-Dist: sqlalchemy >=2 ; (python_version >= "3.13") and extra == 'all'
|
42
|
-
Provides-Extra: async
|
43
|
-
Requires-Dist: anyio >=4.4 ; extra == 'async'
|
44
|
-
Requires-Dist: sniffio >=1.3 ; extra == 'async'
|
45
|
-
Requires-Dist: trio >=0.26 ; extra == 'async'
|
46
|
-
Requires-Dist: greenlet >=3 ; (python_version < "3.13") and extra == 'async'
|
47
|
-
Requires-Dist: trio-asyncio >=0.15 ; (python_version < "3.13") and extra == 'async'
|
48
|
-
Provides-Extra: compression
|
49
|
-
Requires-Dist: lz4 >=4 ; extra == 'compression'
|
50
|
-
Requires-Dist: zstd >=1.5 ; extra == 'compression'
|
51
|
-
Requires-Dist: python-snappy >=0.7 ; (python_version < "3.13") and extra == 'compression'
|
52
|
-
Provides-Extra: formats
|
53
|
-
Requires-Dist: orjson >3.10 ; extra == 'formats'
|
54
|
-
Requires-Dist: cloudpickle >=3 ; extra == 'formats'
|
55
|
-
Requires-Dist: pyyaml >=5 ; extra == 'formats'
|
56
|
-
Provides-Extra: http
|
57
|
-
Requires-Dist: httpx[http2] >=0.27 ; extra == 'http'
|
58
|
-
Provides-Extra: misc
|
59
|
-
Requires-Dist: jinja2 >=3.1 ; extra == 'misc'
|
60
|
-
Requires-Dist: psutil >=6 ; extra == 'misc'
|
61
|
-
Requires-Dist: wrapt >=1.14 ; extra == 'misc'
|
62
|
-
Provides-Extra: secrets
|
63
|
-
Requires-Dist: cryptography >=43 ; extra == 'secrets'
|
64
|
-
Provides-Extra: sql
|
65
|
-
Requires-Dist: pg8000 >=1.31 ; extra == 'sql'
|
66
|
-
Requires-Dist: pymysql >=1.1 ; extra == 'sql'
|
67
|
-
Requires-Dist: aiomysql >=0.2 ; extra == 'sql'
|
68
|
-
Requires-Dist: aiosqlite >=0.20 ; extra == 'sql'
|
69
|
-
Requires-Dist: sqlalchemy[asyncio] >=2 ; (python_version < "3.13") and extra == 'sql'
|
70
|
-
Requires-Dist: asyncpg >=0.29 ; (python_version < "3.13") and extra == 'sql'
|
71
|
-
Requires-Dist: sqlalchemy >=2 ; (python_version >= "3.13") and extra == 'sql'
|
72
|
-
Provides-Extra: sqlx
|
73
|
-
Requires-Dist: duckdb >=1 ; extra == 'sqlx'
|
74
|
-
Requires-Dist: sqlean.py >=3.45 ; (python_version < "3.13") and extra == 'sqlx'
|
75
|
-
Provides-Extra: testing
|
76
|
-
Requires-Dist: pytest >=8 ; extra == 'testing'
|
77
|
-
|
File without changes
|
File without changes
|