TypeDAL 2.3.6__py3-none-any.whl → 2.4.0__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 TypeDAL might be problematic. Click here for more details.

typedal/__about__.py CHANGED
@@ -5,4 +5,4 @@ This file contains the Version info for this package.
5
5
  # SPDX-FileCopyrightText: 2023-present Robin van der Noord <robinvandernoord@gmail.com>
6
6
  #
7
7
  # SPDX-License-Identifier: MIT
8
- __version__ = "2.3.6"
8
+ __version__ = "2.4.0"
typedal/caching.py CHANGED
@@ -1,6 +1,7 @@
1
1
  """
2
2
  Helpers to facilitate db-based caching.
3
3
  """
4
+
4
5
  import contextlib
5
6
  import hashlib
6
7
  import json
typedal/cli.py CHANGED
@@ -1,6 +1,7 @@
1
1
  """
2
2
  Typer CLI for TypeDAL.
3
3
  """
4
+
4
5
  import sys
5
6
  import typing
6
7
  import warnings
typedal/config.py CHANGED
@@ -1,6 +1,7 @@
1
1
  """
2
2
  TypeDAL can be configured by a combination of pyproject.toml (static), env (dynamic) and code (programmic).
3
3
  """
4
+
4
5
  import os
5
6
  import re
6
7
  import typing
@@ -34,7 +35,7 @@ class TypeDALConfig(TypedConfig):
34
35
  connection: str = "default"
35
36
 
36
37
  # pydal2sql:
37
- input: str = "" # noqa: A003
38
+ input: str = ""
38
39
  output: str = ""
39
40
  noop: bool = False
40
41
  magic: bool = True
@@ -204,14 +205,14 @@ def get_db_for_alias(db_name: str) -> str:
204
205
 
205
206
  DEFAULTS: dict[str, Any | typing.Callable[[dict[str, Any]], Any]] = {
206
207
  "database": lambda data: data.get("db_uri") or "sqlite:memory",
207
- "dialect": lambda data: get_db_for_alias(data["database"].split(":")[0])
208
- if ":" in data["database"]
209
- else data.get("db_type"),
208
+ "dialect": lambda data: (
209
+ get_db_for_alias(data["database"].split(":")[0]) if ":" in data["database"] else data.get("db_type")
210
+ ),
210
211
  "migrate": lambda data: not (data.get("input") or data.get("output")),
211
212
  "folder": lambda data: data.get("db_folder"),
212
- "flag_location": lambda data: f"{db_folder}/flags"
213
- if (db_folder := (data.get("folder") or data.get("db_folder")))
214
- else "/flags",
213
+ "flag_location": lambda data: (
214
+ f"{db_folder}/flags" if (db_folder := (data.get("folder") or data.get("db_folder"))) else "/flags"
215
+ ),
215
216
  "pool_size": lambda data: 1 if data.get("dialect", "sqlite") == "sqlite" else 3,
216
217
  }
217
218
 
@@ -232,9 +233,11 @@ def fill_defaults(data: dict[str, Any], prop: str) -> None:
232
233
 
233
234
 
234
235
  TRANSFORMS: dict[str, typing.Callable[[dict[str, Any]], Any]] = {
235
- "database": lambda data: data["database"]
236
- if (":" in data["database"] or not data.get("dialect"))
237
- else (data["dialect"] + "://" + data["database"])
236
+ "database": lambda data: (
237
+ data["database"]
238
+ if (":" in data["database"] or not data.get("dialect"))
239
+ else (data["dialect"] + "://" + data["database"])
240
+ )
238
241
  }
239
242
 
240
243
 
typedal/core.py CHANGED
@@ -1,6 +1,7 @@
1
1
  """
2
2
  Core functionality of TypeDAL.
3
3
  """
4
+
4
5
  import contextlib
5
6
  import csv
6
7
  import datetime as dt
@@ -747,7 +748,7 @@ class TableProtocol(typing.Protocol): # pragma: no cover
747
748
  Make mypy happy.
748
749
  """
749
750
 
750
- id: "TypedField[int]" # noqa: A003
751
+ id: "TypedField[int]"
751
752
 
752
753
  def __getitem__(self, item: str) -> Field:
753
754
  """
