|
3 | 3 | 1.x Changelog |
4 | 4 | ============= |
5 | 5 |
|
| 6 | +.. changelog:: 1.9.2 |
| 7 | + :date: 2026-04-03 |
| 8 | + |
| 9 | + .. change:: InvalidRequestError when calling create_session_maker |
| 10 | + :type: bugfix |
| 11 | + :pr: 701 |
| 12 | + |
| 13 | + Fixes `sqlalchemy.exc.InvalidRequestError: No such event 'before_flush' for target 'async_sessionmaker(...)'` raised when calling `SQLAlchemyAsyncConfig.create_session_maker()` |
| 14 | + |
| 15 | + |
6 | 16 | .. changelog:: 1.9.1 |
7 | 17 | :date: 2026-03-26 |
8 | 18 |
|
9 | 19 | .. change:: add missing Any import to alembic migration templates |
10 | 20 | :type: bugfix |
11 | 21 | :pr: 697 |
12 | 22 |
|
13 | | - ## Description |
14 | 23 | The try/except ImportError fallback for optional password hashers (Argon2Hasher, PasslibHasher, PwdlibHasher) used `Any` as a type placeholder, but `Any` was never imported. This caused a NameError when running migrations without optional dependencies installed. |
15 | 24 |
|
16 | | - ## Closes |
17 | | - #691 |
18 | | - |
19 | 25 |
|
20 | 26 | .. changelog:: 1.9.0 |
21 | 27 | :date: 2026-03-24 |
|
47 | 53 | Tuple and mapping primary-key inputs are now supported for lookup and delete |
48 | 54 | operations, including MSSQL-compatible filtering for bulk operations. |
49 | 55 |
|
50 | | - Closes #189 |
51 | | - |
52 | 56 | .. change:: refactor serializers & code cleanup |
53 | 57 | :type: feature |
54 | 58 | :pr: 661 |
|
68 | 72 | ``open_fixture_async()``, expanding fixture loading beyond JSON to include |
69 | 73 | comma-separated value files. |
70 | 74 |
|
71 | | - Closes #536 |
72 | | - |
73 | 75 | .. change:: initial support for dogpile caching |
74 | 76 | :type: feature |
75 | 77 | :pr: 636 |
|
97 | 99 | in the repository and service layers with ``with_for_update`` support |
98 | 100 | for API parity with ``get()``. |
99 | 101 |
|
100 | | - Closes #488 |
101 | | - Closes #623 |
102 | | - |
103 | 102 | .. change:: add `was_attribute_set()` guard to relationship loop in `update()` |
104 | 103 | :type: bugfix |
105 | 104 | :pr: 685 |
|
110 | 109 | same ``was_attribute_set()`` guard as the column loop so only |
111 | 110 | explicitly assigned relationship values are copied during ``update()``. |
112 | 111 |
|
113 | | - Closes #684 |
114 | | - |
115 | | - |
116 | 112 | .. change:: nullable relationship detection and FileObject nested metadata |
117 | 113 | :type: bugfix |
118 | 114 | :pr: 679 |
|
123 | 119 | serializing non-string obstore metadata values before they are passed to |
124 | 120 | ``put()``. |
125 | 121 |
|
126 | | - Closes #227 |
127 | | - Closes #676 |
128 | | - |
129 | 122 | .. change:: make `model_from_dict` model parameter positional-only |
130 | 123 | :type: bugfix |
131 | 124 | :pr: 673 |
|
136 | 129 | function signature. Service-layer call sites now use the positional |
137 | 130 | form. |
138 | 131 |
|
139 | | - Closes #668 |
140 | | - |
141 | 132 | .. change:: use typing.List to avoid list() method shadowing on Python 3.14 |
142 | 133 | :type: bugfix |
143 | 134 | :pr: 674 |
|
148 | 139 | lazy annotation evaluation resolving ``list`` to the method instead of |
149 | 140 | the builtin type. |
150 | 141 |
|
151 | | - Closes #659 |
152 | | - |
153 | 142 | .. change:: isolate in-filter query params for multi-field depende… |
154 | 143 | :type: bugfix |
155 | 144 | :pr: 667 |
|
183 | 172 | dictionaries or lists of dictionaries into the appropriate related model |
184 | 173 | instances while preserving existing non-nested behavior. |
185 | 174 |
|
186 | | - Closes #556 |
187 | | - |
188 | 175 | .. change:: add click compatibility layer for CLI alias support |
189 | 176 | :type: bugfix |
190 | 177 | :pr: 645 |
|
208 | 195 | middleware records response status but skips cleanup, allowing the |
209 | 196 | generator to handle commit, rollback, and close at the correct time. |
210 | 197 |
|
211 | | - Closes #647 |
212 | | - |
213 | 198 | .. change:: complete SQLAlchemy inheritance pattern support (STI, JTI, CTI) |
214 | 199 | :type: bugfix |
215 | 200 | :pr: 611 |
|
238 | 223 | Update the codebase to align with the latest changes in Starlette, ensuring compatibility and addressing type checking issues. |
239 | 224 |
|
240 | 225 |
|
241 | | - |
242 | 226 | .. changelog:: 1.8.2 |
243 | 227 | :date: 2025-12-12 |
244 | 228 |
|
|
263 | 247 |
|
264 | 248 | Discovered a runtime issue with an inconsistent type declaration when upgrading a litestar project to use version 1.8.0 introduced |
265 | 249 |
|
| 250 | + |
266 | 251 | .. changelog:: 1.8.1 |
267 | 252 | :date: 2025-12-06 |
268 | 253 |
|
|
297 | 282 | - Before the change, passing `with_for_update` to service.update() or repository.update() only affected the post-flush session.refresh() call. The row that gets copied and mutated was always retrieved with a plain SELECT, so two concurrent writers could both read the same version |
298 | 283 | - Now the `with_for_update` flag is honored when the row is first fetched (both in the service’s item_id branch and inside SQLAlchemyAsyncRepository.get()). When you call service.update(..., with_for_update=True) (or pass the richer dict form/ForUpdateArg), the initial SELECT ... FOR UPDATE runs, so the session holds the expected lock before any field copying or merges occur. |
299 | 284 |
|
| 285 | + |
300 | 286 | .. changelog:: 1.8.0 |
301 | 287 | :date: 2025-10-28 |
302 | 288 |
|
|
356 | 342 |
|
357 | 343 | Note: Different databases use different function names (PostgreSQL: `func.random()`, MySQL: `func.rand()`, SQL Server: `func.newid()`) |
358 | 344 |
|
| 345 | + |
359 | 346 | .. changelog:: 1.7.0 |
360 | 347 | :date: 2025-10-13 |
361 | 348 |
|
|
385 | 372 | :pr: 553 |
386 | 373 | :issue: 552 |
387 | 374 |
|
388 | | - This fixes #552 by moving the guard condition up. |
| 375 | + This fixes `Still errors in SQLAlchemyRepository update method with lazy` by moving the guard condition up. |
389 | 376 |
|
390 | 377 | .. change:: prevent update() from overwriting unset fields with None (#560) |
391 | 378 | :type: bugfix |
|
466 | 453 |
|
467 | 454 | Enhance thread management in `sync_tools` to improve performance and reliability. |
468 | 455 |
|
| 456 | + |
469 | 457 | .. changelog:: 1.6.2 |
470 | 458 | :date: 2025-08-29 |
471 | 459 |
|
|
511 | 499 | - Include any custom metadata from `FileObject.metadata` |
512 | 500 | - Added proper typing for the attributes dictionary |
513 | 501 |
|
| 502 | + |
514 | 503 | .. changelog:: 1.6.1 |
515 | 504 | :date: 2025-08-26 |
516 | 505 |
|
|
638 | 627 |
|
639 | 628 | `wrap_exceptions` is now correctly passed into the exception handler context manager. |
640 | 629 |
|
641 | | - Fixes #472 |
642 | | - |
643 | | - |
644 | 630 |
|
645 | 631 | .. changelog:: 1.4.2 |
646 | 632 | :date: 2025-05-04 |
|
658 | 644 |
|
659 | 645 | BigIntPrimaryKey will now respect schema names. |
660 | 646 |
|
661 | | - Fixes #466 |
662 | | - |
663 | 647 |
|
664 | 648 | .. changelog:: 1.4.1 |
665 | 649 | :date: 2025-04-28 |
|
671 | 655 |
|
672 | 656 | Raise exception if filter operator does not exist in operators_map |
673 | 657 |
|
674 | | - Fixes #453 |
675 | | - |
676 | 658 | .. change:: `uniquify` respects init method override |
677 | 659 | :type: bugfix |
678 | 660 | :pr: 462 |
|
724 | 706 | Updates the ``litestar_service.py`` example models to correctly handle |
725 | 707 | relationship updates for ``AuthorModel`` and ``BookModel``. |
726 | 708 |
|
727 | | - Fixes #449 |
728 | | - |
729 | 709 | .. change:: `create_service_provider` supports any configuration now |
730 | 710 | :type: bugfix |
731 | 711 | :pr: 451 |
|
744 | 724 |
|
745 | 725 | This change allows for arguments to also be matched when generating a service provider closure. |
746 | 726 |
|
| 727 | + |
747 | 728 | .. changelog:: 1.3.0 |
748 | 729 | :date: 2025-04-18 |
749 | 730 |
|
|
770 | 751 |
|
771 | 752 | Removes column re-ordering component was incorrectly causing incorrect constraints to be genreated. |
772 | 753 |
|
773 | | - Fixes #427 |
774 | | - |
775 | 754 | .. change:: make `SentinelMixin` compatible with `MappedAsDataclass` |
776 | 755 | :type: bugfix |
777 | 756 | :pr: 442 |
|
823 | 802 |
|
824 | 803 | Implements new `Exists` and `NotExists` filters to more easily apply this type of logic to queries. |
825 | 804 |
|
826 | | - Closes #331 |
827 | | - |
828 | 805 | .. change:: fully migrate to `pytest-databases` |
829 | 806 | :type: feature |
830 | 807 | :pr: 430 |
|
868 | 845 |
|
869 | 846 | Improves coverage for async and sync function handling, context managers, and value management. |
870 | 847 |
|
871 | | - |
872 | | - |
873 | 848 | .. change:: remove accidental litestar import |
874 | 849 | :type: bugfix |
875 | 850 | :pr: 426 |
|
933 | 908 | - Removed deprecated methods and simplified the extension interface |
934 | 909 |
|
935 | 910 |
|
936 | | - |
937 | 911 | .. changelog:: 0.33.2 |
938 | 912 | :date: 2025-03-09 |
939 | 913 |
|
|
1017 | 991 | Extends the default `msgspec` type decoders to handle Enum types by converting them to their underlying value during serialization |
1018 | 992 |
|
1019 | 993 |
|
1020 | | - |
1021 | 994 | .. changelog:: 0.31.0 |
1022 | 995 | :date: 2025-02-18 |
1023 | 996 |
|
|
1070 | 1043 | :issue: 356 |
1071 | 1044 |
|
1072 | 1045 | When `wrap_exceptions` is `False`, the original SQLAlchemy error message will be raised instead of the wrapped Repository error |
1073 | | - |
1074 | | - Fixes #356 (Bug: `wrap_sqlalchemy_exception` masks db errors) |
| 1046 | + (Bug: `wrap_sqlalchemy_exception` masks db errors) |
1075 | 1047 |
|
1076 | 1048 | .. change:: simplify configuration hash |
1077 | 1049 | :type: feature |
|
1200 | 1172 | Last, but not least, there's an experimental async portal that integrates a long running asyncio loop for running async operations in Flask. Using `foo = portal.call(<async function>)` you can get the result of an asynchronous function from a sync context. |
1201 | 1173 |
|
1202 | 1174 |
|
1203 | | - |
1204 | 1175 | .. changelog:: 0.28.0 |
1205 | 1176 | :date: 2025-01-13 |
1206 | 1177 |
|
|
1226 | 1197 | .. changelog:: 0.27.0 |
1227 | 1198 | :date: 2025-01-11 |
1228 | 1199 |
|
1229 | | - |
1230 | 1200 | .. change:: add `error_messages` as class level configuration |
1231 | 1201 | :type: feature |
1232 | 1202 | :pr: 315 |
|
1246 | 1216 | Addition typing utilities to help with type checking and validation. |
1247 | 1217 |
|
1248 | 1218 |
|
1249 | | - |
1250 | 1219 | .. changelog:: 0.26.0 |
1251 | 1220 | :date: 2025-01-11 |
1252 | 1221 |
|
|
1267 | 1236 | - The SQLAlchemyDTOConfig's `exclude`, `include`, and `rename_fields` fields will now accept string or `InstrumentedAttributes` |
1268 | 1237 | - DTO supports `WriteOnlyMapped` and `DynamicMapped` |
1269 | 1238 |
|
1270 | | - |
1271 | 1239 | .. change:: add default exception handler for `litestar` integration |
1272 | 1240 | :type: feature |
1273 | 1241 | :pr: 308 |
|
1307 | 1275 |
|
1308 | 1276 | Removes the use of lambda statements in the repository and service classes. This has no change on the end user API, however, it should remove strange queries errors seen. |
1309 | 1277 |
|
| 1278 | + |
1310 | 1279 | .. changelog:: 0.23.0 |
1311 | 1280 | :date: 2025-01-11 |
1312 | 1281 |
|
|
1362 | 1331 |
|
1363 | 1332 | instead, this looks at the sessionmaker `class_` property for adding the sanic dependency |
1364 | 1333 |
|
1365 | | - |
1366 | 1334 | .. change:: correct regex mappings for duplicate and foreign key errors |
1367 | 1335 | :type: bugfix |
1368 | 1336 | :pr: 266 |
|
1386 | 1354 | :pr: 52 |
1387 | 1355 | :issue: 51 |
1388 | 1356 |
|
1389 | | - Fixes #51 |
1390 | | - |
1391 | 1357 | Bug: CollectionFilter returns all entries if values is empty |
1392 | 1358 |
|
1393 | 1359 | a simple `1=-1` is appended into the `where` clause when an empty list is passed into the `in` statement. |
|
0 commit comments