TypeDAL 4.2.0__tar.gz → 4.2.1__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 (66) hide show
  1. {typedal-4.2.0 → typedal-4.2.1}/CHANGELOG.md +6 -0
  2. {typedal-4.2.0 → typedal-4.2.1}/PKG-INFO +1 -1
  3. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/__about__.py +1 -1
  4. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/cli.py +2 -1
  5. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/query_builder.py +3 -2
  6. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/relationships.py +41 -1
  7. {typedal-4.2.0 → typedal-4.2.1}/.github/workflows/su6.yml +0 -0
  8. {typedal-4.2.0 → typedal-4.2.1}/.gitignore +0 -0
  9. {typedal-4.2.0 → typedal-4.2.1}/.readthedocs.yml +0 -0
  10. {typedal-4.2.0 → typedal-4.2.1}/README.md +0 -0
  11. {typedal-4.2.0 → typedal-4.2.1}/coverage.svg +0 -0
  12. {typedal-4.2.0 → typedal-4.2.1}/docs/1_getting_started.md +0 -0
  13. {typedal-4.2.0 → typedal-4.2.1}/docs/2_defining_tables.md +0 -0
  14. {typedal-4.2.0 → typedal-4.2.1}/docs/3_building_queries.md +0 -0
  15. {typedal-4.2.0 → typedal-4.2.1}/docs/4_relationships.md +0 -0
  16. {typedal-4.2.0 → typedal-4.2.1}/docs/5_py4web.md +0 -0
  17. {typedal-4.2.0 → typedal-4.2.1}/docs/6_migrations.md +0 -0
  18. {typedal-4.2.0 → typedal-4.2.1}/docs/7_configuration.md +0 -0
  19. {typedal-4.2.0 → typedal-4.2.1}/docs/8_mixins.md +0 -0
  20. {typedal-4.2.0 → typedal-4.2.1}/docs/css/code_blocks.css +0 -0
  21. {typedal-4.2.0 → typedal-4.2.1}/docs/index.md +0 -0
  22. {typedal-4.2.0 → typedal-4.2.1}/docs/requirements.txt +0 -0
  23. {typedal-4.2.0 → typedal-4.2.1}/example_new.py +0 -0
  24. {typedal-4.2.0 → typedal-4.2.1}/example_old.py +0 -0
  25. {typedal-4.2.0 → typedal-4.2.1}/mkdocs.yml +0 -0
  26. {typedal-4.2.0 → typedal-4.2.1}/pyproject.toml +0 -0
  27. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/__init__.py +0 -0
  28. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/caching.py +0 -0
  29. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/config.py +0 -0
  30. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/constants.py +0 -0
  31. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/core.py +0 -0
  32. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/define.py +0 -0
  33. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/fields.py +0 -0
  34. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/for_py4web.py +0 -0
  35. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/for_web2py.py +0 -0
  36. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/helpers.py +0 -0
  37. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/mixins.py +0 -0
  38. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/py.typed +0 -0
  39. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/rows.py +0 -0
  40. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/serializers/as_json.py +0 -0
  41. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/tables.py +0 -0
  42. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/types.py +0 -0
  43. {typedal-4.2.0 → typedal-4.2.1}/src/typedal/web2py_py4web_shared.py +0 -0
  44. {typedal-4.2.0 → typedal-4.2.1}/tests/__init__.py +0 -0
  45. {typedal-4.2.0 → typedal-4.2.1}/tests/configs/simple.toml +0 -0
  46. {typedal-4.2.0 → typedal-4.2.1}/tests/configs/valid.env +0 -0
  47. {typedal-4.2.0 → typedal-4.2.1}/tests/configs/valid.toml +0 -0
  48. {typedal-4.2.0 → typedal-4.2.1}/tests/py314_tests.py +0 -0
  49. {typedal-4.2.0 → typedal-4.2.1}/tests/test_cli.py +0 -0
  50. {typedal-4.2.0 → typedal-4.2.1}/tests/test_config.py +0 -0
  51. {typedal-4.2.0 → typedal-4.2.1}/tests/test_docs_examples.py +0 -0
  52. {typedal-4.2.0 → typedal-4.2.1}/tests/test_helpers.py +0 -0
  53. {typedal-4.2.0 → typedal-4.2.1}/tests/test_json.py +0 -0
  54. {typedal-4.2.0 → typedal-4.2.1}/tests/test_main.py +0 -0
  55. {typedal-4.2.0 → typedal-4.2.1}/tests/test_mixins.py +0 -0
  56. {typedal-4.2.0 → typedal-4.2.1}/tests/test_mypy.py +0 -0
  57. {typedal-4.2.0 → typedal-4.2.1}/tests/test_orm.py +0 -0
  58. {typedal-4.2.0 → typedal-4.2.1}/tests/test_py4web.py +0 -0
  59. {typedal-4.2.0 → typedal-4.2.1}/tests/test_query_builder.py +0 -0
  60. {typedal-4.2.0 → typedal-4.2.1}/tests/test_relationships.py +0 -0
  61. {typedal-4.2.0 → typedal-4.2.1}/tests/test_row.py +0 -0
  62. {typedal-4.2.0 → typedal-4.2.1}/tests/test_stats.py +0 -0
  63. {typedal-4.2.0 → typedal-4.2.1}/tests/test_table.py +0 -0
  64. {typedal-4.2.0 → typedal-4.2.1}/tests/test_web2py.py +0 -0
  65. {typedal-4.2.0 → typedal-4.2.1}/tests/test_xx_others.py +0 -0
  66. {typedal-4.2.0 → typedal-4.2.1}/tests/timings.py +0 -0
