d3vyce and GitHub
c256e58d64
fix: batch_merge crashes with AnnotatedJoin has no attribute _autoincrement_column on joined-table inheritance ( #345 )
2026-07-07 18:22:13 +02:00
d3vyce and GitHub
040c023b8a
feat: allow default context via FIXTURES_CONTEXT env var for fixtures load ( #343 )
2026-07-06 18:17:07 +02:00
d3vyce and GitHub
de06839a16
fix: 'Could not refresh instance' when using EventSession ( #341 )
2026-07-04 01:57:45 +02:00
d3vyce and GitHub
ff367e4281
fix: internal rollback() corrupts caller's ambient transaction and discards uncommitted work ( #339 )
2026-07-04 01:53:10 +02:00
d3vyce and GitHub
9cb4c1474f
feat: always include Context.BASE fixtures when loading/listing by context ( #337 )
2026-07-04 01:08:03 +02:00
d3vyce and GitHub
44ba5bdd4b
perf: lazy-import in CLI commands to speed up startup ( #335 )
2026-07-02 22:40:48 +02:00
d3vyce and GitHub
fe2c0f3eff
Rework fixtures module ( #333 )
...
* feat: fixture refresh DB-generated values onto returned instances
* refactor: replace utils.get_obj_by_attr/get_field_by_attr with registry.obj/field lookups
* refactor: log fixture command output instead of print
* chore: clean up fixture module
2026-07-01 19:24:00 +02:00
d3vyce and GitHub
70e0b3b9d5
chore: Database enhancement ( #329 )
2026-06-27 13:30:38 +02:00
d3vyce and GitHub
1e021005bc
fix: wait_for_row_change raises and never detects changes under REPEATABLE READ ( #327 )
2026-06-26 18:50:45 +02:00
d3vyce and GitHub
9698a0743b
chore: rework DB module ( #324 )
2026-06-25 21:11:50 +02:00
d3vyce and GitHub
49b579bcec
feat: add optional prefix parameter to create_worker_database and worker_database_url ( #306 )
2026-06-09 18:46:09 +02:00
d3vyce and GitHub
4bb4287922
fix: drop worker database with force to handle active connections ( #304 )
2026-06-09 18:34:44 +02:00
d3vyce and GitHub
3e2518b803
fix/create_worker_database connects to non-existent database on fresh setup ( #302 )
...
* fix/create_worker_database connects to non-existent database on fresh setup
* tests: add more tests for pytest module
2026-06-08 18:37:59 +02:00
d3vyce and GitHub
cd928688af
fix: pool exhaustion and lock timeout surface as 500 instead of structured 503 ( #295 )
2026-06-03 22:03:15 +02:00
d3vyce and GitHub
7f7734f0f3
feat: add advisory_lock context manager ( #283 )
2026-05-21 18:23:25 +02:00
d3vyce and GitHub
2a427a2946
feat: add NOWAIT/SKIP LOCKED row locking support and extend with_for_update to get_multi and update ( #281 )
2026-05-16 11:59:37 +02:00
d3vyce and GitHub
189e9e1a13
Version 4.0.0 ( #263 )
...
* fix: lock_tables acquires dedicated session to enforce RAII lock boundaries (#261 )
* fix: make lock_tables generic over session type (#270 )
* docs: fix zensical warnings
* Version 4.0.0
* docs: add v4 migration + fix lock_tables documentation
2026-05-08 13:04:24 +02:00
d3vyce and GitHub
99eabe3b23
feat: add security module ( #111 )
...
* feat: add security module
* feat(security): add oauth helpers
* docs: add authentication example
* fix: cleanup + simplify
* docs: update module and reference
* fix: multiple security bugs + remove example for now
* feat: use async_lru for caching
* fix: rename nonce by state_token
2026-05-08 12:50:06 +02:00
d3vyce and GitHub
dcdaab52cf
fix: KeyError on fixture load with SQLAlchemy joined-table inheritance ( #254 )
2026-04-16 20:23:37 +02:00
d3vyce and GitHub
9268b576b4
feat: add M2M helpers ( #247 )
2026-04-12 18:46:57 +02:00
d3vyce and GitHub
863e6ce6e9
feat: add get_field_by_attr fixtures helper ( #245 )
2026-04-12 17:12:08 +02:00
d3vyce and GitHub
c7397faea4
feat: auto eager-load relationships in register_fixtures ( #243 )
2026-04-12 17:04:44 +02:00
d3vyce and GitHub
2a49814818
feat: normalize enum facet values to member names and accept name strings in filter_by ( #235 )
2026-04-07 11:42:24 +02:00
d3vyce and GitHub
f8e090c7c3
ci: restrict ci.yml workflow permissions to contents: read ( #233 )
2026-04-07 10:44:59 +02:00
d3vyce and GitHub
54decaf3e1
fix: coerce plain int values to enum member when filtering on IntEnum column ( #231 )
2026-04-07 10:43:01 +02:00
d3vyce and GitHub
8bed96f4bf
fix: apply default_load_options after create() and update() to prevent MissingGreenlet on relationship access ( #229 )
2026-04-04 20:47:05 +02:00
d3vyce and GitHub
74d15e13bc
feat: support relation tuples in order_fields for cross-table sorting ( #227 )
...
* feat: support relation tuples in order_fields for cross-table sorting
* docs: update crud module
2026-04-04 17:00:14 +02:00
d3vyce and GitHub
e38d8d2d4f
feat: expose sort_columns in paginated response ( #225 )
2026-04-04 14:46:36 +02:00
d3vyce and GitHub
ab125c6ea1
docs: rework versioning to keep latest feature version per major ( #223 )
2026-04-03 11:43:36 +02:00
d3vyce and GitHub
e388e26858
fix: widen JoinType to accept aliased and polymorphic targets ( #221 )
2026-04-02 22:58:52 +02:00
d3vyce and GitHub
04da241294
fix: coerce string values to bool for Boolean facet field filtering ( #219 )
2026-04-02 22:58:07 +02:00
d3vyce and GitHub
bbe63edc46
Version 3.0.0 ( #201 )
...
* chore: remove deprecated code
* docs: update v3 migration guide
* fix: pytest warnings
* Version 3.0.0
* fix: docs workflows
2026-04-02 11:21:31 +02:00
d3vyce and GitHub
0b17c77dee
fix: deduplicate relationship joins when searchable_fields and facet_fields reference the same model ( #217 )
2026-04-02 11:09:26 +02:00
d3vyce and GitHub
32059dcb02
feat: consolidate *_params dependencies into per-paginate-style methods with feature toggles ( #209 )
2026-04-01 20:53:14 +02:00
d3vyce and GitHub
f027981e80
feat: add search_column parameter and search_columns response field for targeted search ( #207 )
2026-04-01 18:10:56 +02:00
d3vyce and GitHub
5c1487c24a
fix: suppress UPDATE callbacks for objects deleted in the same transaction ( #205 )
2026-03-31 21:40:18 +02:00
d3vyce and GitHub
ebaa61525f
fix: handle boolean and ARRAY column types in filter_by facet filtering ( #203 )
2026-03-31 21:36:54 +02:00
9ca2da4213
docs: add documentation versioning ( #125 )
...
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-30 18:55:38 +02:00
d3vyce and GitHub
0b3f097012
fix: batch insert normalizes away omitted nullable columns ( #198 )
2026-03-30 18:50:05 +02:00
d3vyce and GitHub
1890d696bf
feat: rework async event system ( #196 )
...
* feat: rework async event system
* docs: add v3 migration guide
* feat: add cache
* enhancements
2026-03-30 18:24:36 +02:00
d3vyce and GitHub
104285c6e5
Create CNAME
2026-03-29 13:57:15 +02:00
d3vyce and GitHub
f5afbbe37f
fix: snapshot nullable columns correctly in WatchedFieldsMixin callback ( #194 )
2026-03-28 18:47:06 +01:00
d3vyce and GitHub
f4698bea8a
fix: normalize batch insert rows to prevent silent data loss for nullable columns ( #192 )
2026-03-27 19:20:41 +01:00
d3vyce and GitHub
5215b921ae
fix: facet keys always use full relation chain ( #190 )
2026-03-27 18:56:58 +01:00
d3vyce and GitHub
29326ab532
perf: batch insert fixtures ( #188 )
2026-03-26 20:29:25 +01:00
d3vyce and GitHub
04afef7e33
feat(fixtures): fixtures multi-variant contexts, custom Enum support, and context-filtered loading ( #187 )
2026-03-26 20:19:41 +01:00
d3vyce and GitHub
666c621fda
fix: create_db_session commits via real transaction, not savepoint ( #184 )
2026-03-26 19:57:40 +01:00
d3vyce and GitHub
b4eb4c1ca9
fix: force auto-begin in create_db_dependency so lock_tables always uses savepoints ( #176 )
2026-03-25 19:26:28 +01:00
d3vyce and GitHub
b5e6dfe6fe
refactor: test suite cleanup and simplification ( #174 )
2026-03-24 20:38:35 +01:00
d3vyce and GitHub
6681b7ade7
fix: defer on_create/on_update/on_delete dispatch until outermost transaction commits ( #172 )
2026-03-24 19:56:03 +01:00
d3vyce and GitHub
6981c33dc8
fix: inherit @watch field filter from parent classes via MRO traversal ( #170 )
2026-03-23 19:08:17 +01:00
d3vyce and GitHub
0c7a99039c
fix: await any awaitable callback return value, not only coroutines ( #168 )
2026-03-23 18:58:48 +01:00
d3vyce and GitHub
bcb5b0bfda
fix: suppress on_create/on_delete for objects created and deleted within the same transaction ( #166 )
2026-03-23 18:51:28 +01:00
d3vyce and GitHub
db6c7a565f
feat: add offset_params, cursor_params and paginate_params FastAPI dependency factories ( #162 )
2026-03-21 16:44:11 +01:00
d3vyce and GitHub
768e405554
fix: use URL-safe base64 encoding for cursor tokens ( #160 )
2026-03-21 15:33:17 +01:00
d3vyce and GitHub
f0223ebde4
feat: add pages computed field to OffsetPagination schema ( #159 )
2026-03-21 15:24:11 +01:00
d3vyce and GitHub
f8c9bf69fe
feat: add include_total flag to offset pagination to skip COUNT query ( #158 )
2026-03-21 15:16:22 +01:00
d3vyce and GitHub
fc9cd1f034
fix: resolve MissingGreenlet error when accessing self attributes in WatchedFieldsMixin callbacks ( #154 )
2026-03-20 20:52:11 +01:00
d3vyce and GitHub
f82225f995
feat: add WatchedFieldsMixin ( #148 )
...
* feat/add WatchedFieldsMixin and watch_fields decorator for field-change monitoring
* docs: add WatchedFieldsMixin
* feat: add on_event, on_create and on_delete
* docs: update README
2026-03-19 19:19:33 +01:00
d3vyce and GitHub
2e9c6c0c90
feat: support Annotated[AsyncSession, Depends(...)] in PathDependency and BodyDependency ( #146 )
2026-03-18 20:10:58 +01:00
d3vyce and GitHub
fd7269a372
refactor: CursorDirection enum, cursor value parsing and __class_getitem__ caching ( #144 )
2026-03-15 17:48:50 +01:00
d3vyce and GitHub
c863744012
feat: PaginatedResponse[T] as discriminated union annotation ( #142 )
2026-03-15 17:41:33 +01:00
d3vyce and GitHub
aedcbf4e04
feat: add UUIDv7Mixin ( #140 )
2026-03-14 20:41:46 +01:00
d3vyce and GitHub
19c013bdec
feat: unified paginate() endpoint with typed pagination responses ( #134 )
...
* feat: unified paginate() endpoint with typed pagination responses
* docs: unified paginate() endpoint
* fix: add tests
2026-03-14 20:23:20 +01:00
d3vyce and GitHub
81407c3038
fix: use clock_timestamp() instead of now() for Mixin to ensure unique values ( #138 )
2026-03-14 17:30:11 +01:00
d3vyce and GitHub
0fb00d44da
fix: prev_cursor does not navigate backward ( #136 )
2026-03-14 17:18:53 +01:00
d3vyce and GitHub
19232d3436
feat: add AsyncCrud subclass style and base_class param to CrudFactory ( #132 )
2026-03-12 22:46:51 +01:00
d3vyce and GitHub
26d649791f
feat: auto-include primary key in CrudFactory searchable_fields ( #130 )
2026-03-12 20:21:32 +01:00
d3vyce and GitHub
e4250a9910
feat: bring first() to parity with get()/get_or_none() — add with_for_update and schema support ( #123 )
2026-03-10 19:34:18 +01:00
d3vyce and GitHub
4800941934
fix: cascade delete M2M association rows via ORM session ( #121 )
2026-03-10 19:18:16 +01:00
d3vyce and GitHub
a3245d50f0
docs: clarify metrics module usage ( #117 )
2026-03-09 17:17:11 +01:00
d3vyce and GitHub
baebf022f6
feat: move db related function from pytest to db module ( #119 )
2026-03-09 17:15:50 +01:00
d3vyce and GitHub
432e0722e0
refactor: remove deprecated parameter and function/cleanup code ( #101 )
...
* refactor: remove deprecated parameter and function
* refactor: centralize type aliases in types.py and simplify crud layer
* test: add missing tests for fixtures/utils.py
* refactor: simplify and deduplicate across crud, metrics, cli, and
exceptions
* docs: fix old Paginate references
* docs: add migration + fix icon
* docs: update README/migration to v2
2026-03-04 17:19:38 +01:00
d3vyce and GitHub
e732e54518
feat: add models module ( #109 )
...
* feat: add models module
* docs: add models module
2026-03-04 15:14:55 +01:00
d3vyce and GitHub
05b5a2c876
feat: rework Exception/ApiError ( #107 )
...
* feat: rework Exception/ApiError
* docs: update exceptions module
* fix: docstring
2026-03-02 16:34:29 +01:00
d3vyce and GitHub
4a020c56d1
feat: Raise NotFoundError instead of LookupError in wait_for_row_change ( #105 )
2026-03-02 14:28:37 +01:00
d3vyce and GitHub
a257d85d45
Add sort_params helper in CrudFactory ( #103 )
...
* feat: add sort_params helper in CrudFactory
* docs: add sorting
* fix: change sort_by to order_by
2026-03-01 11:20:43 +01:00
d3vyce and GitHub
d7ad7308c5
Add examples in documentations ( #99 )
...
* docs: fix crud
* docs: update README features
* docs: add pagination/search example
* docs: update zensical.toml
* docs: cleanup
* docs: update status to Stable + update description
* docs: add example run commands
2026-02-27 19:56:09 +01:00
d3vyce and GitHub
5a08ec2f57
feat: add faceted search in CrudFactory ( #97 )
...
* feat: add faceted search in CrudFactory
* feat: add filter_params_schema in CrudFactory
* fix: add missing Raises in build_search_filters docstring
* fix: faceted search
* fix: cov
* fix: documentation/filter_params
2026-02-26 15:23:07 +01:00
d3vyce and GitHub
7da34f33a2
fix: handle Date, Float, Numeric cursor column types in cursor_paginate ( #90 )
2026-02-23 20:58:43 +01:00
d3vyce and GitHub
c0c3b38054
fix: NameError in cli/config.py ( #88 )
2026-02-23 14:40:36 +01:00
d3vyce and GitHub
6cf7df55ef
feat: add cursor based pagination in CrudFactory ( #86 )
2026-02-23 13:51:34 +01:00
d3vyce and GitHub
7482bc5dad
feat: add schema parameter to CRUD methods for typed response serialization ( #84 )
2026-02-23 10:02:52 +01:00
d3vyce and GitHub
9d07dfea85
feat: add opt-in default_load_options parameter in CrudFactory ( #82 )
...
* feat: add opt-in default_load_options parameter in CrudFactory
* docs: add Relationship loading in CRUD
2026-02-21 12:35:15 +01:00
d3vyce and GitHub
31678935aa
Version 1.0.0 ( #80 )
...
* docs: fix typos
* chore: build docs only when release
* Version 1.0.0
2026-02-20 14:09:01 +01:00
d3vyce and GitHub
823a0b3e36
docs: add analytics ( #78 )
2026-02-19 18:05:30 +01:00
d3vyce and GitHub
6714ceeb92
chore: documentation ( #76 )
...
* chore: update docstring example to use python code block
* docs: add documentation
* feat: add docs build + fix other workdlows
* fix: add missing return type
2026-02-19 16:43:38 +01:00
d3vyce and GitHub
73fae04333
chore: cleanup before v1 ( #73 )
...
* chore: move dependencies module to the project root
* chore:update README
* chore: clean conftest
* chore: remove old code + comment
* fix: uv.lock dependencies
2026-02-19 11:49:57 +01:00
d3vyce and GitHub
32ed36e102
feat: add proper optional-dependencies for each modules ( #75 )
2026-02-19 11:08:18 +01:00
d3vyce and GitHub
d5b22a72fd
feat: add a metrics module ( #67 )
2026-02-17 13:24:53 +01:00
d3vyce and GitHub
c32f2e18be
feat: add many to many support in CrudFactory ( #65 )
2026-02-15 15:57:15 +01:00
d3vyce and GitHub
74a54b7396
feat: add optional data field in ApiError ( #63 )
2026-02-14 20:37:50 +01:00
d3vyce and GitHub
19805ab376
feat: add dependency_overrides parameter to create_async_client ( #61 )
2026-02-13 18:11:11 +01:00
d3vyce and GitHub
d4498e2063
feat: add cleanup parameter to create_db_session ( #60 )
2026-02-13 18:03:28 +01:00
d3vyce and GitHub
8825c772ce
doc: add missing docstring + add missing feature to README ( #57 )
2026-02-12 18:09:39 +01:00
d3vyce and GitHub
c8c263ca8f
fix: don't use default DB if pytest-xdist is not present ( #51 )
2026-02-11 17:07:15 +01:00
d3vyce and GitHub
1ea316bef4
feat: add wait_for_row_change db helper ( #49 )
2026-02-10 21:46:59 +01:00
d3vyce and GitHub
ced1a655f2
feat: add support for pytest-xdist ( #47 )
2026-02-10 21:29:17 +01:00
d3vyce and GitHub
290b2a06ec
feat: expose PydanticBase in fastapi_toolsets.schemas ( #44 )
2026-02-09 21:12:37 +01:00
d3vyce and GitHub
baa9711665
feat: add detail if get_obj_by_attr raise StopIteration ( #40 )
2026-02-07 17:39:07 +01:00