TypeDAL 3.16.3__tar.gz → 3.16.5__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.

Potentially problematic release.


This version of TypeDAL might be problematic. Click here for more details.

Files changed (58) hide show
  1. {typedal-3.16.3 → typedal-3.16.5}/CHANGELOG.md +12 -0
  2. {typedal-3.16.3 → typedal-3.16.5}/PKG-INFO +1 -1
  3. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/__about__.py +1 -1
  4. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/core.py +31 -9
  5. {typedal-3.16.3 → typedal-3.16.5}/tests/test_row.py +26 -0
  6. {typedal-3.16.3 → typedal-3.16.5}/.github/workflows/su6.yml +0 -0
  7. {typedal-3.16.3 → typedal-3.16.5}/.gitignore +0 -0
  8. {typedal-3.16.3 → typedal-3.16.5}/.readthedocs.yml +0 -0
  9. {typedal-3.16.3 → typedal-3.16.5}/README.md +0 -0
  10. {typedal-3.16.3 → typedal-3.16.5}/coverage.svg +0 -0
  11. {typedal-3.16.3 → typedal-3.16.5}/docs/1_getting_started.md +0 -0
  12. {typedal-3.16.3 → typedal-3.16.5}/docs/2_defining_tables.md +0 -0
  13. {typedal-3.16.3 → typedal-3.16.5}/docs/3_building_queries.md +0 -0
  14. {typedal-3.16.3 → typedal-3.16.5}/docs/4_relationships.md +0 -0
  15. {typedal-3.16.3 → typedal-3.16.5}/docs/5_py4web.md +0 -0
  16. {typedal-3.16.3 → typedal-3.16.5}/docs/6_migrations.md +0 -0
  17. {typedal-3.16.3 → typedal-3.16.5}/docs/7_mixins.md +0 -0
  18. {typedal-3.16.3 → typedal-3.16.5}/docs/css/code_blocks.css +0 -0
  19. {typedal-3.16.3 → typedal-3.16.5}/docs/index.md +0 -0
  20. {typedal-3.16.3 → typedal-3.16.5}/docs/requirements.txt +0 -0
  21. {typedal-3.16.3 → typedal-3.16.5}/example_new.py +0 -0
  22. {typedal-3.16.3 → typedal-3.16.5}/example_old.py +0 -0
  23. {typedal-3.16.3 → typedal-3.16.5}/mkdocs.yml +0 -0
  24. {typedal-3.16.3 → typedal-3.16.5}/pyproject.toml +0 -0
  25. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/__init__.py +0 -0
  26. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/caching.py +0 -0
  27. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/cli.py +0 -0
  28. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/config.py +0 -0
  29. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/fields.py +0 -0
  30. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/for_py4web.py +0 -0
  31. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/for_web2py.py +0 -0
  32. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/helpers.py +0 -0
  33. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/mixins.py +0 -0
  34. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/py.typed +0 -0
  35. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/serializers/as_json.py +0 -0
  36. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/types.py +0 -0
  37. {typedal-3.16.3 → typedal-3.16.5}/src/typedal/web2py_py4web_shared.py +0 -0
  38. {typedal-3.16.3 → typedal-3.16.5}/tests/__init__.py +0 -0
  39. {typedal-3.16.3 → typedal-3.16.5}/tests/configs/simple.toml +0 -0
  40. {typedal-3.16.3 → typedal-3.16.5}/tests/configs/valid.env +0 -0
  41. {typedal-3.16.3 → typedal-3.16.5}/tests/configs/valid.toml +0 -0
  42. {typedal-3.16.3 → typedal-3.16.5}/tests/test_cli.py +0 -0
  43. {typedal-3.16.3 → typedal-3.16.5}/tests/test_config.py +0 -0
  44. {typedal-3.16.3 → typedal-3.16.5}/tests/test_docs_examples.py +0 -0
  45. {typedal-3.16.3 → typedal-3.16.5}/tests/test_helpers.py +0 -0
  46. {typedal-3.16.3 → typedal-3.16.5}/tests/test_json.py +0 -0
  47. {typedal-3.16.3 → typedal-3.16.5}/tests/test_main.py +0 -0
  48. {typedal-3.16.3 → typedal-3.16.5}/tests/test_mixins.py +0 -0
  49. {typedal-3.16.3 → typedal-3.16.5}/tests/test_mypy.py +0 -0
  50. {typedal-3.16.3 → typedal-3.16.5}/tests/test_orm.py +0 -0
  51. {typedal-3.16.3 → typedal-3.16.5}/tests/test_py4web.py +0 -0
  52. {typedal-3.16.3 → typedal-3.16.5}/tests/test_query_builder.py +0 -0
  53. {typedal-3.16.3 → typedal-3.16.5}/tests/test_relationships.py +0 -0
  54. {typedal-3.16.3 → typedal-3.16.5}/tests/test_stats.py +0 -0
  55. {typedal-3.16.3 → typedal-3.16.5}/tests/test_table.py +0 -0
  56. {typedal-3.16.3 → typedal-3.16.5}/tests/test_web2py.py +0 -0
  57. {typedal-3.16.3 → typedal-3.16.5}/tests/test_xx_others.py +0 -0
  58. {typedal-3.16.3 → typedal-3.16.5}/tests/timings.py +0 -0
