django-cfg 1.2.17__tar.gz → 1.2.18__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django_cfg-1.2.17 → django_cfg-1.2.18}/PKG-INFO +52 -1
- {django_cfg-1.2.17 → django_cfg-1.2.18}/README.md +51 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/pyproject.toml +1 -1
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/__init__.py +1 -1
- django_cfg-1.2.18/src/django_cfg/apps/accounts/models/__init__.py +68 -0
- django_cfg-1.2.18/src/django_cfg/apps/accounts/models/activity.py +34 -0
- django_cfg-1.2.18/src/django_cfg/apps/accounts/models/auth.py +50 -0
- django_cfg-1.2.18/src/django_cfg/apps/accounts/models/base.py +8 -0
- django_cfg-1.2.18/src/django_cfg/apps/accounts/models/choices.py +32 -0
- django_cfg-1.2.18/src/django_cfg/apps/accounts/models/integrations.py +75 -0
- django_cfg-1.2.18/src/django_cfg/apps/accounts/models/registration.py +52 -0
- django_cfg-1.2.18/src/django_cfg/apps/accounts/models/user.py +80 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/__init__.py +56 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/admin/__init__.py +17 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/admin/api_key_admin.py +185 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/admin/log_admin.py +156 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/admin/scheduled_admin.py +390 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/admin/site_admin.py +448 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/apps.py +18 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/management/commands/maintenance.py +261 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/management/commands/process_scheduled_maintenance.py +241 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/management/commands/sync_cloudflare.py +209 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/managers/__init__.py +15 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/managers/cloudflare_site_manager.py +192 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/managers/maintenance_log_manager.py +151 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/migrations/0001_initial.py +379 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/migrations/0002_cloudflaresite_maintenance_url.py +21 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/models/__init__.py +29 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/models/cloudflare_api_key.py +109 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/models/cloudflare_site.py +125 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/models/maintenance_log.py +131 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/models/scheduled_maintenance.py +307 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/services/__init__.py +42 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/services/bulk_operations_service.py +400 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/services/maintenance_service.py +230 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/services/scheduled_maintenance_service.py +381 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/services/site_sync_service.py +390 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/utils/__init__.py +12 -0
- django_cfg-1.2.18/src/django_cfg/apps/maintenance/utils/retry_utils.py +109 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/config.py +3 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/core/config.py +4 -6
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/dashboard.py +4 -5
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/README.md +0 -305
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/__init__.py +0 -27
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/admin/__init__.py +0 -28
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/admin/deployments_admin.py +0 -251
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/admin/events_admin.py +0 -374
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/admin/monitoring_admin.py +0 -215
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/admin/sites_admin.py +0 -464
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/apps.py +0 -105
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/management/commands/maintenance.py +0 -375
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/management/commands/sync_cloudflare.py +0 -168
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/managers/__init__.py +0 -20
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/managers/deployments.py +0 -287
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/managers/events.py +0 -374
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/managers/monitoring.py +0 -301
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/managers/sites.py +0 -335
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/migrations/0001_initial.py +0 -939
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/models/__init__.py +0 -27
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/models/cloudflare.py +0 -316
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/models/maintenance.py +0 -334
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/models/monitoring.py +0 -393
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/models/sites.py +0 -419
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/serializers/__init__.py +0 -60
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/serializers/actions.py +0 -310
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/serializers/base.py +0 -44
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/serializers/deployments.py +0 -209
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/serializers/events.py +0 -210
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/serializers/monitoring.py +0 -278
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/serializers/sites.py +0 -213
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/README.md +0 -168
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/__init__.py +0 -21
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/cloudflare_client.py +0 -441
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/dns_manager.py +0 -497
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/maintenance_manager.py +0 -504
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/site_sync.py +0 -448
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/sync_command_service.py +0 -330
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/worker_manager.py +0 -264
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/signals.py +0 -38
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/urls.py +0 -36
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/views/__init__.py +0 -18
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/views/base.py +0 -61
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/views/deployments.py +0 -175
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/views/events.py +0 -204
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/views/monitoring.py +0 -213
- django_cfg-1.2.17/src/django_cfg/apps/maintenance/views/sites.py +0 -338
- django_cfg-1.2.17/src/django_cfg/models/cloudflare.py +0 -316
- {django_cfg-1.2.17 → django_cfg-1.2.18}/.gitignore +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/LICENSE +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/MANIFEST.in +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/requirements-dev.txt +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/requirements-test.txt +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/requirements.txt +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/__init__.py +0 -0
- /django_cfg-1.2.17/src/django_cfg/apps/accounts/models.py → /django_cfg-1.2.18/src/django_cfg/apps/accounts/__models.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/admin/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/admin/activity.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/admin/filters.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/admin/group.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/admin/inlines.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/admin/otp.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/admin/registration_source.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/admin/resources.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/admin/twilio_response.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/admin/user.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/apps.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/management/commands/test_otp.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/managers/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/managers/user_manager.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/migrations/0001_initial.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/migrations/0002_add_phone_otp_clean.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/migrations/0003_twilioresponse.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/migrations/0004_delete_twilioresponse.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/migrations/0005_twilioresponse.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/migrations/0006_remove_twilioresponse_otp_secret_and_more.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/migrations/0007_twilioresponse.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/migrations/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/serializers/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/serializers/otp.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/serializers/profile.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/serializers/webhook.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/services/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/services/activity_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/services/otp_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/signals.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/templates/emails/base_email.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/templates/emails/base_email.txt +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/templates/emails/otp_email.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/templates/emails/otp_email.txt +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/templates/emails/welcome_email.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/templates/emails/welcome_email.txt +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/urls.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/utils/auth_email_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/utils/notifications.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/views/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/views/otp.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/views/profile.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/accounts/views/webhook.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/admin/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/admin/execution_admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/admin/registry_admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/admin/toolsets_admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/apps.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/core/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/core/agent.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/core/dependencies.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/core/exceptions.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/core/models.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/core/orchestrator.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/examples/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/examples/simple_example.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/integration/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/integration/middleware.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/integration/registry.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/integration/signals.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/management/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/management/commands/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/management/commands/create_agent.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/management/commands/orchestrator_status.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/managers/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/managers/execution.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/managers/registry.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/managers/toolsets.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/migrations/0001_initial.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/migrations/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/models/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/models/execution.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/models/registry.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/models/toolsets.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/patterns/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/patterns/content_agents.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/toolsets/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/toolsets/cache_toolset.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/toolsets/django_toolset.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/toolsets/file_toolset.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/toolsets/orm_toolset.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/agents/urls.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/api/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/api/commands/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/api/commands/urls.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/api/commands/views.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/api/health/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/api/health/urls.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/api/health/views.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/admin/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/admin/archive_admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/admin/chat_admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/admin/document_admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/admin/external_data_admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/apps.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/config/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/config/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/config/constance_fields.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/config/constance_settings.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/config/settings.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/examples/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/examples/external_data_usage.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/management/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/management/commands/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/management/commands/knowbase_stats.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/management/commands/setup_knowbase.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/managers/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/managers/archive.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/managers/base.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/managers/chat.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/managers/document.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/managers/external_data.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/migrations/0001_initial.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/migrations/0002_archiveitem_archiveitemchunk_documentarchive_and_more.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/migrations/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/mixins/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/mixins/config.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/mixins/creator.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/mixins/examples/vehicle_model_example.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/mixins/external_data_mixin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/mixins/service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/models/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/models/archive.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/models/base.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/models/chat.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/models/document.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/models/external_data.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/serializers/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/serializers/archive_serializers.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/serializers/chat_serializers.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/serializers/document_serializers.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/serializers/external_data_serializers.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/serializers/public_serializers.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/archive/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/archive/archive_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/archive/chunking_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/archive/exceptions.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/archive/extraction_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/archive/vectorization_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/base.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/chat_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/document_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/embedding/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/embedding/async_processor.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/embedding/batch_processor.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/embedding/batch_result.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/embedding/models.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/embedding/processors.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/embedding/utils.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/prompt_builder.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/services/search_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/signals/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/signals/archive_signals.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/signals/chat_signals.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/signals/document_signals.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/signals/external_data_signals.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/tasks/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/tasks/archive_tasks.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/tasks/document_processing.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/tasks/external_data_tasks.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/tasks/maintenance.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/urls.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/utils/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/utils/chunk_settings.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/utils/text_processing.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/utils/validation.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/views/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/views/archive_views.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/views/base.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/views/chat_views.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/views/document_views.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/knowbase/views/public_views.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/admin/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/admin/leads_admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/admin/resources.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/apps.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/migrations/0001_initial.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/migrations/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/models.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/serializers.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/signals.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/tests.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/urls.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/leads/views.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/maintenance/management/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/maintenance/management/commands/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/maintenance/migrations/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/admin/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/admin/filters.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/admin/newsletter_admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/admin/resources.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/admin_filters.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/apps.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/management/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/management/commands/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/management/commands/test_newsletter.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/managers/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/managers/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/migrations/0001_initial.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/migrations/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/models.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/serializers.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/services/email_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/signals.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/urls.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/utils/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/views/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/views/campaigns.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/views/emails.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/views/newsletters.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/views/subscriptions.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/newsletter/views/tracking.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/admin/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/admin/filters.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/admin/resources.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/admin/support_admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/admin_filters.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/apps.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/managers/message_manager.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/managers/ticket_manager.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/migrations/0001_initial.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/migrations/0002_alter_message_ticket.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/migrations/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/models.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/serializers.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/signals.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/templates/support/chat/access_denied.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/templates/support/chat/ticket_chat.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/urls.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/utils/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/utils/support_email_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/views/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/views/admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/views/api.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/support/views/chat.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/admin.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/apps.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/serializers.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/static/tasks/css/dashboard.css +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/static/tasks/js/api.js +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/static/tasks/js/dashboard.js +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/static/tasks/js/modals.js +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/static/tasks/js/notifications.js +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/static/tasks/js/task-monitor.js +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/static/tasks/js/theme.js +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/templates/tasks/base.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/templates/tasks/components/info_cards.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/templates/tasks/components/management_actions.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/templates/tasks/components/overview_tab.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/templates/tasks/components/queues_tab.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/templates/tasks/components/status_cards.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/templates/tasks/components/tasks_tab.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/templates/tasks/components/workers_tab.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/templates/tasks/dashboard.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/urls.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/tasks/views.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps/urls.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/apps.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/cli/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/cli/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/cli/commands/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/cli/commands/create_project.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/cli/commands/info.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/cli/main.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/cli/utils.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/core/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/core/environment.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/core/exceptions.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/core/generation.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/core/integration.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/core/validation.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/auto_generate.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/check_settings.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/clear_constance.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/create_token.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/generate.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/list_urls.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/migrate_all.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/migrator.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/rundramatiq.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/runserver_ngrok.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/script.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/show_config.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/show_urls.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/superuser.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/task_clear.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/task_status.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/test_email.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/test_telegram.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/test_twilio.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/tree.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/management/commands/validate_config.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/middleware/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/middleware/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/middleware/pagination.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/middleware/public_endpoints.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/middleware/user_activity.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/api.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/base.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/cache.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/cfg.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/constance.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/cors.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/database.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/drf.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/email.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/environment.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/jwt.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/limits.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/logging.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/ngrok.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/revolution.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/security.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/services.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/models/tasks.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/base.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_currency/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_currency/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_currency/cache.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_currency/converter.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_currency/service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_email.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_health.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_import_export/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_import_export/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_llm/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_llm/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_llm/example.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_llm/llm/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_llm/llm/cache.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_llm/llm/client.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_llm/llm/costs.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_llm/llm/extractor.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_llm/llm/models.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_llm/llm/models_cache.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_llm/llm/tokenizer.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_llm/translator/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_llm/translator/cache.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_llm/translator/translator.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_logger.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_ngrok.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_tasks.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_telegram.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_twilio/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_twilio/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_twilio/exceptions.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_twilio/models.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_twilio/sendgrid_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_twilio/service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_twilio/simple_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_twilio/templates/guide.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_twilio/templates/sendgrid_test_data.json +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_twilio/twilio_service.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/callbacks/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/callbacks/actions.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/callbacks/base.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/callbacks/charts.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/callbacks/commands.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/callbacks/main.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/callbacks/revolution.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/callbacks/statistics.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/callbacks/system.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/callbacks/users.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/icons/README.md +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/icons/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/icons/constants.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/icons/generate_icons.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/models/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/models/config.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/models/dashboard.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/models/dropdown.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/models/navigation.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/models/tabs.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/models.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/system_monitor.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/tailwind.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/django_unfold/utils.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/dramatiq_setup.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/modules/logger.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/registry/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/registry/core.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/registry/exceptions.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/registry/modules.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/registry/services.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/registry/third_party.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/routing/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/routing/callbacks.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/routing/routers.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/components/action_grid.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/components/card.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/components/data_table.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/components/metric_card.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/components/modal.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/components/progress_bar.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/components/section_header.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/components/stat_item.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/components/stats_grid.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/components/status_badge.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/components/user_avatar.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/constance/change_list.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/constance/includes/default_value.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/constance/includes/fieldset_header.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/constance/includes/results_list.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/constance/includes/setting_row.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/constance/includes/table_headers.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/import_export/change_list_export.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/import_export/change_list_import.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/import_export/change_list_import_export.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/index.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/layouts/dashboard_with_tabs.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/components/activity_tracker.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/components/charts_section.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/components/django_commands.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/components/quick_actions.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/components/recent_activity.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/components/recent_users_table.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/components/stats_cards.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/components/stats_tiles.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/components/system_health.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/components/system_metrics.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/components/user_permissions.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/tabs/app_stats_tab.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/tabs/commands_tab.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/tabs/overview_tab.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/tabs/stats_tab.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/tabs/users_tab.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/admin/snippets/zones/zones_table.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/emails/base_email.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templates/rest_framework/api.html +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templatetags/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/templatetags/django_cfg.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/urls.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/utils/__init__.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/utils/path_resolution.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/utils/smart_defaults.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/utils/toolkit.py +0 -0
- {django_cfg-1.2.17 → django_cfg-1.2.18}/src/django_cfg/utils/version_check.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: django-cfg
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.18
|
4
4
|
Summary: 🚀 Next-gen Django configuration: type-safety, AI features, blazing-fast setup, and automated best practices — all in one.
|
5
5
|
Project-URL: Homepage, https://djangocfg.com
|
6
6
|
Project-URL: Documentation, https://docs.djangocfg.com
|
@@ -264,6 +264,7 @@ class EnterpriseConfig(DjangoConfig):
|
|
264
264
|
enable_leads: bool = True # CRM integration
|
265
265
|
enable_agents: bool = True # AI workflow automation
|
266
266
|
enable_knowbase: bool = True # AI knowledge management
|
267
|
+
enable_maintenance: bool = True # Multi-site Cloudflare maintenance
|
267
268
|
|
268
269
|
config = EnterpriseConfig()
|
269
270
|
```
|
@@ -315,6 +316,34 @@ workflow = Workflow([
|
|
315
316
|
result = workflow.run({"document_id": "doc_123"})
|
316
317
|
```
|
317
318
|
|
319
|
+
### 🌐 **Multi-Site Cloudflare Maintenance**
|
320
|
+
**Zero-configuration maintenance mode** for enterprise applications with automated monitoring.
|
321
|
+
|
322
|
+
```python
|
323
|
+
from django_cfg.apps.maintenance.services import MaintenanceManager
|
324
|
+
|
325
|
+
# Enable maintenance for all production sites
|
326
|
+
manager = MaintenanceManager(user)
|
327
|
+
manager.bulk_enable_maintenance(
|
328
|
+
sites=CloudflareSite.objects.filter(environment='production'),
|
329
|
+
reason="Database migration",
|
330
|
+
message="🚀 Upgrading our systems. Back online in 30 minutes!"
|
331
|
+
)
|
332
|
+
|
333
|
+
# CLI management
|
334
|
+
# python manage.py maintenance enable --environment production
|
335
|
+
# python manage.py sync_cloudflare --api-token your_token
|
336
|
+
```
|
337
|
+
|
338
|
+
**Features:**
|
339
|
+
- ✅ **Zero-config setup** - Just provide API token and domain
|
340
|
+
- ✅ **Multi-site management** - Handle hundreds of sites with ORM queries
|
341
|
+
- ✅ **Automated monitoring** - Health checks with auto-triggers
|
342
|
+
- ✅ **Rich admin interface** - Bulk operations and real-time status
|
343
|
+
- ✅ **CLI automation** - Perfect for CI/CD pipelines
|
344
|
+
|
345
|
+
[**📚 View Maintenance Documentation →**](https://docs.djangocfg.com/features/built-in-apps/maintenance)
|
346
|
+
|
318
347
|
### 🏢 **Enterprise User Management**
|
319
348
|
**Multi-channel authentication** with OTP, SMS, email verification, and audit trails.
|
320
349
|
|
@@ -531,6 +560,7 @@ docker-compose up -d
|
|
531
560
|
|
532
561
|
### **🚀 Enterprise Features**
|
533
562
|
- [**Built-in Applications**](https://docs.djangocfg.com/features/built-in-apps/accounts) - User management, support, CRM
|
563
|
+
- [**Maintenance Management**](https://docs.djangocfg.com/features/built-in-apps/maintenance) - Multi-site Cloudflare maintenance
|
534
564
|
- [**Modular System**](https://docs.djangocfg.com/features/modules/overview) - Email, SMS, LLM, currency modules
|
535
565
|
- [**Third-party Integrations**](https://docs.djangocfg.com/features/integrations/patterns) - Dramatiq, Twilio, ngrok
|
536
566
|
|
@@ -749,6 +779,27 @@ python manage.py generate_deployment --platform=docker --environment=production
|
|
749
779
|
curl http://localhost:8000/health/
|
750
780
|
```
|
751
781
|
|
782
|
+
### **🌐 Multi-Site Maintenance Management**
|
783
|
+
```bash
|
784
|
+
# Enable maintenance for all production sites
|
785
|
+
python manage.py maintenance enable --environment production --reason "Database upgrade"
|
786
|
+
|
787
|
+
# Disable maintenance for specific project
|
788
|
+
python manage.py maintenance disable --project ecommerce
|
789
|
+
|
790
|
+
# Check status of all sites
|
791
|
+
python manage.py maintenance status --format json
|
792
|
+
|
793
|
+
# Auto-discover sites from Cloudflare
|
794
|
+
python manage.py sync_cloudflare --api-token your_token
|
795
|
+
|
796
|
+
# Bulk operations with filters
|
797
|
+
python manage.py maintenance enable --tag critical --reason "Security patch"
|
798
|
+
|
799
|
+
# Dry run to preview changes
|
800
|
+
python manage.py maintenance enable --environment staging --dry-run
|
801
|
+
```
|
802
|
+
|
752
803
|
---
|
753
804
|
|
754
805
|
## 🔒 Enterprise Security & Compliance
|
@@ -118,6 +118,7 @@ class EnterpriseConfig(DjangoConfig):
|
|
118
118
|
enable_leads: bool = True # CRM integration
|
119
119
|
enable_agents: bool = True # AI workflow automation
|
120
120
|
enable_knowbase: bool = True # AI knowledge management
|
121
|
+
enable_maintenance: bool = True # Multi-site Cloudflare maintenance
|
121
122
|
|
122
123
|
config = EnterpriseConfig()
|
123
124
|
```
|
@@ -169,6 +170,34 @@ workflow = Workflow([
|
|
169
170
|
result = workflow.run({"document_id": "doc_123"})
|
170
171
|
```
|
171
172
|
|
173
|
+
### 🌐 **Multi-Site Cloudflare Maintenance**
|
174
|
+
**Zero-configuration maintenance mode** for enterprise applications with automated monitoring.
|
175
|
+
|
176
|
+
```python
|
177
|
+
from django_cfg.apps.maintenance.services import MaintenanceManager
|
178
|
+
|
179
|
+
# Enable maintenance for all production sites
|
180
|
+
manager = MaintenanceManager(user)
|
181
|
+
manager.bulk_enable_maintenance(
|
182
|
+
sites=CloudflareSite.objects.filter(environment='production'),
|
183
|
+
reason="Database migration",
|
184
|
+
message="🚀 Upgrading our systems. Back online in 30 minutes!"
|
185
|
+
)
|
186
|
+
|
187
|
+
# CLI management
|
188
|
+
# python manage.py maintenance enable --environment production
|
189
|
+
# python manage.py sync_cloudflare --api-token your_token
|
190
|
+
```
|
191
|
+
|
192
|
+
**Features:**
|
193
|
+
- ✅ **Zero-config setup** - Just provide API token and domain
|
194
|
+
- ✅ **Multi-site management** - Handle hundreds of sites with ORM queries
|
195
|
+
- ✅ **Automated monitoring** - Health checks with auto-triggers
|
196
|
+
- ✅ **Rich admin interface** - Bulk operations and real-time status
|
197
|
+
- ✅ **CLI automation** - Perfect for CI/CD pipelines
|
198
|
+
|
199
|
+
[**📚 View Maintenance Documentation →**](https://docs.djangocfg.com/features/built-in-apps/maintenance)
|
200
|
+
|
172
201
|
### 🏢 **Enterprise User Management**
|
173
202
|
**Multi-channel authentication** with OTP, SMS, email verification, and audit trails.
|
174
203
|
|
@@ -385,6 +414,7 @@ docker-compose up -d
|
|
385
414
|
|
386
415
|
### **🚀 Enterprise Features**
|
387
416
|
- [**Built-in Applications**](https://docs.djangocfg.com/features/built-in-apps/accounts) - User management, support, CRM
|
417
|
+
- [**Maintenance Management**](https://docs.djangocfg.com/features/built-in-apps/maintenance) - Multi-site Cloudflare maintenance
|
388
418
|
- [**Modular System**](https://docs.djangocfg.com/features/modules/overview) - Email, SMS, LLM, currency modules
|
389
419
|
- [**Third-party Integrations**](https://docs.djangocfg.com/features/integrations/patterns) - Dramatiq, Twilio, ngrok
|
390
420
|
|
@@ -603,6 +633,27 @@ python manage.py generate_deployment --platform=docker --environment=production
|
|
603
633
|
curl http://localhost:8000/health/
|
604
634
|
```
|
605
635
|
|
636
|
+
### **🌐 Multi-Site Maintenance Management**
|
637
|
+
```bash
|
638
|
+
# Enable maintenance for all production sites
|
639
|
+
python manage.py maintenance enable --environment production --reason "Database upgrade"
|
640
|
+
|
641
|
+
# Disable maintenance for specific project
|
642
|
+
python manage.py maintenance disable --project ecommerce
|
643
|
+
|
644
|
+
# Check status of all sites
|
645
|
+
python manage.py maintenance status --format json
|
646
|
+
|
647
|
+
# Auto-discover sites from Cloudflare
|
648
|
+
python manage.py sync_cloudflare --api-token your_token
|
649
|
+
|
650
|
+
# Bulk operations with filters
|
651
|
+
python manage.py maintenance enable --tag critical --reason "Security patch"
|
652
|
+
|
653
|
+
# Dry run to preview changes
|
654
|
+
python manage.py maintenance enable --environment staging --dry-run
|
655
|
+
```
|
656
|
+
|
606
657
|
---
|
607
658
|
|
608
659
|
## 🔒 Enterprise Security & Compliance
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "django-cfg"
|
7
|
-
version = "1.2.
|
7
|
+
version = "1.2.18"
|
8
8
|
description = "🚀 Next-gen Django configuration: type-safety, AI features, blazing-fast setup, and automated best practices — all in one."
|
9
9
|
readme = "README.md"
|
10
10
|
license = {text = "MIT"}
|
@@ -0,0 +1,68 @@
|
|
1
|
+
"""
|
2
|
+
Django CFG Accounts Models
|
3
|
+
|
4
|
+
This module provides all the models for the accounts app.
|
5
|
+
Models are organized by functionality:
|
6
|
+
|
7
|
+
- base: Base utilities and functions
|
8
|
+
- user: User model and related functionality
|
9
|
+
- registration: Registration and source tracking models
|
10
|
+
- auth: Authentication models (OTP, etc.)
|
11
|
+
- activity: User activity tracking models
|
12
|
+
- integrations: Third-party integrations models (Twilio, etc.)
|
13
|
+
"""
|
14
|
+
|
15
|
+
# Import base utilities
|
16
|
+
from .base import user_avatar_path
|
17
|
+
|
18
|
+
# Import choices
|
19
|
+
from .choices import (
|
20
|
+
ActivityType,
|
21
|
+
TwilioResponseType,
|
22
|
+
TwilioServiceType,
|
23
|
+
)
|
24
|
+
|
25
|
+
# Import user models
|
26
|
+
from .user import CustomUser
|
27
|
+
|
28
|
+
# Import registration models
|
29
|
+
from .registration import (
|
30
|
+
RegistrationSource,
|
31
|
+
UserRegistrationSource,
|
32
|
+
)
|
33
|
+
|
34
|
+
# Import authentication models
|
35
|
+
from .auth import OTPSecret
|
36
|
+
|
37
|
+
# Import activity models
|
38
|
+
from .activity import UserActivity
|
39
|
+
|
40
|
+
# Import integration models
|
41
|
+
from .integrations import TwilioResponse
|
42
|
+
|
43
|
+
# Export all models
|
44
|
+
__all__ = [
|
45
|
+
# Base utilities
|
46
|
+
'user_avatar_path',
|
47
|
+
|
48
|
+
# Choices
|
49
|
+
'ActivityType',
|
50
|
+
'TwilioResponseType',
|
51
|
+
'TwilioServiceType',
|
52
|
+
|
53
|
+
# User models
|
54
|
+
'CustomUser',
|
55
|
+
|
56
|
+
# Registration models
|
57
|
+
'RegistrationSource',
|
58
|
+
'UserRegistrationSource',
|
59
|
+
|
60
|
+
# Authentication models
|
61
|
+
'OTPSecret',
|
62
|
+
|
63
|
+
# Activity models
|
64
|
+
'UserActivity',
|
65
|
+
|
66
|
+
# Integration models
|
67
|
+
'TwilioResponse',
|
68
|
+
]
|
@@ -0,0 +1,34 @@
|
|
1
|
+
"""
|
2
|
+
User activity tracking models.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from django.db import models
|
6
|
+
|
7
|
+
from .choices import ActivityType
|
8
|
+
|
9
|
+
|
10
|
+
class UserActivity(models.Model):
|
11
|
+
"""
|
12
|
+
User activity log.
|
13
|
+
"""
|
14
|
+
|
15
|
+
user = models.ForeignKey('CustomUser', on_delete=models.CASCADE, related_name='activities')
|
16
|
+
activity_type = models.CharField(max_length=20, choices=ActivityType.choices)
|
17
|
+
description = models.TextField(blank=True)
|
18
|
+
ip_address = models.GenericIPAddressField(null=True, blank=True)
|
19
|
+
user_agent = models.TextField(blank=True)
|
20
|
+
|
21
|
+
# Related objects (generic foreign key could be used here)
|
22
|
+
object_id = models.PositiveIntegerField(null=True, blank=True)
|
23
|
+
object_type = models.CharField(max_length=50, blank=True)
|
24
|
+
|
25
|
+
created_at = models.DateTimeField(auto_now_add=True)
|
26
|
+
|
27
|
+
class Meta:
|
28
|
+
app_label = 'django_cfg_accounts'
|
29
|
+
verbose_name = 'User Activity'
|
30
|
+
verbose_name_plural = 'User Activities'
|
31
|
+
ordering = ['-created_at']
|
32
|
+
|
33
|
+
def __str__(self):
|
34
|
+
return f"{self.user.username} - {self.get_activity_type_display()}"
|
@@ -0,0 +1,50 @@
|
|
1
|
+
"""
|
2
|
+
Authentication models (OTP, etc.).
|
3
|
+
"""
|
4
|
+
|
5
|
+
import random
|
6
|
+
import string
|
7
|
+
from datetime import timedelta
|
8
|
+
|
9
|
+
from django.db import models
|
10
|
+
from django.utils import timezone
|
11
|
+
|
12
|
+
|
13
|
+
class OTPSecret(models.Model):
|
14
|
+
"""Stores One-Time Passwords for authentication."""
|
15
|
+
|
16
|
+
email = models.EmailField(db_index=True)
|
17
|
+
secret = models.CharField(max_length=6)
|
18
|
+
created_at = models.DateTimeField(auto_now_add=True)
|
19
|
+
expires_at = models.DateTimeField()
|
20
|
+
is_used = models.BooleanField(default=False)
|
21
|
+
|
22
|
+
def save(self, *args, **kwargs):
|
23
|
+
if not self.expires_at:
|
24
|
+
self.expires_at = timezone.now() + timedelta(minutes=10)
|
25
|
+
super().save(*args, **kwargs)
|
26
|
+
|
27
|
+
@staticmethod
|
28
|
+
def generate_otp(length=6):
|
29
|
+
"""Generate random numeric OTP."""
|
30
|
+
return "".join(random.choices(string.digits, k=length))
|
31
|
+
|
32
|
+
@property
|
33
|
+
def is_valid(self):
|
34
|
+
"""Check if OTP is still valid."""
|
35
|
+
return not self.is_used and timezone.now() < self.expires_at
|
36
|
+
|
37
|
+
def mark_used(self):
|
38
|
+
"""Mark OTP as used."""
|
39
|
+
self.is_used = True
|
40
|
+
self.save(update_fields=["is_used"])
|
41
|
+
|
42
|
+
def __str__(self):
|
43
|
+
return f"OTP for {self.email}"
|
44
|
+
|
45
|
+
class Meta:
|
46
|
+
app_label = 'django_cfg_accounts'
|
47
|
+
ordering = ["-created_at"]
|
48
|
+
indexes = [
|
49
|
+
models.Index(fields=["email", "is_used", "expires_at"]),
|
50
|
+
]
|
@@ -0,0 +1,32 @@
|
|
1
|
+
"""
|
2
|
+
Model choices constants for accounts app.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from django.db import models
|
6
|
+
|
7
|
+
|
8
|
+
class ActivityType(models.TextChoices):
|
9
|
+
"""User activity types."""
|
10
|
+
LOGIN = 'login', 'Login'
|
11
|
+
LOGOUT = 'logout', 'Logout'
|
12
|
+
OTP_REQUESTED = 'otp_requested', 'OTP Requested'
|
13
|
+
OTP_VERIFIED = 'otp_verified', 'OTP Verified'
|
14
|
+
PROFILE_UPDATED = 'profile_updated', 'Profile Updated'
|
15
|
+
REGISTRATION = 'registration', 'Registration'
|
16
|
+
|
17
|
+
|
18
|
+
class TwilioResponseType(models.TextChoices):
|
19
|
+
"""Twilio response types."""
|
20
|
+
API_SEND = 'api_send', 'API Send Request'
|
21
|
+
API_VERIFY = 'api_verify', 'API Verify Request'
|
22
|
+
WEBHOOK_STATUS = 'webhook_status', 'Webhook Status Update'
|
23
|
+
WEBHOOK_DELIVERY = 'webhook_delivery', 'Webhook Delivery Report'
|
24
|
+
|
25
|
+
|
26
|
+
class TwilioServiceType(models.TextChoices):
|
27
|
+
"""Twilio service types."""
|
28
|
+
WHATSAPP = 'whatsapp', 'WhatsApp'
|
29
|
+
SMS = 'sms', 'SMS'
|
30
|
+
VOICE = 'voice', 'Voice'
|
31
|
+
EMAIL = 'email', 'Email'
|
32
|
+
VERIFY = 'verify', 'Verify API'
|
@@ -0,0 +1,75 @@
|
|
1
|
+
"""
|
2
|
+
Third-party integrations models (Twilio, etc.).
|
3
|
+
"""
|
4
|
+
|
5
|
+
from django.db import models
|
6
|
+
|
7
|
+
from .choices import TwilioResponseType, TwilioServiceType
|
8
|
+
|
9
|
+
|
10
|
+
class TwilioResponse(models.Model):
|
11
|
+
"""Model for storing Twilio API responses and webhook data."""
|
12
|
+
|
13
|
+
response_type = models.CharField(max_length=20, choices=TwilioResponseType.choices)
|
14
|
+
service_type = models.CharField(max_length=10, choices=TwilioServiceType.choices)
|
15
|
+
|
16
|
+
# Twilio identifiers
|
17
|
+
message_sid = models.CharField(max_length=34, blank=True, help_text="Twilio Message SID")
|
18
|
+
verification_sid = models.CharField(max_length=34, blank=True, help_text="Twilio Verification SID")
|
19
|
+
|
20
|
+
# Request/Response data
|
21
|
+
request_data = models.JSONField(default=dict, help_text="Original request parameters")
|
22
|
+
response_data = models.JSONField(default=dict, help_text="Twilio API response")
|
23
|
+
|
24
|
+
# Status and error handling
|
25
|
+
status = models.CharField(max_length=20, blank=True, help_text="Message/Verification status")
|
26
|
+
error_code = models.CharField(max_length=10, blank=True, help_text="Twilio error code")
|
27
|
+
error_message = models.TextField(blank=True, help_text="Error description")
|
28
|
+
|
29
|
+
# Contact information
|
30
|
+
to_number = models.CharField(max_length=20, blank=True, help_text="Recipient phone/email")
|
31
|
+
from_number = models.CharField(max_length=20, blank=True, help_text="Sender phone/email")
|
32
|
+
|
33
|
+
# Pricing
|
34
|
+
price = models.DecimalField(max_digits=10, decimal_places=6, null=True, blank=True)
|
35
|
+
price_unit = models.CharField(max_length=3, blank=True, help_text="Currency code")
|
36
|
+
|
37
|
+
# Timestamps
|
38
|
+
created_at = models.DateTimeField(auto_now_add=True)
|
39
|
+
updated_at = models.DateTimeField(auto_now=True)
|
40
|
+
twilio_created_at = models.DateTimeField(null=True, blank=True, help_text="Timestamp from Twilio")
|
41
|
+
|
42
|
+
# Relations
|
43
|
+
otp_secret = models.ForeignKey(
|
44
|
+
'OTPSecret',
|
45
|
+
on_delete=models.SET_NULL,
|
46
|
+
null=True,
|
47
|
+
blank=True,
|
48
|
+
related_name='twilio_responses',
|
49
|
+
help_text="Related OTP if applicable"
|
50
|
+
)
|
51
|
+
|
52
|
+
class Meta:
|
53
|
+
app_label = 'django_cfg_accounts'
|
54
|
+
verbose_name = 'Twilio Response'
|
55
|
+
verbose_name_plural = 'Twilio Responses'
|
56
|
+
ordering = ['-created_at']
|
57
|
+
indexes = [
|
58
|
+
models.Index(fields=['message_sid']),
|
59
|
+
models.Index(fields=['verification_sid']),
|
60
|
+
models.Index(fields=['status', 'created_at']),
|
61
|
+
models.Index(fields=['response_type', 'service_type']),
|
62
|
+
]
|
63
|
+
|
64
|
+
def __str__(self):
|
65
|
+
return f"{self.get_response_type_display()} - {self.get_service_type_display()}"
|
66
|
+
|
67
|
+
@property
|
68
|
+
def has_error(self):
|
69
|
+
"""Check if response has error."""
|
70
|
+
return bool(self.error_code or self.error_message)
|
71
|
+
|
72
|
+
@property
|
73
|
+
def is_successful(self):
|
74
|
+
"""Check if response is successful."""
|
75
|
+
return not self.has_error and self.status in ['sent', 'delivered', 'approved']
|
@@ -0,0 +1,52 @@
|
|
1
|
+
"""
|
2
|
+
Registration and source tracking models.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from django.db import models
|
6
|
+
from urllib.parse import urlparse
|
7
|
+
|
8
|
+
|
9
|
+
class RegistrationSource(models.Model):
|
10
|
+
"""Model for tracking user registration sources/projects."""
|
11
|
+
url = models.URLField(unique=True, help_text="Source URL (e.g., https://unrealon.com)")
|
12
|
+
name = models.CharField(max_length=100, blank=True, help_text="Display name for the source")
|
13
|
+
description = models.TextField(blank=True, help_text="Optional description")
|
14
|
+
is_active = models.BooleanField(default=True, help_text="Whether this source is active")
|
15
|
+
created_at = models.DateTimeField(auto_now_add=True)
|
16
|
+
updated_at = models.DateTimeField(auto_now=True)
|
17
|
+
|
18
|
+
def __str__(self):
|
19
|
+
return self.name or self.get_domain()
|
20
|
+
|
21
|
+
def get_domain(self):
|
22
|
+
"""Extract domain from URL."""
|
23
|
+
try:
|
24
|
+
parsed = urlparse(self.url)
|
25
|
+
return parsed.netloc
|
26
|
+
except:
|
27
|
+
return self.url
|
28
|
+
|
29
|
+
def get_display_name(self):
|
30
|
+
"""Get display name or domain."""
|
31
|
+
return self.name or self.get_domain()
|
32
|
+
|
33
|
+
class Meta:
|
34
|
+
app_label = 'django_cfg_accounts'
|
35
|
+
verbose_name = "Registration Source"
|
36
|
+
verbose_name_plural = "Registration Sources"
|
37
|
+
ordering = ['-created_at']
|
38
|
+
|
39
|
+
|
40
|
+
class UserRegistrationSource(models.Model):
|
41
|
+
"""Many-to-many relationship between users and registration sources."""
|
42
|
+
user = models.ForeignKey('CustomUser', on_delete=models.CASCADE, related_name='user_registration_sources')
|
43
|
+
source = models.ForeignKey(RegistrationSource, on_delete=models.CASCADE, related_name='user_registration_sources')
|
44
|
+
first_registration = models.BooleanField(default=True, help_text="Whether this was the first registration from this source")
|
45
|
+
registration_date = models.DateTimeField(auto_now_add=True)
|
46
|
+
|
47
|
+
class Meta:
|
48
|
+
app_label = 'django_cfg_accounts'
|
49
|
+
unique_together = ['user', 'source']
|
50
|
+
verbose_name = "User Registration Source"
|
51
|
+
verbose_name_plural = "User Registration Sources"
|
52
|
+
ordering = ['-registration_date']
|
@@ -0,0 +1,80 @@
|
|
1
|
+
"""
|
2
|
+
User model and related functionality.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import Optional, List
|
6
|
+
from django.contrib.auth.models import AbstractUser
|
7
|
+
from django.db import models
|
8
|
+
|
9
|
+
from ..managers.user_manager import UserManager
|
10
|
+
from .base import user_avatar_path
|
11
|
+
|
12
|
+
|
13
|
+
class CustomUser(AbstractUser):
|
14
|
+
"""Simplified user model for OTP-only authentication."""
|
15
|
+
|
16
|
+
email = models.EmailField(unique=True)
|
17
|
+
|
18
|
+
# Profile fields
|
19
|
+
first_name = models.CharField(max_length=50, blank=True)
|
20
|
+
last_name = models.CharField(max_length=50, blank=True)
|
21
|
+
company = models.CharField(max_length=100, blank=True)
|
22
|
+
phone = models.CharField(max_length=20, blank=True)
|
23
|
+
position = models.CharField(max_length=100, blank=True)
|
24
|
+
avatar = models.ImageField(upload_to=user_avatar_path, blank=True, null=True)
|
25
|
+
|
26
|
+
# Profile metadata
|
27
|
+
updated_at = models.DateTimeField(auto_now=True)
|
28
|
+
|
29
|
+
# Managers
|
30
|
+
objects: UserManager = UserManager()
|
31
|
+
|
32
|
+
USERNAME_FIELD = "email"
|
33
|
+
REQUIRED_FIELDS = ["username"]
|
34
|
+
|
35
|
+
def __str__(self):
|
36
|
+
return self.email
|
37
|
+
|
38
|
+
@property
|
39
|
+
def is_admin(self) -> bool:
|
40
|
+
return self.is_superuser
|
41
|
+
|
42
|
+
@property
|
43
|
+
def full_name(self) -> str:
|
44
|
+
"""Get user's full name."""
|
45
|
+
return self.__class__.objects.get_full_name(self)
|
46
|
+
|
47
|
+
@property
|
48
|
+
def initials(self) -> str:
|
49
|
+
"""Get user's initials for avatar fallback."""
|
50
|
+
return self.__class__.objects.get_initials(self)
|
51
|
+
|
52
|
+
@property
|
53
|
+
def display_username(self) -> str:
|
54
|
+
"""Get formatted username for display."""
|
55
|
+
return self.__class__.objects.get_display_username(self)
|
56
|
+
|
57
|
+
@property
|
58
|
+
def unanswered_messages_count(self) -> int:
|
59
|
+
"""Get count of unanswered messages for the user."""
|
60
|
+
return self.__class__.objects.get_unanswered_messages_count(self)
|
61
|
+
|
62
|
+
def get_sources(self) -> List['RegistrationSource']:
|
63
|
+
"""Get all sources associated with this user."""
|
64
|
+
from .registration import RegistrationSource
|
65
|
+
return RegistrationSource.objects.filter(user_registration_sources__user=self)
|
66
|
+
|
67
|
+
@property
|
68
|
+
def primary_source(self) -> Optional['RegistrationSource']:
|
69
|
+
"""Get the first source where user registered."""
|
70
|
+
from .registration import UserRegistrationSource
|
71
|
+
user_source = UserRegistrationSource.objects.filter(
|
72
|
+
user=self,
|
73
|
+
first_registration=True
|
74
|
+
).first()
|
75
|
+
return user_source.source if user_source else None
|
76
|
+
|
77
|
+
class Meta:
|
78
|
+
app_label = 'django_cfg_accounts'
|
79
|
+
verbose_name = "User"
|
80
|
+
verbose_name_plural = "Users"
|
@@ -0,0 +1,56 @@
|
|
1
|
+
"""
|
2
|
+
Simplified Django-CFG Maintenance Application.
|
3
|
+
|
4
|
+
A simple maintenance mode management app with Cloudflare integration.
|
5
|
+
Refactored from 119 files to ~10 files following KISS principles.
|
6
|
+
|
7
|
+
Proper structure:
|
8
|
+
- models/ - CloudflareSite and MaintenanceLog models
|
9
|
+
- services/ - MaintenanceService for Cloudflare operations
|
10
|
+
- admin/ - Simple admin interfaces
|
11
|
+
- management/commands/ - CLI commands
|
12
|
+
"""
|
13
|
+
|
14
|
+
__version__ = "2.0.0"
|
15
|
+
__author__ = "Django-CFG Team"
|
16
|
+
|
17
|
+
# Lazy import registry to avoid Django initialization issues
|
18
|
+
_LAZY_IMPORTS = {
|
19
|
+
# Models
|
20
|
+
'CloudflareApiKey': ('django_cfg.apps.maintenance.models', 'CloudflareApiKey'),
|
21
|
+
'CloudflareSite': ('django_cfg.apps.maintenance.models', 'CloudflareSite'),
|
22
|
+
'MaintenanceLog': ('django_cfg.apps.maintenance.models', 'MaintenanceLog'),
|
23
|
+
'ScheduledMaintenance': ('django_cfg.apps.maintenance.models', 'ScheduledMaintenance'),
|
24
|
+
|
25
|
+
# Services
|
26
|
+
'MaintenanceService': ('django_cfg.apps.maintenance.services', 'MaintenanceService'),
|
27
|
+
'SiteSyncService': ('django_cfg.apps.maintenance.services', 'SiteSyncService'),
|
28
|
+
'BulkOperationsService': ('django_cfg.apps.maintenance.services', 'BulkOperationsService'),
|
29
|
+
'ScheduledMaintenanceService': ('django_cfg.apps.maintenance.services', 'ScheduledMaintenanceService'),
|
30
|
+
'bulk_operations': ('django_cfg.apps.maintenance.services', 'bulk_operations'),
|
31
|
+
'scheduled_maintenance_service': ('django_cfg.apps.maintenance.services', 'scheduled_maintenance_service'),
|
32
|
+
'enable_maintenance_for_domain': ('django_cfg.apps.maintenance.services', 'enable_maintenance_for_domain'),
|
33
|
+
'disable_maintenance_for_domain': ('django_cfg.apps.maintenance.services', 'disable_maintenance_for_domain'),
|
34
|
+
'sync_site_from_cloudflare': ('django_cfg.apps.maintenance.services', 'sync_site_from_cloudflare'),
|
35
|
+
'enable_maintenance_for_domains': ('django_cfg.apps.maintenance.services', 'enable_maintenance_for_domains'),
|
36
|
+
'disable_maintenance_for_domains': ('django_cfg.apps.maintenance.services', 'disable_maintenance_for_domains'),
|
37
|
+
'bulk_sync_all_sites': ('django_cfg.apps.maintenance.services', 'bulk_sync_all_sites'),
|
38
|
+
'get_maintenance_status_report': ('django_cfg.apps.maintenance.services', 'get_maintenance_status_report'),
|
39
|
+
'schedule_maintenance_for_sites': ('django_cfg.apps.maintenance.services', 'schedule_maintenance_for_sites'),
|
40
|
+
'process_scheduled_maintenances': ('django_cfg.apps.maintenance.services', 'process_scheduled_maintenances'),
|
41
|
+
}
|
42
|
+
|
43
|
+
|
44
|
+
def __getattr__(name: str):
|
45
|
+
"""Lazy import mechanism to avoid Django initialization issues."""
|
46
|
+
if name in _LAZY_IMPORTS:
|
47
|
+
module_path, attr_name = _LAZY_IMPORTS[name]
|
48
|
+
|
49
|
+
import importlib
|
50
|
+
module = importlib.import_module(module_path)
|
51
|
+
return getattr(module, attr_name)
|
52
|
+
|
53
|
+
raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
|
54
|
+
|
55
|
+
|
56
|
+
__all__ = list(_LAZY_IMPORTS.keys())
|
@@ -0,0 +1,17 @@
|
|
1
|
+
"""
|
2
|
+
Maintenance admin interfaces.
|
3
|
+
|
4
|
+
Decomposed admin interfaces with Unfold styling and action buttons.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from .api_key_admin import CloudflareApiKeyAdmin
|
8
|
+
from .site_admin import CloudflareSiteAdmin
|
9
|
+
from .log_admin import MaintenanceLogAdmin
|
10
|
+
from .scheduled_admin import ScheduledMaintenanceAdmin
|
11
|
+
|
12
|
+
__all__ = [
|
13
|
+
'CloudflareApiKeyAdmin',
|
14
|
+
'CloudflareSiteAdmin',
|
15
|
+
'MaintenanceLogAdmin',
|
16
|
+
'ScheduledMaintenanceAdmin',
|
17
|
+
]
|