omlish 0.0.0.dev467__py3-none-any.whl → 0.0.0.dev468__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of omlish might be problematic. Click here for more details.

omlish/__about__.py CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev467'
2
- __revision__ = '6af5e3e662a690b664fc967f7c9d0b74ce820cce'
1
+ __version__ = '0.0.0.dev468'
2
+ __revision__ = 'd8cf28f2e17f2f818cbc6ab6b51824700e27dd72'
3
3
 
4
4
 
5
5
  #
@@ -10,6 +10,7 @@ from ..... import lang
10
10
  from ...._internals import STD_FIELDS_ATTR
11
11
  from ...._internals import STD_PARAMS_ATTR
12
12
  from ....specs import ClassSpec
13
+ from ....specs import ReprFn
13
14
  from ...processing.driving import drive_cls_processing
14
15
  from ...utils import class_decorator
15
16
  from ..fields.building import build_cls_std_fields
@@ -53,6 +54,7 @@ def dataclass(
53
54
 
54
55
  repr_id: bool | None = None,
55
56
  terse_repr: bool | None = None,
57
+ default_repr_fn: ReprFn | None = None,
56
58
 
57
59
  allow_redundant_decorator: bool | None = None,
58
60
 
@@ -158,6 +160,7 @@ def dataclass(
158
160
 
159
161
  repr_id=repr_id,
160
162
  terse_repr=terse_repr,
163
+ default_repr_fn=default_repr_fn,
161
164
 
162
165
  allow_redundant_decorator=allow_redundant_decorator,
163
166
  ),
@@ -4,6 +4,7 @@ import sys
4
4
  import types
5
5
  import typing as ta
6
6
 
7
+ from ....specs import ReprFn
7
8
  from .decorator import dataclass
8
9
 
9
10
 
@@ -53,6 +54,7 @@ def make_dataclass( # noqa
53
54
 
54
55
  repr_id: bool | None = None,
55
56
  terse_repr: bool | None = None,
57
+ default_repr_fn: ReprFn | None = None,
56
58
 
57
59
  allow_redundant_decorator: bool | None = None,
58
60
 
@@ -174,6 +176,7 @@ def make_dataclass( # noqa
174
176
 
175
177
  repr_id=repr_id,
176
178
  terse_repr=terse_repr,
179
+ default_repr_fn=default_repr_fn,
177
180
 
178
181
  allow_redundant_decorator=allow_redundant_decorator,
179
182
  )
@@ -32,6 +32,7 @@ class ReprPlan(Plan):
32
32
 
33
33
  id: bool = False
34
34
  terse: bool = False
35
+ default_fn: OpRef[ReprFn] | None = None
35
36
 
36
37
 
37
38
  @register_generator_type(ReprPlan)
@@ -66,11 +67,17 @@ class ReprGenerator(Generator[ReprPlan]):
66
67
  fn=fnr,
67
68
  ))
68
69
 
70
+ drf: OpRef | None = None
71
+ if ctx.cs.default_repr_fn is not None:
72
+ drf = OpRef(f'repr.default_fn')
73
+ orm[drf] = ctx.cs.default_repr_fn
74
+
69
75
  return PlanResult(
70
76
  ReprPlan(
71
77
  fields=tuple(rfs),
72
78
  id=ctx.cs.repr_id,
73
79
  terse=ctx.cs.terse_repr,
80
+ default_fn=drf,
74
81
  ),
75
82
  orm,
76
83
  )
@@ -85,10 +92,16 @@ class ReprGenerator(Generator[ReprPlan]):
85
92
  if not (pl.terse and not f.kw_only):
86
93
  pfx = f'{f.name}='
87
94
 
95
+ fn: OpRef[ReprFn] | None = None
88
96
  if f.fn is not None:
89
- ors.add(f.fn)
97
+ fn = f.fn
98
+ elif pl.default_fn is not None:
99
+ fn = pl.default_fn
100
+
101
+ if fn is not None:
102
+ ors.add(fn)
90
103
  part_lines.extend([
91
- f' if (s := {f.fn.ident()}(self.{f.name})) is not None:',
104
+ f' if (s := {fn.ident()}(self.{f.name})) is not None:',
92
105
  f' parts.append(f"{pfx}{{s}}")',
93
106
  ])
94
107
  else:
