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.
Files changed (75) hide show
  1. {typedal-4.8.2 → typedal-4.8.3}/CHANGELOG.md +6 -0
  2. {typedal-4.8.2 → typedal-4.8.3}/PKG-INFO +1 -1
  3. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/__about__.py +1 -1
  4. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/fields.py +39 -1
  5. {typedal-4.8.2 → typedal-4.8.3}/typing_again.py +5 -0
  6. {typedal-4.8.2 → typedal-4.8.3}/.github/workflows/su6.yml +0 -0
  7. {typedal-4.8.2 → typedal-4.8.3}/.gitignore +0 -0
  8. {typedal-4.8.2 → typedal-4.8.3}/.readthedocs.yml +0 -0
  9. {typedal-4.8.2 → typedal-4.8.3}/README.md +0 -0
  10. {typedal-4.8.2 → typedal-4.8.3}/coverage.svg +0 -0
  11. {typedal-4.8.2 → typedal-4.8.3}/docs/10_advanced_apis.md +0 -0
  12. {typedal-4.8.2 → typedal-4.8.3}/docs/1_getting_started.md +0 -0
  13. {typedal-4.8.2 → typedal-4.8.3}/docs/2_defining_tables.md +0 -0
  14. {typedal-4.8.2 → typedal-4.8.3}/docs/3_building_queries.md +0 -0
  15. {typedal-4.8.2 → typedal-4.8.3}/docs/4_relationships.md +0 -0
  16. {typedal-4.8.2 → typedal-4.8.3}/docs/5_py4web.md +0 -0
  17. {typedal-4.8.2 → typedal-4.8.3}/docs/6_migrations.md +0 -0
  18. {typedal-4.8.2 → typedal-4.8.3}/docs/7_configuration.md +0 -0
  19. {typedal-4.8.2 → typedal-4.8.3}/docs/8_mixins.md +0 -0
  20. {typedal-4.8.2 → typedal-4.8.3}/docs/9_memoization.md +0 -0
  21. {typedal-4.8.2 → typedal-4.8.3}/docs/css/code_blocks.css +0 -0
  22. {typedal-4.8.2 → typedal-4.8.3}/docs/index.md +0 -0
  23. {typedal-4.8.2 → typedal-4.8.3}/docs/requirements.txt +0 -0
  24. {typedal-4.8.2 → typedal-4.8.3}/example_new.py +0 -0
  25. {typedal-4.8.2 → typedal-4.8.3}/example_old.py +0 -0
  26. {typedal-4.8.2 → typedal-4.8.3}/mkdocs.yml +0 -0
  27. {typedal-4.8.2 → typedal-4.8.3}/pyproject.toml +0 -0
  28. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/__init__.py +0 -0
  29. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/caching.py +0 -0
  30. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/cli.py +0 -0
  31. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/config.py +0 -0
  32. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/constants.py +0 -0
  33. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/core.py +0 -0
  34. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/define.py +0 -0
  35. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/enum_helpers.py +0 -0
  36. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/for_py4web.py +0 -0
  37. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/for_web2py.py +0 -0
  38. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/helpers.py +0 -0
  39. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/mixins.py +0 -0
  40. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/py.typed +0 -0
  41. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/query_builder.py +0 -0
  42. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/relationships.py +0 -0
  43. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/rows.py +0 -0
  44. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/serializers/as_json.py +0 -0
  45. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/serializers/typescript.py +0 -0
  46. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/tables.py +0 -0
  47. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/types.py +0 -0
  48. {typedal-4.8.2 → typedal-4.8.3}/src/typedal/web2py_py4web_shared.py +0 -0
  49. {typedal-4.8.2 → typedal-4.8.3}/tasks.py +0 -0
  50. {typedal-4.8.2 → typedal-4.8.3}/tests/__init__.py +0 -0
  51. {typedal-4.8.2 → typedal-4.8.3}/tests/configs/simple.toml +0 -0
  52. {typedal-4.8.2 → typedal-4.8.3}/tests/configs/valid.env +0 -0
  53. {typedal-4.8.2 → typedal-4.8.3}/tests/configs/valid.toml +0 -0
  54. {typedal-4.8.2 → typedal-4.8.3}/tests/py314_tests.py +0 -0
  55. {typedal-4.8.2 → typedal-4.8.3}/tests/test_cli.py +0 -0
  56. {typedal-4.8.2 → typedal-4.8.3}/tests/test_config.py +0 -0
  57. {typedal-4.8.2 → typedal-4.8.3}/tests/test_docs_examples.py +0 -0
  58. {typedal-4.8.2 → typedal-4.8.3}/tests/test_helpers.py +0 -0
  59. {typedal-4.8.2 → typedal-4.8.3}/tests/test_json.py +0 -0
  60. {typedal-4.8.2 → typedal-4.8.3}/tests/test_main.py +0 -0
  61. {typedal-4.8.2 → typedal-4.8.3}/tests/test_mixins.py +0 -0
  62. {typedal-4.8.2 → typedal-4.8.3}/tests/test_mypy.py +0 -0
  63. {typedal-4.8.2 → typedal-4.8.3}/tests/test_orm.py +0 -0
  64. {typedal-4.8.2 → typedal-4.8.3}/tests/test_py4web.py +0 -0
  65. {typedal-4.8.2 → typedal-4.8.3}/tests/test_query_builder.py +0 -0
  66. {typedal-4.8.2 → typedal-4.8.3}/tests/test_relationships.py +0 -0
  67. {typedal-4.8.2 → typedal-4.8.3}/tests/test_row.py +0 -0
  68. {typedal-4.8.2 → typedal-4.8.3}/tests/test_stats.py +0 -0
  69. {typedal-4.8.2 → typedal-4.8.3}/tests/test_table.py +0 -0
  70. {typedal-4.8.2 → typedal-4.8.3}/tests/test_typescript.py +0 -0
  71. {typedal-4.8.2 → typedal-4.8.3}/tests/test_typing_mypy.md +0 -0
  72. {typedal-4.8.2 → typedal-4.8.3}/tests/test_typing_pyright.md +0 -0
  73. {typedal-4.8.2 → typedal-4.8.3}/tests/test_web2py.py +0 -0
  74. {typedal-4.8.2 → typedal-4.8.3}/tests/test_xx_others.py +0 -0
  75. {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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TypeDAL
3
- Version: 4.8.2
3
+ Version: 4.8.3
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
@@ -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__ = "4.8.2"
8
+ __version__ = "4.8.3"
@@ -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