Core Principles
Fat Models, Thin Views
Ralph’s architecture emphasizes business logic in Django models:- Models contain operational logic and data validation
- Django Admin generates user interfaces automatically
- Views primarily handle request/response without complex business logic
Modular Design
Ralph is organized into self-contained Django apps, each responsible for a specific domain:Technology Stack
Backend Framework
Django 4.2 - The foundation- Python 3.10 required (
>=3.10.0, <3.11) - Django ORM for database abstraction
- Django Admin for UI generation
- Django REST Framework (3.15.0) for API
Key Dependencies
Frompyproject.toml:
Frontend Stack
- Node.js (v8.10.0 - v11.7.0)
- npm for dependency management
- Gulp for asset compilation
- Custom JavaScript for admin enhancements
Infrastructure Services
- MySQL 5.7 or PostgreSQL 14+ - Primary database
- Redis 4.0+ - Caching and job queues
- inkpy - Custom background job processor
Model Architecture
BaseObject Pattern
Most Ralph models inherit fromBaseObject, which provides common functionality:
src/ralph/assets/models/base.py
Key Mixins
| Mixin | Purpose | Provides |
|---|---|---|
Polymorphic | Model inheritance | Content type tracking, polymorphic queries |
TaggableMixin | Tagging support | Tag field and manager |
PermByFieldMixin | Field-level permissions | Granular access control |
TimeStampMixin | Automatic timestamps | created, modified fields |
WithCustomFieldsMixin | Custom fields | User-defined fields per model |
TransitionWorkflowBase | State machines | Workflow transitions |
Polymorphic Models
Ralph uses polymorphic inheritance for asset types:- Unified queries across asset types
- Type-specific fields and methods
- Shared relationships (e.g., licenses, supports)
Module Structure
Each Django app follows a consistent structure:API Architecture
Django REST Framework
Ralph exposes a comprehensive REST API:Nested Routers
Related resources use nested routing:Workflow System
Transitions
Ralph implements state machine workflows for asset lifecycle:- Custom validation
- Dynamic forms
- Audit logging
- Email notifications
Data Import/Export
Import Engine
Thedata_importer module provides:
- CSV/Excel file parsing
- Field mapping
- Validation and error reporting
- Bulk create/update operations
Export Formats
Usingdjango-import-export:
- CSV
- Excel (XLSX)
- ODF (Open Document Format)
- JSON
- XML
Permission System
Field-Level Permissions
Ralph supports granular permissions:Permission Mixins
PermissionsForObjectMixin- Object-level API permissionsPermByFieldMixin- Field-level read/write control
Background Jobs
Django RQ
Ralph uses Redis Queue for asynchronous tasks:inkpy Service
Theinkpy container runs background workers:
- Network discovery jobs
- Report generation
- Data synchronization
- Email notifications
Configuration Management
Settings Structure
Environment-Based Configuration
Settings support environment variables:src/ralph/settings/local.template
Main Application Modules
Assets Module
Manages physical and virtual assets:- Asset lifecycle tracking
- Component management
- Purchase orders
- Depreciation calculations
- Asset assignment to users
Data Center Module
Data center infrastructure management:- Racks and rack units
- Network devices
- Servers and hardware
- Power and network connections
- DC visualization
Networks Module
IP address and network management:- IP address allocation
- Network ranges
- DNS records
- DHCP configuration
Licenses Module
Software and hardware license tracking:- License assignment
- Expiration monitoring
- Compliance reporting
Database Design
Supported Databases
- MySQL 5.7 - Default, widely tested
- PostgreSQL 14+ - Alternative, full feature support
Character Sets
MySQL configuration requires UTF-8:Migrations
Django migrations are stored per-app:Testing Architecture
Test Organization
Tests are organized by module:Test Dependencies
Frompyproject.toml:
Running Tests
Development Tools
Debugging
Development dependencies include:- django-debug-toolbar - SQL query analysis
- django-silk - Performance profiling
- ipdb - Interactive debugger
- ipython - Enhanced Python shell
Code Quality
- ruff - Fast Python linter (replaces flake8)
- toml-sort - TOML file formatting
Extension Points
Custom Fields
Add user-defined fields to any model:Hooks System
Extend functionality using Django signals:Admin Customization
Extend Django admin:Performance Considerations
Caching Strategy
- Redis for session storage
- Query result caching for expensive operations
- Static file caching via nginx
Query Optimization
- Use
select_related()for foreign keys - Use
prefetch_related()for many-to-many - Index frequently queried fields
Database Connection Pooling
PostgreSQL uses connection pooling:Next Steps
Setup Guide
Set up your development environment
API Reference
Explore the REST API
Contributing
Learn how to contribute
Custom Fields
Extend models with custom fields