omlish 0.0.0.dev166__py3-none-any.whl → 0.0.0.dev168__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/lite/check.py +2 -0
- omlish/lite/strings.py +31 -0
- omlish/os/atomics.py +3 -3
- omlish/os/paths.py +36 -0
- omlish/sql/queries/__init__.py +9 -1
- omlish/sql/queries/building.py +3 -0
- omlish/sql/queries/exprs.py +10 -27
- omlish/sql/queries/idents.py +48 -10
- omlish/sql/queries/names.py +80 -13
- omlish/sql/queries/params.py +64 -0
- omlish/sql/queries/rendering.py +1 -1
- {omlish-0.0.0.dev166.dist-info → omlish-0.0.0.dev168.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev166.dist-info → omlish-0.0.0.dev168.dist-info}/RECORD +18 -16
- {omlish-0.0.0.dev166.dist-info → omlish-0.0.0.dev168.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev166.dist-info → omlish-0.0.0.dev168.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev166.dist-info → omlish-0.0.0.dev168.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev166.dist-info → omlish-0.0.0.dev168.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
omlish/lite/check.py
CHANGED
omlish/lite/strings.py
CHANGED
@@ -21,6 +21,37 @@ def snake_case(name: str) -> str:
|
|
21
21
|
##
|
22
22
|
|
23
23
|
|
24
|
+
def strip_with_newline(s: str) -> str:
|
25
|
+
if not s:
|
26
|
+
return ''
|
27
|
+
return s.strip() + '\n'
|
28
|
+
|
29
|
+
|
30
|
+
@ta.overload
|
31
|
+
def split_keep_delimiter(s: str, d: str) -> str:
|
32
|
+
...
|
33
|
+
|
34
|
+
|
35
|
+
@ta.overload
|
36
|
+
def split_keep_delimiter(s: bytes, d: bytes) -> bytes:
|
37
|
+
...
|
38
|
+
|
39
|
+
|
40
|
+
def split_keep_delimiter(s, d):
|
41
|
+
ps = []
|
42
|
+
i = 0
|
43
|
+
while i < len(s):
|
44
|
+
if (n := s.find(d, i)) < i:
|
45
|
+
ps.append(s[i:])
|
46
|
+
break
|
47
|
+
ps.append(s[i:n + 1])
|
48
|
+
i = n + 1
|
49
|
+
return ps
|
50
|
+
|
51
|
+
|
52
|
+
##
|
53
|
+
|
54
|
+
|
24
55
|
def is_dunder(name: str) -> bool:
|
25
56
|
return (
|
26
57
|
name[:2] == name[-2:] == '__' and
|
omlish/os/atomics.py
CHANGED
@@ -122,7 +122,7 @@ class AtomicPathSwapping(abc.ABC):
|
|
122
122
|
##
|
123
123
|
|
124
124
|
|
125
|
-
class
|
125
|
+
class OsReplaceAtomicPathSwap(AtomicPathSwap):
|
126
126
|
def __init__(
|
127
127
|
self,
|
128
128
|
kind: AtomicPathSwapKind,
|
@@ -150,7 +150,7 @@ class OsRenameAtomicPathSwap(AtomicPathSwap):
|
|
150
150
|
return self._tmp_path
|
151
151
|
|
152
152
|
def _commit(self) -> None:
|
153
|
-
os.
|
153
|
+
os.replace(self._tmp_path, self._dst_path)
|
154
154
|
|
155
155
|
def _abort(self) -> None:
|
156
156
|
shutil.rmtree(self._tmp_path, ignore_errors=True)
|
@@ -197,7 +197,7 @@ class TempDirAtomicPathSwapping(AtomicPathSwapping):
|
|
197
197
|
else:
|
198
198
|
raise TypeError(kind)
|
199
199
|
|
200
|
-
return
|
200
|
+
return OsReplaceAtomicPathSwap(
|
201
201
|
kind,
|
202
202
|
dst_path,
|
203
203
|
tmp_path,
|
omlish/os/paths.py
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# ruff: noqa: UP006 UP007
|
2
|
+
# @omlish-lite
|
3
|
+
import os.path
|
4
|
+
import typing as ta
|
5
|
+
|
6
|
+
|
7
|
+
def abs_real_path(p: str) -> str:
|
8
|
+
return os.path.abspath(os.path.realpath(p))
|
9
|
+
|
10
|
+
|
11
|
+
def is_path_in_dir(base_dir: str, target_path: str) -> bool:
|
12
|
+
base_dir = abs_real_path(base_dir)
|
13
|
+
target_path = abs_real_path(target_path)
|
14
|
+
|
15
|
+
return target_path.startswith(base_dir + os.path.sep)
|
16
|
+
|
17
|
+
|
18
|
+
def relative_symlink(
|
19
|
+
src: str,
|
20
|
+
dst: str,
|
21
|
+
*,
|
22
|
+
target_is_directory: bool = False,
|
23
|
+
dir_fd: ta.Optional[int] = None,
|
24
|
+
make_dirs: bool = False,
|
25
|
+
**kwargs: ta.Any,
|
26
|
+
) -> None:
|
27
|
+
if make_dirs:
|
28
|
+
os.makedirs(os.path.dirname(dst), exist_ok=True)
|
29
|
+
|
30
|
+
os.symlink(
|
31
|
+
os.path.relpath(src, os.path.dirname(dst)),
|
32
|
+
dst,
|
33
|
+
target_is_directory=target_is_directory,
|
34
|
+
dir_fd=dir_fd,
|
35
|
+
**kwargs,
|
36
|
+
)
|
omlish/sql/queries/__init__.py
CHANGED
@@ -22,13 +22,13 @@ from .exprs import ( # noqa
|
|
22
22
|
ExprBuilder,
|
23
23
|
Literal,
|
24
24
|
NameExpr,
|
25
|
-
Param,
|
26
25
|
)
|
27
26
|
|
28
27
|
from .idents import ( # noqa
|
29
28
|
CanIdent,
|
30
29
|
Ident,
|
31
30
|
IdentBuilder,
|
31
|
+
IdentLike,
|
32
32
|
)
|
33
33
|
|
34
34
|
from .multi import ( # noqa
|
@@ -41,12 +41,20 @@ from .names import ( # noqa
|
|
41
41
|
CanName,
|
42
42
|
Name,
|
43
43
|
NameBuilder,
|
44
|
+
NameLike,
|
44
45
|
)
|
45
46
|
|
46
47
|
from .ops import ( # noqa
|
47
48
|
OpKind,
|
48
49
|
)
|
49
50
|
|
51
|
+
from .params import ( # noqa
|
52
|
+
CanParam,
|
53
|
+
Param,
|
54
|
+
ParamBuilder,
|
55
|
+
as_param,
|
56
|
+
)
|
57
|
+
|
50
58
|
from .relations import ( # noqa
|
51
59
|
CanRelation,
|
52
60
|
CanTable,
|
omlish/sql/queries/building.py
CHANGED
@@ -5,6 +5,7 @@ from .idents import IdentBuilder
|
|
5
5
|
from .inserts import InsertBuilder
|
6
6
|
from .multi import MultiBuilder
|
7
7
|
from .names import NameBuilder
|
8
|
+
from .params import ParamBuilder
|
8
9
|
from .relations import RelationBuilder
|
9
10
|
from .selects import SelectBuilder
|
10
11
|
from .stmts import StmtBuilder
|
@@ -23,6 +24,8 @@ class StdBuilder(
|
|
23
24
|
|
24
25
|
RelationBuilder,
|
25
26
|
|
27
|
+
ParamBuilder,
|
28
|
+
|
26
29
|
NameBuilder,
|
27
30
|
IdentBuilder,
|
28
31
|
|
omlish/sql/queries/exprs.py
CHANGED
@@ -8,10 +8,11 @@ import typing as ta
|
|
8
8
|
from ... import lang
|
9
9
|
from .base import Node
|
10
10
|
from .base import Value
|
11
|
-
from .idents import
|
11
|
+
from .idents import IdentLike
|
12
12
|
from .names import CanName
|
13
13
|
from .names import Name
|
14
14
|
from .names import NameBuilder
|
15
|
+
from .names import NameLike
|
15
16
|
|
16
17
|
|
17
18
|
##
|
@@ -21,30 +22,21 @@ class Expr(Node, lang.Abstract):
|
|
21
22
|
pass
|
22
23
|
|
23
24
|
|
25
|
+
#
|
26
|
+
|
27
|
+
|
24
28
|
class Literal(Expr, lang.Final):
|
25
29
|
v: Value
|
26
30
|
|
27
31
|
|
28
|
-
|
29
|
-
n: Name
|
32
|
+
#
|
30
33
|
|
31
34
|
|
32
|
-
class
|
33
|
-
n:
|
35
|
+
class NameExpr(Expr, lang.Final):
|
36
|
+
n: Name
|
34
37
|
|
35
|
-
def __repr__(self) -> str:
|
36
|
-
if self.n is not None:
|
37
|
-
return f'{self.__class__.__name__}({self.n!r})'
|
38
|
-
else:
|
39
|
-
return f'{self.__class__.__name__}(@{hex(id(self))[2:]})'
|
40
38
|
|
41
|
-
|
42
|
-
if not isinstance(other, Param):
|
43
|
-
return False
|
44
|
-
if self.n is None and other.n is None:
|
45
|
-
return self is other
|
46
|
-
else:
|
47
|
-
return self.n == other.n
|
39
|
+
##
|
48
40
|
|
49
41
|
|
50
42
|
CanLiteral: ta.TypeAlias = Literal | Value
|
@@ -69,7 +61,7 @@ class ExprBuilder(NameBuilder):
|
|
69
61
|
def expr(self, o: CanExpr) -> Expr:
|
70
62
|
if isinstance(o, Expr):
|
71
63
|
return o
|
72
|
-
elif isinstance(o, (
|
64
|
+
elif isinstance(o, (NameLike, IdentLike)):
|
73
65
|
return NameExpr(self.name(o))
|
74
66
|
else:
|
75
67
|
return self.literal(o)
|
@@ -77,12 +69,3 @@ class ExprBuilder(NameBuilder):
|
|
77
69
|
@ta.final
|
78
70
|
def e(self, o: CanExpr) -> Expr:
|
79
71
|
return self.expr(o)
|
80
|
-
|
81
|
-
#
|
82
|
-
|
83
|
-
def param(self, n: str | None = None) -> Param:
|
84
|
-
return Param(n)
|
85
|
-
|
86
|
-
@ta.final
|
87
|
-
def p(self, n: str | None = None) -> Param:
|
88
|
-
return self.param(n)
|
omlish/sql/queries/idents.py
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
import abc
|
2
|
+
import functools
|
1
3
|
import typing as ta
|
2
4
|
|
3
5
|
from ... import lang
|
@@ -8,22 +10,58 @@ from .base import Node
|
|
8
10
|
##
|
9
11
|
|
10
12
|
|
11
|
-
class
|
13
|
+
class IdentLike(abc.ABC): # noqa
|
14
|
+
pass
|
15
|
+
|
16
|
+
|
17
|
+
##
|
18
|
+
|
19
|
+
|
20
|
+
class Ident(Node, IdentLike, lang.Final):
|
12
21
|
s: str
|
13
22
|
|
14
23
|
|
15
|
-
|
24
|
+
##
|
25
|
+
|
26
|
+
|
27
|
+
@functools.singledispatch
|
28
|
+
def as_ident(o: ta.Any) -> Ident:
|
29
|
+
raise TypeError(o)
|
30
|
+
|
31
|
+
|
32
|
+
@as_ident.register
|
33
|
+
def _(i: Ident) -> Ident:
|
34
|
+
return i
|
35
|
+
|
36
|
+
|
37
|
+
@as_ident.register
|
38
|
+
def _(s: str) -> Ident:
|
39
|
+
return Ident(s)
|
40
|
+
|
41
|
+
|
42
|
+
##
|
43
|
+
|
44
|
+
|
45
|
+
CanIdent: ta.TypeAlias = IdentLike | Ident | str
|
46
|
+
|
47
|
+
|
48
|
+
class IdentAccessor(lang.Final):
|
49
|
+
def __getattr__(self, s: str) -> Ident:
|
50
|
+
return Ident(s)
|
51
|
+
|
52
|
+
def __call__(self, o: CanIdent) -> Ident:
|
53
|
+
return as_ident(o)
|
54
|
+
|
55
|
+
|
56
|
+
##
|
16
57
|
|
17
58
|
|
18
59
|
class IdentBuilder(Builder):
|
60
|
+
@ta.final
|
19
61
|
def ident(self, o: CanIdent) -> Ident:
|
20
|
-
|
21
|
-
return o
|
22
|
-
elif isinstance(o, str):
|
23
|
-
return Ident(o)
|
24
|
-
else:
|
25
|
-
raise TypeError(o)
|
62
|
+
return as_ident(o)
|
26
63
|
|
27
64
|
@ta.final
|
28
|
-
|
29
|
-
|
65
|
+
@property
|
66
|
+
def i(self) -> IdentAccessor:
|
67
|
+
return IdentAccessor()
|
omlish/sql/queries/names.py
CHANGED
@@ -1,34 +1,101 @@
|
|
1
|
+
import abc
|
2
|
+
import functools
|
1
3
|
import typing as ta
|
2
4
|
|
5
|
+
from ... import check
|
3
6
|
from ... import dataclasses as dc
|
4
7
|
from ... import lang
|
5
8
|
from .base import Node
|
6
9
|
from .idents import CanIdent
|
7
10
|
from .idents import Ident
|
8
11
|
from .idents import IdentBuilder
|
12
|
+
from .idents import as_ident
|
9
13
|
|
10
14
|
|
11
15
|
##
|
12
16
|
|
13
17
|
|
14
|
-
class
|
15
|
-
|
18
|
+
class NameLike(abc.ABC): # noqa
|
19
|
+
pass
|
16
20
|
|
17
21
|
|
18
|
-
|
22
|
+
##
|
23
|
+
|
24
|
+
|
25
|
+
def _coerce_name_parts(o: ta.Iterable[Ident]) -> ta.Sequence[Ident]:
|
26
|
+
check.not_isinstance(o, str)
|
27
|
+
return check.not_empty(tuple(check.isinstance(e, Ident) for e in o))
|
28
|
+
|
29
|
+
|
30
|
+
class Name(Node, NameLike, lang.Final):
|
31
|
+
ps: ta.Sequence[Ident] = dc.xfield(coerce=_coerce_name_parts)
|
32
|
+
|
33
|
+
|
34
|
+
##
|
35
|
+
|
36
|
+
|
37
|
+
@functools.singledispatch
|
38
|
+
def as_name(o: ta.Any) -> Name:
|
39
|
+
if isinstance(o, ta.Sequence):
|
40
|
+
return Name([as_ident(p) for p in o])
|
41
|
+
else:
|
42
|
+
raise TypeError(o)
|
43
|
+
|
44
|
+
|
45
|
+
@as_name.register
|
46
|
+
def _(n: Name) -> Name:
|
47
|
+
return n
|
48
|
+
|
49
|
+
|
50
|
+
@as_name.register
|
51
|
+
def _(o: Ident | str) -> Name:
|
52
|
+
return Name([as_ident(o)])
|
53
|
+
|
54
|
+
|
55
|
+
##
|
56
|
+
|
57
|
+
|
58
|
+
CanName: ta.TypeAlias = ta.Union[
|
59
|
+
NameLike,
|
60
|
+
Name,
|
61
|
+
CanIdent,
|
62
|
+
ta.Sequence[CanIdent],
|
63
|
+
'NameAccessor',
|
64
|
+
]
|
65
|
+
|
66
|
+
|
67
|
+
class NameAccessor(NameLike, lang.Final):
|
68
|
+
def __init__(self, ps: tuple[str, ...] = ()) -> None:
|
69
|
+
super().__init__()
|
70
|
+
self.__query_name_parts__ = ps
|
71
|
+
|
72
|
+
def __repr__(self) -> str:
|
73
|
+
return f'{self.__class__.__name__}({self.__query_name_parts__!r})'
|
74
|
+
|
75
|
+
def __getattr__(self, s: str) -> 'NameAccessor':
|
76
|
+
return NameAccessor((*self.__query_name_parts__, s))
|
77
|
+
|
78
|
+
def __call__(self, o: CanName) -> Name:
|
79
|
+
n = as_name(o)
|
80
|
+
if (ps := self.__query_name_parts__):
|
81
|
+
n = Name(tuple(*tuple(Ident(p) for p in ps), *n.ps)) # type: ignore[arg-type]
|
82
|
+
return n
|
83
|
+
|
84
|
+
|
85
|
+
@as_name.register
|
86
|
+
def _(a: NameAccessor) -> Name:
|
87
|
+
return Name(tuple(Ident(p) for p in a.__query_name_parts__))
|
88
|
+
|
89
|
+
|
90
|
+
##
|
19
91
|
|
20
92
|
|
21
93
|
class NameBuilder(IdentBuilder):
|
94
|
+
@ta.final
|
22
95
|
def name(self, o: CanName) -> Name:
|
23
|
-
|
24
|
-
return o
|
25
|
-
elif isinstance(o, (Ident, str)):
|
26
|
-
return Name([self.ident(o)])
|
27
|
-
elif isinstance(o, ta.Sequence):
|
28
|
-
return Name([self.ident(p) for p in o])
|
29
|
-
else:
|
30
|
-
raise TypeError(o)
|
96
|
+
return as_name(o)
|
31
97
|
|
32
98
|
@ta.final
|
33
|
-
|
34
|
-
|
99
|
+
@property
|
100
|
+
def n(self) -> NameAccessor:
|
101
|
+
return NameAccessor()
|
@@ -0,0 +1,64 @@
|
|
1
|
+
import typing as ta
|
2
|
+
|
3
|
+
from ... import lang
|
4
|
+
from .base import Builder
|
5
|
+
from .exprs import Expr
|
6
|
+
|
7
|
+
|
8
|
+
##
|
9
|
+
|
10
|
+
|
11
|
+
class Param(Expr, lang.Final):
|
12
|
+
n: str | None = None
|
13
|
+
|
14
|
+
def __repr__(self) -> str:
|
15
|
+
if self.n is not None:
|
16
|
+
return f'{self.__class__.__name__}({self.n!r})'
|
17
|
+
else:
|
18
|
+
return f'{self.__class__.__name__}(@{hex(id(self))[2:]})'
|
19
|
+
|
20
|
+
def __eq__(self, other):
|
21
|
+
if not isinstance(other, Param):
|
22
|
+
return False
|
23
|
+
if self.n is None and other.n is None:
|
24
|
+
return self is other
|
25
|
+
else:
|
26
|
+
return self.n == other.n
|
27
|
+
|
28
|
+
|
29
|
+
##
|
30
|
+
|
31
|
+
|
32
|
+
CanParam: ta.TypeAlias = Param | str | None
|
33
|
+
|
34
|
+
|
35
|
+
def as_param(o: CanParam = None) -> Param:
|
36
|
+
if isinstance(o, Param):
|
37
|
+
return o
|
38
|
+
else:
|
39
|
+
return Param(o)
|
40
|
+
|
41
|
+
|
42
|
+
##
|
43
|
+
|
44
|
+
|
45
|
+
class ParamAccessor(lang.Final):
|
46
|
+
def __getattr__(self, s: str) -> Param:
|
47
|
+
return Param(s)
|
48
|
+
|
49
|
+
def __call__(self, o: CanParam = None) -> Param:
|
50
|
+
return as_param(o)
|
51
|
+
|
52
|
+
|
53
|
+
##
|
54
|
+
|
55
|
+
|
56
|
+
class ParamBuilder(Builder):
|
57
|
+
@ta.final
|
58
|
+
def param(self, o: CanParam = None) -> Param:
|
59
|
+
return as_param(o)
|
60
|
+
|
61
|
+
@ta.final
|
62
|
+
@property
|
63
|
+
def p(self) -> ParamAccessor:
|
64
|
+
return ParamAccessor()
|
omlish/sql/queries/rendering.py
CHANGED
@@ -29,13 +29,13 @@ from .binary import BinaryOp
|
|
29
29
|
from .binary import BinaryOps
|
30
30
|
from .exprs import Literal
|
31
31
|
from .exprs import NameExpr
|
32
|
-
from .exprs import Param
|
33
32
|
from .idents import Ident
|
34
33
|
from .inserts import Insert
|
35
34
|
from .inserts import Values
|
36
35
|
from .multi import Multi
|
37
36
|
from .multi import MultiKind
|
38
37
|
from .names import Name
|
38
|
+
from .params import Param
|
39
39
|
from .relations import Table
|
40
40
|
from .selects import Select
|
41
41
|
from .selects import SelectItem
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=0BnQGD2dcXEma0Jop2ZesvDNzSj3CAJBNq8aTGuBz9A,7276
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=zpJK1N36A2zarYgLGuGMOmoRcQ1YdO2W0GFM7G2k-Sw,3409
|
3
3
|
omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
|
4
4
|
omlish/c3.py,sha256=ubu7lHwss5V4UznbejAI0qXhXahrU01MysuHOZI9C4U,8116
|
5
5
|
omlish/cached.py,sha256=UI-XTFBwA6YXWJJJeBn-WkwBkfzDjLBBaZf4nIJA9y0,510
|
@@ -367,7 +367,7 @@ omlish/lifecycles/states.py,sha256=zqMOU2ZU-MDNnWuwauM3_anIAiXM8LoBDElDEraptFg,1
|
|
367
367
|
omlish/lifecycles/transitions.py,sha256=qQtFby-h4VzbvgaUqT2NnbNumlcOx9FVVADP9t83xj4,1939
|
368
368
|
omlish/lite/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
369
369
|
omlish/lite/cached.py,sha256=O7ozcoDNFm1Hg2wtpHEqYSp_i_nCLNOP6Ueq_Uk-7mU,1300
|
370
|
-
omlish/lite/check.py,sha256=
|
370
|
+
omlish/lite/check.py,sha256=0PD-GKtaDqDX6jU5KbzbMvH-vl6jH82xgYfplmfTQkg,12941
|
371
371
|
omlish/lite/contextmanagers.py,sha256=m9JO--p7L7mSl4cycXysH-1AO27weDKjP3DZG61cwwM,1683
|
372
372
|
omlish/lite/inject.py,sha256=EEaioN9ESAveVCMe2s5osjwI97FPRUVoU8P95vGUiYo,23376
|
373
373
|
omlish/lite/json.py,sha256=7-02Ny4fq-6YAu5ynvqoijhuYXWpLmfCI19GUeZnb1c,740
|
@@ -381,7 +381,7 @@ omlish/lite/runtime.py,sha256=XQo408zxTdJdppUZqOWHyeUR50VlCpNIExNGHz4U6O4,459
|
|
381
381
|
omlish/lite/secrets.py,sha256=3Mz3V2jf__XU9qNHcH56sBSw95L3U2UPL24bjvobG0c,816
|
382
382
|
omlish/lite/socket.py,sha256=7OYgkXTcQv0wq7TQuLnl9y6dJA1ZT6Vbc1JH59QlxgY,1792
|
383
383
|
omlish/lite/socketserver.py,sha256=doTXIctu_6c8XneFtzPFVG_Wq6xVmA3p9ymut8IvBoU,1586
|
384
|
-
omlish/lite/strings.py,sha256=
|
384
|
+
omlish/lite/strings.py,sha256=nGWaOi9LzTjkc5kPN2IqsVN8PUw8m_2yllTGRUQU5PI,1983
|
385
385
|
omlish/lite/typing.py,sha256=U3-JaEnkDSYxK4tsu_MzUn3RP6qALBe5FXQXpD-licE,1090
|
386
386
|
omlish/logs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
387
387
|
omlish/logs/abc.py,sha256=ho4ABKYMKX-V7g4sp1BByuOLzslYzLlQ0MESmjEpT-o,8005
|
@@ -433,11 +433,12 @@ omlish/math/bits.py,sha256=yip1l8agOYzT7bFyMGc0RR3XlnGCfHMpjw_SECLLh1I,3477
|
|
433
433
|
omlish/math/floats.py,sha256=UimhOT7KRl8LXTzOI5cQWoX_9h6WNWe_3vcOuO7-h_8,327
|
434
434
|
omlish/math/stats.py,sha256=MegzKVsmv2kra4jDWLOUgV0X7Ee2Tbl5u6ql1v4-dEY,10053
|
435
435
|
omlish/os/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
436
|
-
omlish/os/atomics.py,sha256=
|
436
|
+
omlish/os/atomics.py,sha256=NQfwifLu48ZniOvaqAuDy8dBTB3tKZntL22T0-8NYwM,5074
|
437
437
|
omlish/os/deathsig.py,sha256=hk9Yq2kyDdI-cI7OQH7mOfpRbOKzY_TfPKEqgrjVYbA,641
|
438
438
|
omlish/os/files.py,sha256=1tNy1z5I_CgYKA5c6lOfsXc-hknP4tQDbSShdz8HArw,1308
|
439
439
|
omlish/os/journald.py,sha256=2nI8Res1poXkbLc31--MPUlzYMESnCcPUkIxDOCjZW0,3903
|
440
440
|
omlish/os/linux.py,sha256=whJ6scwMKSFBdXiVhJW0BCpJV4jOGMr-a_a3Bhwz6Ls,18938
|
441
|
+
omlish/os/paths.py,sha256=hqPiyg_eYaRoIVPdAeX4oeLEV4Kpln_XsH0tHvbOf8Q,844
|
441
442
|
omlish/os/pidfile.py,sha256=S4Nbe00oSxckY0qCC9AeTEZe7NSw4eJudnQX7wCXzks,1738
|
442
443
|
omlish/os/sizes.py,sha256=ohkALLvqSqBX4iR-7DMKJ4pfOCRdZXV8htH4QywUNM0,152
|
443
444
|
omlish/reflect/__init__.py,sha256=4-EuCSX1qpEWfScCFzAJv_XghHFu4cXxpxKeBKrosQ4,720
|
@@ -506,19 +507,20 @@ omlish/sql/alchemy/duckdb.py,sha256=kr7pIhiBLNAuZrcigHDtFg9zHkVcrRW3LfryO9VJ4mk,
|
|
506
507
|
omlish/sql/alchemy/exprs.py,sha256=gO4Fj4xEY-PuDgV-N8hBMy55glZz7O-4H7v1LWabfZY,323
|
507
508
|
omlish/sql/alchemy/secrets.py,sha256=EMfy4EfTbEvrlv_41oOhn8qsoF-eTkY7HciPenIE6rI,178
|
508
509
|
omlish/sql/alchemy/sqlean.py,sha256=RbkuOuFIfM4fowwKk8-sQ6Dxk-tTUwxS94nY5Kxt52s,403
|
509
|
-
omlish/sql/queries/__init__.py,sha256=
|
510
|
+
omlish/sql/queries/__init__.py,sha256=8wdq6PBf5YzqQWFu-CE8om6BN38sDAD9UEz9VzkojzM,1337
|
510
511
|
omlish/sql/queries/base.py,sha256=_8O3MbH_OEjBnhp2oIJUZ3ClaQ8l4Sj9BdPdsP0Ie-g,224
|
511
512
|
omlish/sql/queries/binary.py,sha256=dcEzeEn104AMPuQ7QrJU2O-YCN3SUdxB5S4jaWKOUqY,2253
|
512
|
-
omlish/sql/queries/building.py,sha256=
|
513
|
-
omlish/sql/queries/exprs.py,sha256=
|
514
|
-
omlish/sql/queries/idents.py,sha256=
|
513
|
+
omlish/sql/queries/building.py,sha256=lmHItVEi0IkIDEhYL1le8adNhjah0SHhffm59CZtpH4,643
|
514
|
+
omlish/sql/queries/exprs.py,sha256=THeSyFF8bouDvU-Keej-hyFUwbp63bw0HpAF4lCYuiQ,1187
|
515
|
+
omlish/sql/queries/idents.py,sha256=w2RxO6SR3K-u30S259OtnAZaPv7YA70PzY9R7RtuCQ8,891
|
515
516
|
omlish/sql/queries/inserts.py,sha256=Uo0ewnLPEt43dnX5AJWOC9ioViou7xYes7sGT9lD_0k,1281
|
516
517
|
omlish/sql/queries/marshal.py,sha256=uLN_gOqiYHBQioZEvg7OREycY0bzKwzBw5mnbg_0cio,2938
|
517
518
|
omlish/sql/queries/multi.py,sha256=7x6x-4jnPzxA6ZasBjnjFuhHFpWt5rGCua3UvuTMIJ0,837
|
518
|
-
omlish/sql/queries/names.py,sha256=
|
519
|
+
omlish/sql/queries/names.py,sha256=4sDvgRobMEt_6mDeuYVbCqHzLCOwpXUdEyyB4-QjxKo,1996
|
519
520
|
omlish/sql/queries/ops.py,sha256=B7IDfjr2DW5LJhWoNaY1WW90BJhe5ZtmxIELhWXbW-0,129
|
521
|
+
omlish/sql/queries/params.py,sha256=iR8tnetkZFWY378iUbPe08d86g-Wf1J3YqfZr_KhIwQ,1175
|
520
522
|
omlish/sql/queries/relations.py,sha256=-d3n-dN17c3TPMZmzSplhWawllUzdq12XPDAuzoeMEQ,838
|
521
|
-
omlish/sql/queries/rendering.py,sha256=
|
523
|
+
omlish/sql/queries/rendering.py,sha256=NOJqwxK8yt3Morq5yhgI-zU_51MSyhDvSc8S-8tURVM,5946
|
522
524
|
omlish/sql/queries/selects.py,sha256=8dqm4KyrJvOsW3KHSO7qLEfPlZa7sJDp8puuGxrfvoA,1369
|
523
525
|
omlish/sql/queries/stmts.py,sha256=pBqwD7dRlqMu6uh6vR3xaWOEgbZCcFWbOQ9ryYd17T4,441
|
524
526
|
omlish/sql/queries/unary.py,sha256=MEYBDZn_H0bexmUrJeONOv5-gIpYowUaXOsEHeQM4ks,1144
|
@@ -556,9 +558,9 @@ omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,329
|
|
556
558
|
omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
|
557
559
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
558
560
|
omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
|
559
|
-
omlish-0.0.0.
|
560
|
-
omlish-0.0.0.
|
561
|
-
omlish-0.0.0.
|
562
|
-
omlish-0.0.0.
|
563
|
-
omlish-0.0.0.
|
564
|
-
omlish-0.0.0.
|
561
|
+
omlish-0.0.0.dev168.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
562
|
+
omlish-0.0.0.dev168.dist-info/METADATA,sha256=CkmiX1w3Ef334-qtNR8QvHcHiUtJrd3uPwzmUJ1hBZE,4264
|
563
|
+
omlish-0.0.0.dev168.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
564
|
+
omlish-0.0.0.dev168.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
565
|
+
omlish-0.0.0.dev168.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
566
|
+
omlish-0.0.0.dev168.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|