omlish 0.0.0.dev1__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.

Files changed (187) hide show
  1. omlish/__about__.py +7 -0
  2. omlish/__init__.py +0 -0
  3. omlish/argparse.py +223 -0
  4. omlish/asyncs/__init__.py +17 -0
  5. omlish/asyncs/anyio.py +23 -0
  6. omlish/asyncs/asyncio.py +19 -0
  7. omlish/asyncs/asyncs.py +76 -0
  8. omlish/asyncs/futures.py +179 -0
  9. omlish/asyncs/trio.py +11 -0
  10. omlish/c3.py +173 -0
  11. omlish/cached.py +9 -0
  12. omlish/check.py +231 -0
  13. omlish/collections/__init__.py +63 -0
  14. omlish/collections/_abc.py +156 -0
  15. omlish/collections/_io_abc.py +78 -0
  16. omlish/collections/cache/__init__.py +11 -0
  17. omlish/collections/cache/descriptor.py +188 -0
  18. omlish/collections/cache/impl.py +485 -0
  19. omlish/collections/cache/types.py +37 -0
  20. omlish/collections/coerce.py +337 -0
  21. omlish/collections/frozen.py +148 -0
  22. omlish/collections/identity.py +106 -0
  23. omlish/collections/indexed.py +75 -0
  24. omlish/collections/mappings.py +127 -0
  25. omlish/collections/ordered.py +81 -0
  26. omlish/collections/persistent.py +36 -0
  27. omlish/collections/skiplist.py +193 -0
  28. omlish/collections/sorted.py +126 -0
  29. omlish/collections/treap.py +228 -0
  30. omlish/collections/treapmap.py +144 -0
  31. omlish/collections/unmodifiable.py +174 -0
  32. omlish/collections/utils.py +110 -0
  33. omlish/configs/__init__.py +0 -0
  34. omlish/configs/flattening.py +147 -0
  35. omlish/configs/props.py +64 -0
  36. omlish/dataclasses/__init__.py +83 -0
  37. omlish/dataclasses/impl/__init__.py +6 -0
  38. omlish/dataclasses/impl/api.py +260 -0
  39. omlish/dataclasses/impl/as_.py +76 -0
  40. omlish/dataclasses/impl/exceptions.py +2 -0
  41. omlish/dataclasses/impl/fields.py +148 -0
  42. omlish/dataclasses/impl/frozen.py +55 -0
  43. omlish/dataclasses/impl/hashing.py +85 -0
  44. omlish/dataclasses/impl/init.py +173 -0
  45. omlish/dataclasses/impl/internals.py +118 -0
  46. omlish/dataclasses/impl/main.py +150 -0
  47. omlish/dataclasses/impl/metaclass.py +126 -0
  48. omlish/dataclasses/impl/metadata.py +74 -0
  49. omlish/dataclasses/impl/order.py +47 -0
  50. omlish/dataclasses/impl/params.py +150 -0
  51. omlish/dataclasses/impl/processing.py +16 -0
  52. omlish/dataclasses/impl/reflect.py +173 -0
  53. omlish/dataclasses/impl/replace.py +40 -0
  54. omlish/dataclasses/impl/repr.py +34 -0
  55. omlish/dataclasses/impl/simple.py +92 -0
  56. omlish/dataclasses/impl/slots.py +80 -0
  57. omlish/dataclasses/impl/utils.py +167 -0
  58. omlish/defs.py +193 -0
  59. omlish/dispatch/__init__.py +3 -0
  60. omlish/dispatch/dispatch.py +137 -0
  61. omlish/dispatch/functions.py +52 -0
  62. omlish/dispatch/methods.py +162 -0
  63. omlish/docker.py +149 -0
  64. omlish/dynamic.py +220 -0
  65. omlish/graphs/__init__.py +0 -0
  66. omlish/graphs/dot/__init__.py +19 -0
  67. omlish/graphs/dot/items.py +162 -0
  68. omlish/graphs/dot/rendering.py +147 -0
  69. omlish/graphs/dot/utils.py +30 -0
  70. omlish/graphs/trees.py +249 -0
  71. omlish/http/__init__.py +0 -0
  72. omlish/http/consts.py +20 -0
  73. omlish/http/wsgi.py +34 -0
  74. omlish/inject/__init__.py +85 -0
  75. omlish/inject/binder.py +12 -0
  76. omlish/inject/bindings.py +49 -0
  77. omlish/inject/eagers.py +21 -0
  78. omlish/inject/elements.py +43 -0
  79. omlish/inject/exceptions.py +49 -0
  80. omlish/inject/impl/__init__.py +0 -0
  81. omlish/inject/impl/bindings.py +19 -0
  82. omlish/inject/impl/elements.py +154 -0
  83. omlish/inject/impl/injector.py +182 -0
  84. omlish/inject/impl/inspect.py +98 -0
  85. omlish/inject/impl/private.py +109 -0
  86. omlish/inject/impl/providers.py +132 -0
  87. omlish/inject/impl/scopes.py +198 -0
  88. omlish/inject/injector.py +40 -0
  89. omlish/inject/inspect.py +14 -0
  90. omlish/inject/keys.py +43 -0
  91. omlish/inject/managed.py +24 -0
  92. omlish/inject/overrides.py +18 -0
  93. omlish/inject/private.py +29 -0
  94. omlish/inject/providers.py +111 -0
  95. omlish/inject/proxy.py +48 -0
  96. omlish/inject/scopes.py +84 -0
  97. omlish/inject/types.py +21 -0
  98. omlish/iterators.py +184 -0
  99. omlish/json.py +194 -0
  100. omlish/lang/__init__.py +112 -0
  101. omlish/lang/cached.py +267 -0
  102. omlish/lang/classes/__init__.py +24 -0
  103. omlish/lang/classes/abstract.py +74 -0
  104. omlish/lang/classes/restrict.py +137 -0
  105. omlish/lang/classes/simple.py +120 -0
  106. omlish/lang/classes/test/__init__.py +0 -0
  107. omlish/lang/classes/test/test_abstract.py +89 -0
  108. omlish/lang/classes/test/test_restrict.py +71 -0
  109. omlish/lang/classes/test/test_simple.py +58 -0
  110. omlish/lang/classes/test/test_virtual.py +72 -0
  111. omlish/lang/classes/virtual.py +130 -0
  112. omlish/lang/clsdct.py +67 -0
  113. omlish/lang/cmp.py +63 -0
  114. omlish/lang/contextmanagers.py +249 -0
  115. omlish/lang/datetimes.py +67 -0
  116. omlish/lang/descriptors.py +52 -0
  117. omlish/lang/functions.py +126 -0
  118. omlish/lang/imports.py +153 -0
  119. omlish/lang/iterables.py +54 -0
  120. omlish/lang/maybes.py +136 -0
  121. omlish/lang/objects.py +103 -0
  122. omlish/lang/resolving.py +50 -0
  123. omlish/lang/strings.py +128 -0
  124. omlish/lang/typing.py +92 -0
  125. omlish/libc.py +532 -0
  126. omlish/logs/__init__.py +9 -0
  127. omlish/logs/_abc.py +247 -0
  128. omlish/logs/configs.py +62 -0
  129. omlish/logs/filters.py +9 -0
  130. omlish/logs/formatters.py +67 -0
  131. omlish/logs/utils.py +20 -0
  132. omlish/marshal/__init__.py +52 -0
  133. omlish/marshal/any.py +25 -0
  134. omlish/marshal/base.py +201 -0
  135. omlish/marshal/base64.py +25 -0
  136. omlish/marshal/dataclasses.py +115 -0
  137. omlish/marshal/datetimes.py +90 -0
  138. omlish/marshal/enums.py +43 -0
  139. omlish/marshal/exceptions.py +7 -0
  140. omlish/marshal/factories.py +129 -0
  141. omlish/marshal/global_.py +33 -0
  142. omlish/marshal/iterables.py +57 -0
  143. omlish/marshal/mappings.py +66 -0
  144. omlish/marshal/naming.py +17 -0
  145. omlish/marshal/objects.py +106 -0
  146. omlish/marshal/optionals.py +49 -0
  147. omlish/marshal/polymorphism.py +147 -0
  148. omlish/marshal/primitives.py +43 -0
  149. omlish/marshal/registries.py +57 -0
  150. omlish/marshal/standard.py +80 -0
  151. omlish/marshal/utils.py +23 -0
  152. omlish/marshal/uuids.py +29 -0
  153. omlish/marshal/values.py +30 -0
  154. omlish/math.py +184 -0
  155. omlish/os.py +32 -0
  156. omlish/reflect.py +359 -0
  157. omlish/replserver/__init__.py +5 -0
  158. omlish/replserver/__main__.py +4 -0
  159. omlish/replserver/console.py +247 -0
  160. omlish/replserver/server.py +146 -0
  161. omlish/runmodule.py +28 -0
  162. omlish/stats.py +342 -0
  163. omlish/term.py +222 -0
  164. omlish/testing/__init__.py +7 -0
  165. omlish/testing/pydevd.py +225 -0
  166. omlish/testing/pytest/__init__.py +8 -0
  167. omlish/testing/pytest/helpers.py +35 -0
  168. omlish/testing/pytest/inject/__init__.py +1 -0
  169. omlish/testing/pytest/inject/harness.py +159 -0
  170. omlish/testing/pytest/plugins/__init__.py +20 -0
  171. omlish/testing/pytest/plugins/_registry.py +6 -0
  172. omlish/testing/pytest/plugins/logging.py +13 -0
  173. omlish/testing/pytest/plugins/pycharm.py +54 -0
  174. omlish/testing/pytest/plugins/repeat.py +19 -0
  175. omlish/testing/pytest/plugins/skips.py +32 -0
  176. omlish/testing/pytest/plugins/spacing.py +19 -0
  177. omlish/testing/pytest/plugins/switches.py +70 -0
  178. omlish/testing/testing.py +102 -0
  179. omlish/text/__init__.py +0 -0
  180. omlish/text/delimit.py +171 -0
  181. omlish/text/indent.py +50 -0
  182. omlish/text/parts.py +265 -0
  183. omlish-0.0.0.dev1.dist-info/LICENSE +21 -0
  184. omlish-0.0.0.dev1.dist-info/METADATA +17 -0
  185. omlish-0.0.0.dev1.dist-info/RECORD +187 -0
  186. omlish-0.0.0.dev1.dist-info/WHEEL +5 -0
  187. omlish-0.0.0.dev1.dist-info/top_level.txt +1 -0