@@ -847,7 +848,7 @@ class TableMeta(type):
847
848
  """
848
849
  return self(row)
849
850
 
850
- def all(self: typing.Type[T_MetaInstance]) -> "TypedRows[T_MetaInstance]": # noqa: A003
851
+ def all(self: typing.Type[T_MetaInstance]) -> "TypedRows[T_MetaInstance]":
851
852
  """
852
853
  Return all rows for this model.
853
854
  """
@@ -1323,7 +1324,7 @@ class TypedTable(metaclass=TableMeta):
1323
1324
 
1324
1325
  _with: list[str]
1325
1326
 
1326
- id: "TypedField[int]" # noqa: A003
1327
+ id: "TypedField[int]"
1327
1328
 
1328
1329
  _before_insert: list[BeforeInsertCallable]
1329
1330
  _after_insert: list[AfterInsertCallable]
@@ -2352,6 +2353,17 @@ class QueryBuilder(typing.Generic[T_MetaInstance]):
2352
2353
 
2353
2354
  return load_from_cache(key, self._get_db())
2354
2355
 
2356
+ def execute(self, add_id: bool = False) -> Rows:
2357
+ """
2358
+ Raw version of .collect which only executes the SQL, without performing any magic afterwards.
2359
+ """
2360
+ db = self._get_db()
2361
+ metadata = typing.cast(Metadata, self.metadata.copy())
2362
+
2363
+ query, select_args, select_kwargs = self._before_query(metadata, add_id=add_id)
2364
+
2365
+ return db(query).select(*select_args, **select_kwargs)
2366
+
2355
2367
  def collect(
2356
2368
  self, verbose: bool = False, _to: typing.Type["TypedRows[Any]"] = None, add_id: bool = True
2357
2369
  ) -> "TypedRows[T_MetaInstance]":
@@ -2718,7 +2730,7 @@ class PaginatedRows(TypedRows[T_MetaInstance]):
2718
2730
  "prev_page": pagination_data["current_page"] - 1 if has_prev_page else None,
2719
2731
  }
2720
2732
 
2721
- def next(self) -> Self: # noqa: A003
2733
+ def next(self) -> Self:
2722
2734
  """
2723
2735
  Get the next page.
2724
2736
  """
typedal/for_py4web.py CHANGED
@@ -1,6 +1,7 @@
1
1
  """
2
2
  ONLY USE IN COMBINATION WITH PY4WEB!
3
3
  """
4
+
4
5
  from typing import Any
5
6
 
6
7
  import threadsafevariable
typedal/helpers.py CHANGED
@@ -1,6 +1,7 @@
1
1
  """
2
2
  Helpers that work independently of core.
3
3
  """
4
+
4
5
  import io
5
6
  import types
6
7
  import typing
typedal/types.py CHANGED
@@ -1,6 +1,7 @@
1
1
  """
2
2
  Stuff to make mypy happy.
