TypeDAL 3.15.2__tar.gz → 3.15.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.

Potentially problematic release.


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

Files changed (58) hide show
  1. {typedal-3.15.2 → typedal-3.15.4}/CHANGELOG.md +12 -0
  2. {typedal-3.15.2 → typedal-3.15.4}/PKG-INFO +1 -1
  3. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/__about__.py +1 -1
  4. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/core.py +12 -1
  5. {typedal-3.15.2 → typedal-3.15.4}/tests/test_relationships.py +6 -0
  6. {typedal-3.15.2 → typedal-3.15.4}/tests/test_row.py +2 -0
  7. {typedal-3.15.2 → typedal-3.15.4}/.github/workflows/su6.yml +0 -0
  8. {typedal-3.15.2 → typedal-3.15.4}/.gitignore +0 -0
  9. {typedal-3.15.2 → typedal-3.15.4}/.readthedocs.yml +0 -0
  10. {typedal-3.15.2 → typedal-3.15.4}/README.md +0 -0
  11. {typedal-3.15.2 → typedal-3.15.4}/coverage.svg +0 -0
  12. {typedal-3.15.2 → typedal-3.15.4}/docs/1_getting_started.md +0 -0
  13. {typedal-3.15.2 → typedal-3.15.4}/docs/2_defining_tables.md +0 -0
  14. {typedal-3.15.2 → typedal-3.15.4}/docs/3_building_queries.md +0 -0
  15. {typedal-3.15.2 → typedal-3.15.4}/docs/4_relationships.md +0 -0
  16. {typedal-3.15.2 → typedal-3.15.4}/docs/5_py4web.md +0 -0
  17. {typedal-3.15.2 → typedal-3.15.4}/docs/6_migrations.md +0 -0
  18. {typedal-3.15.2 → typedal-3.15.4}/docs/7_mixins.md +0 -0
  19. {typedal-3.15.2 → typedal-3.15.4}/docs/css/code_blocks.css +0 -0
  20. {typedal-3.15.2 → typedal-3.15.4}/docs/index.md +0 -0
  21. {typedal-3.15.2 → typedal-3.15.4}/docs/requirements.txt +0 -0
  22. {typedal-3.15.2 → typedal-3.15.4}/example_new.py +0 -0
  23. {typedal-3.15.2 → typedal-3.15.4}/example_old.py +0 -0
  24. {typedal-3.15.2 → typedal-3.15.4}/mkdocs.yml +0 -0
  25. {typedal-3.15.2 → typedal-3.15.4}/pyproject.toml +0 -0
  26. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/__init__.py +0 -0
  27. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/caching.py +0 -0
  28. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/cli.py +0 -0
  29. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/config.py +0 -0
  30. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/fields.py +0 -0
  31. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/for_py4web.py +0 -0
  32. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/for_web2py.py +0 -0
  33. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/helpers.py +0 -0
  34. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/mixins.py +0 -0
  35. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/py.typed +0 -0
  36. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/serializers/as_json.py +0 -0
  37. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/types.py +0 -0
  38. {typedal-3.15.2 → typedal-3.15.4}/src/typedal/web2py_py4web_shared.py +0 -0
  39. {typedal-3.15.2 → typedal-3.15.4}/tests/__init__.py +0 -0
  40. {typedal-3.15.2 → typedal-3.15.4}/tests/configs/simple.toml +0 -0
  41. {typedal-3.15.2 → typedal-3.15.4}/tests/configs/valid.env +0 -0
  42. {typedal-3.15.2 → typedal-3.15.4}/tests/configs/valid.toml +0 -0
  43. {typedal-3.15.2 → typedal-3.15.4}/tests/test_cli.py +0 -0
  44. {typedal-3.15.2 → typedal-3.15.4}/tests/test_config.py +0 -0
  45. {typedal-3.15.2 → typedal-3.15.4}/tests/test_docs_examples.py +0 -0
  46. {typedal-3.15.2 → typedal-3.15.4}/tests/test_helpers.py +0 -0
  47. {typedal-3.15.2 → typedal-3.15.4}/tests/test_json.py +0 -0
  48. {typedal-3.15.2 → typedal-3.15.4}/tests/test_main.py +0 -0
  49. {typedal-3.15.2 → typedal-3.15.4}/tests/test_mixins.py +0 -0
  50. {typedal-3.15.2 → typedal-3.15.4}/tests/test_mypy.py +0 -0
  51. {typedal-3.15.2 → typedal-3.15.4}/tests/test_orm.py +0 -0
  52. {typedal-3.15.2 → typedal-3.15.4}/tests/test_py4web.py +0 -0
  53. {typedal-3.15.2 → typedal-3.15.4}/tests/test_query_builder.py +0 -0
  54. {typedal-3.15.2 → typedal-3.15.4}/tests/test_stats.py +0 -0
  55. {typedal-3.15.2 → typedal-3.15.4}/tests/test_table.py +0 -0
  56. {typedal-3.15.2 → typedal-3.15.4}/tests/test_web2py.py +0 -0
  57. {typedal-3.15.2 → typedal-3.15.4}/tests/test_xx_others.py +0 -0
  58. {typedal-3.15.2 → typedal-3.15.4}/tests/timings.py +0 -0
