Releases: redis/redis-om-python
Version 1.0.6
What's Changed
In 1.0.6:
- Fix pyright type resolution for Pipeline parameter by @abrookins in #802
- Fix packaging bug: include generated sync code in wheel (v1.0.6) by @abrookins in #803
Overview for 1.0
This is the first stable release of Redis OM Python. After 9 months of beta testing and 60+ merged PRs, Redis OM Python is now production-ready.
Highlights
- Full Pydantic 2.0 Support - Complete migration from Pydantic v1, with fixes for 2.12+ compatibility
- Python 3.10-3.14 Support - Dropped Python 3.8/3.9, added support up to Python 3.14
- Redis 8 Compatibility - Tested with Redis 8.4
- New Query Features - Geo filtering, datetime queries, field projection with
.values()and.only() - Hash Field Expiration - Per-field TTL support for Redis 7.4+
- Conditional Persistence -
save(nx=True)andsave(xx=True)for atomic create/update - RedisVL Integration - New helpers (
to_redisvl_schema(),get_redisvl_index()) for using Redis OM with RedisVL for advanced vector search - UV Package Management - Switched from Poetry to UV for faster dependency resolution
Breaking Changes
- Python 3.8 and 3.9 dropped - Minimum Python version is now 3.10
- Pydantic 2.0 required - Pydantic 1.x is no longer supported
- Explicit indexing required - Models must use
index=Trueclass parameter (e.g.,class MyModel(JsonModel, index=True)) - Datetime fields stored as NUMERIC - Previously stored as TAG; requires data migration via
om migrate-data
New Features
Query Enhancements
- Geo Filtering - Query by geographic radius using
pydantic-extra-typesCoordinatetype (#704) - Datetime Field Queries - Filter by datetime fields with proper NUMERIC indexing (#711)
- Field Projection -
.values()returns dicts,.only()returns partial model instances (#633) - Custom TAG Separators -
Field(separator=",")for TAG fields (#800)
Persistence
- Conditional Save -
save(nx=True)only saves if key doesn't exist,save(xx=True)only updates existing (#746) - Hash Field Expiration -
Field(expire=N),model.expire_field(),model.field_ttl(),model.persist_field()for Redis 7.4+ (#752)
Developer Experience
- py.typed Marker - Full mypy/pyright support with PEP 561 marker (#771)
- mypy
__all__exports -from aredis_om import ...now passesmypy --strict(#770) - Custom Primary Keys - Documentation for UUID v7 and custom PK generators (#795)
- EmbeddedJsonModel - No longer generates unnecessary primary keys (#797)
- Data Migrations System - New
om migrate-dataCLI for data transformations (#711)
Bug Fixes
Pydantic 2.0 Migration (#691)
- Fix aliases breaking queries
- Fix default values not working with multiple inheritance levels
- Fix
model_fields_setinaccuracy withexclude_unset=True - Fix
contextobject being set toNoneduring validation - Fix
KNNExpressionexpecting removedModelFieldtype - Fix unintentional indexing of inherited fields
Query Fixes
- Fix Enum with int values producing wrong query syntax (#108 via #792)
- Fix IN operator not working for NUMERIC fields (#499 via #792)
- Fix OR expression with KNN producing syntax error (#787)
- Fix incorrect query prefixing for embedded models in query construction (#657)
Model Fixes
- Fix Optional field retrieval breaking HashModel - empty strings now convert back to
None(#254 via #792) - Fix inconsistent
.pkbehavior with custom primary keys (#784) - Fix HashModel list validation blocking vector fields -
list[float]now allowed for vector fields (#785) - Fix bytes fields failing with UnicodeDecodeError - now uses base64 encoding (#783)
- Fix EmbeddedJsonModel generating unnecessary primary keys (#797)
- Fix TAG field separator not being honored (#800)
Compatibility Fixes
- Fix Pydantic 2.12+ compatibility for custom FieldInfo with Annotated types (#727)
- Fix Python 3.14 dict iteration error in JsonModel (#764)
- Fix Python 3.13
issubclasschanges with nested vector fields (#699) - Fix
has_redisearchmissing await (#771) - Fix Pydantic V3 deprecation warning for
model_fieldsaccess (#770) - Fix cast from db connections with non-decoded output (#664)
CLI & Infrastructure
- Fix CLI
import_submodulesto work with pyenv (#788)
Infrastructure
- Switched from Poetry to UV for dependency management (#781)
- Updated documentation to Material for MkDocs theme (#778)
- Added benchmark test suite with regression detection (#798, #799)
- Tested with Redis 8.4 (#768)
- Updated PyPI classifier to "Production/Stable" (#769)
- Added comprehensive example apps (FastAPI async, Flask sync) (#781)
Contributors
Thank you to all contributors across the beta releases:
@sethbuff, @ivanbelenky, @slorello89, @bsbodden, @AlboCode, @sav-norem, @bonastreyair, @huwaizatahir2, and the Redis team
Full Changelog: v0.3.5...v1.0.6
Version 1.0.5 (yanked)
This build was yanked because it did not include generated sync Python files, only async.
See notes for version 1.0.6!
Version 1.0.4-beta
What's Changed
- Bump rojopolis/spellcheck-github-actions from 0.44.0 to 0.48.0 by @dependabot in #695
- Bump codecov/codecov-action from 4 to 5 by @dependabot in #670
- docs: Update CONTRIBUTING.md by @bsbodden in #705
- added return_fields function, attempting to optionally limit fields r… by @sav-norem in #633
- Bump rojopolis/spellcheck-github-actions from 0.48.0 to 0.52.0 by @dependabot in #716
- Bump actions/setup-python from 5 to 6 by @dependabot in #715
- Add support for querying datetime fields by @abrookins in #711
- Fix Pydantic 2.12+ compatibility for custom FieldInfo with Annotated types by @abrookins in #727
- Bump rojopolis/spellcheck-github-actions from 0.52.0 to 0.55.0 by @dependabot in #724
- Add support to python-ulid 3.1.0 by @AlboCode in #720
- Bump github/codeql-action from 3 to 4 by @dependabot in #719
- Bump actions/checkout from 4 to 5 by @dependabot in #708
- Fix broken redis.io documentation URLs by @abrookins in #745
- Include redis_om package for Poetry 2.0+ compatibility by @abrookins in #740
- Include Python version in CI cache key by @abrookins in #748
- Update redis dependency version in pyproject.toml to <8.0.0 by @bonastreyair in #747
- Add nx and xx flags to save() for conditional persistence by @abrookins in #746
- Drop Python 3.8 and 3.9 support by @abrookins in #749
- Add hash field expiration support for Redis 7.4+ by @abrookins in #752
- Fix Python 3.14 dict iteration error in JsonModel by @abrookins in #764
New Contributors
Full Changelog: v1.0.3-beta...v1.0.4-beta
Version 1.0.3-beta
What's Changed
- Migrate pyproject to use newer syntax for poetry groups by @emmanuel-ferdman in #697
- Update redis requirement from >=3.5.3,<6.0.0 to >=3.5.3,<7.0.0 by @dependabot[bot] in #701
- Add Geo Filtering by @sethbuff in #704
New Contributors
- @emmanuel-ferdman made their first contribution in #697
Full Changelog: v1.0.2-beta...v1.0.3-beta
Version 1.0.2-beta
What's Changed
Full Changelog: v1.0.1-beta...v1.0.2-beta
Version 1.0.1-beta
What's Changed
Full Changelog: v1.0.0-beta...v1.0.1-beta
What's Changed
Full Changelog: v1.0.0-beta...v1.0.1-beta
Version 1.0.0-beta
What's Changed
- handle default issue with multiple inheritance by @sethbuff in #687
- fix: cast from db connections with non decoded output by @ivanbelenky in #664
- FIELDENG-593 Adding EntraID explainer to README by @slorello89 in #688
- Full Pydantic 2.0 Support + Bug Fixes by @sethbuff in #691
New Contributors
- @sethbuff made their first contribution in #687
- @ivanbelenky made their first contribution in #664
Full Changelog: v0.3.4...v1.0.0-beta
Version 0.3.5
🐛 Bug Fixes
- handle default issue with multiple inheritance (#687)
Contributors
We'd like to thank all the contributors who worked on this release!
@sethbuff and @slorello89
Version 0.3.4
Version 0.3.3
Changes
🐛 Bug Fixes
- fixing broken Pydantic v1 regression (#663)
🧰 Maintenance
- revving 0.3.3 (#667)
- Update pytest-asyncio requirement from ^0.23.5 to ^0.24.0 (#651)
- Update setuptools requirement from >=70.0,<73.0 to >=70.0,<76.0 (#655)
- Bump rojopolis/spellcheck-github-actions from 0.40.0 to 0.44.0 (#665)
Contributors
We'd like to thank all the contributors who worked on this release!
@dependabot, @dependabot[bot] and @slorello89