3
3
  """
4
+
4
5
  import typing
5
6
  from datetime import datetime
6
7
  from typing import Any, Optional, TypedDict
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: TypeDAL
3
- Version: 2.3.6
3
+ Version: 2.4.0
4
4
  Summary: Typing support for PyDAL
5
5
  Project-URL: Documentation, https://typedal.readthedocs.io/
6
6
  Project-URL: Issues, https://github.com/trialandsuccess/TypeDAL/issues
@@ -0,0 +1,18 @@
1
+ typedal/__about__.py,sha256=ld9eMafpOoWREP5zR3MpQlKT_eergtY1xSbMOYaWfZ4,206
2
+ typedal/__init__.py,sha256=QQpLiVl9w9hm2LBxey49Y_tCF_VB2bScVaS_mCjYy54,366
3
+ typedal/caching.py,sha256=GCeU3m6O9VUOs9zDYlWILrjIEUcbfKJBjSlenkUYaoA,7710
4
+ typedal/cli.py,sha256=--FH_WbjOiMFTqPtCwiWT8JHs2FArkFfWePG11w5WL0,11801
5
+ typedal/config.py,sha256=wVfBZRFstPN6sC5E2JHYSKL_pj6LPoK5WxCzKJCULGc,11909
6
+ typedal/core.py,sha256=DMc9071l1FiKnS7kHZNLdnlGCTb7p0VCJaLVJKGEMhg,95118
7
+ typedal/fields.py,sha256=z2PD9vLWqBR_zXtiY0DthqTG4AeF3yxKoeuVfGXnSdg,5197
8
+ typedal/for_py4web.py,sha256=xOm-ypTQTmTSzInvVQAf7f7c4XQ1il-fnT7kZoPoKP8,1303
9
+ typedal/for_web2py.py,sha256=zvd5xC-SmuKc0JLDqT3hMIs6COaYnwTFXD_BIeC1vug,1832
10
+ typedal/helpers.py,sha256=uwO9dl2hGPtSJzDDaK5dXmubX9WLSh2i9pkZRxuOSs0,6488
11
+ typedal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ typedal/types.py,sha256=R6XU_tjd6zb8aI6nAXKepi3OEFwwGD8uig6Mzco9-jU,3380
13
+ typedal/web2py_py4web_shared.py,sha256=cEbjkK0WOS9Q0nTyZuQaJWffeP4bjrL79Bx0xGy_UOs,1504
14
+ typedal/serializers/as_json.py,sha256=ffo152W-sARYXym4BzwX709rrO2-QwKk2KunWY8RNl4,2229
15
+ typedal-2.4.0.dist-info/METADATA,sha256=rqEP-7PeHPJ9W33FEP1J4x7el_Fza_w1nobTHBtqZe4,7573
16
+ typedal-2.4.0.dist-info/WHEEL,sha256=KGYbc1zXlYddvwxnNty23BeaKzh7YuoSIvIMO4jEhvw,87
17
+ typedal-2.4.0.dist-info/entry_points.txt,sha256=m1wqcc_10rHWPdlQ71zEkmJDADUAnZtn7Jac_6mbyUc,44
18
+ typedal-2.4.0.dist-info/RECORD,,
@@ -1,18 +0,0 @@
1
- typedal/__about__.py,sha256=kbkWDzpCiYknqWjNq1J8RYaeb9wBLllZwZlNvQscZOk,206
2
- typedal/__init__.py,sha256=QQpLiVl9w9hm2LBxey49Y_tCF_VB2bScVaS_mCjYy54,366
3
- typedal/caching.py,sha256=cglkCphbg93Iy9-KHefQN9-JJxuA5-HjpzZAdw2BGvY,7709
4
- typedal/cli.py,sha256=F7M9D2pu2D-FoKZJrT3K9Wmbv5_ScUR8j5jNGoTgOfk,11800
5
- typedal/config.py,sha256=oDYSuPMm261hBoDBAXoq37Umf1Vw8rNx4BlP35WwCSY,11882
6
- typedal/core.py,sha256=hT4XLEMz_IzjTmWu2-scTP7VvrS0UwFSbG7A62OUnv0,94749
7
- typedal/fields.py,sha256=z2PD9vLWqBR_zXtiY0DthqTG4AeF3yxKoeuVfGXnSdg,5197
8
- typedal/for_py4web.py,sha256=dwh3cYThR6j2l_RDChcuSH3gXjv8FY-az3t5Lni5A7M,1302
9
- typedal/for_web2py.py,sha256=zvd5xC-SmuKc0JLDqT3hMIs6COaYnwTFXD_BIeC1vug,1832
10
- typedal/helpers.py,sha256=ZpHdwBMSANw-P9I5gs56Vf6GUbxGzFsIwbBvASKXX8s,6487
11
- typedal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- typedal/types.py,sha256=5qm3PgS8DXGCu9ZTUWQiIi2XXD8gz4_4Csg_vZlu_yo,3379
13
- typedal/web2py_py4web_shared.py,sha256=cEbjkK0WOS9Q0nTyZuQaJWffeP4bjrL79Bx0xGy_UOs,1504
14
- typedal/serializers/as_json.py,sha256=ffo152W-sARYXym4BzwX709rrO2-QwKk2KunWY8RNl4,2229
15
- typedal-2.3.6.dist-info/METADATA,sha256=NVLY0EjdnmVKMpFMpPxnmyz9hEQN1ZrQEHccMRNtkYY,7573
16
- typedal-2.3.6.dist-info/WHEEL,sha256=KGYbc1zXlYddvwxnNty23BeaKzh7YuoSIvIMO4jEhvw,87
17
- typedal-2.3.6.dist-info/entry_points.txt,sha256=m1wqcc_10rHWPdlQ71zEkmJDADUAnZtn7Jac_6mbyUc,44
18
- typedal-2.3.6.dist-info/RECORD,,