TypeDAL 4.8.2__tar.gz → 4.8.3__tar.gz
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.
- {typedal-4.8.2 → typedal-4.8.3}/CHANGELOG.md +6 -0
- {typedal-4.8.2 → typedal-4.8.3}/PKG-INFO +1 -1
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/__about__.py +1 -1
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/fields.py +39 -1
- {typedal-4.8.2 → typedal-4.8.3}/typing_again.py +5 -0
- {typedal-4.8.2 → typedal-4.8.3}/.github/workflows/su6.yml +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/.gitignore +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/.readthedocs.yml +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/README.md +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/coverage.svg +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/docs/10_advanced_apis.md +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/docs/1_getting_started.md +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/docs/2_defining_tables.md +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/docs/3_building_queries.md +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/docs/4_relationships.md +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/docs/5_py4web.md +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/docs/6_migrations.md +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/docs/7_configuration.md +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/docs/8_mixins.md +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/docs/9_memoization.md +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/docs/css/code_blocks.css +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/docs/index.md +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/docs/requirements.txt +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/example_new.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/example_old.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/mkdocs.yml +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/pyproject.toml +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/__init__.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/caching.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/cli.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/config.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/constants.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/core.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/define.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/enum_helpers.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/for_py4web.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/for_web2py.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/helpers.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/mixins.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/py.typed +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/query_builder.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/relationships.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/rows.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/serializers/as_json.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/serializers/typescript.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/tables.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/types.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/src/typedal/web2py_py4web_shared.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tasks.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/__init__.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/configs/simple.toml +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/configs/valid.env +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/configs/valid.toml +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/py314_tests.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_cli.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_config.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_docs_examples.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_helpers.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_json.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_main.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_mixins.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_mypy.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_orm.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_py4web.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_query_builder.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_relationships.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_row.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_stats.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_table.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_typescript.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_typing_mypy.md +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_typing_pyright.md +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_web2py.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/test_xx_others.py +0 -0
- {typedal-4.8.2 → typedal-4.8.3}/tests/timings.py +0 -0
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
<!--next-version-placeholder-->
|
|
4
4
|
|
|
5
|
+
## v4.8.3 (2026-05-25)
|
|
6
|
+
|
|
7
|
+
### Fix
|
|
8
|
+
|
|
9
|
+
* Improved typing hints on TypedField properties ([`55b5ce4`](https://github.com/trialandsuccess/TypeDAL/commit/55b5ce4ae2657ae43b9cfa19dbe90e4386609495))
|
|
10
|
+
|
|
5
11
|
## v4.8.2 (2026-05-20)
|
|
6
12
|
|
|
7
13
|
### Fix
|
|
@@ -18,9 +18,11 @@ from pydal.objects import Table
|
|
|
18
18
|
|
|
19
19
|
from .core import TypeDAL
|
|
20
20
|
from .types import (
|
|
21
|
+
AnyCallable,
|
|
21
22
|
Expression,
|
|
22
23
|
Field,
|
|
23
24
|
FieldSettings,
|
|
25
|
+
FileSystemLike,
|
|
24
26
|
Query,
|
|
25
27
|
T_annotation,
|
|
26
28
|
T_MetaInstance,
|
|
@@ -50,7 +52,44 @@ class TypedField[T_Value](Expression): # pragma: no cover
|
|
|
50
52
|
_type: T_annotation
|
|
51
53
|
kwargs: t.Any
|
|
52
54
|
|
|
55
|
+
# Typed hints for common pydal.Field attrs forwarded via __getattr__ after bind().
|
|
56
|
+
type: str | type | Table | Field | SQLCustomType
|
|
57
|
+
type_name: str
|
|
58
|
+
length: int
|
|
59
|
+
default: T_Value
|
|
60
|
+
required: bool
|
|
61
|
+
ondelete: str
|
|
62
|
+
onupdate: str
|
|
63
|
+
notnull: bool
|
|
64
|
+
unique: bool
|
|
65
|
+
regex: str | None
|
|
66
|
+
options: list[t.Any] | AnyCallable | None
|
|
67
|
+
uploadfield: bool | str
|
|
68
|
+
uploadfolder: str | None
|
|
69
|
+
uploadseparate: bool
|
|
70
|
+
uploadfs: FileSystemLike | None
|
|
71
|
+
widget: AnyCallable | None
|
|
72
|
+
label: str
|
|
73
|
+
comment: str | None
|
|
74
|
+
writable: bool
|
|
75
|
+
readable: bool
|
|
76
|
+
searchable: bool
|
|
77
|
+
listable: bool
|
|
78
|
+
update: T_Value | AnyCallable | None
|
|
79
|
+
authorize: AnyCallable | None
|
|
80
|
+
autodelete: bool
|
|
53
81
|
requires: Validator | t.Iterable[Validator]
|
|
82
|
+
represent: t.Callable[[T_Value, TypedTable | None], t.Any]
|
|
83
|
+
compute: AnyCallable | None
|
|
84
|
+
custom_store: AnyCallable | None
|
|
85
|
+
custom_retrieve: AnyCallable | None
|
|
86
|
+
custom_retrieve_file_properties: AnyCallable | None
|
|
87
|
+
custom_delete: AnyCallable | None
|
|
88
|
+
filter_in: AnyCallable | None
|
|
89
|
+
filter_out: AnyCallable | None
|
|
90
|
+
custom_qualifier: AnyCallable | None
|
|
91
|
+
map_none: T_Value | None
|
|
92
|
+
_raw_rname: str | None
|
|
54
93
|
|
|
55
94
|
# NOTE: for the logic of converting a TypedField into a pydal Field, see TypeDAL._to_field
|
|
56
95
|
|
|
@@ -228,7 +267,6 @@ class TypedField[T_Value](Expression): # pragma: no cover
|
|
|
228
267
|
|
|
229
268
|
return t.cast(Expression, self._field.lower())
|
|
230
269
|
|
|
231
|
-
|
|
232
270
|
def is_typed_field(cls: t.Any) -> t.TypeGuard["TypedField[t.Any]"]:
|
|
233
271
|
"""
|
|
234
272
|
Is `cls` an instance or subclass of TypedField?
|
|
@@ -33,3 +33,8 @@ reveal_type(row.rel) # expected: OtherTable | None; pycharm: Relationship[Other
|
|
|
33
33
|
|
|
34
34
|
reveal_type(MyTable.multiple) # expected: Relationship[list[OtherTable]]; pycharm: Relationship[list[OtherTable]]
|
|
35
35
|
reveal_type(row.multiple) # expected: list[OtherTable]; pycharm: Relationship[list[OtherTable]]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
MyTable.field.label = "Test Label"
|
|
40
|
+
MyTable.field.represent = lambda value, row: "Test Repr"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|