@@ -2,6 +2,18 @@
2
2
 
3
3
  <!--next-version-placeholder-->
4
4
 
5
+ ## v3.16.5 (2025-09-08)
6
+
7
+ ### Fix
8
+
9
+ * Support `list["String"]` references in `.render()` ([`d3aac39`](https://github.com/trialandsuccess/TypeDAL/commit/d3aac399476916e43ed24be7326755fd88b613f0))
10
+
11
+ ## v3.16.4 (2025-09-08)
12
+
13
+ ### Fix
14
+
15
+ * Support `.render()` with list:str relationships ([`e7d6d82`](https://github.com/trialandsuccess/TypeDAL/commit/e7d6d82de82034eee882ab4bc4e1ebf8178f8639))
16
+
5
17
  ## v3.16.3 (2025-09-08)
6
18
 
7
19
  ### Fix
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TypeDAL
3
- Version: 3.16.3
3
+ Version: 3.16.5
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__ = "3.16.3"
8
+ __version__ = "3.16.5"
@@ -2054,19 +2054,41 @@ class TypedTable(_TypedTable, metaclass=TableMeta):
2054
2054
  )
2055
2055
  # else: relationship, different logic:
2056
2056
 
2057
- for relation_name in row._with:
2057
+ for relation_name in getattr(row, "_with", []):
2058
2058
  if relation := self._relationships.get(relation_name):
2059
2059
  relation_table = relation.table
2060
+ if isinstance(relation_table, str):
2061
+ relation_table = self._db[relation_table]
2060
2062
 
2061
2063
  relation_row = row[relation_name]
2062
- for fieldname in relation_row:
2063
- field = relation_table[fieldname]
2064
- row[relation_name][fieldname] = self._db.represent(
2065
- "rows_render",
2066
- field,
2067
- relation_row[field.name],
2068
- relation_row,
2069
- )
2064
+
2065
+ if isinstance(relation_row, list):
2066
+ # list of rows
2067
+ combined = []
2068
+
2069
+ for related_og in relation_row:
2070
+ related = copy.deepcopy(related_og)
2071
+ for fieldname in related:
2072
+ field = relation_table[fieldname]
2073
+ related[field.name] = self._db.represent(
2074
+ "rows_render",
2075
+ field,
2076
+ related[field.name],
2077
+ related,
2078
+ )
2079
+ combined.append(related)
2080
+
2081
+ row[relation_name] = combined
2082
+ else:
2083
+ # 1 row
2084
+ for fieldname in relation_row:
2085
+ field = relation_table[fieldname]
2086
+ row[relation_name][fieldname] = self._db.represent(
2087
+ "rows_render",
2088
+ field,
2089
+ relation_row[field.name],
2090
+ relation_row,
2091
+ )
2070
2092
 
2071
2093
  if compact and len(keys) == 1 and keys[0] != "_extra": # pragma: no cover
2072
2094
  return row[keys[0]]
@@ -240,6 +240,11 @@ def test_render():
240
240
  condition=lambda this, that: this.normal == that.also_normal,
241
241
  )
242
242
 
243
+ related_list = relationship(
244
+ list["RelatedTable"],
245
+ condition=lambda this, that: this.normal == that.also_normal,
246
+ )
247
+
243
248
  RelatedTable.insert(also_normal="123")
244
249
  RenderTable.insert(normal="123", list_field=["abc", "def"])
245
250
 
@@ -261,3 +266,24 @@ def test_render():
261
266
  assert rendered_two.normal == "123"
262
267
  assert rendered_two.list_field == "abc, def"
263
268
  assert rendered_two.related.also_normal == "321"
269
+
270
+ # test list:
271
+
272
+ rows = RenderTable.select().join("related_list").collect()
273
+
274
+ second = rows.first()
275
+
276
+ assert second.related_list
277
+
278
+ iterator = rows.render()
279
+ rendered_three = next(iterator)
280
+
281
+ assert rendered_three.normal == "123"
282
+ assert rendered_three.list_field == "abc, def"
283
+ assert rendered_three.related_list[0].also_normal == "321"
284
+
285
+ rendered_four = second.render()
286
+
287
+ assert rendered_four.normal == "123"
288
+ assert rendered_four.list_field == "abc, def"
289
+ assert rendered_four.related_list[0].also_normal == "321"
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