TypeDAL 4.4.3__tar.gz → 4.4.4__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 (73) hide show
  1. {typedal-4.4.3 → typedal-4.4.4}/CHANGELOG.md +6 -0
  2. {typedal-4.4.3 → typedal-4.4.4}/PKG-INFO +1 -1
  3. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/__about__.py +1 -1
  4. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/relationships.py +8 -1
  5. {typedal-4.4.3 → typedal-4.4.4}/tests/test_relationships.py +4 -1
  6. {typedal-4.4.3 → typedal-4.4.4}/.crush/.gitignore +0 -0
  7. {typedal-4.4.3 → typedal-4.4.4}/.crush/crush.db-shm +0 -0
  8. {typedal-4.4.3 → typedal-4.4.4}/.crush/crush.db-wal +0 -0
  9. {typedal-4.4.3 → typedal-4.4.4}/.crush/init +0 -0
  10. {typedal-4.4.3 → typedal-4.4.4}/.crush/logs/crush.log +0 -0
  11. {typedal-4.4.3 → typedal-4.4.4}/.github/workflows/su6.yml +0 -0
  12. {typedal-4.4.3 → typedal-4.4.4}/.gitignore +0 -0
  13. {typedal-4.4.3 → typedal-4.4.4}/.readthedocs.yml +0 -0
  14. {typedal-4.4.3 → typedal-4.4.4}/README.md +0 -0
  15. {typedal-4.4.3 → typedal-4.4.4}/coverage.svg +0 -0
  16. {typedal-4.4.3 → typedal-4.4.4}/docs/1_getting_started.md +0 -0
  17. {typedal-4.4.3 → typedal-4.4.4}/docs/2_defining_tables.md +0 -0
  18. {typedal-4.4.3 → typedal-4.4.4}/docs/3_building_queries.md +0 -0
  19. {typedal-4.4.3 → typedal-4.4.4}/docs/4_relationships.md +0 -0
  20. {typedal-4.4.3 → typedal-4.4.4}/docs/5_py4web.md +0 -0
  21. {typedal-4.4.3 → typedal-4.4.4}/docs/6_migrations.md +0 -0
  22. {typedal-4.4.3 → typedal-4.4.4}/docs/7_configuration.md +0 -0
  23. {typedal-4.4.3 → typedal-4.4.4}/docs/8_mixins.md +0 -0
  24. {typedal-4.4.3 → typedal-4.4.4}/docs/9_memoization.md +0 -0
  25. {typedal-4.4.3 → typedal-4.4.4}/docs/css/code_blocks.css +0 -0
  26. {typedal-4.4.3 → typedal-4.4.4}/docs/index.md +0 -0
  27. {typedal-4.4.3 → typedal-4.4.4}/docs/requirements.txt +0 -0
  28. {typedal-4.4.3 → typedal-4.4.4}/example_new.py +0 -0
  29. {typedal-4.4.3 → typedal-4.4.4}/example_old.py +0 -0
  30. {typedal-4.4.3 → typedal-4.4.4}/mkdocs.yml +0 -0
  31. {typedal-4.4.3 → typedal-4.4.4}/pyproject.toml +0 -0
  32. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/__init__.py +0 -0
  33. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/caching.py +0 -0
  34. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/cli.py +0 -0
  35. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/config.py +0 -0
  36. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/constants.py +0 -0
  37. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/core.py +0 -0
  38. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/define.py +0 -0
  39. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/fields.py +0 -0
  40. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/for_py4web.py +0 -0
  41. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/for_web2py.py +0 -0
  42. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/helpers.py +0 -0
  43. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/mixins.py +0 -0
  44. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/py.typed +0 -0
  45. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/query_builder.py +0 -0
  46. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/rows.py +0 -0
  47. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/serializers/as_json.py +0 -0
  48. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/tables.py +0 -0
  49. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/types.py +0 -0
  50. {typedal-4.4.3 → typedal-4.4.4}/src/typedal/web2py_py4web_shared.py +0 -0
  51. {typedal-4.4.3 → typedal-4.4.4}/tasks.py +0 -0
  52. {typedal-4.4.3 → typedal-4.4.4}/tests/__init__.py +0 -0
  53. {typedal-4.4.3 → typedal-4.4.4}/tests/configs/simple.toml +0 -0
  54. {typedal-4.4.3 → typedal-4.4.4}/tests/configs/valid.env +0 -0
  55. {typedal-4.4.3 → typedal-4.4.4}/tests/configs/valid.toml +0 -0
  56. {typedal-4.4.3 → typedal-4.4.4}/tests/py314_tests.py +0 -0
  57. {typedal-4.4.3 → typedal-4.4.4}/tests/test_cli.py +0 -0
  58. {typedal-4.4.3 → typedal-4.4.4}/tests/test_config.py +0 -0
  59. {typedal-4.4.3 → typedal-4.4.4}/tests/test_docs_examples.py +0 -0
  60. {typedal-4.4.3 → typedal-4.4.4}/tests/test_helpers.py +0 -0
  61. {typedal-4.4.3 → typedal-4.4.4}/tests/test_json.py +0 -0
  62. {typedal-4.4.3 → typedal-4.4.4}/tests/test_main.py +0 -0
  63. {typedal-4.4.3 → typedal-4.4.4}/tests/test_mixins.py +0 -0
  64. {typedal-4.4.3 → typedal-4.4.4}/tests/test_mypy.py +0 -0
  65. {typedal-4.4.3 → typedal-4.4.4}/tests/test_orm.py +0 -0
  66. {typedal-4.4.3 → typedal-4.4.4}/tests/test_py4web.py +0 -0
  67. {typedal-4.4.3 → typedal-4.4.4}/tests/test_query_builder.py +0 -0
  68. {typedal-4.4.3 → typedal-4.4.4}/tests/test_row.py +0 -0
  69. {typedal-4.4.3 → typedal-4.4.4}/tests/test_stats.py +0 -0
  70. {typedal-4.4.3 → typedal-4.4.4}/tests/test_table.py +0 -0
  71. {typedal-4.4.3 → typedal-4.4.4}/tests/test_web2py.py +0 -0
  72. {typedal-4.4.3 → typedal-4.4.4}/tests/test_xx_others.py +0 -0
  73. {typedal-4.4.3 → typedal-4.4.4}/tests/timings.py +0 -0