omlish/text/parts.py ADDED
@@ -0,0 +1,265 @@
1
+ import collections.abc
2
+ import io
3
+ import typing as ta
4
+
5
+ from .. import check
6
+ from .. import collections as col
7
+ from .. import dataclasses as dc
8
+ from .. import dispatch
9
+ from .. import lang
10
+
11
+
12
+ T = ta.TypeVar('T')
13
+
14
+
15
+ Part: ta.TypeAlias = ta.Union[str, ta.Sequence['Part'], 'DataPart']
16
+ PartT = ta.TypeVar('PartT', bound=Part)
17
+
18
+
19
+ ##
20
+
21
+
22
+ def _check_part(o: PartT) -> PartT:
23
+ if isinstance(o, (str, DataPart)):
24
+ pass
25
+ elif isinstance(o, ta.Sequence):
26
+ for c in o:
27
+ _check_part(c)
28
+ else:
29
+ raise TypeError(o)
30
+ return o
31
+
32
+
33
+ def _check_optional_part(o: ta.Optional[PartT]) -> ta.Optional[PartT]:
34
+ if o is None:
35
+ return None
36
+ return _check_part(o)
37
+
38
+
39
+ ##
40
+
41
+
42
+ class DataPart(dc.Frozen, lang.Abstract):
43
+ pass
44
+
45
+
46
+ class Wrap(DataPart, lang.Final):
47
+ part: Part = dc.xfield(coerce=_check_part)
48
+ wrapper: tuple[str, str] = ('(', ')')
49
+
50
+
51
+ class List(DataPart, lang.Final):
52
+ parts: ta.Sequence[ta.Optional[Part]] = dc.xfield(coerce=col.seq_of(_check_optional_part))
53
+ delimiter: str = dc.field(default=',') # FIXME: , check_type=str)
54
+ trailer: bool = dc.field(default=False) # FIXME: , check_type=bool)
55
+
56
+
57
+ class Concat(DataPart, lang.Final):
58
+ parts: ta.Sequence[Part] = dc.xfield(coerce=col.seq_of(_check_part))
59
+
60
+
61
+ class Block(DataPart, lang.Final):
62
+ parts: ta.Sequence[Part] = dc.xfield(coerce=col.seq_of(_check_part))
63
+
64
+
65
+ class Section(DataPart, lang.Final):
66
+ parts: ta.Sequence[Part] = dc.xfield(coerce=col.seq_of(_check_part))
67
+
68
+
69
+ class Meta(DataPart, lang.Final):
70
+ node: ta.Any
71
+
72
+
73
+ ##
74
+
75
+
76
+ class PartTransform:
77
+ @dispatch.method
78
+ def __call__(self, part: Part) -> Part:
79
+ raise TypeError(part)
80
+
81
+ @__call__.register
82
+ def __call__str(self, part: str) -> Part:
83
+ return part
84
+
85
+ @__call__.register
86
+ def __call__sequence(self, part: collections.abc.Sequence) -> Part:
87
+ return [self(c) for c in part]
88
+
89
+ @__call__.register
90
+ def __call__wrap(self, part: Wrap) -> Part:
91
+ return Wrap(self(part.part), part.wrapper)
92
+
93
+ @__call__.register
94
+ def __call__list(self, part: List) -> Part:
95
+ return List([self(c) for c in part.parts], part.delimiter, part.trailer)
96
+
97
+ @__call__.register
98
+ def __call__concat(self, part: Concat) -> Part:
99
+ return Concat([self(c) for c in part.parts])
100
+
101
+ @__call__.register
102
+ def __call__block(self, part: Block) -> Part:
103
+ return Block([self(c) for c in part.parts])
104
+
105
+ @__call__.register
106
+ def __call__section(self, part: Section) -> Part:
107
+ return Section([self(c) for c in part.parts])
108
+
109
+ @__call__.register
110
+ def __call__meta(self, part: Meta) -> Meta:
111
+ return part
112
+
113
+
114
+ ##
115
+
116
+
117
+ class RemoveMetas(PartTransform):
118
+
119
+ @PartTransform.__call__.register
120
+ def __call__meta(self, part: Meta) -> Part:
121
+ return []
122
+
123
+
124
+ remove_metas = RemoveMetas()
125
+
126
+
127
+ ##
128
+
129
+
130
+ def _drop_empties(it: ta.Iterable[T]) -> list[T]:
131
+ return [
132
+ e # type: ignore
133
+ for e in it
134
+ if not (
135
+ isinstance(e, collections.abc.Sequence) and
136
+ not e and
137
+ not isinstance(e, str)
138
+ )
139
+ ]
140
+
141
+
142
+ class CompactPart(PartTransform):
143
+
144
+ @PartTransform.__call__.register
145
+ def __call__sequence(self, part: collections.abc.Sequence) -> Part:
146
+ return _drop_empties(self(c) for c in part)
147
+
148
+ @PartTransform.__call__.register
149
+ def __call__list(self, part: List) -> Part:
150
+ parts = _drop_empties(self(c) for c in part.parts)
151
+ return List(parts, part.delimiter, part.trailer) if parts else []
152
+
153
+ @PartTransform.__call__.register
154
+ def __call__concat(self, part: Concat) -> Part:
155
+ parts = _drop_empties(self(c) for c in part.parts)
156
+ return Concat(parts) if parts else []
157
+
158
+ @PartTransform.__call__.register
159
+ def __call__block(self, part: Block) -> Part:
160
+ parts = _drop_empties(self(c) for c in part.parts)
161
+ return Block(parts) if parts else []
162
+
163
+ @PartTransform.__call__.register
164
+ def __call__section(self, part: Section) -> Part:
165
+ parts = _drop_empties(self(c) for c in part.parts)
166
+ return Section(parts) if parts else []
167
+
168
+
169
+ compact_part = CompactPart()
170
+
171
+
172
+ ##
173
+
174
+
175
+ class PartRenderer:
176
+ def __init__(self, buf: io.StringIO, *, indent: str = ' ') -> None:
177
+ super().__init__()
178
+
179
+ self._buf = buf
180
+
181
+ self._indents = 0
182
+ self._indent = indent
183
+
184
+ self._blank_lines = 0
185
+ self._has_indented = False
186
+
187
+ def _write(self, s: str) -> None:
188
+ check.not_in('\n', s)
189
+ if not self._has_indented:
190
+ self._buf.write(self._indent * self._indents)
191
+ self._blank_lines = 0
192
+ self._has_indented = True
193
+
194
+ self._buf.write(s)
195
+
196
+ def _write_newline(self, n: int = 1) -> None:
197
+ check.arg(n >= 0)
198
+ d = n - self._blank_lines
199
+ if d > 0:
200
+ self._buf.write('\n' * n)
201
+ self._blank_lines += n
202
+ self._has_indented = False
203
+
204
+ @dispatch.method
205
+ def __call__(self, part: Part) -> None:
206
+ raise TypeError(part)
207
+
208
+ @__call__.register
209
+ def __call__str(self, part: str) -> None:
210
+ self._write(part)
211
+
212
+ @__call__.register
213
+ def __call__sequence(self, part: collections.abc.Sequence) -> None:
214
+ for i, c in enumerate(part):
215
+ if i:
216
+ self._write(' ')
217
+ self(c)
218
+
219
+ @__call__.register
220
+ def __call__wrap(self, part: Wrap) -> None:
221
+ self._write(part.wrapper[0])
222
+ self(part.part)
223
+ self._write(part.wrapper[1])
224
+
225
+ @__call__.register
226
+ def __call__list(self, part: List) -> None:
227
+ for i, c in enumerate(part.parts):
228
+ if i:
229
+ self._write(part.delimiter + ' ')
230
+ self(c)
231
+ if part.trailer:
232
+ self._write(part.delimiter)
233
+
234
+ @__call__.register
235
+ def __call__concat(self, part: Concat) -> None:
236
+ for c in part.parts:
237
+ self(c)
238
+
239
+ @__call__.register
240
+ def __call__block(self, part: Block) -> None:
241
+ for c in part.parts:
242
+ self(c)
243
+ self._write_newline()
244
+
245
+ @__call__.register
246
+ def __call__section(self, part: Section) -> None:
247
+ self._indents += 1
248
+ try:
249
+ for c in part.parts:
250
+ self(c)
251
+ finally:
252
+ self._indents -= 1
253
+
254
+
255
+ def render_part(part: Part, buf: ta.Optional[io.StringIO] = None) -> io.StringIO:
256
+ if buf is None:
257
+ buf = io.StringIO()
258
+ PartRenderer(buf)(part)
259
+ return buf
260
+
261
+
262
+ def render(part: Part) -> str:
263
+ part = remove_metas(part)
264
+ part = compact_part(part)
265
+ return render_part(part).getvalue()
@@ -0,0 +1,21 @@
1
+ Copyright 2023- wrmsr
2
+
3
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
4
+ following conditions are met:
5
+
6
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
7
+ disclaimer.
8
+
9
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
10
+ disclaimer in the documentation and/or other materials provided with the distribution.
11
+
12
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
13
+ derived from this software without specific prior written permission.
14
+
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
16
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
18
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
20
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
21
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,17 @@
1
+ Metadata-Version: 2.1
2
+ Name: omlish
3
+ Version: 0.0.0.dev1
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: Intended Audience :: Developers
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3 :: Only
12
+ Classifier: Programming Language :: Python
13
+ Classifier: Programming Language :: Python :: Implementation :: CPython
14
+ Classifier: Operating System :: OS Independent
15
+ Requires-Python: >=3.11
16
+ License-File: LICENSE
17
+
@@ -0,0 +1,187 @@
1
+ omlish/__about__.py,sha256=tufbxEdmcqeXJjAIaSs3arB5oWQQbTjN4Dg6FeZ9HWE,173
2
+ omlish/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ omlish/argparse.py,sha256=qwLj7kva21aYsNWnj3De7YO5PO49Fhy9Vn2VR0_4l4A,6252
4
+ omlish/c3.py,sha256=mRXKlE5Zj9i-sa1SMsP4CWUDBvxOXkFFImx_alzNkz0,8048
5
+ omlish/cached.py,sha256=i7uWLRrUrE5N1ofzUf9D3OIsxf-dXkgu4OxCep0CCBk,197
6
+ omlish/check.py,sha256=JrS8mXt_s6-MBcHIToqsg8rfznBVWGRuTE8TsMiVMCs,5562
7
+ omlish/defs.py,sha256=yLwj2mQcxm5r9KI89WZ31dR3k_7NQWCqvWOe8_8DLFc,4748
8
+ omlish/docker.py,sha256=GLEScMfPIUDzwkHq53XzXgeqqx6DY21_0m7vZDvDcSA,4060
9
+ omlish/dynamic.py,sha256=fCQFa0F1zngUnKC-1OX87h5fZBY3Ius0lBX-oKuYtaU,6509
10
+ omlish/iterators.py,sha256=ycr0xd-IiC0VUnX9r-68AudvUeazhrICvcpcqVrmDFs,4429
11
+ omlish/json.py,sha256=rrAGEjhVj9F_QndY9yMgoSMKkgUZ8_0aq6HVMXnJcgw,4351
12
+ omlish/libc.py,sha256=Fb5atbCoF7mF5DOMfTewAsBy3qLnaqXEOvFhVdbK2_8,15216
13
+ omlish/math.py,sha256=zDp1HqHpIkgz1uV-2phfECBtF_Om2sZ7mpv30MeRuo0,3750
14
+ omlish/os.py,sha256=3j3qE8EPb0MWuo38ehWA6Y0c3ecq3l0W2rprBKggeUQ,808
15
+ omlish/reflect.py,sha256=NQVjivViMt9rcKtlgmG07mJCV40UcjhOSIWn55wOtuM,10222
16
+ omlish/runmodule.py,sha256=PWvuAaJ9wQQn6bx9ftEL3_d04DyotNn8dR_twm2pgw0,700
17
+ omlish/stats.py,sha256=Iy6IHt3ani2B9GizkD-7rR8n-l1V8MoEHX_dQno1GM0,9946
18
+ omlish/term.py,sha256=FV3XadRnCdF5fPHbR-Mm6hQEM6Hk4v8kkGKDkiuFp8k,5955
19
+ omlish/asyncs/__init__.py,sha256=wsZ2mX_t5eODmh8DxIMrArEPSqJzeL9Z1Cwx6IjITMw,315
20
+ omlish/asyncs/anyio.py,sha256=PRcr4E4WaixVAlxTN7EOiqUadZBFAuKN09X66vPC8XA,799
21
+ omlish/asyncs/asyncio.py,sha256=pSldCmtE9AgVATXb_Vnhjhhz0v2LtqgVXxe7-OFjH0g,414
22
+ omlish/asyncs/asyncs.py,sha256=QhjFUEmfQ6s0thdOxW882UFf7s0qutbd1nkPtVnQgY4,2025
23
+ omlish/asyncs/futures.py,sha256=GovsvXQycKyQMexbwgbHcfhA5hnRAbUcE4nCYjwJ8WM,5450
24
+ omlish/asyncs/trio.py,sha256=GKG3wgelFr7gIKKHZhcflvMyCvxXHNZe862KB0Xw2uA,370
25
+ omlish/collections/__init__.py,sha256=fxMXq9Vi-zN8aDHDarKr6_tcT4vAhC6s5Y8uPPv6RSE,2608
26
+ omlish/collections/_abc.py,sha256=5ml9uwTNTjOjjpjKEbDfl5Fd7rjFMj12j9lxBR3k_yA,2343
27
+ omlish/collections/_io_abc.py,sha256=1GUeGiJCTEdCTK6zTK7CTRrsox__8b7SFMEFLuV_WIA,1216
28
+ omlish/collections/coerce.py,sha256=cn7SODjGxtrsczaWBz8-UGF2We-AXXxWPfpEZ5fwW1U,7409
29
+ omlish/collections/frozen.py,sha256=jWWdukhJ0mvmcw4r7gzLX1dkcKSq280ZzMX0X9s_6J4,4094
30
+ omlish/collections/identity.py,sha256=W1a8zTND8W4txnyq0I2N23vUEKWWZyuOUhQJ56yqc70,2541
31
+ omlish/collections/indexed.py,sha256=lbMBqMjwy8VRZhEsh0o_PIkP9mk4LP3MHQZxa18Hlzg,2143
32
+ omlish/collections/mappings.py,sha256=NpvuCmoFk3gt-9PPsvGWJ5RnDMyLnkmhv_7Mm-inCtw,3202
33
+ omlish/collections/ordered.py,sha256=X6PEjlWUiemnJlxVQjmepkmSaW9t2JGkErMPb9jGoKI,2328
34
+ omlish/collections/persistent.py,sha256=KG471s0bhhReQrjlmX0xaN9HeAIcrtT264ddZCxsExo,875
35
+ omlish/collections/skiplist.py,sha256=5wNvXPQim7p8qPkWuDlV5bQ1tvAA1hbGi2PDMWrT1bw,6008
36
+ omlish/collections/sorted.py,sha256=9BLYs0E-KYtma0EpIg8Vh3odRcBLvsvHJufk6xHm1HA,3372
37
+ omlish/collections/treap.py,sha256=g8WJ_x7ZINOralNDOO5cJ1-38-NL6Uv6EstlYDKr_rI,7204
38
+ omlish/collections/treapmap.py,sha256=WHolsoeLaDu7YLZVJ6C72_ks02hLsJoskWoFt6sdniI,4280
39
+ omlish/collections/unmodifiable.py,sha256=_56I3_6w7mL-KdBwyCeS5RF5SjBS87BNvk6I_LZOyxA,4828
40
+ omlish/collections/utils.py,sha256=FqQoRYk-hLw2tigFF0_LZpJftlKE6hYWLksIApN6ueY,3025
41
+ omlish/collections/cache/__init__.py,sha256=UNGRmOOPw9a7ziL63qdncNQUPz4hRu1gek7Nh5M6VfM,396
42
+ omlish/collections/cache/descriptor.py,sha256=ul5OLhFexc-UdytXucwVrlNvJRh7SfH6HXIC0FenxHk,4982
43
+ omlish/collections/cache/impl.py,sha256=CXtHbI2lDD7XOSByqlqSPEhqes8bj4fp1r1RLivoBaU,15095
44
+ omlish/collections/cache/types.py,sha256=AIAzKOqh54HjRMO4l13tscSs2-yy-ckY8j0DVMpfNYA,689
45
+ omlish/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
+ omlish/configs/flattening.py,sha256=Jtec-wvvtieyfGad6sLpGy4dz6fh9ysoyRlj4or58go,4729
47
+ omlish/configs/props.py,sha256=upz1eNjMlIdZayYIr8XNJ3jffD3SmVRY6B7tKPG2m1o,1724
48
+ omlish/dataclasses/__init__.py,sha256=efWzVx2GUXrKNlEyoyvDF1kEFqViibhKLeaIoVifRGg,976
49
+ omlish/dataclasses/impl/__init__.py,sha256=T0Na-7M1a112REvOD0ArW8b_h5kG_xi_IReDD1f7oaU,111
50
+ omlish/dataclasses/impl/api.py,sha256=sWjT3ETTzmc-6lF0L13PYuSMbYoEkQEZPSgE5OKojwg,6315
51
+ omlish/dataclasses/impl/as_.py,sha256=AVS7nY7oUq-ghiOBLyf_QGrRw8c3t11PCVofcj6lI30,2582
52
+ omlish/dataclasses/impl/exceptions.py,sha256=YqPD4h_e5HE8MdP3Eakj1pfdMPmXXTSMSkybbH2qRIQ,42
53
+ omlish/dataclasses/impl/fields.py,sha256=Cl6hmDol5deEC3xNvXnA2_Q4AqXlOtrggoiWc-3sUjY,4252
54
+ omlish/dataclasses/impl/frozen.py,sha256=q2bq8-evo_psL1CPuvgDs22L1FoVUz3nauwQzEmwItc,1676
55
+ omlish/dataclasses/impl/hashing.py,sha256=FKnHuXCg9ylrzK2TLGqO5yfRN4HX3F415CSLlVYXtYE,3190
56
+ omlish/dataclasses/impl/init.py,sha256=tZhJFPS_iIiAOvmKMqOXYCLIovgHbmybAOQDZeD6tQE,5552
57
+ omlish/dataclasses/impl/internals.py,sha256=IiTGSXmiWtq7a0qf0ulqk8t1qyBH6jxojI3ik3g4qIU,2750
58
+ omlish/dataclasses/impl/main.py,sha256=0gFn72EojU-qpJxOmOu2Z29oezUIjVlEWaz6jeXktbA,5139
59
+ omlish/dataclasses/impl/metaclass.py,sha256=V-E_RrbNgYX7VeaY5brXzS6UskVHxo1adam6Cf8TaVA,2711
60
+ omlish/dataclasses/impl/metadata.py,sha256=o0kpJSRy4-TPpiDGKwONscJ-e_MbjOeiCmNTfd80yGQ,1416
61
+ omlish/dataclasses/impl/order.py,sha256=MSywv2H4a5wz8Syr4tXmwanc3T6om40oQYrWXHsYog0,1360
62
+ omlish/dataclasses/impl/params.py,sha256=wy78zmwc-e3uoK_MAu1B_oFuZgI36GwkYfmRXUnpgQc,3194
63
+ omlish/dataclasses/impl/processing.py,sha256=iUvaNwRAt8rQsLIIkvRye5rfk6xhgR35EbcdwZCZec8,366
64
+ omlish/dataclasses/impl/reflect.py,sha256=pSKRHkSpS3sXfmybG2T0QIf0NPFA_ue1qIjjautLv4Y,5153
65
+ omlish/dataclasses/impl/replace.py,sha256=Y0PfqKkYzJh5CzHtjCeX9ETpkIz2eIV593RfYjeAeIU,1209
66
+ omlish/dataclasses/impl/repr.py,sha256=0BUwgpjPWP5PvaPuzOXnkJwQWLIijbbgrhs__bdpR90,871
67
+ omlish/dataclasses/impl/simple.py,sha256=yDC81SMOpyxofUCi6Tvim4xRfQ5lU6XteSoQbZ0wAPc,3161
68
+ omlish/dataclasses/impl/slots.py,sha256=nN8Z1_JNB6lEBs5lhB9m9RqcmIwqTcuOyh8fpBx47IY,2633
69
+ omlish/dataclasses/impl/utils.py,sha256=Lg7sMCtf4-MpjZVm6dRtNWXqgOF01JM-PZZqsBk6RCY,6122
70
+ omlish/dispatch/__init__.py,sha256=GsiGJ91NKiQptSROtnCSkrZExBkvfDwYvdoTu5dBqF0,117
71
+ omlish/dispatch/dispatch.py,sha256=zEepb5CFqO_CS7utl9y81FYIz3CXDCvGYudOpUbZ2bo,3766
72
+ omlish/dispatch/functions.py,sha256=8OyKJwO_KdFufE9bwCyI_UFa2VGBdll3fDmpVk9JfiI,1514
73
+ omlish/dispatch/methods.py,sha256=O6mRRbN7NtbxiKHRnD-ZRzjozX2QG9FQbwwxomR_21Y,5868
74
+ omlish/graphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
+ omlish/graphs/trees.py,sha256=57GvoXYLHzxPh7552Vz5sVSevrdiiZumqZRuQ-XJVyg,8470
76
+ omlish/graphs/dot/__init__.py,sha256=6-LAx7ytHFQvfLrnxVQG1s8xmApgblERJJCTB2knOHk,642
77
+ omlish/graphs/dot/items.py,sha256=BogGn5yaV1LyuHGHQ8isIEvQosyTt-juTWdVJCWZ-_I,4082
78
+ omlish/graphs/dot/rendering.py,sha256=hUSJ5HvSvxnTIC9ynSxxP8IJnVH6quEeDbLzNlUnmuk,3626
79
+ omlish/graphs/dot/utils.py,sha256=_FMwn77WfiiAfLsRTOKWm4IYbNv5kQN22YJ5psw6CWg,801
80
+ omlish/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
+ omlish/http/consts.py,sha256=reOpgv7NHAHLqUblYgfT5-hZVngkZfMJfCz9P41JdlU,696
82
+ omlish/http/wsgi.py,sha256=czZsVUX-l2YTlMrUjKN49wRoP4rVpS0qpeBn4O5BoMY,948
83
+ omlish/inject/__init__.py,sha256=U7arFpIjcGfT209mKAqyARn1M1-KG7whS6kXa0rplB0,1231
84
+ omlish/inject/binder.py,sha256=hkT2dw_VSOkYTP4Mn1gvEFKeWPb-O_koFeSSsB8eNx4,278
85
+ omlish/inject/bindings.py,sha256=_GeM_w-QdPa_UMeVFluuGPf-9UCzvOqzo1gL0AEfqtc,1129
86
+ omlish/inject/eagers.py,sha256=ITpV2FoIzP2xJs4XtzEKTWP0QktLw1aPSWTxmNVJcPA,372
87
+ omlish/inject/elements.py,sha256=8yaOxSKnYucSJ0999rav_F8LZkozO5ihErGOr-UYOac,968
88
+ omlish/inject/exceptions.py,sha256=yiPLq0c9AcxjFc0YtZE46n1sYzIMiF4C7AEsYU0oYDY,662
89
+ omlish/inject/injector.py,sha256=BseakAm6viM95rGYW1Y-1_DfD4D4YD8wQp0t1-b2gRk,936
90
+ omlish/inject/inspect.py,sha256=PriB5cqqTYSz_FnLxoxIRAOp9fR9CMSILfvh-V26wxA,206
91
+ omlish/inject/keys.py,sha256=ihDlt4b8mPNRyEmg2EOEsTQ7e4NSVh7nVDq2JEC4OVY,759
92
+ omlish/inject/managed.py,sha256=hXVl8eLMrCaEwPv6glB9Dfr5EM_y1fBQwrZ2eu2XxsQ,627
93
+ omlish/inject/overrides.py,sha256=k-WjyslF-pZmsYwzrDDsFNgqcl0Ao3CufHCoN0LDCAU,391
94
+ omlish/inject/private.py,sha256=brBCsI-lZHPoouAij7_Eja44nkT-HxweG6eSVIhtXMA,592
95
+ omlish/inject/providers.py,sha256=UZMqw1w68d42HoH9PBSNMt0YUGZZUhldrap6LunVCw8,2011
96
+ omlish/inject/proxy.py,sha256=N2JlA0a180n8SZumyFjCI0uA4_gY35Lvocubh-Fu0fg,1602
97
+ omlish/inject/scopes.py,sha256=hecYiZwZ3H31cnTgfP01-duTM8OgllwxtvQKpzyHDSU,2033
98
+ omlish/inject/types.py,sha256=CP3ltWxRtmR2Iqz1Qd7CvaTHQYV4st5FPiNDBN8tmn0,235
99
+ omlish/inject/impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
+ omlish/inject/impl/bindings.py,sha256=8H586RCgmvwq53XBL9WMbb-1-Tdw_hh9zxIDCwcHA1c,414
101
+ omlish/inject/impl/elements.py,sha256=kmQe4oPsJ6c2zvORhIpzKlpk85epzUYa4kRxTjRcI0Q,4547
102
+ omlish/inject/impl/injector.py,sha256=zvPwELx2_QBFJ_9o8yiep76Fy5ADVlRpChaDL0tkSzQ,5542
103
+ omlish/inject/impl/inspect.py,sha256=v8eIOHvMMcVykVb7-E4OiSakClfy3-30zVVz73Qeq9g,2539
104
+ omlish/inject/impl/private.py,sha256=MiYvs-EiFrla4FQnoqmqGpYx784ij33p0obAS57HOCQ,2611
105
+ omlish/inject/impl/providers.py,sha256=m0c9AAY849P6egYBOsSCkSoSBc8So7Zbmlo6gZwzTIw,3302
106
+ omlish/inject/impl/scopes.py,sha256=2kHOF117qUqxuCaRVKQ_UB5jnorN3FpLeujYKs3Ezhg,5624
107
+ omlish/lang/__init__.py,sha256=2pZdNeZfFXZlD0L4pvpOc5eBGk8v5ok-TSgcR7V-ZqM,4834
108
+ omlish/lang/cached.py,sha256=T8KfC2BoEg7y97Lk9fFZS5c6Pb7Mozu2EsysVCNizak,7510
109
+ omlish/lang/clsdct.py,sha256=VJx4LreqU77HgWZouI5NvJyOMCD4ZO0v_N1188WW6ts,1740
110
+ omlish/lang/cmp.py,sha256=6THoTpGbZ7H-OaL8XHCD3asVxr5yIODvSXZYVLLeiaA,1346
111
+ omlish/lang/contextmanagers.py,sha256=2bQsRp3-u99PYdoE6z85VE3elKN7aXm2SO20KokOFhE,5937
112
+ omlish/lang/datetimes.py,sha256=ekOVAIma5HIyeYxOjV8N_i8IlhLIqoWpkglQ1-6qGUo,2024
113
+ omlish/lang/descriptors.py,sha256=62jYFRUgrZ4W7fjqb9kysLVDFKteHzGUtsVh0AoulyI,1179
114
+ omlish/lang/functions.py,sha256=BOtaewA9-zTdwgS47ZIw4nkUWgU3zUqGLqE6SfIjypU,2693
115
+ omlish/lang/imports.py,sha256=XgSTKNNsPNjgyg7tS-cQt1NJnJGZ2i1BJ7FlfdpsnBQ,4093
116
+ omlish/lang/iterables.py,sha256=IUNHrSmXe0f9tDofR4TwsWtneHiAYT2a2eecvum4y18,1050
117
+ omlish/lang/maybes.py,sha256=Yth7lfz_vs7GdEtiL4n9bMocu08wPpQhyp-lOA48b0s,3412
118
+ omlish/lang/objects.py,sha256=fcEPmz4mvUOi_rxk2sGEEm2XBlhKs4KXbYB0rndpxaE,2680
119
+ omlish/lang/resolving.py,sha256=tzJVo7adlXtq9EQ6-NnWVzlpmrhjhtb9v3RafGjVgnE,1581
120
+ omlish/lang/strings.py,sha256=eakasKxws7KaKYqjogympXwGUOLqh_lUpAZwvNux1b4,2372
121
+ omlish/lang/typing.py,sha256=QAauy2Cr5C-qO1zC1ZWcRQn_W3JeZZWkTTKMWbWTPTs,2354
122
+ omlish/lang/classes/__init__.py,sha256=pCBe4eCFWC1KI9bNXAKaGUtrhHggtfTHdu5-lCbEcKI,983
123
+ omlish/lang/classes/abstract.py,sha256=0Z62QVixWF18gnO-7Q23xQmVGQojRFWilGz8GxFfbGw,2287
124
+ omlish/lang/classes/restrict.py,sha256=VK37QAnIFYZF2mTNiV9ub6xxAPAN6uvWhH_Gr9KjWtU,3116
125
+ omlish/lang/classes/simple.py,sha256=WZoVwVjOGMZkmp2IX6_GmgGsTjf2IYW4m6qR_1ZZw9o,2662
126
+ omlish/lang/classes/virtual.py,sha256=ypN8yfI48ZljvNwk7i0rLr6wqX9LNfPwc1Ap3QH8gbI,3261
127
+ omlish/lang/classes/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
+ omlish/lang/classes/test/test_abstract.py,sha256=B0Dh8X7SaeoRGmxF8bL7WOsDdSQ-GRex_6SzoZ23fd4,1381
129
+ omlish/lang/classes/test/test_restrict.py,sha256=QRjbSQozTz1gi9XQbZeyWrgmph4ZRDJfdA1CBwJrZ8M,1115
130
+ omlish/lang/classes/test/test_simple.py,sha256=jdGHD3yuzCZvdRB_s-UjXPwffUb_VBozcj2sdzKn-Y8,1300
131
+ omlish/lang/classes/test/test_virtual.py,sha256=2LIDrGMSZuEldNMFkK5Bkc0OPXUIEBCBv_OzcytqCA0,1263
132
+ omlish/logs/__init__.py,sha256=V8jEdb5rj9Dli0b9qtR0ZYstRoIlxWqbU38UmEOXbfY,419
133
+ omlish/logs/_abc.py,sha256=dymUQp-Ze-WclWbf7qu5bYKdkduRDF0Zg-m3gFLra6g,5919
134
+ omlish/logs/configs.py,sha256=vW4QMZKqeEBbtQY0JEi-VKBIt0CuLgcGDgG8aTlgmC0,1762
135
+ omlish/logs/filters.py,sha256=WUjM-mQvK-IdWW3sxZRlBvnUdp-xbi0OFJqpddhas5Q,165
136
+ omlish/logs/formatters.py,sha256=4k3VkhDh-EH9aqj0-kwEjdoBcccQdKEWyR69mc9TYvs,1790
137
+ omlish/logs/utils.py,sha256=YuV9x3Ta5-qXAMqtWQ8Gc8ARNw1NFjY1jN5tPo-zKQM,384
138
+ omlish/marshal/__init__.py,sha256=8kNPJUBApx6pt2-M3wiaC0o3JXF-c9nu8MUZ_h_fg4E,821
139
+ omlish/marshal/any.py,sha256=uWGEeBWaJvh5hjaGKIBL0ogGCg1jKH0Rq_onECYpHVs,821
140
+ omlish/marshal/base.py,sha256=jITtjnR9rcb9QCXYFUmQZb58zVfu2tvNQv0YiJjLfGQ,5172
141
+ omlish/marshal/base64.py,sha256=kdkkFXjYaKx6iHxMM_7vYfaX-KUM3wXN3vzsOmBbou4,863
142
+ omlish/marshal/dataclasses.py,sha256=Fw97AntzJxzhyzQ1ceykDXUmIafakQA9oypHTTay9IY,3534
143
+ omlish/marshal/datetimes.py,sha256=5q1CQEadI5OMDYrToHNrl3NyIuD_0GAohCgKU-HjkEs,2287
144
+ omlish/marshal/enums.py,sha256=OeslV7YSskgppLteTTiQ-1i2JLnNmjqwwcw1mgBg1A8,1236
145
+ omlish/marshal/exceptions.py,sha256=wh4VEDoTDVA0xYHlQA0MDwVTzEmMem73pbrMeactwRc,146
146
+ omlish/marshal/factories.py,sha256=JCe8zEOZr1eYFRNh-xrxTYGNXRAOYRmFa81LMbxFfXU,2998
147
+ omlish/marshal/global_.py,sha256=MpGFqcITa4zbWVnw6_E-UeusxEDj4g9UaEkm4VMVOdI,743
148
+ omlish/marshal/iterables.py,sha256=yGoGyyiHXk6ykF5u7OFUZg6INoVl01tgqUTh5-ClSTI,2180
149
+ omlish/marshal/mappings.py,sha256=ERn74mqPo9SxjsRMd-_vUQZhWtRn70BjhDJKdqjltxE,2481
150
+ omlish/marshal/naming.py,sha256=QQtw_w_YuJr4Fg-tihonOaQn_XCNixMdtgMHaRkSq6w,325
151
+ omlish/marshal/objects.py,sha256=s7vbhlxD2f68LokZRIncswnBhXJhMsn1o1s43iYt7Ro,2765
152
+ omlish/marshal/optionals.py,sha256=PUNMVL9lu0mT_UA7JwW7b3TwT3nOKzEMHtAKAopCiBk,1532
153
+ omlish/marshal/polymorphism.py,sha256=Il9L9cL69AAG8fDLSY8BhYhmEFxk5G4KrpwbroCQt2o,3882
154
+ omlish/marshal/primitives.py,sha256=N7kXrdxz5CIrDnPnsYMdo0xLjEfMnVfKXLMANDu-L6Y,1139
155
+ omlish/marshal/registries.py,sha256=mQKcPMfb30BwZ8yPsugPWYI6uaVo2gCfgwXdZnOIgVc,1652
156
+ omlish/marshal/standard.py,sha256=Gx0XJIG0cjL_mkBbkMX_xGe_EpxlaVo4JqgHwYqa4io,2436
157
+ omlish/marshal/utils.py,sha256=lRxo1Z9vF-ljFQu1hMLa_weVk6-rEphIDhxkYXMVqg0,495
158
+ omlish/marshal/uuids.py,sha256=_htkeMt1a6FUNBlstZIy2rrB1-1DiavV5dZrjSQNYVM,952
159
+ omlish/marshal/values.py,sha256=gKF99zPwE9JQw5hExyRFVOvedpUCHI3mqS_X-1ixTho,255
160
+ omlish/replserver/__init__.py,sha256=uLo6V2aQ29v9z3IMELlPDSlG3_2iOT4-_X8VniF-EgE,235
161
+ omlish/replserver/__main__.py,sha256=LmU41lQ58bm1h4Mx7S8zhE_uEBSC6kPcp9mn5JRpulA,32
162
+ omlish/replserver/console.py,sha256=Bvah-2q4EAKEE6FNQMDyiPFwpLw2NUGEBrdbpr3UY0s,7531
163
+ omlish/replserver/server.py,sha256=wAPs2QX6sfXC5kQfHEnvt3D08UC0Uj6PRSzFdO7-JA8,4867
164
+ omlish/testing/__init__.py,sha256=l13axR7dyVE9T1e6w1pMYtAkW3vS2J97nBcYQ1FUv18,136
165
+ omlish/testing/pydevd.py,sha256=tRpmx-Ui4r2giPa77sPqd1sgIP4JBAKfN2GxcYbwhZc,5694
166
+ omlish/testing/testing.py,sha256=4AI6yGXI3hoqvgYSsXU8oyauY5AcZqXmKZ8OV0AzOpQ,2493
167
+ omlish/testing/pytest/__init__.py,sha256=diebkOX565JdY7HIDMJVLlj3pcFnlK-spv6YIlD77oA,176
168
+ omlish/testing/pytest/helpers.py,sha256=DKZXQGqKpDiQAh0SuYrzvJ8usJbTnuVQFDpuDmQD_Oc,912
169
+ omlish/testing/pytest/inject/__init__.py,sha256=Djg95wFBiRRWBSmLQZ_wFoWLk51LmdgPGJ4C0LtzK2k,30
170
+ omlish/testing/pytest/inject/harness.py,sha256=2Gt8Zl8QOvogrlsoF6D5p5nKQ6vviRfIrjmird_QRYQ,4440
171
+ omlish/testing/pytest/plugins/__init__.py,sha256=7FnxXu9O78Nn_Xz6EM45fth97J_R6Z2Fkkg-2zjbpUk,375
172
+ omlish/testing/pytest/plugins/_registry.py,sha256=IK04KlBgiOJxKAyCCgjpX2R-9tE-btalYJkgjLc8Te8,77
173
+ omlish/testing/pytest/plugins/logging.py,sha256=1zs6Xe54wiaSjabCviaFXwKkoN97CKm3mA5mEoUeJGs,380
174
+ omlish/testing/pytest/plugins/pycharm.py,sha256=wREYVMXTNqWdnGD-tPpKOMslPlw4V4J1X0FNc_ldI5Q,1788
175
+ omlish/testing/pytest/plugins/repeat.py,sha256=flSQzE9GFOWksVKz-mUGnpxJpv3yRqn1G4K8pW7JHs0,498
176
+ omlish/testing/pytest/plugins/skips.py,sha256=EoZDg1uWccgbAegmzqI85c7RliycD1e2J4Y7vfDRhwM,1041
177
+ omlish/testing/pytest/plugins/spacing.py,sha256=JQQhi9q3c523Ro1a_K_9RGAb7HotiO74N8bYX2VESFE,707
178
+ omlish/testing/pytest/plugins/switches.py,sha256=A3hKUZEqau5wMDuHvgOTlhlCrdRI72-ZaorkygK6yCk,1830
179
+ omlish/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
180
+ omlish/text/delimit.py,sha256=G34PsRMtC7XzdS5WyMQO5trK0Ql9X5ZgdvSYw0Pw-Y8,4923
181
+ omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
182
+ omlish/text/parts.py,sha256=tsVTtfP9H6250YBiTfiaYGEMrxysVb2_BX-Z55jyq7Y,6529
183
+ omlish-0.0.0.dev1.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
184
+ omlish-0.0.0.dev1.dist-info/METADATA,sha256=QdIH_AqKvmzs6CnhMEPgho5R9cDNJ7Wk4Zfj59eYSGY,568
185
+ omlish-0.0.0.dev1.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
186
+ omlish-0.0.0.dev1.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
187
+ omlish-0.0.0.dev1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (70.2.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ omlish