omlish 0.0.0.dev434__py3-none-any.whl → 0.0.0.dev435__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/concurrent/__init__.py +0 -17
- omlish/concurrent/all.py +17 -0
- omlish/configs/types.py +1 -1
- omlish/daemons/__init__.py +70 -0
- omlish/dataclasses/errors.py +1 -1
- omlish/formats/json/stream/lexing.py +12 -6
- omlish/formats/json/stream/utils.py +28 -2
- omlish/formats/json5/stream.py +82 -0
- omlish/funcs/genmachine.py +1 -1
- omlish/http/coro/server/server.py +1 -1
- omlish/lite/attrops.py +1 -1
- omlish/lite/inject.py +4 -4
- omlish/marshal/__init__.py +20 -8
- omlish/os/atomics.py +1 -1
- omlish/reflect/ops.py +9 -0
- omlish/reflect/types.py +19 -6
- omlish/sockets/addresses.py +1 -1
- omlish/sql/queries/params.py +1 -1
- {omlish-0.0.0.dev434.dist-info → omlish-0.0.0.dev435.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev434.dist-info → omlish-0.0.0.dev435.dist-info}/RECORD +25 -24
- omlish/formats/json5/streams.py +0 -22
- {omlish-0.0.0.dev434.dist-info → omlish-0.0.0.dev435.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev434.dist-info → omlish-0.0.0.dev435.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev434.dist-info → omlish-0.0.0.dev435.dist-info}/licenses/LICENSE +0 -0
- {omlish-0.0.0.dev434.dist-info → omlish-0.0.0.dev435.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
omlish/concurrent/__init__.py
CHANGED
@@ -1,17 +0,0 @@
|
|
1
|
-
from .. import lang as _lang
|
2
|
-
|
3
|
-
|
4
|
-
with _lang.auto_proxy_init(globals()):
|
5
|
-
##
|
6
|
-
|
7
|
-
from .executors import ( # noqa
|
8
|
-
ImmediateExecutor,
|
9
|
-
new_executor,
|
10
|
-
)
|
11
|
-
|
12
|
-
from .futures import ( # noqa
|
13
|
-
FutureError,
|
14
|
-
FutureTimeoutError,
|
15
|
-
wait_futures,
|
16
|
-
wait_dependent_futures,
|
17
|
-
)
|
omlish/concurrent/all.py
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
from .. import lang as _lang
|
2
|
+
|
3
|
+
|
4
|
+
with _lang.auto_proxy_init(globals()):
|
5
|
+
##
|
6
|
+
|
7
|
+
from .executors import ( # noqa
|
8
|
+
ImmediateExecutor,
|
9
|
+
new_executor,
|
10
|
+
)
|
11
|
+
|
12
|
+
from .futures import ( # noqa
|
13
|
+
FutureError,
|
14
|
+
FutureTimeoutError,
|
15
|
+
wait_futures,
|
16
|
+
wait_dependent_futures,
|
17
|
+
)
|
omlish/configs/types.py
CHANGED
omlish/daemons/__init__.py
CHANGED
@@ -0,0 +1,70 @@
|
|
1
|
+
from .. import lang as _lang # noqa
|
2
|
+
|
3
|
+
|
4
|
+
with _lang.auto_proxy_init(globals()):
|
5
|
+
##
|
6
|
+
|
7
|
+
from .daemon import ( # noqa
|
8
|
+
Daemon,
|
9
|
+
)
|
10
|
+
|
11
|
+
from .launching import ( # noqa
|
12
|
+
Launcher,
|
13
|
+
)
|
14
|
+
|
15
|
+
from .services import ( # noqa
|
16
|
+
Service,
|
17
|
+
|
18
|
+
ServiceTarget,
|
19
|
+
ServiceTargetRunner,
|
20
|
+
|
21
|
+
ServiceConfigTarget,
|
22
|
+
ServiceConfigTargetRunner,
|
23
|
+
)
|
24
|
+
|
25
|
+
from .spawning import ( # noqa
|
26
|
+
Spawning,
|
27
|
+
Spawn,
|
28
|
+
Spawner,
|
29
|
+
InProcessSpawner,
|
30
|
+
spawner_for,
|
31
|
+
|
32
|
+
MultiprocessingSpawning,
|
33
|
+
MultiprocessingSpawner,
|
34
|
+
|
35
|
+
ForkSpawning,
|
36
|
+
ForkSpawner,
|
37
|
+
|
38
|
+
ThreadSpawning,
|
39
|
+
ThreadSpawner,
|
40
|
+
)
|
41
|
+
|
42
|
+
from .targets import ( # noqa
|
43
|
+
Target,
|
44
|
+
TargetRunner,
|
45
|
+
target_runner_for,
|
46
|
+
|
47
|
+
FnTarget,
|
48
|
+
FnTargetRunner,
|
49
|
+
|
50
|
+
NameTarget,
|
51
|
+
NameTargetRunner,
|
52
|
+
|
53
|
+
ExecTarget,
|
54
|
+
ExecTargetRunner,
|
55
|
+
)
|
56
|
+
|
57
|
+
from .waiting import ( # noqa
|
58
|
+
Wait,
|
59
|
+
Waiter,
|
60
|
+
waiter_for,
|
61
|
+
|
62
|
+
SequentialWait,
|
63
|
+
SequentialWaiter,
|
64
|
+
|
65
|
+
FnWait,
|
66
|
+
FnWaiter,
|
67
|
+
|
68
|
+
ConnectWait,
|
69
|
+
ConnectWaiter,
|
70
|
+
)
|
omlish/dataclasses/errors.py
CHANGED
@@ -122,11 +122,17 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
122
122
|
include_space: bool = False,
|
123
123
|
allow_comments: bool = False,
|
124
124
|
include_comments: bool = False,
|
125
|
+
allow_single_quotes: bool = False,
|
126
|
+
string_literal_parser: ta.Callable[[str], str] | None = None,
|
125
127
|
) -> None:
|
126
128
|
self._include_raw = include_raw
|
127
129
|
self._include_space = include_space
|
128
130
|
self._allow_comments = allow_comments
|
129
131
|
self._include_comments = include_comments
|
132
|
+
self._allow_single_quotes = allow_single_quotes
|
133
|
+
if string_literal_parser is None:
|
134
|
+
string_literal_parser = json.loads
|
135
|
+
self._string_literal_parser = string_literal_parser
|
130
136
|
|
131
137
|
self._ofs = 0
|
132
138
|
self._line = 1
|
@@ -202,8 +208,8 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
202
208
|
yield self._make_tok(CONTROL_TOKENS[c], c, c, self.pos)
|
203
209
|
continue
|
204
210
|
|
205
|
-
if c == '"':
|
206
|
-
return self._do_string()
|
211
|
+
if c == '"' or (self._allow_single_quotes and c == "'"):
|
212
|
+
return self._do_string(c)
|
207
213
|
|
208
214
|
if c.isdigit() or c == '-':
|
209
215
|
return self._do_number(c)
|
@@ -217,9 +223,9 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
217
223
|
|
218
224
|
self._raise(f'Unexpected character: {c}')
|
219
225
|
|
220
|
-
def _do_string(self):
|
226
|
+
def _do_string(self, q: str):
|
221
227
|
check.state(self._buf.tell() == 0)
|
222
|
-
self._buf.write(
|
228
|
+
self._buf.write(q)
|
223
229
|
|
224
230
|
pos = self.pos
|
225
231
|
|
@@ -234,13 +240,13 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
234
240
|
self._raise(f'Unterminated string literal: {self._buf.getvalue()}')
|
235
241
|
|
236
242
|
self._buf.write(c)
|
237
|
-
if c ==
|
243
|
+
if c == q and last != '\\':
|
238
244
|
break
|
239
245
|
last = c
|
240
246
|
|
241
247
|
raw = self._flip_buf()
|
242
248
|
try:
|
243
|
-
sv =
|
249
|
+
sv = self._string_literal_parser(raw)
|
244
250
|
except json.JSONDecodeError as e:
|
245
251
|
self._raise(f'Invalid string literal: {raw!r}', e)
|
246
252
|
|
@@ -1,3 +1,28 @@
|
|
1
|
+
r"""
|
2
|
+
TODO:
|
3
|
+
- gson switches
|
4
|
+
- Strictness.LEGACY_STRICT
|
5
|
+
- JsonReader allows the literals true, false and null to have any capitalization, for example fAlSe or NULL
|
6
|
+
- JsonReader supports the escape sequence \', representing a ' (single-quote)
|
7
|
+
- JsonReader supports the escape sequence \LF (with LF being the Unicode character U+000A), resulting in a LF within
|
8
|
+
the read JSON string
|
9
|
+
- JsonReader allows unescaped control characters (U+0000 through U+001F)
|
10
|
+
- Strictness.LENIENT
|
11
|
+
- In lenient mode, all input that is accepted in legacy strict mode is accepted in addition to the following
|
12
|
+
departures from RFC 8259:
|
13
|
+
- Streams that start with the non-execute prefix, ")]'\n"}
|
14
|
+
- Streams that include multiple top-level values. With legacy strict or strict parsing, each stream must contain
|
15
|
+
exactly one top-level value.
|
16
|
+
- Numbers may be NaNs or infinities represented by NaN and (-)Infinity respectively.
|
17
|
+
- End of line comments starting with // or # and ending with a newline character.
|
18
|
+
- C-style comments starting with /* and ending with */. Such comments may not be nested.
|
19
|
+
- Names that are unquoted or 'single quoted'.
|
20
|
+
- Strings that are unquoted or 'single quoted'.
|
21
|
+
- Array elements separated by ; instead of ,.
|
22
|
+
- Unnecessary array separators. These are interpreted as if null was the omitted value.
|
23
|
+
- Names and values separated by = or => instead of :.
|
24
|
+
- Name/value pairs separated by ; instead of ,.
|
25
|
+
"""
|
1
26
|
import dataclasses as dc
|
2
27
|
import typing as ta
|
3
28
|
|
@@ -15,7 +40,7 @@ class JsonStreamValueParser(lang.ExitStacked):
|
|
15
40
|
include_raw: bool = False
|
16
41
|
yield_object_lists: bool = False
|
17
42
|
|
18
|
-
|
43
|
+
json5: bool = False
|
19
44
|
|
20
45
|
#
|
21
46
|
|
@@ -26,7 +51,8 @@ class JsonStreamValueParser(lang.ExitStacked):
|
|
26
51
|
def _enter_contexts(self) -> None:
|
27
52
|
self._lex = JsonStreamLexer(
|
28
53
|
include_raw=self.include_raw,
|
29
|
-
allow_comments=self.
|
54
|
+
allow_comments=self.json5,
|
55
|
+
allow_single_quotes=self.json5,
|
30
56
|
)
|
31
57
|
|
32
58
|
self._parse = JsonStreamParser()
|
@@ -0,0 +1,82 @@
|
|
1
|
+
"""
|
2
|
+
TODO:
|
3
|
+
|
4
|
+
Objects:
|
5
|
+
- Object keys may be an ECMAScript 5.1 IdentifierName.
|
6
|
+
- Objects may have a single trailing comma.
|
7
|
+
Arrays:
|
8
|
+
- Arrays may have a single trailing comma.
|
9
|
+
Strings:
|
10
|
+
- Strings may be single quoted.
|
11
|
+
- Strings may span multiple lines by escaping new line characters.
|
12
|
+
- Strings may include character escapes.
|
13
|
+
Numbers:
|
14
|
+
- Numbers may be hexadecimal.
|
15
|
+
- Numbers may have a leading or trailing decimal point.
|
16
|
+
- Numbers may be IEEE 754 positive infinity, negative infinity, and NaN.
|
17
|
+
- Numbers may begin with an explicit plus sign.
|
18
|
+
Comments:
|
19
|
+
+ Single and multi-line comments are allowed.
|
20
|
+
White Space:
|
21
|
+
- Additional white space characters are allowed.
|
22
|
+
"""
|
23
|
+
import dataclasses as dc
|
24
|
+
import typing as ta
|
25
|
+
|
26
|
+
from ... import lang
|
27
|
+
from ..json.stream.building import JsonValueBuilder
|
28
|
+
from ..json.stream.lexing import JsonStreamLexer
|
29
|
+
from ..json.stream.parsing import JsonStreamParser
|
30
|
+
from .literals import parse_string_literal
|
31
|
+
|
32
|
+
|
33
|
+
##
|
34
|
+
|
35
|
+
|
36
|
+
@dc.dataclass(kw_only=True)
|
37
|
+
class JsonStreamValueParser(lang.ExitStacked):
|
38
|
+
include_raw: bool = False
|
39
|
+
yield_object_lists: bool = False
|
40
|
+
|
41
|
+
#
|
42
|
+
|
43
|
+
_lex: JsonStreamLexer = dc.field(init=False)
|
44
|
+
_parse: JsonStreamParser = dc.field(init=False)
|
45
|
+
_build: JsonValueBuilder = dc.field(init=False)
|
46
|
+
|
47
|
+
def _enter_contexts(self) -> None:
|
48
|
+
self._lex = JsonStreamLexer(
|
49
|
+
include_raw=self.include_raw,
|
50
|
+
allow_comments=True,
|
51
|
+
allow_single_quotes=True,
|
52
|
+
string_literal_parser=parse_string_literal,
|
53
|
+
)
|
54
|
+
|
55
|
+
self._parse = JsonStreamParser()
|
56
|
+
|
57
|
+
self._build = JsonValueBuilder(
|
58
|
+
yield_object_lists=self.yield_object_lists,
|
59
|
+
)
|
60
|
+
|
61
|
+
def feed(self, i: ta.Iterable[str]) -> ta.Iterator[ta.Any]:
|
62
|
+
for c in i:
|
63
|
+
for t in self._lex(c):
|
64
|
+
for e in self._parse(t):
|
65
|
+
for v in self._build(e): # noqa
|
66
|
+
yield v
|
67
|
+
|
68
|
+
|
69
|
+
def stream_parse_values(
|
70
|
+
i: ta.Iterable[str],
|
71
|
+
**kwargs: ta.Any,
|
72
|
+
) -> ta.Generator[ta.Any]:
|
73
|
+
with JsonStreamValueParser(**kwargs) as p:
|
74
|
+
yield from p.feed(i)
|
75
|
+
|
76
|
+
|
77
|
+
def stream_parse_one_value(
|
78
|
+
i: ta.Iterable[str],
|
79
|
+
**kwargs: ta.Any,
|
80
|
+
) -> ta.Any:
|
81
|
+
with JsonStreamValueParser(**kwargs) as p:
|
82
|
+
return next(p.feed(i))
|
omlish/funcs/genmachine.py
CHANGED
@@ -77,7 +77,7 @@ from ...versions import HttpProtocolVersion
|
|
77
77
|
from ...versions import HttpProtocolVersions
|
78
78
|
|
79
79
|
|
80
|
-
CoroHttpServerFactory = ta.Callable[[SocketAddress], 'CoroHttpServer']
|
80
|
+
CoroHttpServerFactory = ta.Callable[[SocketAddress], 'CoroHttpServer'] # ta.TypeAlias
|
81
81
|
|
82
82
|
|
83
83
|
##
|
omlish/lite/attrops.py
CHANGED
@@ -212,7 +212,7 @@ class AttrOps(ta.Generic[T]):
|
|
212
212
|
return (
|
213
213
|
f'{o.__class__.__module__ + "." if self._with_module else ""}'
|
214
214
|
f'{o.__class__.__qualname__ if self._use_qualname else o.__class__.__name__}'
|
215
|
-
f'{("@" + hex(id(o))[2:]) if self._with_id else ""}'
|
215
|
+
f'{("@" + hex(id(o))[2:]) if self._with_id else ""}' # noqa
|
216
216
|
f'({vs})'
|
217
217
|
)
|
218
218
|
|
omlish/lite/inject.py
CHANGED
@@ -21,12 +21,12 @@ T = ta.TypeVar('T')
|
|
21
21
|
U = ta.TypeVar('U')
|
22
22
|
|
23
23
|
|
24
|
-
InjectorKeyCls = ta.Union[type, ta.NewType]
|
24
|
+
InjectorKeyCls = ta.Union[type, ta.NewType] # ta.TypeAlias
|
25
25
|
|
26
|
-
InjectorProviderFn = ta.Callable[['Injector'], ta.Any]
|
27
|
-
InjectorProviderFnMap = ta.Mapping['InjectorKey', 'InjectorProviderFn']
|
26
|
+
InjectorProviderFn = ta.Callable[['Injector'], ta.Any] # ta.TypeAlias
|
27
|
+
InjectorProviderFnMap = ta.Mapping['InjectorKey', 'InjectorProviderFn'] # ta.TypeAlias
|
28
28
|
|
29
|
-
InjectorBindingOrBindings = ta.Union['InjectorBinding', 'InjectorBindings']
|
29
|
+
InjectorBindingOrBindings = ta.Union['InjectorBinding', 'InjectorBindings'] # ta.TypeAlias
|
30
30
|
|
31
31
|
|
32
32
|
###
|
omlish/marshal/__init__.py
CHANGED
@@ -1,14 +1,24 @@
|
|
1
1
|
# ruff: noqa: I001
|
2
2
|
"""
|
3
3
|
TODO:
|
4
|
-
-
|
5
|
-
-
|
6
|
-
|
7
|
-
-
|
8
|
-
|
9
|
-
-
|
10
|
-
|
11
|
-
|
4
|
+
- streaming?
|
5
|
+
- datatypes
|
6
|
+
- redacted
|
7
|
+
- lang.Marker - class name, handle type[Foo]
|
8
|
+
- pathlib.Path
|
9
|
+
- decimal.Decimal
|
10
|
+
- datetime.date, datetime.time
|
11
|
+
- ipaddress
|
12
|
+
- numpy types
|
13
|
+
- jackson switches
|
14
|
+
- accept_case_insensitive_enums
|
15
|
+
- accept_case_insensitive_properties
|
16
|
+
- accept_case_insensitive_values
|
17
|
+
- allow_coercion_of_scalars
|
18
|
+
- use_base_type_as_default_impl
|
19
|
+
- codegen
|
20
|
+
- context-local switches
|
21
|
+
- mutable_collections
|
12
22
|
- simple lite interop like inj - alt ObjMarshalerManager impl for Context
|
13
23
|
|
14
24
|
See:
|
@@ -16,6 +26,8 @@ See:
|
|
16
26
|
- https://github.com/jcrist/msgspec
|
17
27
|
- https://github.com/Fatal1ty/mashumaro
|
18
28
|
- https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/serializers.md#custom-serializers
|
29
|
+
- https://github.com/yukinarit/pyserde
|
30
|
+
- https://github.com/FasterXML/jackson
|
19
31
|
"""
|
20
32
|
from .. import dataclasses as _dc # noqa
|
21
33
|
|
omlish/os/atomics.py
CHANGED
@@ -11,7 +11,7 @@ from ..lite.attrops import attr_repr
|
|
11
11
|
from ..lite.check import check
|
12
12
|
|
13
13
|
|
14
|
-
AtomicPathSwapKind = ta.Literal['dir', 'file']
|
14
|
+
AtomicPathSwapKind = ta.Literal['dir', 'file'] # ta.TypeAlias
|
15
15
|
AtomicPathSwapState = ta.Literal['open', 'committed', 'aborted'] # ta.TypeAlias
|
16
16
|
|
17
17
|
|
omlish/reflect/ops.py
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
"""
|
2
|
+
TODO:
|
3
|
+
- visitor / transformer
|
4
|
+
- gson had an ObjectNavigator:
|
5
|
+
- https://github.com/google/gson/blob/f291c4d33ea5fcc52afcfa5713e519e663378bda/gson/src/main/java/com/google/gson/ObjectNavigator.java
|
6
|
+
- removed in 25c6ae177b1ca56db7f3c29eb574bdd032a06165
|
7
|
+
- uniform collection isinstance - items() for mappings, iter() for other
|
8
|
+
- also check instance type in isinstance not just items lol
|
9
|
+
""" # noqa
|
1
10
|
import dataclasses as dc
|
2
11
|
import typing as ta
|
3
12
|
|
omlish/reflect/types.py
CHANGED
@@ -9,12 +9,8 @@ give it some guiding North Star to make all of its decisions for it, and to add
|
|
9
9
|
meet, join, solve, ...), but it's quite a bit of work and not a priority at the moment.
|
10
10
|
|
11
11
|
TODO:
|
12
|
-
-
|
13
|
-
|
14
|
-
- also check instance type in isinstance not just items lol
|
15
|
-
- ta.Generic in mro causing trouble - omit? no longer 1:1
|
16
|
-
- cache this shit, esp generic_mro shit
|
17
|
-
- cache __hash__ in Generic/Union
|
12
|
+
- !! cache this shit !!
|
13
|
+
- especially generic_mro shit
|
18
14
|
"""
|
19
15
|
import dataclasses as dc
|
20
16
|
import threading
|
@@ -22,6 +18,7 @@ import types
|
|
22
18
|
import typing as ta
|
23
19
|
|
24
20
|
from ..lite.abstract import Abstract
|
21
|
+
from ..lite.dataclasses import dataclass_cache_hash
|
25
22
|
|
26
23
|
|
27
24
|
_NoneType = types.NoneType # type: ignore
|
@@ -51,6 +48,7 @@ if not isinstance(_Protocol, type) or not issubclass(_Protocol, _Generic):
|
|
51
48
|
##
|
52
49
|
|
53
50
|
|
51
|
+
@dataclass_cache_hash()
|
54
52
|
@dc.dataclass(frozen=True)
|
55
53
|
class _Special:
|
56
54
|
name: str
|
@@ -68,6 +66,7 @@ class _Special:
|
|
68
66
|
)
|
69
67
|
|
70
68
|
|
69
|
+
@dataclass_cache_hash()
|
71
70
|
@dc.dataclass(frozen=True)
|
72
71
|
class _LazySpecial:
|
73
72
|
name: str
|
@@ -297,6 +296,7 @@ TYPES: tuple[type, ...] = (
|
|
297
296
|
##
|
298
297
|
|
299
298
|
|
299
|
+
@dataclass_cache_hash()
|
300
300
|
@dc.dataclass(frozen=True)
|
301
301
|
class Union(TypeInfo):
|
302
302
|
args: frozenset[Type]
|
@@ -320,6 +320,7 @@ class Union(TypeInfo):
|
|
320
320
|
GenericLikeCls = ta.TypeVar('GenericLikeCls')
|
321
321
|
|
322
322
|
|
323
|
+
@dataclass_cache_hash()
|
323
324
|
@dc.dataclass(frozen=True)
|
324
325
|
class GenericLike(TypeInfo, Abstract, ta.Generic[GenericLikeCls]):
|
325
326
|
cls: GenericLikeCls
|
@@ -363,6 +364,7 @@ class Protocol(GenericLike[ta.Any]):
|
|
363
364
|
#
|
364
365
|
|
365
366
|
|
367
|
+
@dataclass_cache_hash()
|
366
368
|
@dc.dataclass(frozen=True)
|
367
369
|
class NewType(TypeInfo):
|
368
370
|
obj: ta.Any
|
@@ -372,6 +374,7 @@ class NewType(TypeInfo):
|
|
372
374
|
#
|
373
375
|
|
374
376
|
|
377
|
+
@dataclass_cache_hash()
|
375
378
|
@dc.dataclass(frozen=True)
|
376
379
|
class Annotated(TypeInfo):
|
377
380
|
ty: Type
|
@@ -383,6 +386,7 @@ class Annotated(TypeInfo):
|
|
383
386
|
#
|
384
387
|
|
385
388
|
|
389
|
+
@dataclass_cache_hash()
|
386
390
|
@dc.dataclass(frozen=True)
|
387
391
|
class Literal(TypeInfo):
|
388
392
|
args: tuple[ta.Any, ...]
|
@@ -417,6 +421,15 @@ _TRIVIAL_TYPES: set[ta.Any] = {
|
|
417
421
|
}
|
418
422
|
|
419
423
|
|
424
|
+
# TODO: speed up is_type: `if obj.__class__ in _NOT_SUBCLASSED_SPECIAL_TYPES: return True`
|
425
|
+
# _NOT_SUBCLASSED_SPECIAL_TYPES: set[type] = {
|
426
|
+
# type(ta.Any),
|
427
|
+
# _UnionGenericAlias,
|
428
|
+
# ta.NewType,
|
429
|
+
# }
|
430
|
+
# TODO: static_init(for t in _NOT_SUBCLASSED_SPECIAL_TYPES: if (sts := t.__subclasses__()): raise TypeError)
|
431
|
+
|
432
|
+
|
420
433
|
class Reflector:
|
421
434
|
def __init__(
|
422
435
|
self,
|
omlish/sockets/addresses.py
CHANGED
omlish/sql/queries/params.py
CHANGED
@@ -16,7 +16,7 @@ class Param(lang.Final):
|
|
16
16
|
if self.n is not None:
|
17
17
|
return f'{self.__class__.__name__}({self.n!r})'
|
18
18
|
else:
|
19
|
-
return f'{self.__class__.__name__}(@{
|
19
|
+
return f'{self.__class__.__name__}(@{id(self):x})'
|
20
20
|
|
21
21
|
def __eq__(self, other):
|
22
22
|
if not isinstance(other, Param):
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.omlish-manifests.json,sha256=FLw7xkPiSXuImZgqSP8BwrEib2R1doSzUPLUkc-QUIA,8410
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=bsbnbJ01mORwCaxsJTuma7CmtQSocvxRTopPlqs2yhw,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
|
@@ -103,7 +103,8 @@ omlish/collections/persistent/treapmap.py,sha256=O4rh3x6p6tQ0EC2wiz80ZzGNb37-mQR
|
|
103
103
|
omlish/collections/sorted/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
104
104
|
omlish/collections/sorted/skiplist.py,sha256=bcTO1hZvV5EnYxBZ3YBhdewXP_2aCTZra7tJ0pA7jjo,6194
|
105
105
|
omlish/collections/sorted/sorted.py,sha256=sWMRdwdiKmByeWY0nwOq_nxLL5_sjHYfJVu95xmaxc8,3969
|
106
|
-
omlish/concurrent/__init__.py,sha256=
|
106
|
+
omlish/concurrent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
107
|
+
omlish/concurrent/all.py,sha256=OCr6LUTXq95sG97dsFvSrFm-V0vy1vDjUf5pO5PzGrY,315
|
107
108
|
omlish/concurrent/executors.py,sha256=j2V8f4UW3sJJG_qn7ldi1R2yY2QmUQA3UCuNQvLj1Wk,1285
|
108
109
|
omlish/concurrent/futures.py,sha256=870tx8ELI8THvMnTrQoYIlEFKO9hM4KUrlehckJqKBU,4238
|
109
110
|
omlish/concurrent/threadlets.py,sha256=Z1pCSWt7U8VBMhPFNzd850BfbDMiGQxhYCC7X7KjYyU,2435
|
@@ -113,7 +114,7 @@ omlish/configs/classes.py,sha256=sWBL1K90Ix5E-N_A6Uz7s-djpkS2rKEzOLFYB8pHk9k,117
|
|
113
114
|
omlish/configs/formats.py,sha256=iqaenbKsHV2DTHwabwqA4X6WOp5hBZLfkzOXprVHx6w,5370
|
114
115
|
omlish/configs/nginx.py,sha256=b4fMI8dIZBUgOjmveRINrmmwSt8DO3y7nfvd-__YxDo,2062
|
115
116
|
omlish/configs/shadow.py,sha256=mIPXMpEWg0rTKYh0yKskN8NhhCBw6d83peiVS_p8PKQ,2273
|
116
|
-
omlish/configs/types.py,sha256=
|
117
|
+
omlish/configs/types.py,sha256=DXMfusdmj7jrE1R1kQxbtI36Keo6re4xn_oLy3SqzMk,126
|
117
118
|
omlish/configs/processing/__init__.py,sha256=eUBm0L6oZuwwM4vEuYx0pcCNdSTXaF7luur7jQz1qoc,210
|
118
119
|
omlish/configs/processing/all.py,sha256=BCoWKxywH5mViWQrKmLHry8faS45ZW9jItaypPK197c,967
|
119
120
|
omlish/configs/processing/flattening.py,sha256=q2b9L4R_GbeAi94NInycxpZ96KRnY1KFnOV7NVrwxUc,5066
|
@@ -123,7 +124,7 @@ omlish/configs/processing/merging.py,sha256=ZGc-8QA9tjqgXnQ80ItfOMdmAKAEAOxtWEGF
|
|
123
124
|
omlish/configs/processing/names.py,sha256=9nRVBhZ0uY-J4591QcgUHla4MZAEux0-TWxGO1qaTrA,1099
|
124
125
|
omlish/configs/processing/rewriting.py,sha256=ofPYub5ftZ6A_bkAW71w2wDmSbZ5ULI3Ip190fzBl4Q,4252
|
125
126
|
omlish/configs/processing/strings.py,sha256=Iw85H_AE2TG8vdpbgwhye-aqz5Hkn4J9mM32FdXEiGo,832
|
126
|
-
omlish/daemons/__init__.py,sha256=
|
127
|
+
omlish/daemons/__init__.py,sha256=C9zRzJQa8DOw5mlnp1W-JMetbuxCPQFGlIdBY_CPUco,1147
|
127
128
|
omlish/daemons/daemon.py,sha256=rgSozDUOEE56KyT2rCRxZJEt9zJ-wkKk6R_fwjm2D-4,3501
|
128
129
|
omlish/daemons/launching.py,sha256=uLRfuWpW19H_lP_QcqfHOZBaJDa1WvDNfJgVx4i4c9g,3771
|
129
130
|
omlish/daemons/reparent.py,sha256=uEs7pjzQkL8zhM8xADJhedmXXA7eDsu28639F5HkmpU,590
|
@@ -134,7 +135,7 @@ omlish/daemons/waiting.py,sha256=fuR51IHdBDRVtfdewcw_0qw8itoXqmtdR_qtkoBChuE,170
|
|
134
135
|
omlish/dataclasses/__init__.py,sha256=Jsb8i9cm_ZSkHL5qIPftYeRt9wNK7Cp2HRtZa9vxhus,3604
|
135
136
|
omlish/dataclasses/_internals.py,sha256=_THiziiIslUyYC98Y_tZd5aZgvEF3FAGkDSwzRfcDuo,3247
|
136
137
|
omlish/dataclasses/debug.py,sha256=giBiv6aXvX0IagwNCW64qBzNjfOFr3-VmgDy_KYlb-k,29
|
137
|
-
omlish/dataclasses/errors.py,sha256=
|
138
|
+
omlish/dataclasses/errors.py,sha256=QeJVRmrZQer3m66jSDiuAyfAngCBtocMxfnsoSxzOVw,2520
|
138
139
|
omlish/dataclasses/inspect.py,sha256=EpVb50CsEUWpn70gkjBa-hI1mr5_VubHTERsofgE-Lw,4600
|
139
140
|
omlish/dataclasses/reflection.py,sha256=6BD2FUiOEtpi_2JREWyVzemjbBJdBMUm8XxQ9SVIKGs,2799
|
140
141
|
omlish/dataclasses/specs.py,sha256=VOY2uCjxLhemBuLd1VXz5KJXmZ48NL3sMJxzOhXmau8,6191
|
@@ -275,10 +276,10 @@ omlish/formats/json/backends/ujson.py,sha256=U3iOlAURfiCdXbiNlXfIjDdtJDbDaLZsSuZ
|
|
275
276
|
omlish/formats/json/stream/__init__.py,sha256=LOQvJGUEqvm1exve1hnWoO3mlMadShaO2Cy7XjCiWbA,829
|
276
277
|
omlish/formats/json/stream/building.py,sha256=dyrOms7Yskayi0-MG4e5-5ilN08HIekNEogJh5C4hhs,2549
|
277
278
|
omlish/formats/json/stream/errors.py,sha256=c8M8UAYmIZ-vWZLeKD2jMj4EDCJbr9QR8Jq_DyHjujQ,43
|
278
|
-
omlish/formats/json/stream/lexing.py,sha256=
|
279
|
+
omlish/formats/json/stream/lexing.py,sha256=E4j99qfCp2xIGk9CrwhPNVk0_ltLKvpw9G0K2xp1AAg,9396
|
279
280
|
omlish/formats/json/stream/parsing.py,sha256=c7958eYT5-KO8VFIVGBM-MowuaJ6UNTt7l2tTlRKHek,6468
|
280
281
|
omlish/formats/json/stream/rendering.py,sha256=U0MyVoYRDv7JLI8e7ItwmxyKnqYhKvfJY4-ZBQ5lHzA,3694
|
281
|
-
omlish/formats/json/stream/utils.py,sha256=
|
282
|
+
omlish/formats/json/stream/utils.py,sha256=_lqksQtoIgWjQWY4r-V2liJ7Dkz5rRAUnzwWyzKe8jc,2950
|
282
283
|
omlish/formats/json5/Json5.g4,sha256=2V3IB8W1R45mFax5Qy4laAwcHJ9oFPWHc-r8qy9-YE4,2381
|
283
284
|
omlish/formats/json5/__init__.py,sha256=3rwU5w5N_-dYME5kwMvXgexl-Vvo4BAmOg1N-I9Wf0M,194
|
284
285
|
omlish/formats/json5/codec.py,sha256=mywk74R7F77z7xprQd19qoJZ8sNPUEkiBD9jNCKTh0c,1603
|
@@ -286,7 +287,7 @@ omlish/formats/json5/errors.py,sha256=AHkR9ySjAoQdUrizpqgL8fg0M5oe5mHZkml3KZHEvC
|
|
286
287
|
omlish/formats/json5/literals.py,sha256=rj4-9KFXfgdq5oK_eUkp57cgoMQ8T0gRaG9ga430he4,2429
|
287
288
|
omlish/formats/json5/parsing.py,sha256=_M-DrXHz4izZcMp4QPCafMIgK6pzySHmksKDIhKW4lQ,2789
|
288
289
|
omlish/formats/json5/rendering.py,sha256=V1XdLzawd-0qu7dVNorxUMiT4LRd5GCS8876-lDLF-c,4583
|
289
|
-
omlish/formats/json5/
|
290
|
+
omlish/formats/json5/stream.py,sha256=QNVWgejaimNkFmOtYtjV9E71L6zBxW7QdvVL_IdMquI,2253
|
290
291
|
omlish/formats/json5/_antlr/Json5Lexer.py,sha256=8sT04wjBTDpyHpLo6a5byREBwfNnFtLPZp7Wx3KfbkY,23259
|
291
292
|
omlish/formats/json5/_antlr/Json5Listener.py,sha256=wIqOwp4r-cOHxy6sxQbNmlYczqh2C3-H-74o_hr7WrA,2117
|
292
293
|
omlish/formats/json5/_antlr/Json5Parser.py,sha256=psacqZWRzPNEZq70XKpOnelZXHuXjkULq1r-owaPs6g,19699
|
@@ -298,7 +299,7 @@ omlish/formats/toml/parser.py,sha256=aaZlEEPk0IQhfux_kjCY2K5mYYYDPNQ-4wWgZXskoAM
|
|
298
299
|
omlish/formats/toml/writer.py,sha256=9NT8sRy3I9KubxFx56Qbislvrdtbd23rEuBT-GSdUYA,3232
|
299
300
|
omlish/funcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
300
301
|
omlish/funcs/builders.py,sha256=ZSBQS2xqriXp5x0t074EEZvuTmMp4Yue2YGBoTLAioo,4044
|
301
|
-
omlish/funcs/genmachine.py,sha256=
|
302
|
+
omlish/funcs/genmachine.py,sha256=BOxO1OTjxZ7ewv_WpqYkY8bwlGQIJIjwjvYMflEFa_M,2571
|
302
303
|
omlish/funcs/match.py,sha256=AD0sQs_GIRq--fIQzL5gFYzlvXHplIljvlx7hbhNSEk,6213
|
303
304
|
omlish/funcs/pairs.py,sha256=XhYTJdqooAJKeoGZmEaiKYeFRq5-Dj2_y92IdBl_C20,4371
|
304
305
|
omlish/funcs/pipes.py,sha256=E1dQZMBmgT2qautG1vEqy5v3QBsO2Nzryv33j4YAngA,2520
|
@@ -345,7 +346,7 @@ omlish/http/coro/client/status.py,sha256=EdiScV6lcbVHWNUTyXp7qOBJKh5QYO2TNUCNADi
|
|
345
346
|
omlish/http/coro/client/validation.py,sha256=Hhy_CLN3Z7ZTVGEtPaHzqzDR50ReHKopHKukl8spLYU,5185
|
346
347
|
omlish/http/coro/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
347
348
|
omlish/http/coro/server/fdio.py,sha256=qZE4g5y4XESsTObSKyVggI-yzig57gSGJb4Z0rcHvgo,4157
|
348
|
-
omlish/http/coro/server/server.py,sha256=
|
349
|
+
omlish/http/coro/server/server.py,sha256=1B98Jj8TeZpnLVA8W-VJDHIRfxeFx2EvVbEFyEq1n7o,18697
|
349
350
|
omlish/http/coro/server/simple.py,sha256=j1RZ3niKrgGM2qFnjdYWn_eniZzay5j49Ca4L3u8vO4,3296
|
350
351
|
omlish/http/coro/server/sockets.py,sha256=24gU6wpIZuzYWKQD8UsHyYfTZlbcUFvkqXq5KVgWpQo,2261
|
351
352
|
omlish/inject/__init__.py,sha256=1s_2338tLi2VWKy8HijBSkAlkanVY1uZ8iZec8SOEws,2929
|
@@ -477,14 +478,14 @@ omlish/lite/__init__.py,sha256=cyZEpGob7XjU8DohyNxVe5CQRk4CQ5vrHL42OdhQb8w,148
|
|
477
478
|
omlish/lite/abstract.py,sha256=Z3kLviPNGLkmA8m8BZILzWxez_sP18OyzgMP3-c2-RI,4068
|
478
479
|
omlish/lite/args.py,sha256=ILJXAiN3KjIoJwY42aKpYPngUdxHIy9ssVIExFVz3fE,978
|
479
480
|
omlish/lite/asyncs.py,sha256=sTXTUTTVI8m1a1P6NxObQKk-NFKlmpcnNbucr4Fg-NU,937
|
480
|
-
omlish/lite/attrops.py,sha256=
|
481
|
+
omlish/lite/attrops.py,sha256=ytH2uv_oocyhhlU3T7kHh3UEkdgUnDiGqeyXe3uxPY4,8772
|
481
482
|
omlish/lite/cached.py,sha256=ocQcppTwGdSnKPYMz75VoH526UUT8YtDJeRczBX0-wI,1306
|
482
483
|
omlish/lite/check.py,sha256=ytCkwZoKfOlJqylL-AGm8C2WfsWJd2q3kFbnZCzX3_M,13844
|
483
484
|
omlish/lite/configs.py,sha256=4-1uVxo-aNV7vMKa7PVNhM610eejG1WepB42-Dw2xQI,914
|
484
485
|
omlish/lite/contextmanagers.py,sha256=usDzBoNqJi98AccVlwgZoMvoBXOe9wyx2MreZtWhJy4,5863
|
485
486
|
omlish/lite/dataclasses.py,sha256=aRSCZz1jN_UI-CWJhN0SJeKxa-79vXNUZ6YOMgG31SE,3610
|
486
487
|
omlish/lite/imports.py,sha256=GyEDKL-WuHtdOKIL-cc8aFd0-bHwZFDEjAB52ItabX0,1341
|
487
|
-
omlish/lite/inject.py,sha256=
|
488
|
+
omlish/lite/inject.py,sha256=3DB2IcAo1G8dau2tw_XkffQmKqQucY0XXWHebhD2TZs,29109
|
488
489
|
omlish/lite/json.py,sha256=m0Ce9eqUZG23-H7-oOp8n1sf4fzno5vtK4AK_4Vc-Mg,706
|
489
490
|
omlish/lite/marshal.py,sha256=J0VNr9_LjGLjxKW0wlZtIFnh_US7zwstCmtpe9Pk_D0,22969
|
490
491
|
omlish/lite/maybes.py,sha256=NusCpK0FVqkIutw6_Wldn69G5VyKYhat7SegBIQmGpk,4412
|
@@ -534,7 +535,7 @@ omlish/manifests/globals.py,sha256=kVqQ-fT4kc7xWzLHoI731GviitFPv2v2yqw-p7t7Exs,2
|
|
534
535
|
omlish/manifests/loading.py,sha256=s6KnhdFQCsI2i0Rus1sMU0so2v8dUBnk59BJkSnxGt8,17514
|
535
536
|
omlish/manifests/static.py,sha256=9BaPBLkuzxHmg5A-5k9BjjBFINCdmFOIu06dMFgCfz4,497
|
536
537
|
omlish/manifests/types.py,sha256=NeOGuIVrcbqjCDbQ3MnCxxHAgHnw0CkWJsBzo230PWE,453
|
537
|
-
omlish/marshal/__init__.py,sha256=
|
538
|
+
omlish/marshal/__init__.py,sha256=Ov1AECji4Z-lkSObFVeccMM3SvH2APBarybTQov03lA,6057
|
538
539
|
omlish/marshal/globals.py,sha256=Q6G18hcUwUDDNnpyRPnR5Tn_XZpZCSIEXo09nYSOaNU,2236
|
539
540
|
omlish/marshal/naming.py,sha256=Mk5YrbES836_KflNNRoc5Ajd96iMYLQIMERKx1KpT4g,865
|
540
541
|
omlish/marshal/standard.py,sha256=6L4FK7QVgVFAf2jkTQlCvN-15DWK49VCNlNwCBea3-8,6674
|
@@ -603,7 +604,7 @@ omlish/multiprocessing/__init__.py,sha256=jwlWGOaSGcX8DkzyZwJ49nfkHocWWeKgKb7kMp
|
|
603
604
|
omlish/multiprocessing/proxies.py,sha256=Jdl__dmerJwMhFw6FzcaEfFXTpZuB2cdAXwVjAv7rqc,489
|
604
605
|
omlish/multiprocessing/spawn.py,sha256=3KkaZ5wBiJzw0qsC-pKsECqIGTFG2fSgzAjV12dT8Es,1883
|
605
606
|
omlish/os/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
606
|
-
omlish/os/atomics.py,sha256=
|
607
|
+
omlish/os/atomics.py,sha256=1mFgOD_NpKo4HfVNYo74D-KsxnLKkT8Mx-3M40OYGBc,5307
|
607
608
|
omlish/os/deathsig.py,sha256=k4Sa9nXQvn43k5DTPDzpX9q_Nfc2045dMEGh__rn__s,646
|
608
609
|
omlish/os/environ.py,sha256=fDjnSO2Qz6lpvICx54JZpdPF-BxL4zKAWU3x_6UTxCI,3681
|
609
610
|
omlish/os/fcntl.py,sha256=EUa4TkeqdKix-uIweRitIZsgT9ohY7OQ5QiIhUW9S0c,1512
|
@@ -629,9 +630,9 @@ omlish/os/pidfiles/pidfile.py,sha256=KlqrW7I-lYVDNJspFHE89i_A0HTTteT5B99b7vpTfNs
|
|
629
630
|
omlish/os/pidfiles/pinning.py,sha256=WGK0kmMBhH1isGSdpm9fKJQqjaL7kxCuT-aAaaYCyn4,6666
|
630
631
|
omlish/reflect/__init__.py,sha256=omD3VLFQtYTwPxrTH6gLATQIax9sTGGKc-7ps96-q0g,1202
|
631
632
|
omlish/reflect/inspect.py,sha256=dUrVz8VfAdLVFtFpW416DxzVC17D80cvFb_g2Odzgq8,1823
|
632
|
-
omlish/reflect/ops.py,sha256=
|
633
|
+
omlish/reflect/ops.py,sha256=4mGvFMw5D6XGbhDhdCqZ1dZsiqezUTenDv63FIDohpY,3029
|
633
634
|
omlish/reflect/subst.py,sha256=_lfNS2m2UiJgqARQtmGLTGo7CrSm9OMvVzt6GWOEX6M,4590
|
634
|
-
omlish/reflect/types.py,sha256=
|
635
|
+
omlish/reflect/types.py,sha256=CalJ1gvu4eTsgL6Z4xM06pVamjRmJL8IgjPpZlI8l8U,16098
|
635
636
|
omlish/secrets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
636
637
|
omlish/secrets/all.py,sha256=qBxUFIqxCExADL71taNH_W6FYT9QvOrdcaMeUUPO3aw,298
|
637
638
|
omlish/secrets/crypto.py,sha256=q0Hca5oMwvh39r0hrupN_ewxhlllbdDgAgVoloYFmDg,3714
|
@@ -644,7 +645,7 @@ omlish/secrets/ssl.py,sha256=HnH5MS31X9Uid7Iw1CWqviaVwMLF1Ha8RxZiiE-_iF8,158
|
|
644
645
|
omlish/secrets/subprocesses.py,sha256=ZdShw4jrGDdyQW8mRMgl106-9qpCEq2J6w_x7ruz1wk,1217
|
645
646
|
omlish/secrets/tempssl.py,sha256=KbNKGwiKw95Ly2b1OtNL2jhPa25aO0t_tvyNB5trUcU,1885
|
646
647
|
omlish/sockets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
647
|
-
omlish/sockets/addresses.py,sha256=
|
648
|
+
omlish/sockets/addresses.py,sha256=FX-ym7MsolxJyX0UPgL_73ANiGgUMYBuUTpXWIPLoAU,1891
|
648
649
|
omlish/sockets/bind.py,sha256=yJWZOC8ZRkD5_DTPO0JVixf5_wuzuh8w3-I7wBxUzEU,8047
|
649
650
|
omlish/sockets/handlers.py,sha256=RRhv4zJ0vBFO70DWZUQffYNB8ZvS0cNUC9y7YFUZhTE,498
|
650
651
|
omlish/sockets/io.py,sha256=YdrtrpqXAUJgQRqeAdTxH3m06DE5xRt08tqdRaRn5bY,1414
|
@@ -734,7 +735,7 @@ omlish/sql/queries/inserts.py,sha256=pSQXDSR1oDUmxjeIYuSbxpAZXvYQ-EJF6a62ON5Un-k
|
|
734
735
|
omlish/sql/queries/multi.py,sha256=7x6x-4jnPzxA6ZasBjnjFuhHFpWt5rGCua3UvuTMIJ0,837
|
735
736
|
omlish/sql/queries/names.py,sha256=25kPRYse_ivI17lMD9st04k7QQMOGf5plb4b8yZFpUI,2208
|
736
737
|
omlish/sql/queries/ops.py,sha256=pDZ_2Jo_Fa8DDbtYkc6-9eehkWsZPI-jh-KFlubcY6Y,134
|
737
|
-
omlish/sql/queries/params.py,sha256=
|
738
|
+
omlish/sql/queries/params.py,sha256=ocjaJbhv_5LWgxdjoZg8vyAWDZxsij4cKH8Lx4hXMT0,1261
|
738
739
|
omlish/sql/queries/relations.py,sha256=P0qBqNICyeig9sEZAYLZcTXcI1YFiBe6REm6jNhpHUI,2630
|
739
740
|
omlish/sql/queries/rendering.py,sha256=3Ocw52DDDsUavEmb8xH-2Mhp-3pZCXsJVXFuVTOUBqk,7779
|
740
741
|
omlish/sql/queries/selects.py,sha256=XNisb2draHURYhbZsTFw7DJQaN1Zfo2Znm-Ty0lHNTo,1773
|
@@ -897,9 +898,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
|
|
897
898
|
omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
|
898
899
|
omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
|
899
900
|
omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
|
900
|
-
omlish-0.0.0.
|
901
|
-
omlish-0.0.0.
|
902
|
-
omlish-0.0.0.
|
903
|
-
omlish-0.0.0.
|
904
|
-
omlish-0.0.0.
|
905
|
-
omlish-0.0.0.
|
901
|
+
omlish-0.0.0.dev435.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
902
|
+
omlish-0.0.0.dev435.dist-info/METADATA,sha256=MvlZuQmg8ZerAEHakqjyuqeNhwGBvxMrojbeWG5Ryr4,19005
|
903
|
+
omlish-0.0.0.dev435.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
904
|
+
omlish-0.0.0.dev435.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
905
|
+
omlish-0.0.0.dev435.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
906
|
+
omlish-0.0.0.dev435.dist-info/RECORD,,
|
omlish/formats/json5/streams.py
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
TODO:
|
3
|
-
|
4
|
-
Objects:
|
5
|
-
- Object keys may be an ECMAScript 5.1 IdentifierName.
|
6
|
-
- Objects may have a single trailing comma.
|
7
|
-
Arrays:
|
8
|
-
- Arrays may have a single trailing comma.
|
9
|
-
Strings:
|
10
|
-
- Strings may be single quoted.
|
11
|
-
- Strings may span multiple lines by escaping new line characters.
|
12
|
-
- Strings may include character escapes.
|
13
|
-
Numbers:
|
14
|
-
- Numbers may be hexadecimal.
|
15
|
-
- Numbers may have a leading or trailing decimal point.
|
16
|
-
- Numbers may be IEEE 754 positive infinity, negative infinity, and NaN.
|
17
|
-
- Numbers may begin with an explicit plus sign.
|
18
|
-
Comments:
|
19
|
-
- Single and multi-line comments are allowed.
|
20
|
-
White Space:
|
21
|
-
- Additional white space characters are allowed.
|
22
|
-
"""
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|