omlish 0.0.0.dev298__py3-none-any.whl → 0.0.0.dev299__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 CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev298'
2
- __revision__ = '9e881abfe892f0f87226c902329ce0b913e28eed'
1
+ __version__ = '0.0.0.dev299'
2
+ __revision__ = '73b5419aa5d43e554a35a615d906559440e76d1b'
3
3
 
4
4
 
5
5
  #
omlish/argparse/cli.py CHANGED
@@ -9,6 +9,7 @@ TODO:
9
9
  - auto match all underscores to hyphens
10
10
  - pre-run, post-run hooks
11
11
  - exitstack?
12
+ - suggestion - difflib.get_close_matches
12
13
  """
13
14
  import argparse
14
15
  import dataclasses as dc
omlish/lang/functions.py CHANGED
@@ -211,6 +211,9 @@ class Args:
211
211
  self.args = args
212
212
  self.kwargs = kwargs
213
213
 
214
+ def __bool__(self) -> bool:
215
+ return bool(self.args) or bool(self.kwargs)
216
+
214
217
  def update(self, *args: ta.Any, **kwargs: ta.Any) -> 'Args':
215
218
  return Args(
216
219
  *self.args,
omlish/sql/__init__.py CHANGED
@@ -5,9 +5,9 @@ from .. import lang as _lang
5
5
 
6
6
 
7
7
  if _ta.TYPE_CHECKING:
8
- from . import api
8
+ from . import api # noqa
9
9
  else:
10
- api = _lang.proxy_import('.api', __package__)
10
+ globals()['api'] = _lang.proxy_import('.api', __package__)
11
11
 
12
12
  from .dbs import ( # noqa
13
13
  DbLoc,
@@ -24,6 +24,6 @@ from .qualifiedname import ( # noqa
24
24
  )
25
25
 
26
26
  if _ta.TYPE_CHECKING:
27
- from . import queries
27
+ from . import queries # noqa
28
28
  else:
29
- queries = _lang.proxy_import('.queries', __package__)
29
+ globals()['queries'] = _lang.proxy_import('.queries', __package__)
@@ -25,6 +25,11 @@ class SqlalchemyApiWrapper(api.ContextCloser, ta.Generic[T]):
25
25
  self._u = u
26
26
  self._auto_close = auto_close
27
27
 
28
+ @property
29
+ @ta.override
30
+ def _is_resourceless(self) -> bool:
31
+ return not self._auto_close
32
+
28
33
  def _close(self) -> None:
29
34
  if self._auto_close and hasattr(self._u, 'close'):
30
35
  self._u.close()
@@ -1,3 +1,9 @@
1
+ from .asquery import ( # noqa
2
+ AsQueryParams,
3
+ as_query,
4
+ as_query_,
5
+ )
6
+
1
7
  from .base import ( # noqa
2
8
  Querier,
3
9
  Rows,
@@ -37,8 +43,6 @@ from .funcs import ( # noqa
37
43
  from .queries import ( # noqa
38
44
  QueryMode,
39
45
  Query,
40
-
41
- as_query,
42
46
  )
43
47
 
44
48
  from .resources import ( # noqa
@@ -1,10 +1,12 @@
1
1
  """
2
2
  TODO:
3
3
  - dialect lol
