Documentation
Django Revolution
v1.0.13
API Reference - Django Revolution
Core Modules
django_revolution.app_config
Purpose: Core configuration management with Pydantic models.
Dependencies: pydantic
, pydantic-settings
, pathlib
Exports: ZoneConfig
, MonorepoConfig
, get_revolution_config
Used in: Django settings, zone definition, CLI configuration
django_revolution.zones
Purpose: Dynamic zone management and URL generation.
Dependencies: django.urls
, types.ModuleType
, django_revolution.app_config
Exports: DynamicZoneManager
, DynamicZoneDetector
, validate_zone_configuration
Used in: Zone URL patterns, app detection, dynamic module creation
django_revolution.openapi.generator
Purpose: OpenAPI schema and client generation.
Dependencies: @hey-api/openapi-ts
, datamodel-code-generator
, drf-spectacular
Exports: OpenAPIGenerator
, ArchiveManager
, GenerationResult
Used in: Schema generation, TypeScript/Python clients, archive management
django_revolution.drf_config
Purpose: DRF and Spectacular configuration management.
Dependencies: djangorestframework
, drf-spectacular
, pydantic
Exports: create_drf_config
, DRFConfig
, SpectacularSettings
Used in: Django settings integration, REST framework configuration
Core Functions
Zone Configuration
from django_revolution.app_config import ZoneConfig, get_revolution_config# Create zone configurationzone = ZoneConfig(apps=['accounts', 'billing'],title='Public API',description='Public endpoints',public=True,auth_required=False,version='v1')# Create Django Revolution configurationDJANGO_REVOLUTION = get_revolution_config(project_root=BASE_DIR,zones=zones,debug=DEBUG)# Get Django Revolution settingsfrom django_revolution.config import get_settingssettings = get_settings()print(settings.zones)
Multi-Monorepo Configuration
from django_revolution.app_config import MonorepoConfig, MonorepoSettings, get_revolution_config# Configure multiple monoreposmonorepo_settings = MonorepoSettings(enabled=True,configurations=[# Main frontend monorepoMonorepoConfig(name="frontend",enabled=True,path=str(BASE_DIR.parent / 'monorepo'),api_package_path='packages/api'),# Mobile app monorepoMonorepoConfig(name="mobile",enabled=True,path=str(BASE_DIR.parent / 'mobile-monorepo'),api_package_path='packages/api-client'),# Admin panel monorepoMonorepoConfig(name="admin",enabled=False, # Disabled for nowpath=str(BASE_DIR.parent / 'admin-monorepo'),api_package_path='packages/admin-api'),])# Create Django Revolution configuration with monorepoDJANGO_REVOLUTION = get_revolution_config(project_root=BASE_DIR,zones=zones,monorepo=monorepo_settings,debug=DEBUG)
Dynamic Zone Management
from django_revolution.zones import DynamicZoneManagerzone_manager = DynamicZoneManager()# Create URL configuration module in-memoryurlconf_module = zone_manager.create_dynamic_urlconf_module('public', zone_config)# Detect Django apps that belong to a zoneapps = zone_manager.detect_apps_in_zone(zone_config)# Validate zone configuration and dependenciesis_valid = zone_manager.validate_zone_configuration('public', zone_config)
OpenAPI Generation
from django_revolution.openapi.generator import OpenAPIGeneratorgenerator = OpenAPIGenerator(config)# Generate OpenAPI schemas for all zonesschemas = generator.generate_schemas()# Generate TypeScript client using @hey-api/openapi-tsts_client = generator.generate_typescript_client()# Generate Python client using datamodel-code-generatorpy_client = generator.generate_python_client()# Generate archive of all clientsarchive = generator.generate_archive()
DRF Configuration
from django_revolution.drf_config import create_drf_config# Create DRF and Spectacular configurationdrf_config = create_drf_config(title='My API',description='My awesome API',version='1.0.0',schema_path_prefix='/apix/',enable_browsable_api=False,enable_throttling=False)# Get REST framework settingsrest_framework_settings = drf_config.get_rest_framework_settings()# Get Spectacular settingsspectacular_settings = drf_config.get_spectacular_settings()# Get all Django settingsdjango_settings = drf_config.get_django_settings()
URL Integration Functions
from django_revolution.urls_integration import add_revolution_urls, get_revolution_urlpatterns, get_revolution_urls_info# Add Django Revolution URLs to your URL patternsurlpatterns = [# Your existing URLs]urlpatterns = add_revolution_urls(urlpatterns)# Get Django Revolution URL patternsurlpatterns = [# Your existing URLs*get_revolution_urlpatterns()]# Get information about generated URLsurls_info = get_revolution_urls_info()for zone, info in urls_info.items():print(f"Zone: {zone}")print(f" Schema URL: {info['schema_url']}")print(f" API URL: {info['api_url']}")
Dynamic Zone Detection
from django_revolution.zones import DynamicZoneDetectordetector = DynamicZoneDetector()# Detect apps in projectapps = detector.detect_apps()# Get URL patterns for apppatterns = detector.get_app_url_patterns('accounts')# Validate app existsexists = detector.app_exists('accounts')
Development Tools
Version Management
from scripts.version_manager import VersionManagerversion_manager = VersionManager()# Get current versionversion = version_manager.get_current_version()# Bump versionnew_version = version_manager.bump_version('patch')# Validate version consistencyis_consistent = version_manager.validate_version_consistency()# Regenerate requirementsversion_manager.regenerate_requirements()
Publisher
from scripts.publisher import main as publish# Interactive publishingexit_code = publish()
CLI Main Function
from django_revolution.cli import main# Run CLIexit_code = main()
Development CLI
from scripts.dev_cli import main as dev_cli# Run development CLIdev_cli()
Utility Functions
Auto-installation
from django_revolution.utils import auto_install_dependenciessuccess = auto_install_dependencies()if success:print("โ Dependencies installed")else:print("โ Failed to install dependencies")
Command Execution
from django_revolution.utils import run_commandsuccess, output = run_command("npm install @hey-api/openapi-ts")if success:print(f"โ Command succeeded: {output}")else:print(f"โ Command failed: {output}")
Directory Management
from django_revolution.utils import ensure_directoriesfrom pathlib import Pathsuccess = ensure_directories(Path("openapi/schemas"),Path("clients/typescript"),Path("clients/python"))
Template Rendering
from django_revolution.utils import render_templatetemplate = "Hello {{ name }}!"context = {"name": "World"}result = render_template(template, context)# Result: "Hello World!"
Validation Functions
Zone Validation
from django_revolution.zones import validate_zone_configurationis_valid = validate_zone_configuration('public', zone_config)if not is_valid:print("โ Invalid zone configuration")
Environment Validation
from django_revolution.utils import validate_environmentvalidation_result = validate_environment()if validation_result['success']:print("โ Environment is valid")else:print(f"โ Environment issues: {validation_result['errors']}")
Data Models
GenerationResult
from django_revolution.openapi.generator import GenerationResultresult = GenerationResult(success=True,schemas={'public': Path('openapi/schemas/public.yaml')},typescript_client=Path('clients/typescript/index.ts'),python_client=Path('clients/python/client.py'),archive=Path('openapi/archive/2024-01-15_10-30-00.zip'),errors=[],warnings=[])
ZoneInfo
from django_revolution.zones import ZoneInfozone_info = ZoneInfo(name='public',apps=['accounts', 'billing'],url_patterns=5,schema_patterns=3,is_valid=True,errors=[],warnings=[])
Error Handling
ErrorHandler
from django_revolution.utils import ErrorHandlererror_handler = ErrorHandler()# Handle exceptionresult = error_handler.handle_exception(exception,context="zone generation")# Validate pathis_valid = error_handler.validate_path(Path("openapi/schemas"))# Validate fileis_valid = error_handler.validate_file(Path("settings.py"))
Logging
Logger
from django_revolution.utils import Loggerlogger = Logger("my_module")logger.info("Starting generation...")logger.success("Generation completed!")logger.warning("Some warnings occurred")logger.error("Generation failed")logger.debug("Debug information")
Configuration Examples
Basic Configuration
# settings.pyfrom django_revolution.app_config import ZoneConfig, get_revolution_configzones = {'public': ZoneConfig(apps=['accounts', 'billing'],title='Public API',description='Public endpoints',public=True,auth_required=False,version='v1')}DJANGO_REVOLUTION = get_revolution_config(project_root=BASE_DIR,zones=zones,debug=DEBUG)
Advanced Configuration
# settings.pyfrom django_revolution.app_config import ZoneConfig, MonorepoConfig, get_revolution_configzones = {'public': ZoneConfig(apps=['accounts', 'billing', 'payments'],title='Public API',description='Public endpoints',public=True,auth_required=False,version='v1'),'admin': ZoneConfig(apps=['admin_panel', 'analytics'],title='Admin API',description='Administrative endpoints',public=False,auth_required=True,version='v1')}monorepo = MonorepoConfig(enabled=True,path=str(BASE_DIR.parent.parent / 'monorepo'),api_package_path='packages/api/src')DJANGO_REVOLUTION = get_revolution_config(project_root=BASE_DIR,zones=zones,monorepo=monorepo,debug=DEBUG)