Releases: benavlabs/crudadmin
0.4.3
CRUDAdmin v0.4.3 - Bug Fixes and UI Improvements
🐛 Bug Fixes
🔍 Enhanced Search Functionality
- UUID Support in Search: Added support for UUID field types in search functionality (
crudadmin/admin_interface/model_view.py:963)- UUID fields are now properly handled during search operations by converting search values to strings
- Resolves search issues when working with models that use UUID primary keys or UUID fields
📝 Form Field Handling Improvements
- Empty Fields Update Fix: Fixed handling of empty/null fields during record updates (
crudadmin/admin_interface/model_view.py:1095-1108)- Added proper
field_valuesdictionary to template context to ensure form fields retain their values correctly - Prevents loss of field data when updating records with empty or null values
- Improves form state management in the admin interface
- Added proper
📱 Responsive Layout Enhancements
- Authentication Layout Responsiveness: Improved responsive behavior of authentication pages (
crudadmin/templates/base/base.html:272-278)- Added proper grid layout and overflow handling for admin main content area
- Enhanced mobile and tablet viewing experience for login/authentication forms
- Better padding and layout management across different screen sizes
🧪 Development & Testing Improvements
✅ Enhanced Test Coverage
- Event System Tests: Added comprehensive unit tests for event models module
- Core Authentication Tests: Added unit tests for core authentication functionality
- Event Integration Tests: Added integration tests for the event system
- Python 3.11 Compatibility: Updated test representations for Python 3.11 compatibility
🛠️ Development Workflow
- Pre-commit Hooks: Added pre-commit hooks configuration for code quality
- Updated Dev Dependencies: Refreshed development dependencies for better tooling
- Contribution Guidelines: Enhanced contribution documentation with clearer instructions
🔧 Technical Details
No Breaking Changes
This is a maintenance release focused on bug fixes and improvements. All existing APIs remain unchanged and fully backward compatible.
Dependencies
- No new dependencies added
- Updated development dependencies for better tooling and testing
- Maintained compatibility with all existing requirements
Python Support
- Python 3.9+ (unchanged)
- Improved Python 3.11 compatibility in test suite
- Tested across all supported Python versions
📋 Full Changelog
Fixed
- UUID field types now properly supported in search functionality
- Empty/null field handling during record updates in admin interface
- Responsive layout issues in authentication pages
- Form field value retention during updates
- Python 3.11 compatibility issues in test representations
Added
- Unit tests for event models module
- Unit tests for core authentication functionality
- Integration tests for event system
- Pre-commit hooks configuration
- Enhanced contribution guidelines
Improved
- Mobile and tablet responsiveness for admin interface
- Form state management and field value handling
- Development workflow with better tooling
- Test coverage across core modules
🚀 Upgrade Notes
This release contains only bug fixes and improvements with no breaking changes. You can safely upgrade from v0.4.2 to v0.4.3 without any code modifications.
Benefits of Upgrading
- ✅ Better search functionality with UUID support
- ✅ Improved form handling for empty/null fields
- ✅ Enhanced mobile/tablet experience
- ✅ More reliable admin interface behavior
Installation
pip install --upgrade crudadmin==0.4.3What's Changed
- add tests for the event system integration by @msamsami in #46
- Adding Pre-commit hooks by @castroofelipee in #47
- add unit tests for the core auth module by @msamsami in #48
- add unit tests for event models module by @msamsami in #49
- Adjust responsive limits in authentication layout by @castroofelipee in #51
- Empty Update fields fix by @LucasQR in #55
- Added UUID support for search by @Seleznev-nvkz in #57
- upgrade version by @igorbenav in #58
New Contributors
- @castroofelipee made their first contribution in #47
- @LucasQR made their first contribution in #55
- @Seleznev-nvkz made their first contribution in #57
Full Changelog: v0.4.2...v0.4.3
0.4.2
CRUDAdmin v0.4.2
What's Changed
- Fix(UI): correct dashboard URLs when mounted at root by @andriialbatov in #44
- change project version by @igorbenav in #45
New Contributors
- @andriialbatov made their first contribution in #44 🎉
Full Changelog: v0.4.1...v0.4.2
0.4.1
CRUDAdmin v0.4.1
Added configs to init to be able to run the shorter:
from crudadmin import RedisConfig, MemcachedConfigInstead of:
from crudadmin.session.configs import RedisConfig, MemcachedConfigWhat's Changed
- Add configs to init by @igorbenav in #43
Full Changelog: v0.4.0...v0.4.1
0.4.0
CRUDAdmin v0.4.0 - Session Configuration API Overhaul
🚨 BREAKING CHANGES - Migration Required
This release introduces a complete overhaul of the session backend configuration API, replacing the old method-based approach with a cleaner constructor-based system. All existing code using session backends will need to be updated.
⚠️ Removed Session Methods
The following session configuration methods have been removed and will cause errors if used:
# ❌ REMOVED - These methods no longer exist:
admin.use_redis_sessions(...)
admin.use_memcached_sessions(...)
admin.use_memory_sessions(...)
admin.use_database_sessions(...)
admin._recreate_session_manager()🔄 Required Migration Steps
Before (v0.3.x):
from crudadmin import CRUDAdmin
# Old method-based Redis configuration - WILL NOT WORK in v0.4.0+
admin = CRUDAdmin(
session=get_session,
SECRET_KEY="your-secret-key",
# Basic setup first
)
# ❌ Old method calls that no longer work
admin.use_redis_sessions(
host="localhost",
port=6379,
db=0,
password="mypassword",
pool_size=20,
connect_timeout=10
)
# Old Memcached method - WILL NOT WORK in v0.4.0+
admin.use_memcached_sessions(
servers=["localhost:11211"],
pool_size=10
)After (v0.4.0+):
from crudadmin import CRUDAdmin
from crudadmin.session.configs import RedisConfig, MemcachedConfig
# ✅ Method 1: Using configuration objects (recommended)
redis_config = RedisConfig(
host="localhost",
port=6379,
db=0,
password="mypassword",
pool_size=20,
connect_timeout=10
)
admin = CRUDAdmin(
session=get_session,
SECRET_KEY="your-secret-key",
session_backend="redis",
redis_config=redis_config
)
# ✅ Method 2: Using dictionary configuration
admin = CRUDAdmin(
session=get_session,
SECRET_KEY="your-secret-key",
session_backend="redis",
redis_config={
"host": "localhost",
"port": 6379,
"db": 0,
"password": "mypassword",
"pool_size": 20,
"connect_timeout": 10
}
)
# ✅ Method 3: Using Redis URL
admin = CRUDAdmin(
session=get_session,
SECRET_KEY="your-secret-key",
session_backend="redis",
redis_config={"url": "redis://:mypassword@localhost:6379/0"}
)
# ✅ New Memcached configuration
admin = CRUDAdmin(
session=get_session,
SECRET_KEY="your-secret-key",
session_backend="memcached",
memcached_config={
"servers": ["localhost:11211"],
"pool_size": 10
}
)✨ New Features
🗂️ New Configuration Module
- New module:
crudadmin.session.configswith configuration classes:RedisConfig- Redis backend configuration with URL parsing and validationMemcachedConfig- Memcached backend configuration with server list support
🔧 Constructor-Based Session Configuration
- Direct configuration: All session backends now configured directly in the constructor
- No method chaining: Eliminates timing issues and complexity from the old method-based approach
- Type safety: Full Pydantic validation for all configuration parameters
- Flexible formats: Support for configuration objects, dictionaries, and URLs
# All these formats are now supported:
admin = CRUDAdmin(
session=get_session,
SECRET_KEY="key",
session_backend="redis",
redis_config=RedisConfig(url="redis://user:pass@host:6379/1")
)
admin = CRUDAdmin(
session=get_session,
SECRET_KEY="key",
session_backend="redis",
redis_config={"host": "localhost", "port": 6379, "db": 0}
)📊 Enhanced Redis Configuration
- URL parsing: Full Redis URL support with automatic parameter extraction
- Connection validation: Pydantic validation for all Redis parameters
- Connection pooling: Proper connection pool size and timeout configuration
- ACL support: Full Redis 6.0+ ACL username/password authentication
🔗 Enhanced Memcached Configuration
- Server list support: Configure multiple Memcached servers
- Connection pooling: Configurable pool sizes for better performance
- Validation: Automatic validation of server addresses and ports
🎯 Simplified API
- No method chaining: All configuration done at construction time
- Better error handling: Configuration errors caught immediately at startup
- Cleaner code: No need for manual session manager recreation
- Documentation: Enhanced docstrings with configuration examples
🐛 Bug Fixes
🔧 API Consistency & Reliability
- Eliminated method chaining issues: No more timing problems with session backend configuration
- Removed race conditions: Session backends are now configured atomically at construction
- Better error messages: Clear validation errors when configuration is invalid
- Lazy dependency loading: Optional dependencies (redis, memcached) only loaded when needed
🧪 Test Suite Improvements
- Fixed all failing tests related to the API changes
- Updated test patterns: All tests now use new constructor-based configuration
- Better test coverage: Added tests for configuration validation and edge cases
- Maintained compatibility: All existing functionality preserved
🚀 Improvements
📚 Better Documentation
- Updated examples: All code examples use new configuration format
- Migration guide: Clear upgrade path from v0.3.x to v0.4.0
- Configuration reference: Comprehensive documentation for all config options
- Type hints: Improved type annotations throughout
🏗️ Code Organization
- Separation of concerns: Configuration logic moved to dedicated module
- Maintainability: Easier to extend with new session backends
- Validation: Centralized parameter validation with clear error messages
- Extensibility: Simple to add new configuration options
📋 Technical Details
Dependencies
- No new dependencies added
- Pydantic 2.0+ (existing requirement) used for configuration validation
- Backward compatible with existing optional dependencies (
redis,memcached)
Python Support
- Python 3.9+ (unchanged)
- Tested on Python 3.9, 3.10, 3.11, 3.12
Performance
- ✅ No performance impact - same underlying session backends
- ✅ Improved validation prevents configuration errors at startup
- ✅ Better connection pooling configuration options
🔍 Full Changelog
Added
crudadmin.session.configsmodule withRedisConfigandMemcachedConfigclassesredis_configparameter toCRUDAdminconstructormemcached_configparameter toCRUDAdminconstructor- Constructor-based session backend configuration (replaces method-based approach)
- URL parsing support for Redis connections
- Multiple server support for Memcached
- Pydantic validation for all configuration parameters
- Support for dictionary-based configuration alongside config objects
redis_pool_sizeandredis_connect_timeoutparametersmemcached_pool_sizeparameter
Changed
- BREAKING: Session backend configuration moved from methods to constructor parameters
- BREAKING: All session configuration now happens at construction time
- Enhanced constructor docstring with comprehensive configuration examples
- Improved error handling and validation for session configurations
- Better lazy loading of optional dependencies
Removed
- BREAKING:
admin.use_redis_sessions()method - BREAKING:
admin.use_memcached_sessions()method - BREAKING:
admin.use_memory_sessions()method - BREAKING:
admin.use_database_sessions()method - BREAKING:
admin._recreate_session_manager()method - Method chaining complexity and associated timing issues
Fixed
- Session backend initialization race conditions
- Method chaining timing issues that could cause configuration failures
- Test suite compatibility with new constructor-based API
- Lazy loading of optional Redis and Memcached dependencies
- Configuration validation and error messages
📖 Upgrade Guide
Quick Migration Checklist
- ✅ Remove old method calls: Delete all
admin.use_*_sessions()method calls - ✅ Add session configuration to constructor: Move session config to
CRUDAdmin()constructor - ✅ Update imports (if using config objects):
from crudadmin.session.configs import RedisConfig, MemcachedConfig
- ✅ Choose configuration format: Use config objects, dictionaries, or URLs
- ✅ Test your configuration: Validation happens immediately at startup
- ✅ Update documentation: Update any internal documentation/deployment scripts
Migration Examples
Simple Redis Migration
# Before v0.4.0
admin = CRUDAdmin(
session=get_session,
SECRET_KEY="key"
)
admin.use_redis_sessions(
host="localhost",
port=6379,
db=0
)
# After v0.4.0
admin = CRUDAdmin(
session=get_session,
SECRET_KEY="key",
session_backend="redis",
redis_config={"host": "localhost", "port": 6379, "db": 0}
)Redis with Advanced Configuration
# Before v0.4.0
admin = CRUDAdmin(
session=get_session,
SECRET_KEY="key"
)
admin.use_redis_sessions(
url="redis://user:[email protected]:6379/1",
pool_size=20,
connect_timeout=10
)
# After v0.4.0 - Option 1: Using config object
from crudadmin.session.configs import RedisConfig
redis_config = RedisConfig(
url="redis://user:[email protected]:6379/1",
pool_size=20,
connect_timeout=10
)
admin = CRUDAdmin(
session=get_...0.3.7
What's Changed
- fix uuid, add test by @igorbenav in #38
- Fix other backends by @igorbenav in #39 (thanks to @arab0v 🎉)
- change pyproject version by @igorbenav in #40
- add session backends to mkdocs.yml by @igorbenav in #41
Full Changelog: v0.3.6...v0.3.7
0.3.6
What's Changed
- fix location of icon with root mount path by @igorbenav in #35
Full Changelog: v0.3.5...v0.3.6
0.3.5
0.3.4
Using select_schema to Exclude Fields from Read Operations
Some database field types can cause issues in admin panels. The most common example is PostgreSQL's TSVector type used for full-text search, which can trigger NotImplementedError when trying to display records.
The select_schema parameter allows you to exclude problematic fields from all read operations while keeping them available for create/update operations.
Use select_schema when you encounter:
- TSVector fields causing
NotImplementedErrorin admin views - Large binary fields that slow down list views
- Computed fields that don't need to be displayed
- Sensitive fields that should be hidden from admin users
- Complex JSON fields that break admin display formatting
Basic Example: Excluding TSVector Fields
from sqlalchemy import Column, Integer, String, Text
from sqlalchemy_utils import TSVectorType
from pydantic import BaseModel
from typing import Optional
from datetime import datetime
# SQLAlchemy model with TSVector for full-text search
class Document(Base):
__tablename__ = "documents"
id = Column(Integer, primary_key=True)
title = Column(String(200), nullable=False)
content = Column(Text, nullable=False)
created_at = Column(DateTime, default=func.now())
# This field causes NotImplementedError in admin views
search_vector = Column(TSVectorType('title', 'content'))
# Schemas for create/update (no search_vector)
class DocumentCreate(BaseModel):
title: str = Field(..., min_length=1, max_length=200)
content: str = Field(..., min_length=1)
class DocumentUpdate(BaseModel):
title: Optional[str] = Field(None, min_length=1, max_length=200)
content: Optional[str] = None
# Schema for read operations (excludes problematic field)
class DocumentSelect(BaseModel):
id: int
title: str
content: str
created_at: datetime
# search_vector field intentionally excluded!
# Register with admin
admin.add_view(
model=Document,
create_schema=DocumentCreate,
update_schema=DocumentUpdate,
select_schema=DocumentSelect, # ✅ TSVector excluded from reads
allowed_actions={"view", "create", "update", "delete"}
)What's Changed
- select_schema functional by @igorbenav in #32
Full Changelog: v0.3.3...v0.3.4
0.3.3
What's Changed
- Warning gitignore by @igorbenav in #23
- fix Python 3.9 and 3.10 compatibility issues by @msamsami in #24
- add security policy guideline by @msamsami in #26
- add matrix testing for multiple Python versions in test workflow by @msamsami in #27
- track
.python-versionin Git and clarify Python version requirements in docs by @msamsami in #28 - fix minor typos in docs by @msamsami in #29
- add unit tests for event decorators by @msamsami in #30
- change version by @igorbenav in #31
New Contributors
Full Changelog: v0.3.2...v0.3.3
0.3.2
What's Changed
- add video demo to readme by @igorbenav in #19
- add video to docs by @igorbenav in #20
- bump fastcrud to fix sqlalchemy-utils by @igorbenav in #22 (thanks to @arab0v for this one 🎉)
Full Changelog: v0.3.1...v0.3.2