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 +1 -1
- typedal/caching.py +1 -0
- typedal/cli.py +1 -0
- typedal/config.py +13 -10
- typedal/core.py +16 -4
- typedal/for_py4web.py +1 -0
- typedal/helpers.py +1 -0
- typedal/types.py +1 -0
- {typedal-2.3.6.dist-info → typedal-2.4.0.dist-info}/METADATA +1 -1
- typedal-2.4.0.dist-info/RECORD +18 -0
- typedal-2.3.6.dist-info/RECORD +0 -18
- {typedal-2.3.6.dist-info → typedal-2.4.0.dist-info}/WHEEL +0 -0
- {typedal-2.3.6.dist-info → typedal-2.4.0.dist-info}/entry_points.txt +0 -0
typedal/__about__.py
CHANGED
typedal/caching.py
CHANGED
typedal/cli.py
CHANGED
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 = ""
|
|
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:
|
|
208
|
-
|
|
209
|
-
|
|
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:
|
|
213
|
-
|
|
214
|
-
|
|
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:
|
|
236
|
-
|
|
237
|
-
|
|
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]"
|
|
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]":
|
|
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]"
|
|
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:
|
|
2733
|
+
def next(self) -> Self:
|
|
2722
2734
|
"""
|
|
2723
2735
|
Get the next page.
|
|
2724
2736
|
"""
|
typedal/for_py4web.py
CHANGED
typedal/helpers.py
CHANGED
typedal/types.py
CHANGED
|
@@ -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,,
|
typedal-2.3.6.dist-info/RECORD
DELETED
|
@@ -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,,
|
|
File without changes
|
|
File without changes
|