@@ -2,6 +2,18 @@
2
2
 
3
3
  <!--next-version-placeholder-->
4
4
 
5
+ ## v3.15.4 (2025-08-01)
6
+
7
+ ### Fix
8
+
9
+ * Support `.as_dict(Field)` in addtion to just `.as_dict('field')` ([`3951cba`](https://github.com/trialandsuccess/TypeDAL/commit/3951cba06cbaba25137301571490a7149232e385))
10
+
11
+ ## v3.15.3 (2025-07-25)
12
+
13
+ ### Fix
14
+
15
+ * Support `dict(row)` via `row.keys()`, also returning relationships ([`99fc2ef`](https://github.com/trialandsuccess/TypeDAL/commit/99fc2ef7b398947efae64f9be34770828a8d1730))
16
+
5
17
  ## v3.15.2 (2025-07-24)
6
18
 
7
19
  ### Fix
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TypeDAL
3
- Version: 3.15.2
3
+ Version: 3.15.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__ = "3.15.2"
8
+ __version__ = "3.15.4"
@@ -1697,6 +1697,14 @@ class TypedTable(_TypedTable, metaclass=TableMeta):
1697
1697
 
1698
1698
  raise AttributeError(item)
1699
1699
 
1700
+ def keys(self):
1701
+ """
1702
+ Return the combination of row + relationship keys.
1703
+
1704
+ Used by dict(row).
1705
+ """
1706
+ return list(self._row.keys()) + getattr(self, "_with", [])
1707
+
1700
1708
  def get(self, item: str, default: Any = None) -> Any:
1701
1709
  """
1702
1710
  Try to get a column from this instance, else return default.
@@ -2145,7 +2153,7 @@ class TypedRows(typing.Collection[T_MetaInstance], Rows):
2145
2153
 
2146
2154
  def as_dict(
2147
2155
  self,
2148
- key: str = None,
2156
+ key: str | Field = None,
2149
2157
  compact: bool = False,
2150
2158
  storage_to_dict: bool = False,
2151
2159
  datetime_to_str: bool = False,
@@ -2156,6 +2164,9 @@ class TypedRows(typing.Collection[T_MetaInstance], Rows):
2156
2164
  """
2157
2165
  if any([key, compact, storage_to_dict, datetime_to_str, custom_types]):
2158
2166
  # functionality not guaranteed
2167
+ if isinstance(key, Field):
2168
+ key = key.name
2169
+
2159
2170
  return typing.cast(
2160
2171
  dict[int, AnyDict],
2161
2172
  super().as_dict(
@@ -293,6 +293,12 @@ def test_typedal_way():
293
293
 
294
294
  assert len(role_writer.users) == 2
295
295
 
296
+ author1 = User.where(id=4).join().first()
297
+
298
+ assert (
299
+ len(author1.as_dict()["articles"]) == len(author1.__dict__["articles"]) == len(dict(author1)["articles"]) == 2
300
+ )
301
+
296
302
 
297
303
  def test_reprs():
298
304
  _setup_data()
@@ -137,6 +137,8 @@ def test_rows():
137
137
 
138
138
  assert new_rows.as_dict(storage_to_dict=True)
139
139
 
140
+ assert new_rows.as_dict("int_field")[1] == new_rows.as_dict(NewStyleClass.int_field)[1]
141
+
140
142
  assert old_rows.as_json() == new_rows.as_json() == new_rows.json() == old_rows.json()
141
143
 
142
144
  assert old_rows.as_list()[0]["string_field"] == new_rows.as_list()[0]["string_field"]
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