@@ -216,6 +216,7 @@ class ClassSpec(_SpecBase, lang.Final):
216
216
 
217
217
  repr_id: bool = False
218
218
  terse_repr: bool = False
219
+ default_repr_fn: ReprFn | None = None
219
220
 
220
221
  allow_redundant_decorator: bool = False
221
222
 
omlish/http/all.py CHANGED
@@ -4,6 +4,16 @@ from .. import lang as _lang
4
4
  with _lang.auto_proxy_init(globals()):
5
5
  ##
6
6
 
7
+ from .clients.asyncs import ( # noqa
8
+ AsyncStreamHttpResponse,
9
+
10
+ async_close_response,
11
+ async_closing_response,
12
+ async_read_response,
13
+
14
+ AsyncHttpClient,
15
+ )
16
+
7
17
  from .clients.base import ( # noqa
8
18
  DEFAULT_ENCODING,
9
19
 
@@ -20,8 +30,10 @@ with _lang.auto_proxy_init(globals()):
20
30
 
21
31
  from .clients.default import ( # noqa
22
32
  client,
23
-
24
33
  request,
34
+
35
+ async_client,
36
+ async_request,
25
37
  )
26
38
 
27
39
  from .clients.httpx import ( # noqa
@@ -1,60 +1,146 @@
1
+ import abc
1
2
  import typing as ta
2
3
 
4
+ from ... import lang
3
5
  from ..headers import CanHttpHeaders
6
+ from .asyncs import AsyncHttpClient
4
7
  from .base import HttpRequest
5
8
  from .base import HttpResponse
6
9
  from .sync import HttpClient
7
- from .urllib import UrllibHttpClient
10
+
11
+
12
+ with lang.auto_proxy_import(globals()):
13
+ from . import httpx as _httpx
14
+ from . import urllib as _urllib
15
+
16
+
17
+ C = ta.TypeVar('C')
18
+ R = ta.TypeVar('R')
19
+
20
+
21
+ ##
22
+
23
+
24
+ class _DefaultRequester(lang.Abstract, ta.Generic[C, R]):
25
+ def __call__(
26
+ self,
27
+ url: str,
28
+ method: str | None = None,
29
+ *,
30
+ headers: CanHttpHeaders | None = None,
31
+ data: bytes | str | None = None,
32
+
33
+ timeout_s: float | None = None,
34
+
35
+ check: bool = False,
36
+ client: C | None = None, # noqa
37
+
38
+ **kwargs: ta.Any,
39
+ ) -> R:
40
+ req = HttpRequest(
41
+ url,
42
+ method=method,
43
+
44
+ headers=headers,
45
+ data=data,
46
+
47
+ timeout_s=timeout_s,
48
+
49
+ **kwargs,
50
+ )
51
+
52
+ return self._do(
53
+ req,
54
+ check=check,
55
+ client=client,
56
+ )
57
+
58
+ @abc.abstractmethod
59
+ def _do(
60
+ self,
61
+ req: HttpRequest,
62
+ *,
63
+ check: bool = False,
64
+ client: C | None = None, # noqa
65
+ ) -> R:
66
+ raise NotImplementedError
8
67
 
9
68
 
10
69
  ##
11
70
 
12
71
 
13
72
  def _default_client() -> HttpClient:
14
- return UrllibHttpClient()
73
+ return _urllib.UrllibHttpClient()
15
74
 
16
75
 
17
76
  def client() -> HttpClient:
18
77
  return _default_client()
19
78
 
20
79
 
21
- def request(
22
- url: str,
23
- method: str | None = None,
24
- *,
25
- headers: CanHttpHeaders | None = None,
26
- data: bytes | str | None = None,
80
+ #
27
81
 
28
- timeout_s: float | None = None,
29
82
 
30
- check: bool = False,
83
+ class _SyncDefaultRequester(_DefaultRequester[HttpClient, HttpResponse]):
84
+ def _do(
85
+ self,
86
+ req: HttpRequest,
87
+ *,
88
+ check: bool = False,
89
+ client: HttpClient | None = None, # noqa
90
+ ) -> HttpResponse:
91
+ def do(cli: HttpClient) -> HttpResponse: # noqa
92
+ return cli.request(
93
+ req,
31
94
 
32
- client: HttpClient | None = None, # noqa
95
+ check=check,
96
+ )
33
97
 
34
- **kwargs: ta.Any,
35
- ) -> HttpResponse:
36
- req = HttpRequest(
37
- url,
38
- method=method,
98
+ if client is not None:
99
+ return do(client)
39
100
 
40
- headers=headers,
41
- data=data,
101
+ else:
102
+ with _default_client() as cli:
103
+ return do(cli)
42
104
 
43
- timeout_s=timeout_s,
44
105
 
45
- **kwargs,
46
- )
106
+ request = _SyncDefaultRequester()
47
107
 
48
- def do(cli: HttpClient) -> HttpResponse:
49
- return cli.request(
50
- req,
51
108
 
52
- check=check,
53
- )
109
+ ##
110
+
111
+
112
+ def _default_async_client() -> AsyncHttpClient:
113
+ return _httpx.HttpxAsyncHttpClient()
114
+
115
+
116
+ def async_client() -> AsyncHttpClient:
117
+ return _default_async_client()
118
+
119
+
120
+ #
121
+
122
+
123
+ class _AsyncDefaultRequester(_DefaultRequester[AsyncHttpClient, ta.Awaitable[HttpResponse]]):
124
+ async def _do(
125
+ self,
126
+ req: HttpRequest,
127
+ *,
128
+ check: bool = False,
129
+ client: AsyncHttpClient | None = None, # noqa
130
+ ) -> HttpResponse:
131
+ async def do(cli: AsyncHttpClient) -> HttpResponse: # noqa
132
+ return await cli.request(
133
+ req,
134
+
135
+ check=check,
136
+ )
137
+
138
+ if client is not None:
139
+ return await do(client)
140
+
141
+ else:
142
+ async with _default_async_client() as cli:
143
+ return await do(cli)
54
144
 
55
- if client is not None:
56
- return do(client)
57
145
 
58
- else:
59
- with _default_client() as cli:
60
- return do(cli)
146
+ async_request = _AsyncDefaultRequester()
@@ -2,12 +2,16 @@
2
2
  TODO:
3
3
  - standardize following redirects
4
4
  """
5
+ import contextlib
5
6
  import functools
7
+ import io
6
8
  import typing as ta
7
9
 
8
10
  from ... import dataclasses as dc
9
11
  from ... import lang
10
12
  from ..headers import HttpHeaders
13
+ from .asyncs import AsyncHttpClient
14
+ from .asyncs import AsyncStreamHttpResponse
11
15
  from .base import HttpClientError
12
16
  from .base import HttpRequest
13
17
  from .sync import HttpClient
@@ -29,6 +33,7 @@ class HttpxHttpClient(HttpClient):
29
33
  it: ta.Iterator[bytes]
30
34
 
31
35
  def read(self, /, n: int = -1) -> bytes:
36
+ # FIXME: lol n
32
37
  if n < 0:
33
38
  return b''.join(self.it)
34
39
  else:
@@ -70,3 +75,56 @@ class HttpxHttpClient(HttpClient):
70
75
  except Exception:
71
76
  resp_close()
72
77
  raise
78
+
79
+
80
+ ##
81
+
82
+
83
+ class HttpxAsyncHttpClient(AsyncHttpClient):
84
+ @dc.dataclass(frozen=True)
85
+ class _StreamAdapter:
86
+ it: ta.AsyncIterator[bytes]
87
+
88
+ async def read(self, /, n: int = -1) -> bytes:
89
+ # FIXME: lol n
90
+ if n < 0:
91
+ buf = io.BytesIO()
92
+ async for chunk in self.it:
93
+ buf.write(chunk)
94
+ return buf.getvalue()
95
+ else:
96
+ try:
97
+ return await anext(self.it)
98
+ except StopIteration:
99
+ return b''
100
+
101
+ async def _stream_request(self, req: HttpRequest) -> AsyncStreamHttpResponse:
102
+ es = contextlib.AsyncExitStack()
103
+
104
+ try:
105
+ client = await es.enter_async_context(httpx.AsyncClient())
106
+
107
+ resp = await es.enter_async_context(client.stream(
108
+ method=req.method_or_default,
109
+ url=req.url,
110
+ headers=req.headers_ or None, # type: ignore
111
+ content=req.data,
112
+ timeout=req.timeout_s,
113
+ ))
114
+
115
+ return AsyncStreamHttpResponse(
116
+ status=resp.status_code,
117
+ headers=HttpHeaders(resp.headers.raw),
118
+ request=req,
119
+ underlying=resp,
120
+ stream=self._StreamAdapter(resp.aiter_bytes()),
121
+ _closer=es.aclose,
122
+ )
123
+
124
+ except httpx.HTTPError as e:
125
+ await es.aclose()
126
+ raise HttpClientError from e
127
+
128
+ except Exception:
129
+ await es.aclose()
130
+ raise
omlish/sync.py CHANGED
@@ -141,6 +141,45 @@ class ConditionDeque(ta.Generic[T]):
141
141
  ##
142
142
 
143
143
 
144
+ class BufferRelay(ta.Generic[T]):
145
+ def __init__(
146
+ self,
147
+ *,
148
+ wake_fn: ta.Callable[[], None],
149
+ ) -> None:
150
+ super().__init__()
151
+
152
+ self._wake_fn = wake_fn
153
+
154
+ self._lock = threading.Lock()
155
+ self._buffer: BufferRelay._Buffer = BufferRelay._Buffer()
156
+
157
+ class _Buffer:
158
+ def __init__(self) -> None:
159
+ self.lst: list = []
160
+ self.age = 0
161
+
162
+ def __repr__(self) -> str:
163
+ return f'{self.__class__.__qualname__}({self.lst!r}, age={self.age!r})'
164
+
165
+ def push(self, *vs: T) -> None:
166
+ with self._lock:
167
+ buf = self._buffer
168
+ needs_wake = not buf.age
169
+ buf.lst.extend(vs)
170
+ buf.age += 1
171
+ if needs_wake:
172
+ self._wake_fn()
173
+
174
+ def swap(self) -> ta.Sequence[T]:
175
+ with self._lock:
176
+ buf, self._buffer = self._buffer, BufferRelay._Buffer()
177
+ return buf.lst
178
+
179
+
180
+ ##
181
+
182
+
144
183
  class CountDownLatch:
145
184
  def __init__(self, count: int) -> None:
146
185
  super().__init__()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev467
3
+ Version: 0.0.0.dev468
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.omlish-manifests.json,sha256=FLw7xkPiSXuImZgqSP8BwrEib2R1doSzUPLUkc-QUIA,8410
2
- omlish/__about__.py,sha256=j1W4ZyB_sk2AAWcwpXGSBHgTdg-WSXXME0s51aTVi9g,3611
2
+ omlish/__about__.py,sha256=WE_K_l1J2e6fzoAW-jZ_o6mRow7zeKS-5ul4tkWVAFw,3611
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
@@ -9,7 +9,7 @@ omlish/libc.py,sha256=mNY2FWZ2BjSucOx5TEW8IP_B5n84tVZWuVPL3Z3sUH8,15644
9
9
  omlish/metadata.py,sha256=lTh3NYVyjHtLTyAGiZxXJMjZrSPQ1E8zXvnJCgKSESA,4179
10
10
  omlish/runmodule.py,sha256=vQ9VZN_c3sQX9rj036dW9lXuMWTjGOfWnwDcWTSWnn0,705
11
11
  omlish/shlex.py,sha256=rlbgHWxjwpkCBRphOPqSIN_KD6qWJMLldNJUILulKT0,253
12
- omlish/sync.py,sha256=bmhoaapdt1WhbL8_BWP9WhCy-u6VeZKnv2k9fzRZDds,3551
12
+ omlish/sync.py,sha256=mUjvZZUnnaAdTBPGu8QsUYS9f86MYW6TFl_PTN5pxGQ,4492
13
13
  omlish/algorithm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  omlish/algorithm/all.py,sha256=FudUHwoaRLNNmqYM3jhP2Yd2BpmYhNBRPaVZzARMoSc,194
15
15
  omlish/algorithm/distribute.py,sha256=juv6JaCynQG6RaxX0fnNNEVJcvZ8hUS2Mv3ND2t9Y3w,1544
@@ -133,15 +133,15 @@ omlish/dataclasses/debug.py,sha256=giBiv6aXvX0IagwNCW64qBzNjfOFr3-VmgDy_KYlb-k,2
133
133
  omlish/dataclasses/errors.py,sha256=QeJVRmrZQer3m66jSDiuAyfAngCBtocMxfnsoSxzOVw,2520
134
134
  omlish/dataclasses/inspect.py,sha256=EpVb50CsEUWpn70gkjBa-hI1mr5_VubHTERsofgE-Lw,4600
135
135
  omlish/dataclasses/reflection.py,sha256=6BD2FUiOEtpi_2JREWyVzemjbBJdBMUm8XxQ9SVIKGs,2799
136
- omlish/dataclasses/specs.py,sha256=jM-4J2WHR3B-rNDZOH21m2OToArclk1Q2YSsDYSMw7g,7209
136
+ omlish/dataclasses/specs.py,sha256=t5JIFsGOg5sQGb1kUZvcrs7ScANAHcAIMuBx9k2q-qY,7251
137
137
  omlish/dataclasses/impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
138
  omlish/dataclasses/impl/configs.py,sha256=ZW3Nf7uImc8VZLAdX1yh9TzzaOomVQ0zlcRuDcSUeXc,1520
139
139
  omlish/dataclasses/impl/utils.py,sha256=jAD6IIILo70aD_s60CaqRU2YvpZxBKy4K5EG-MTiqVo,1871
140
140
  omlish/dataclasses/impl/api/__init__.py,sha256=k5iS9QOwf_f4iOfGffYhnqDOcmEIwEUUTp00u11kIPM,455
141
141
  omlish/dataclasses/impl/api/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
142
  omlish/dataclasses/impl/api/classes/conversion.py,sha256=T1I-aZKui2tv8rknuw9yCvGQLTrFnzTuHDFoezhE0ko,908
143
- omlish/dataclasses/impl/api/classes/decorator.py,sha256=LqkAjNFpUeLThnnkzt1tIYKtIf8maDCkjrZzSbABZbg,4067
144
- omlish/dataclasses/impl/api/classes/make.py,sha256=xcah0foeKtHa8r3H3Osr2xXBNpkIa_kImW0zfoECBVI,5214
143
+ omlish/dataclasses/impl/api/classes/decorator.py,sha256=J0uz7wkI8xsQWKvover-3njviThRrRIt1PL0fychEAo,4192
144
+ omlish/dataclasses/impl/api/classes/make.py,sha256=yfhf68ZoRfR_DXXGUzJ4bnCPbCnNvlaokW2gkrNWm6M,5331
145
145
  omlish/dataclasses/impl/api/classes/metadata.py,sha256=sMZgtoZaybfCoBKOVj7hKc-xqfU2Lca9WFrqg8UAAsE,2773
146
146
  omlish/dataclasses/impl/api/classes/params.py,sha256=cJAMxLHgW6xyKURlCnDQpA-TYfOgWpVBCavie-IZTOM,2000
147
147
  omlish/dataclasses/impl/api/fields/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -164,7 +164,7 @@ omlish/dataclasses/impl/concerns/order.py,sha256=f1JVDkeTWllO9Tu79xKkjHul-_rpsYZ
164
164
  omlish/dataclasses/impl/concerns/override.py,sha256=eegJ4KRs-p3Oj5ipY1eySwXJ3vFyVXG5gWRQZcsmvUQ,2810
165
165
  omlish/dataclasses/impl/concerns/params.py,sha256=O_1f83gH8l_PzvOndxC4vlw2-bp8PNhNQUqB-0mJrWw,407
166
166
  omlish/dataclasses/impl/concerns/replace.py,sha256=2lZCmTpz4uxMsNw8a29OzSykDqWHaINzvk13qyMpVUA,1509
167
- omlish/dataclasses/impl/concerns/repr.py,sha256=j26G7vC147z-GJc86DbY__b1C4QPdiWlxeNNIujbqzM,3461
167
+ omlish/dataclasses/impl/concerns/repr.py,sha256=EOmKjjPuIWLJzUDgYwpZKjyjTH6NMUQEVRILwlqxwNw,3885
168
168
  omlish/dataclasses/impl/concerns/slots.py,sha256=onEWZRPVhiCJOoyk3lNA_PTh0w49TDyqmTmcCY_oiHs,6604
169
169
  omlish/dataclasses/impl/generation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
170
170
  omlish/dataclasses/impl/generation/base.py,sha256=UhG2_851oM_O9gQiSzj6I3CLpdljrOWyOdFDwX6ZJl4,712
@@ -302,7 +302,7 @@ omlish/graphs/dot/make.py,sha256=e-M1IEdh4kHEjJmBxpaEUPxvFLrm5uIXdGxjQZr2HRo,365
302
302
  omlish/graphs/dot/rendering.py,sha256=SGSpwswdFqsjEnznQDyryIsXE8bzPXSUFAJHlB2uT2Y,3655
303
303
  omlish/graphs/dot/utils.py,sha256=8cGKIdcM-w1q4ITUYyC0lnYwLqNWuH2OddmmbLxVgEo,806
304
304
  omlish/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
305
- omlish/http/all.py,sha256=ChV0KcPN8CKcwlQiWqYyMvmjHuH9qhBsd2kV7-HrFto,1409
305
+ omlish/http/all.py,sha256=YdSZdd_Sq0CxxqcSBli0xBc75Fx-flA306zkSX_z4AQ,1654
306
306
  omlish/http/asgi.py,sha256=4r2Gw1ojwp2OVpwonof1p4GFRcseIJqPhpkQpLhM9Jw,3243
307
307
  omlish/http/consts.py,sha256=7BJ4D1MdIvqBcepkgCfBFHolgTwbOlqsOEiee_IjxOA,2289
308
308
  omlish/http/cookies.py,sha256=uuOYlHR6e2SC3GM41V0aozK10nef9tYg83Scqpn5-HM,6351
@@ -322,8 +322,8 @@ omlish/http/wsgi.py,sha256=1JpfrY2JrQ0wrEVE0oLdQMWZw8Zcx0b4_9f3VmH4JKA,1070
322
322
  omlish/http/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
323
323
  omlish/http/clients/asyncs.py,sha256=9AAVQVYuntDZVGZNatiK2SRS2OxHqDHlDgpuu6rkpSQ,3923
324
324
  omlish/http/clients/base.py,sha256=2yv4zLMBhE0JYSKpUHZ9MUVZZ_if3AyOIFTVcZsepAs,2670
325
- omlish/http/clients/default.py,sha256=1snwqKIHLz1trhxOl-4kyqSlO85HMYEtoQeNhguCh_o,1070
326
- omlish/http/clients/httpx.py,sha256=kxU54-rsKp2-03sm0iVHIFcvGhEV2fucBYOIU6KhyGs,1836
325
+ omlish/http/clients/default.py,sha256=y8dmcCmBgqnj_2ogVZ8NYyfq4k6dpI6t293o-12aorY,2937
326
+ omlish/http/clients/httpx.py,sha256=zjF0fg_XkurXP5CukYGzRrEaTJNFp4VaDjV5xGxj2Fo,3529
327
327
  omlish/http/clients/sync.py,sha256=E85phmFqOkdE-LgyXOZGc6u2hA24Vm5-p3UzMpYdgBs,3572
328
328
  omlish/http/clients/urllib.py,sha256=dQEI_nwTqn92vA2ikrnwDBD88a_DELRG6qBPS1kxGRQ,2701
329
329
  omlish/http/coro/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -831,9 +831,9 @@ omlish/typedvalues/marshal.py,sha256=2xqX6JllhtGpmeYkU7C-qzgU__0x-vd6CzYbAsocQlc
831
831
  omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
832
832
  omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
833
833
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
834
- omlish-0.0.0.dev467.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
835
- omlish-0.0.0.dev467.dist-info/METADATA,sha256=G93jyKvKIvLBs-CUkIOj2oC_fClPJlHOBA9dYmrU5tw,18999
836
- omlish-0.0.0.dev467.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
837
- omlish-0.0.0.dev467.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
838
- omlish-0.0.0.dev467.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
839
- omlish-0.0.0.dev467.dist-info/RECORD,,
834
+ omlish-0.0.0.dev468.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
835
+ omlish-0.0.0.dev468.dist-info/METADATA,sha256=HSlC60OEdYHNi6x1X5xQznGGPwJyx3qBuHjhB9OR9Xk,18999
836
+ omlish-0.0.0.dev468.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
837
+ omlish-0.0.0.dev468.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
838
+ omlish-0.0.0.dev468.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
839
+ omlish-0.0.0.dev468.dist-info/RECORD,,