@@ -2,6 +2,12 @@
2
2
 
3
3
  <!--next-version-placeholder-->
4
4
 
5
+ ## v4.4.4 (2026-02-25)
6
+
7
+ ### Fix
8
+
9
+ * **relationship:** Ensure get_db() also works with forward references by looking at other table (owner) as fallback ([`17dd7b4`](https://github.com/trialandsuccess/TypeDAL/commit/17dd7b4273819f2edf6d427264ee1a81622ef597))
10
+
5
11
  ## v4.4.3 (2026-02-11)
6
12
 
7
13
  ### Fix
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TypeDAL
3
- Version: 4.4.3
3
+ Version: 4.4.4
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.4.3"
8
+ __version__ = "4.4.4"
@@ -37,6 +37,7 @@ class Relationship(t.Generic[To_Type]):
37
37
  nested: dict[str, t.Self]
38
38
  explicit: bool
39
39
  name: str | None = None # set by __set_name__
40
+ _owner: t.Type["TypedTable"] | None = None
40
41
 
41
42
  def __init__(
42
43
  self,
@@ -120,6 +121,7 @@ class Relationship(t.Generic[To_Type]):
120
121
 
121
122
  def __set_name__(self, owner: t.Type["TypedTable"], name: str) -> None:
122
123
  """Called automatically when assigned to a class attribute."""
124
+ self._owner = owner
123
125
  self.name = name
124
126
 
125
127
  def get_table(self, db: "TypeDAL") -> t.Type["TypedTable"]:
@@ -145,7 +147,12 @@ class Relationship(t.Generic[To_Type]):
145
147
  Returns:
146
148
  TypeDAL | None: The database instance if it exists, or None otherwise.
147
149
  """
148
- return getattr(self.table, "_db", None)
150
+ target = self.table
151
+
152
+ if isinstance(target, str) and (owner := self._owner):
153
+ target = owner
154
+
155
+ return getattr(target, "_db", None)
149
156
 
150
157
  @property
151
158
  def lazy(self) -> LazyPolicy:
@@ -19,7 +19,7 @@ from src.typedal.caching import (
19
19
  from src.typedal.serializers import as_json
20
20
  from typedal import TypedRows
21
21
 
22
- db = TypeDAL("sqlite:memory")
22
+ db = TypeDAL("sqlite:memory", lazy_policy="warn")
23
23
 
24
24
 
25
25
  class TaggableMixin:
@@ -336,6 +336,7 @@ def test_reprs():
336
336
  empty = Relationship("article")
337
337
 
338
338
  assert empty.get_table(db) == Article
339
+ assert empty.get_db() is None
339
340
 
340
341
  db.define_table("new")
341
342
  empty = Relationship("new")
@@ -345,8 +346,10 @@ def test_reprs():
345
346
 
346
347
  empty = Relationship(db.new)
347
348
  assert empty.get_table(db) == db.new
349
+ assert empty.get_db() == db
348
350
 
349
351
  assert empty.get_table_name() == "new"
352
+ assert User.bestie.get_db() == db
350
353
 
351
354
  relation = Article.join("author").relationships["author"]
352
355
 
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