4
+ - args lol
4
5
  """
5
6
  from ..queries import Stmt
6
7
  from ..queries.rendering import render
7
- from .funcs import as_query
8
+ from .asquery import AsQueryParams
9
+ from .asquery import as_query_
8
10
  from .queries import Query
9
11
  from .queries import QueryMode
10
12
 
@@ -12,17 +14,19 @@ from .queries import QueryMode
12
14
  ##
13
15
 
14
16
 
15
- @as_query.register
17
+ @as_query_.register
16
18
  def _(
17
19
  stmt: Stmt,
18
20
  *,
19
- mode: QueryMode | str | None = None,
21
+ params: AsQueryParams,
20
22
  ) -> Query:
21
23
  rq = render(stmt)
22
24
 
23
- # FIXME: rq.args
25
+ if rq.args:
26
+ raise NotImplementedError
27
+
24
28
  return Query(
25
- mode=QueryMode.of(mode, QueryMode.QUERY),
29
+ mode=QueryMode.of(params.mode, QueryMode.QUERY),
26
30
  text=rq.s,
27
31
  args=[],
28
32
  )
@@ -0,0 +1,67 @@
1
+ import dataclasses as dc
2
+ import functools
3
+ import typing as ta
4
+
5
+ from ... import check
6
+ from .base import Querier
7
+ from .queries import Query
8
+ from .queries import QueryMode
9
+
10
+
11
+ ##
12
+
13
+
14
+ @dc.dataclass(frozen=True, kw_only=True)
15
+ class AsQueryParams:
16
+ mode: QueryMode | str | None = None
17
+ querier: Querier | None = None
18
+
19
+
20
+ def as_query(
21
+ obj: ta.Any,
22
+ *args: ta.Any,
23
+ mode: QueryMode | str | None = None,
24
+ querier: Querier | None = None,
25
+ ) -> Query:
26
+ return as_query_(
27
+ obj,
28
+ *args,
29
+ params=AsQueryParams(
30
+ mode=mode,
31
+ querier=querier,
32
+ ),
33
+ )
34
+
35
+
36
+ @functools.singledispatch
37
+ def as_query_(
38
+ obj: ta.Any,
39
+ *args: ta.Any,
40
+ params: AsQueryParams,
41
+ ) -> Query:
42
+ raise TypeError(obj)
43
+
44
+
45
+ @as_query_.register
46
+ def _(
47
+ q: Query,
48
+ *,
49
+ params: AsQueryParams,
50
+ ) -> Query:
51
+ if params.mode is not None:
52
+ check.arg(q.mode is QueryMode.of(params.mode))
53
+
54
+ return q
55
+
56
+
57
+ @as_query_.register
58
+ def _(
59
+ s: str,
60
+ *args: ta.Any,
61
+ params: AsQueryParams,
62
+ ) -> Query:
63
+ return Query(
64
+ mode=QueryMode.of(params.mode, QueryMode.QUERY),
65
+ text=s,
66
+ args=args,
67
+ )
omlish/sql/api/funcs.py CHANGED
@@ -1,9 +1,9 @@
1
1
  import typing as ta
2
2
 
3
+ from .asquery import as_query
3
4
  from .base import Querier
4
5
  from .base import Rows
5
6
  from .queries import QueryMode
6
- from .queries import as_query
7
7
  from .rows import Row
8
8
 
9
9
 
@@ -15,7 +15,12 @@ def query(
15
15
  obj: ta.Any,
16
16
  *args: ta.Any,
17
17
  ) -> Rows:
18
- q = as_query(obj, *args, mode=QueryMode.QUERY)
18
+ q = as_query(
19
+ obj,
20
+ *args,
21
+ mode=QueryMode.QUERY,
22
+ querier=querier,
23
+ )
19
24
 
20
25
  return querier.query(q)
21
26
 
@@ -40,7 +45,12 @@ def exec( # noqa
40
45
  obj: ta.Any,
41
46
  *args: ta.Any,
42
47
  ) -> None:
43
- q = as_query(obj, *args, mode=QueryMode.EXEC)
48
+ q = as_query(
49
+ obj,
50
+ *args,
51
+ mode=QueryMode.EXEC,
52
+ querier=querier,
53
+ )
44
54
 
45
55
  with querier.query(q):
46
56
  pass
omlish/sql/api/queries.py CHANGED
@@ -1,6 +1,5 @@
1
1
  import dataclasses as dc
2
2
  import enum
3
- import functools
4
3
  import typing as ta
5
4
 
6
5
  from ... import check
@@ -35,41 +34,3 @@ class Query(lang.Final):
35
34
  mode: QueryMode
36
35
  text: str
37
36
  args: ta.Sequence[ta.Any]
38
-
39
-
40
- ##
41
-
42
-
43
- @functools.singledispatch
44
- def as_query(
45
- obj: ta.Any,
46
- *args: ta.Any,
47
- mode: QueryMode | str | None = None,
48
- **kwargs: ta.Any,
49
- ) -> Query:
50
- raise TypeError(obj)
51
-
52
-
53
- @as_query.register
54
- def _(
55
- q: Query,
56
- *,
57
- mode: QueryMode | str | None = None,
58
- ) -> Query:
59
- if mode is not None:
60
- check.arg(q.mode is QueryMode.of(mode))
61
-
62
- return q
63
-
64
-
65
- @as_query.register
66
- def _(
67
- s: str,
68
- *args: ta.Any,
69
- mode: QueryMode | str | None = None,
70
- ) -> Query:
71
- return Query(
72
- mode=QueryMode.of(mode, QueryMode.QUERY),
73
- text=s,
74
- args=args,
75
- )
@@ -38,6 +38,10 @@ class Closer(lang.Abstract):
38
38
  self.__repr = repr(self)
39
39
  self.__traceback = traceback.format_stack()[:-1]
40
40
 
41
+ @property
42
+ def _is_resourceless(self) -> bool:
43
+ return False
44
+
41
45
  @ta.final
42
46
  def close(self) -> None:
43
47
  self.__closed = True
@@ -47,7 +51,11 @@ class Closer(lang.Abstract):
47
51
  pass
48
52
 
49
53
  def __del__(self) -> None:
50
- if self.__debug and not self.__closed:
54
+ if (
55
+ not self._is_resourceless and
56
+ self.__debug and
57
+ not self.__closed
58
+ ):
51
59
  warnings.warn(
52
60
  f'\n\n{(sep := ("=" * 40))}\n'
53
61
  f'{self.__class__.__name__} object {self.__repr} '
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev298
3
+ Version: 0.0.0.dev299
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=pjGUyLHaoWpPqRP3jz2u1fC1qoRc2lvrEcpU_Ax2tdg,8253
2
- omlish/__about__.py,sha256=vK2SteFsTmtDVM8ABHvsQ7GEMFh1KSe1ufItMzu4J98,3478
2
+ omlish/__about__.py,sha256=tghPJ3r3hoOBraig8kr81p5Jv_kgJPAvrhVaVK8Li7o,3478
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/c3.py,sha256=rer-TPOFDU6fYq_AWio_AmA-ckZ8JDY5shIzQ_yXfzA,8414
5
5
  omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
@@ -87,7 +87,7 @@ omlish/antlr/_runtime/xpath/XPathLexer.py,sha256=WvGKQjQnu7pX5C4CFKtsCzba2B2W6ie
87
87
  omlish/antlr/_runtime/xpath/__init__.py,sha256=lMd_BbXYdlDhZQN_q0TKN978XW5G0pq618F0NaLkpFE,71
88
88
  omlish/argparse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
89
  omlish/argparse/all.py,sha256=NeeMM5MIebY7XDAHaCxUzeesEoUYwsf5i9PrBUcO1cI,1057
90
- omlish/argparse/cli.py,sha256=vVLlhJPt0PKaNfIBrXTzz9cHyy2dFEY8hlQ3GvtKbwc,8704
90
+ omlish/argparse/cli.py,sha256=KftfiN0fBOdybCWoTW4l967r8OrXe_WtjOQWARcHTv0,8746
91
91
  omlish/asyncs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
92
  omlish/asyncs/all.py,sha256=MjW0P9K8XBrw6AaH2X_qD5Y7hEZOF0cktqFv5BDGH-k,649
93
93
  omlish/asyncs/bridge.py,sha256=oFCqwGY9u9JYB-tee7GS0gjtIFp19rdZD2Z0YPRjj9k,9738
@@ -473,7 +473,7 @@ omlish/lang/contextmanagers.py,sha256=pN8X4ZCagqU9_xWumi8gZPdMIWlInA-_zQrkl7o5VP
473
473
  omlish/lang/datetimes.py,sha256=mrTtA67JYpfQwSlzdPcBtvm6dAyYM_dXNnlxFwFQH0M,228
474
474
  omlish/lang/descriptors.py,sha256=zBtgO9LjdSTGHNUgiIqswh78WOVoGH6KzS0NbgB1Wls,6572
475
475
  omlish/lang/enums.py,sha256=F9tflHfaAoV2MpyuhZzpfX9-H55M3zNa9hCszsngEo8,111
476
- omlish/lang/functions.py,sha256=bg2IxTFmd_J22qF3XWIRBvSIpLwPRiH_KxGXcm0QVrc,5944
476
+ omlish/lang/functions.py,sha256=51CoKtH_-CXUsKvtCexaR3OLZOtIwSdv4f4DtGBZdpA,6029
477
477
  omlish/lang/generators.py,sha256=5tbjVAywiZH6oAdj1sJLRMtIkC9y3rAkecLT7Z3m7_g,5251
478
478
  omlish/lang/imports.py,sha256=aC1u2eTrxHhhxShKbJvXswe3aJ7K76vT4YK8LrsvRWU,10476
479
479
  omlish/lang/iterables.py,sha256=HOjcxOwyI5bBApDLsxRAGGhTTmw7fdZl2kEckxRVl-0,1994
@@ -720,28 +720,29 @@ omlish/specs/proto/_antlr/Protobuf3Listener.py,sha256=hjzAJjcj4xWRim-68v-6QwIsPV
720
720
  omlish/specs/proto/_antlr/Protobuf3Parser.py,sha256=VmkUyJx3WxIgAecOa1BGwbO9fVNysZt5-arQ-wDubpk,132411
721
721
  omlish/specs/proto/_antlr/Protobuf3Visitor.py,sha256=zEVBXly2k9Cqmgdb45QwpLR-fZCEq8hpp2WQj-s7Wps,8782
722
722
  omlish/specs/proto/_antlr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
723
- omlish/sql/__init__.py,sha256=AFcSRUcz9sYMqlOsv8oZWai3Oi1PLygJbZ2YSzWUvhc,459
723
+ omlish/sql/__init__.py,sha256=DXK3EjPKXKS0WUV-bIVtzH0GsmOqCYrNLFkvDJGCORM,501
724
724
  omlish/sql/abc.py,sha256=3hrCjB4jnPVMef_YXClCblzYUZ9l9yaxJJdd5_Nu9GM,4043
725
725
  omlish/sql/dbapi.py,sha256=DfMxCyltpMj6hUiLti1omUvJyMGbrkGxcz2ywolOpPA,2979
726
726
  omlish/sql/dbs.py,sha256=65e388987upJpsFX8bNL7uhiYv2sCsmk9Y04V0MXdsI,1873
727
727
  omlish/sql/params.py,sha256=Z4VPet6GhNqD1T_MXSWSHkdy3cpUEhST-OplC4B_fYI,4433
728
728
  omlish/sql/qualifiedname.py,sha256=c3GQzxh9sNyE_TP32PnlCun_F2bKXvX1ohtt6esTsjo,2269
729
729
  omlish/sql/alchemy/__init__.py,sha256=mZiu0F4Y_5qQpl-xz4xnb0feVGZTDp3I4R6k7SVY_7M,760
730
- omlish/sql/alchemy/apiadapter.py,sha256=NjgOE8UMPlgENf7KKEsK8ZG8ECe6Ey4Hm8yXt5t-wLs,2588
730
+ omlish/sql/alchemy/apiadapter.py,sha256=QrkvlzqMl_S2nxOPQ8-g1UaWRSTZNna1-8XouOn8xdY,2696
731
731
  omlish/sql/alchemy/asyncs.py,sha256=MwZwWIaZsUCQLcTA8mdHUPZmR-pXEVSAsvd15FCm3W4,3692
732
732
  omlish/sql/alchemy/duckdb.py,sha256=kr7pIhiBLNAuZrcigHDtFg9zHkVcrRW3LfryO9VJ4mk,3749
733
733
  omlish/sql/alchemy/exprs.py,sha256=gO4Fj4xEY-PuDgV-N8hBMy55glZz7O-4H7v1LWabfZY,323
734
734
  omlish/sql/alchemy/secrets.py,sha256=WEeaec1ejQcE3Yaa7p5BSP9AMGEzy1lwr7QMSRL0VBw,180
735
735
  omlish/sql/alchemy/sqlean.py,sha256=RbkuOuFIfM4fowwKk8-sQ6Dxk-tTUwxS94nY5Kxt52s,403
736
- omlish/sql/api/__init__.py,sha256=YbObVEd09r_vVkcPLrx9qXCeV4Xdh23KmjYnCziOqQc,884
737
- omlish/sql/api/_queries.py,sha256=9BXQIGocBntbQ3B4raDg9G7UEr5qOYDdrB6netG1CRU,456
736
+ omlish/sql/api/__init__.py,sha256=Ee-DgQPo_fUqlYL3NBzk6kmj_cXlnZIua5jk85UHWHI,951
737
+ omlish/sql/api/_queries.py,sha256=FqIrtU6JdzQD4S4zv9tdDuzCLHSgJjK8WSfT7Ag4umI,530
738
+ omlish/sql/api/asquery.py,sha256=8eBoJyyu0kHW3k3yytEcT-B6UAI_slKB0QtSK_WQS7g,1203
738
739
  omlish/sql/api/base.py,sha256=E_t54OFr0BX604vOfQZGxh_n6EdOBF2Tvnrg25dMKXo,1314
739
740
  omlish/sql/api/columns.py,sha256=UBol4bfwZ1nhcjv2gE1JhUMzRFeqtiCDo2T9CUGYb64,1943
740
741
  omlish/sql/api/dbapi.py,sha256=bDVqmljmLMdurMhIy3vx-dJvK1KiZ7XBhZ2Zx6W9aBs,2627
741
742
  omlish/sql/api/errors.py,sha256=YtC2gz5DqRTT3uCJniUOufVH1GEnFIc5ElkYLK3BHwM,230
742
- omlish/sql/api/funcs.py,sha256=RRkDmlr3vCAO38nY15LMYvEF8jwQ4kTVCc0J4PkstSE,707
743
- omlish/sql/api/queries.py,sha256=xybadpIULwFSmDinFVi1qlAJEliQa4jn7ARcEtyp19Y,1385
744
- omlish/sql/api/resources.py,sha256=tO5RqH_G6AuqulGoy08jdgpksIv6TRdOHNWhZTxwarc,2062
743
+ omlish/sql/api/funcs.py,sha256=kOMMzODkJHyKVmGKFS-6GIgil5I6ha1qjqA3IecgCvI,819
744
+ omlish/sql/api/queries.py,sha256=OVsVqNyXXJQVDPfV3GFE2gwnHyGEenS65rTQRTNGx1Y,735
745
+ omlish/sql/api/resources.py,sha256=DTVQmKjhaLi27jHWYkF20VhwGvIazZWxyKzF0Wn9-dc,2228
745
746
  omlish/sql/api/rows.py,sha256=Jo3AA_6Wt7tlwLO6-rp0arzYFqZXSxPudGPkW2xCYgQ,1346
746
747
  omlish/sql/parsing/Minisql.g4,sha256=Jw8xT-8UI6ySHAgStyCg5QX9NTCinvTenLJReWiZIJU,4578
747
748
  omlish/sql/parsing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -842,9 +843,9 @@ omlish/typedvalues/holder.py,sha256=ZTnHiw-K38ciOBLEdwgrltr7Xp8jjEs_0Lp69DH-G-o,
842
843
  omlish/typedvalues/marshal.py,sha256=hWHRLcrGav7lvXJDtb9bNI0ickl4SKPQ6F4BbTpqw3A,4219
843
844
  omlish/typedvalues/reflect.py,sha256=Ih1YgU-srUjsvBn_P7C66f73_VCvcwqE3ffeBnZBgt4,674
844
845
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
845
- omlish-0.0.0.dev298.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
846
- omlish-0.0.0.dev298.dist-info/METADATA,sha256=SO0WnQXYeBKoFzXETXZ0osCsvkqYtx2KSJj0nSHWq4g,4416
847
- omlish-0.0.0.dev298.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
848
- omlish-0.0.0.dev298.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
849
- omlish-0.0.0.dev298.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
850
- omlish-0.0.0.dev298.dist-info/RECORD,,
846
+ omlish-0.0.0.dev299.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
847
+ omlish-0.0.0.dev299.dist-info/METADATA,sha256=T9HA9WB2SuPxxk-DiWerqiu1KkDizRIPRBitUe0csao,4416
848
+ omlish-0.0.0.dev299.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
849
+ omlish-0.0.0.dev299.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
850
+ omlish-0.0.0.dev299.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
851
+ omlish-0.0.0.dev299.dist-info/RECORD,,