@@ -2,6 +2,12 @@
2
2
 
3
3
  <!--next-version-placeholder-->
4
4
 
5
+ ## v4.2.1 (2025-12-10)
6
+
7
+ ### Fix
8
+
9
+ * Improved type hints for relationships (non-list) ([`3fb53bc`](https://github.com/trialandsuccess/TypeDAL/commit/3fb53bc7a9b4c53c1bc533124ed205c5ec46fa92))
10
+
5
11
  ## v4.2.0 (2025-11-28)
6
12
 
7
13
  ### Feature
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TypeDAL
3
- Version: 4.2.0
3
+ Version: 4.2.1
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.2.0"
8
+ __version__ = "4.2.1"
@@ -392,7 +392,8 @@ def fake_migrations(
392
392
 
393
393
  previously_migrated = (
394
394
  db(
395
- db.ewh_implemented_features.name.belongs(to_fake) & (db.ewh_implemented_features.installed == True) # noqa E712
395
+ db.ewh_implemented_features.name.belongs(to_fake)
396
+ & (db.ewh_implemented_features.installed == True) # noqa E712
396
397
  )
397
398
  .select(db.ewh_implemented_features.name)
398
399
  .column("name")
@@ -36,6 +36,7 @@ from .types import (
36
36
  SelectKwargs,
37
37
  T,
38
38
  T_MetaInstance,
39
+ Table,
39
40
  )
40
41
 
41
42
 
@@ -76,13 +77,13 @@ class QueryBuilder(t.Generic[T_MetaInstance]):
76
77
  self.relationships = relationships or {}
77
78
  self.metadata = metadata or {}
78
79
 
79
- def _ensure_table_defined(self):
80
+ def _ensure_table_defined(self) -> Table:
80
81
  model = self.model
81
82
  if hasattr(model, "_ensure_table_defined"):
82
83
  return model._ensure_table_defined()
83
84
  else:
84
85
  # already a pydal table
85
- return model
86
+ return t.cast(Table, model)
86
87
 
87
88
  def __str__(self) -> str:
88
89
  """
@@ -257,6 +257,27 @@ class Relationship(t.Generic[To_Type]):
257
257
  return fallback_value
258
258
 
259
259
 
260
+ @t.overload
261
+ def relationship(
262
+ _type: type[list[To_Type]],
263
+ condition: Condition = None,
264
+ join: JOIN_OPTIONS = None,
265
+ on: OnQuery = None,
266
+ lazy: LazyPolicy | None = None,
267
+ explicit: bool = False,
268
+ ) -> list[To_Type]:
269
+ """
270
+ Define a relationship that returns a list of related instances.
271
+
272
+ Args:
273
+ _type: A list type hint like list[Office] to indicate multiple related records.
274
+
275
+ Returns:
276
+ A list of related instances.
277
+ """
278
+
279
+
280
+ @t.overload
260
281
  def relationship(
261
282
  _type: t.Type[To_Type] | str,
262
283
  condition: Condition = None,
@@ -264,7 +285,26 @@ def relationship(
264
285
  on: OnQuery = None,
265
286
  lazy: LazyPolicy | None = None,
266
287
  explicit: bool = False,
267
- ) -> To_Type:
288
+ ) -> To_Type | None:
289
+ """
290
+ Define a relationship that returns a single optional related instance.
291
+
292
+ Args:
293
+ _type: A type or string reference like City to indicate a single related record.
294
+
295
+ Returns:
296
+ A single related instance or None.
297
+ """
298
+
299
+
300
+ def relationship(
301
+ _type: type[list[To_Type]] | t.Type[To_Type] | str,
302
+ condition: Condition = None,
303
+ join: JOIN_OPTIONS = None,
304
+ on: OnQuery = None,
305
+ lazy: LazyPolicy | None = None,
306
+ explicit: bool = False,
307
+ ) -> list[To_Type] | To_Type | None:
268
308
  """
269
309
  Define a relationship to another table, when its id is not stored in the current table.
270
310
 
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