django-cfg 1.3.13__py3-none-any.whl → 1.4.0__py3-none-any.whl
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/__init__.py +1 -1
- django_cfg/apps/accounts/admin/user_admin.py +39 -16
- django_cfg/apps/accounts/serializers/profile.py +1 -1
- django_cfg/apps/accounts/services/otp_service.py +18 -11
- django_cfg/apps/accounts/signals.py +15 -24
- django_cfg/apps/accounts/utils/notifications.py +217 -358
- django_cfg/apps/accounts/views/otp.py +2 -2
- django_cfg/apps/accounts/views/webhook.py +1 -1
- django_cfg/apps/agents/core/django_agent.py +1 -1
- django_cfg/apps/api/commands/views.py +66 -83
- django_cfg/apps/api/health/drf_views.py +269 -0
- django_cfg/apps/api/health/serializers.py +45 -0
- django_cfg/apps/api/health/urls.py +6 -1
- django_cfg/apps/knowbase/admin/actions/__init__.py +13 -0
- django_cfg/apps/knowbase/admin/actions/visibility_actions.py +56 -0
- django_cfg/apps/knowbase/admin/document_admin.py +136 -270
- django_cfg/apps/knowbase/admin/helpers/__init__.py +17 -0
- django_cfg/apps/knowbase/admin/helpers/configs.py +72 -0
- django_cfg/apps/knowbase/admin/helpers/display_helpers.py +156 -0
- django_cfg/apps/knowbase/admin/helpers/statistics.py +108 -0
- django_cfg/apps/knowbase/config/constance_fields.py +1 -1
- django_cfg/apps/knowbase/config/settings.py +2 -2
- django_cfg/apps/knowbase/mixins/__init__.py +19 -2
- django_cfg/apps/knowbase/mixins/config/__init__.py +14 -0
- django_cfg/apps/knowbase/mixins/config/defaults.py +75 -0
- django_cfg/apps/knowbase/mixins/config/meta_config.py +120 -0
- django_cfg/apps/knowbase/mixins/creator.py +10 -10
- django_cfg/apps/knowbase/mixins/external_data_mixin.py +105 -403
- django_cfg/apps/knowbase/mixins/generators/__init__.py +16 -0
- django_cfg/apps/knowbase/mixins/generators/content_generator.py +218 -0
- django_cfg/apps/knowbase/mixins/generators/field_analyzer.py +76 -0
- django_cfg/apps/knowbase/mixins/generators/metadata_generator.py +124 -0
- django_cfg/apps/knowbase/mixins/service.py +2 -2
- django_cfg/apps/knowbase/services/archive/__init__.py +1 -0
- django_cfg/apps/knowbase/services/archive/analyzers/__init__.py +17 -0
- django_cfg/apps/knowbase/services/archive/analyzers/complexity_analyzer.py +33 -0
- django_cfg/apps/knowbase/services/archive/analyzers/purpose_detector.py +36 -0
- django_cfg/apps/knowbase/services/archive/analyzers/quality_analyzer.py +39 -0
- django_cfg/apps/knowbase/services/archive/analyzers/tag_generator.py +103 -0
- django_cfg/apps/knowbase/services/archive/chunking/__init__.py +19 -0
- django_cfg/apps/knowbase/services/archive/chunking/base.py +81 -0
- django_cfg/apps/knowbase/services/archive/chunking/json_chunker.py +62 -0
- django_cfg/apps/knowbase/services/archive/chunking/markdown_chunker.py +107 -0
- django_cfg/apps/knowbase/services/archive/chunking/python_chunker.py +248 -0
- django_cfg/apps/knowbase/services/archive/chunking/text_chunker.py +70 -0
- django_cfg/apps/knowbase/services/archive/chunking_service.py +110 -729
- django_cfg/apps/knowbase/services/archive/context/__init__.py +14 -0
- django_cfg/apps/knowbase/services/archive/context/builders.py +220 -0
- django_cfg/apps/knowbase/services/archive/context/models.py +38 -0
- django_cfg/apps/knowbase/services/embedding/models.py +18 -14
- django_cfg/apps/knowbase/services/embedding/processors.py +6 -3
- django_cfg/apps/knowbase/tasks/document_processing.py +11 -3
- django_cfg/apps/leads/tests.py +1 -1
- django_cfg/apps/payments/admin/api_keys_admin.py +1 -1
- django_cfg/apps/payments/admin/balance_admin.py +1 -1
- django_cfg/apps/payments/admin/currencies_admin.py +1 -1
- django_cfg/apps/payments/admin/payments_admin.py +1 -1
- django_cfg/apps/payments/admin/subscriptions_admin.py +1 -1
- django_cfg/apps/payments/admin_interface/templates/payments/base.html +59 -126
- django_cfg/apps/payments/admin_interface/views/api/payments.py +1 -1
- django_cfg/apps/payments/admin_interface/views/api/stats.py +1 -1
- django_cfg/apps/payments/admin_interface/views/api/users.py +1 -1
- django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +1 -1
- django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +1 -1
- django_cfg/apps/payments/admin_interface/views/base.py +29 -2
- django_cfg/apps/payments/apps.py +1 -1
- django_cfg/apps/payments/config/django_cfg_integration.py +2 -2
- django_cfg/apps/payments/config/helpers.py +3 -2
- django_cfg/apps/payments/management/commands/cleanup_expired_data.py +1 -1
- django_cfg/apps/payments/management/commands/currency_stats.py +1 -1
- django_cfg/apps/payments/management/commands/manage_currencies.py +1 -1
- django_cfg/apps/payments/management/commands/manage_providers.py +1 -1
- django_cfg/apps/payments/management/commands/process_pending_payments.py +1 -1
- django_cfg/apps/payments/management/commands/test_providers.py +1 -1
- django_cfg/apps/payments/middleware/api_access.py +1 -1
- django_cfg/apps/payments/middleware/rate_limiting.py +1 -1
- django_cfg/apps/payments/middleware/usage_tracking.py +1 -1
- django_cfg/apps/payments/models/balance.py +2 -2
- django_cfg/apps/payments/models/managers/api_key_managers.py +1 -1
- django_cfg/apps/payments/models/managers/balance_managers.py +1 -1
- django_cfg/apps/payments/models/managers/currency_managers.py +1 -1
- django_cfg/apps/payments/models/managers/payment_managers.py +1 -1
- django_cfg/apps/payments/models/managers/subscription_managers.py +1 -1
- django_cfg/apps/payments/models/payments.py +2 -2
- django_cfg/apps/payments/services/cache_service/__init__.py +1 -1
- django_cfg/apps/payments/services/cache_service/simple_cache.py +10 -5
- django_cfg/apps/payments/services/core/base.py +1 -1
- django_cfg/apps/payments/services/core/currency/__init__.py +13 -0
- django_cfg/apps/payments/services/core/currency/currency_converter.py +57 -0
- django_cfg/apps/payments/services/core/currency/currency_validator.py +61 -0
- django_cfg/apps/payments/services/core/operations/__init__.py +15 -0
- django_cfg/apps/payments/services/core/operations/payment_canceller.py +100 -0
- django_cfg/apps/payments/services/core/operations/payment_creator.py +196 -0
- django_cfg/apps/payments/services/core/operations/status_checker.py +100 -0
- django_cfg/apps/payments/services/core/payment_service.py +124 -612
- django_cfg/apps/payments/services/core/providers/__init__.py +13 -0
- django_cfg/apps/payments/services/core/providers/provider_client.py +132 -0
- django_cfg/apps/payments/services/core/providers/status_mapper.py +89 -0
- django_cfg/apps/payments/services/core/utils/__init__.py +13 -0
- django_cfg/apps/payments/services/core/utils/data_converter.py +48 -0
- django_cfg/apps/payments/services/core/utils/statistics_calculator.py +69 -0
- django_cfg/apps/payments/services/providers/base.py +1 -1
- django_cfg/apps/payments/services/providers/nowpayments/__init__.py +3 -3
- django_cfg/apps/payments/services/providers/nowpayments/parsers/__init__.py +9 -0
- django_cfg/apps/payments/services/providers/nowpayments/parsers/data/__init__.py +23 -0
- django_cfg/apps/payments/services/providers/nowpayments/parsers/data/constants.py +23 -0
- django_cfg/apps/payments/services/providers/nowpayments/parsers/data/currency_names.py +244 -0
- django_cfg/apps/payments/services/providers/nowpayments/parsers/data/patterns.py +511 -0
- django_cfg/apps/payments/services/providers/nowpayments/parsers/parser.py +168 -0
- django_cfg/apps/payments/services/providers/nowpayments/provider.py +1 -1
- django_cfg/apps/payments/services/providers/nowpayments/sync.py +1 -1
- django_cfg/apps/payments/services/providers/registry.py +1 -1
- django_cfg/apps/payments/services/providers/sync_service.py +1 -1
- django_cfg/apps/payments/signals/__init__.py +1 -1
- django_cfg/apps/payments/signals/api_key_signals.py +1 -1
- django_cfg/apps/payments/signals/balance_signals.py +1 -1
- django_cfg/apps/payments/signals/payment_signals.py +1 -1
- django_cfg/apps/payments/signals/subscription_signals.py +1 -1
- django_cfg/apps/payments/views/api/api_keys.py +1 -1
- django_cfg/apps/payments/views/api/balances.py +1 -1
- django_cfg/apps/payments/views/api/base.py +1 -1
- django_cfg/apps/payments/views/api/currencies.py +1 -1
- django_cfg/apps/payments/views/api/payments.py +1 -1
- django_cfg/apps/payments/views/api/subscriptions.py +1 -1
- django_cfg/apps/payments/views/api/webhooks.py +1 -1
- django_cfg/apps/payments/views/serializers/api_keys.py +1 -1
- django_cfg/apps/payments/views/serializers/balances.py +1 -1
- django_cfg/apps/payments/views/serializers/currencies.py +1 -1
- django_cfg/apps/payments/views/serializers/payments.py +1 -1
- django_cfg/apps/payments/views/serializers/subscriptions.py +1 -1
- django_cfg/apps/payments/views/serializers/webhooks.py +1 -1
- django_cfg/apps/support/admin/support_admin.py +21 -13
- django_cfg/apps/support/templates/support/chat/access_denied.html +21 -27
- django_cfg/apps/support/templates/support/chat/ticket_chat.html +183 -254
- django_cfg/apps/support/utils/support_email_service.py +1 -1
- django_cfg/apps/tasks/templates/tasks/layout/base.html +20 -115
- django_cfg/apps/tasks/utils/simulator.py +1 -1
- django_cfg/apps/tasks/views/dashboard.py +33 -3
- django_cfg/apps/urls.py +5 -1
- django_cfg/cli/README.md +57 -471
- django_cfg/cli/commands/create_project.py +140 -529
- django_cfg/cli/main.py +13 -10
- django_cfg/core/__init__.py +63 -6
- django_cfg/core/base/__init__.py +5 -0
- django_cfg/core/base/config_model.py +652 -0
- django_cfg/core/builders/__init__.py +11 -0
- django_cfg/core/builders/apps_builder.py +258 -0
- django_cfg/core/builders/middleware_builder.py +115 -0
- django_cfg/core/builders/security_builder.py +96 -0
- django_cfg/core/config.py +20 -892
- django_cfg/core/constants.py +69 -0
- django_cfg/core/environment/__init__.py +9 -0
- django_cfg/core/exceptions.py +45 -298
- django_cfg/core/generation/__init__.py +51 -0
- django_cfg/core/generation/core_generators/__init__.py +0 -0
- django_cfg/core/generation/core_generators/settings.py +90 -0
- django_cfg/core/generation/core_generators/static.py +82 -0
- django_cfg/core/generation/core_generators/templates.py +141 -0
- django_cfg/core/generation/data_generators/__init__.py +15 -0
- django_cfg/core/generation/data_generators/cache.py +132 -0
- django_cfg/core/generation/data_generators/database.py +117 -0
- django_cfg/core/generation/generation.py +92 -0
- django_cfg/core/generation/integration_generators/__init__.py +21 -0
- django_cfg/core/generation/integration_generators/api.py +237 -0
- django_cfg/core/generation/integration_generators/sessions.py +65 -0
- django_cfg/core/generation/integration_generators/tailwind.py +54 -0
- django_cfg/core/generation/integration_generators/tasks.py +92 -0
- django_cfg/core/generation/integration_generators/third_party.py +144 -0
- django_cfg/core/generation/orchestrator.py +285 -0
- django_cfg/core/generation/protocols.py +30 -0
- django_cfg/core/generation/security_generators/__init__.py +0 -0
- django_cfg/core/generation/utility_generators/__init__.py +24 -0
- django_cfg/core/generation/utility_generators/email.py +58 -0
- django_cfg/core/generation/utility_generators/i18n.py +66 -0
- django_cfg/core/generation/utility_generators/limits.py +58 -0
- django_cfg/core/generation/utility_generators/logging.py +66 -0
- django_cfg/core/generation/utility_generators/security.py +101 -0
- django_cfg/core/generation/utils/__init__.py +0 -0
- django_cfg/core/generation/utils/helpers.py +32 -0
- django_cfg/core/integration/__init__.py +18 -25
- django_cfg/core/integration/display/startup.py +146 -133
- django_cfg/core/integration/url_integration.py +13 -2
- django_cfg/core/services/__init__.py +5 -0
- django_cfg/core/services/config_service.py +121 -0
- django_cfg/core/state/__init__.py +9 -0
- django_cfg/core/state/registry.py +84 -0
- django_cfg/core/types/__init__.py +15 -0
- django_cfg/core/types/aliases.py +15 -0
- django_cfg/core/types/enums.py +49 -0
- django_cfg/dashboard/DEBUG_README.md +105 -0
- django_cfg/dashboard/REFACTORING_SUMMARY.md +237 -0
- django_cfg/dashboard/__init__.py +24 -0
- django_cfg/dashboard/components.py +308 -0
- django_cfg/dashboard/debug.py +176 -0
- django_cfg/dashboard/management/__init__.py +0 -0
- django_cfg/dashboard/management/commands/__init__.py +0 -0
- django_cfg/dashboard/management/commands/debug_dashboard.py +109 -0
- django_cfg/dashboard/sections/__init__.py +1 -0
- django_cfg/dashboard/sections/base.py +128 -0
- django_cfg/dashboard/sections/commands.py +32 -0
- django_cfg/dashboard/sections/overview.py +394 -0
- django_cfg/dashboard/sections/stats.py +48 -0
- django_cfg/dashboard/sections/system.py +73 -0
- django_cfg/management/commands/check_settings.py +6 -2
- django_cfg/management/commands/clear_constance.py +6 -1
- django_cfg/management/commands/create_token.py +5 -4
- django_cfg/management/commands/generate.py +5 -0
- django_cfg/management/commands/list_urls.py +7 -2
- django_cfg/management/commands/migrate_all.py +6 -2
- django_cfg/management/commands/migrator.py +6 -1
- django_cfg/management/commands/rundramatiq.py +6 -1
- django_cfg/management/commands/rundramatiq_simulator.py +11 -4
- django_cfg/management/commands/runserver_ngrok.py +9 -7
- django_cfg/management/commands/script.py +25 -21
- django_cfg/management/commands/show_config.py +6 -1
- django_cfg/management/commands/show_urls.py +8 -3
- django_cfg/management/commands/superuser.py +5 -4
- django_cfg/management/commands/task_clear.py +8 -3
- django_cfg/management/commands/task_status.py +8 -3
- django_cfg/management/commands/test_email.py +6 -1
- django_cfg/management/commands/test_telegram.py +6 -1
- django_cfg/management/commands/test_twilio.py +6 -1
- django_cfg/management/commands/tree.py +7 -4
- django_cfg/models/__init__.py +88 -3
- django_cfg/models/api/__init__.py +27 -0
- django_cfg/models/{api.py → api/config.py} +1 -1
- django_cfg/models/api/drf/__init__.py +21 -0
- django_cfg/models/api/drf/config.py +101 -0
- django_cfg/models/api/drf/redoc.py +31 -0
- django_cfg/models/api/drf/spectacular.py +129 -0
- django_cfg/models/api/drf/swagger.py +59 -0
- django_cfg/models/{api_keys.py → api/keys.py} +16 -6
- django_cfg/models/{limits.py → api/limits.py} +0 -1
- django_cfg/models/base/__init__.py +14 -0
- django_cfg/models/django/__init__.py +16 -0
- django_cfg/models/{constance.py → django/constance.py} +1 -1
- django_cfg/models/{environment.py → django/environment.py} +1 -1
- django_cfg/models/infrastructure/__init__.py +17 -0
- django_cfg/models/{cache.py → infrastructure/cache.py} +3 -2
- django_cfg/models/infrastructure/database/__init__.py +22 -0
- django_cfg/models/infrastructure/database/config.py +265 -0
- django_cfg/models/infrastructure/database/converters.py +91 -0
- django_cfg/models/infrastructure/database/parsers.py +96 -0
- django_cfg/models/infrastructure/database/routing.py +85 -0
- django_cfg/models/infrastructure/database/validators.py +170 -0
- django_cfg/models/{logging.py → infrastructure/logging.py} +1 -1
- django_cfg/models/{security.py → infrastructure/security.py} +2 -2
- django_cfg/models/ngrok/__init__.py +11 -0
- django_cfg/models/ngrok/auth.py +37 -0
- django_cfg/models/ngrok/config.py +77 -0
- django_cfg/models/ngrok/tunnel.py +35 -0
- django_cfg/models/payments/__init__.py +20 -0
- django_cfg/models/payments/api_keys.py +57 -0
- django_cfg/models/{payments.py → payments/config.py} +56 -154
- django_cfg/models/payments/providers/__init__.py +15 -0
- django_cfg/models/payments/providers/base.py +25 -0
- django_cfg/models/payments/providers/nowpayments.py +48 -0
- django_cfg/models/services/__init__.py +18 -0
- django_cfg/models/services/base.py +65 -0
- django_cfg/models/{email.py → services/email.py} +1 -1
- django_cfg/models/services/telegram.py +172 -0
- django_cfg/models/tasks/__init__.py +51 -0
- django_cfg/models/tasks/backends.py +250 -0
- django_cfg/models/tasks/config.py +314 -0
- django_cfg/models/tasks/utils.py +174 -0
- django_cfg/modules/base.py +18 -3
- django_cfg/modules/django_admin/decorators/actions.py +1 -1
- django_cfg/modules/django_admin/decorators/display.py +1 -1
- django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +1 -1
- django_cfg/modules/django_cfg_rpc_client/README.md +346 -0
- django_cfg/modules/django_cfg_rpc_client/__init__.py +51 -0
- django_cfg/modules/django_cfg_rpc_client/client.py +540 -0
- django_cfg/modules/django_cfg_rpc_client/config.py +207 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/README.md +517 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/UNFOLD_INTEGRATION.md +439 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/__init__.py +11 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/apps.py +22 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/monitor.py +435 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/static/django_cfg_rpc_dashboard/js/dashboard.js +373 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/templates/django_cfg_rpc_dashboard/base.html +76 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/templates/django_cfg_rpc_dashboard/dashboard.html +200 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/urls.py +22 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/urls_admin.py +9 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/views.py +251 -0
- django_cfg/modules/django_cfg_rpc_client/exceptions.py +201 -0
- django_cfg/modules/django_drf_theme/CHANGELOG.md +210 -0
- django_cfg/modules/django_drf_theme/EXAMPLE.md +465 -0
- django_cfg/modules/django_drf_theme/IMPLEMENTATION.md +232 -0
- django_cfg/modules/django_drf_theme/README.md +207 -0
- django_cfg/modules/django_drf_theme/TAILWIND_CDN_GUIDE.md +274 -0
- django_cfg/modules/django_drf_theme/__init__.py +23 -0
- django_cfg/modules/django_drf_theme/apps.py +15 -0
- django_cfg/modules/django_drf_theme/renderers.py +58 -0
- django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/api.html +375 -0
- django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/base.html +938 -0
- django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/filter_form.html +132 -0
- django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/raw_data_form.html +123 -0
- django_cfg/modules/django_drf_theme/templatetags/__init__.py +1 -0
- django_cfg/modules/django_drf_theme/templatetags/tailwind_tags.py +57 -0
- django_cfg/modules/django_email/__init__.py +14 -0
- django_cfg/modules/{django_email.py → django_email/service.py} +78 -113
- django_cfg/modules/django_email/utils.py +40 -0
- django_cfg/modules/django_health/__init__.py +9 -0
- django_cfg/modules/{django_health.py → django_health/service.py} +23 -21
- django_cfg/modules/django_llm/llm/client.py +155 -550
- django_cfg/modules/django_llm/llm/embeddings/__init__.py +13 -0
- django_cfg/modules/django_llm/llm/embeddings/mock_embedder.py +106 -0
- django_cfg/modules/django_llm/llm/embeddings/openai_embedder.py +79 -0
- django_cfg/modules/django_llm/llm/models_api/__init__.py +9 -0
- django_cfg/modules/django_llm/llm/models_api/models_query.py +163 -0
- django_cfg/modules/django_llm/llm/providers/__init__.py +15 -0
- django_cfg/modules/django_llm/llm/providers/config_builder.py +103 -0
- django_cfg/modules/django_llm/llm/providers/provider_manager.py +148 -0
- django_cfg/modules/django_llm/llm/providers/provider_selector.py +60 -0
- django_cfg/modules/django_llm/llm/requests/__init__.py +15 -0
- django_cfg/modules/django_llm/llm/requests/cache_manager.py +170 -0
- django_cfg/modules/django_llm/llm/requests/chat_handler.py +199 -0
- django_cfg/modules/django_llm/llm/requests/embedding_handler.py +113 -0
- django_cfg/modules/django_llm/llm/responses/__init__.py +9 -0
- django_cfg/modules/django_llm/llm/responses/response_builder.py +131 -0
- django_cfg/modules/django_llm/llm/stats/__init__.py +9 -0
- django_cfg/modules/django_llm/llm/stats/stats_manager.py +107 -0
- django_cfg/modules/django_llm/translator/detectors/__init__.py +13 -0
- django_cfg/modules/django_llm/translator/detectors/language_detector.py +90 -0
- django_cfg/modules/django_llm/translator/detectors/script_detector.py +153 -0
- django_cfg/modules/django_llm/translator/stats/__init__.py +11 -0
- django_cfg/modules/django_llm/translator/stats/stats_tracker.py +85 -0
- django_cfg/modules/django_llm/translator/translator.py +150 -603
- django_cfg/modules/django_llm/translator/translators/__init__.py +15 -0
- django_cfg/modules/django_llm/translator/translators/json_translator.py +316 -0
- django_cfg/modules/django_llm/translator/translators/text_translator.py +139 -0
- django_cfg/modules/django_llm/translator/utils/__init__.py +13 -0
- django_cfg/modules/django_llm/translator/utils/prompt_builder.py +110 -0
- django_cfg/modules/django_llm/translator/utils/text_utils.py +114 -0
- django_cfg/modules/django_logging/FIXES_SUMMARY.md +276 -0
- django_cfg/modules/django_logging/LOGGING_GUIDE.md +504 -0
- django_cfg/modules/django_logging/__init__.py +14 -0
- django_cfg/modules/{django_logger.py → django_logging/django_logger.py} +13 -13
- django_cfg/modules/{logger.py → django_logging/logger.py} +14 -4
- django_cfg/modules/django_ngrok/__init__.py +39 -0
- django_cfg/modules/{django_ngrok.py → django_ngrok/service.py} +14 -42
- django_cfg/modules/django_rpc_old/POETRY.md +344 -0
- django_cfg/modules/django_rpc_old/README.md +397 -0
- django_cfg/modules/django_rpc_old/TESTING.md +358 -0
- django_cfg/modules/django_rpc_old/__init__.py +39 -0
- django_cfg/modules/django_rpc_old/client.py +531 -0
- django_cfg/modules/django_rpc_old/config.py +279 -0
- django_cfg/modules/django_rpc_old/exceptions.py +172 -0
- django_cfg/modules/django_tailwind/README.md +478 -0
- django_cfg/modules/django_tailwind/__init__.py +7 -0
- django_cfg/modules/django_tailwind/apps.py +10 -0
- django_cfg/modules/django_tailwind/templates/django_tailwind/app.html +5 -0
- django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +117 -0
- django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +124 -0
- django_cfg/modules/django_tailwind/templates/django_tailwind/components/theme_toggle.html +54 -0
- django_cfg/modules/django_tailwind/templates/django_tailwind/components/user_menu.html +116 -0
- django_cfg/modules/django_tailwind/templates/django_tailwind/simple.html +46 -0
- django_cfg/modules/django_tailwind/templatetags/__init__.py +1 -0
- django_cfg/modules/django_tailwind/templatetags/tailwind_info.py +185 -0
- django_cfg/modules/django_tasks/__init__.py +29 -0
- django_cfg/modules/django_tasks/factory.py +127 -0
- django_cfg/modules/{django_tasks.py → django_tasks/service.py} +45 -274
- django_cfg/modules/django_tasks/settings.py +107 -0
- django_cfg/modules/django_telegram/__init__.py +29 -0
- django_cfg/modules/{django_telegram.py → django_telegram/service.py} +45 -113
- django_cfg/modules/django_telegram/utils.py +62 -0
- django_cfg/modules/django_twilio/__init__.py +54 -107
- django_cfg/modules/django_twilio/_imports.py +30 -0
- django_cfg/modules/django_twilio/base.py +192 -0
- django_cfg/modules/django_twilio/email_otp.py +227 -0
- django_cfg/modules/django_twilio/sendgrid_service.py +1 -1
- django_cfg/modules/django_twilio/simple_service.py +1 -2
- django_cfg/modules/django_twilio/sms.py +94 -0
- django_cfg/modules/django_twilio/twilio_service.py +2 -3
- django_cfg/modules/django_twilio/unified.py +310 -0
- django_cfg/modules/django_twilio/utils.py +190 -0
- django_cfg/modules/django_twilio/whatsapp.py +137 -0
- django_cfg/modules/django_unfold/callbacks/base.py +198 -7
- django_cfg/modules/django_unfold/callbacks/main.py +102 -10
- django_cfg/modules/django_unfold/dashboard.py +65 -43
- django_cfg/modules/django_unfold/models/config.py +13 -12
- django_cfg/modules/django_unfold/models/navigation.py +8 -3
- django_cfg/modules/django_unfold/models/tabs.py +2 -2
- django_cfg/modules/django_unfold/templates/unfold/helpers/app_list.html +102 -0
- django_cfg/registry/core.py +24 -26
- django_cfg/registry/modules.py +5 -2
- django_cfg/registry/services.py +20 -3
- django_cfg/registry/third_party.py +8 -8
- django_cfg/static/admin/css/dashboard.css +260 -0
- django_cfg/static/admin/js/commands.js +171 -0
- django_cfg/static/admin/js/dashboard.js +126 -0
- django_cfg/templates/admin/components/management_commands.js +375 -0
- django_cfg/templates/admin/components/progress_bar.html +18 -23
- django_cfg/templates/admin/index.html +48 -20
- django_cfg/templates/admin/index_new.html +106 -0
- django_cfg/templates/admin/layouts/base_dashboard.html +60 -0
- django_cfg/templates/admin/layouts/dashboard_with_tabs.html +1 -20
- django_cfg/templates/admin/sections/commands_section.html +626 -0
- django_cfg/templates/admin/sections/overview_section.html +112 -0
- django_cfg/templates/admin/sections/stats_section.html +35 -0
- django_cfg/templates/admin/sections/system_section.html +99 -0
- django_cfg/templates/admin/snippets/components/CHARTS_GUIDE.md +322 -0
- django_cfg/templates/admin/snippets/components/activity_tracker.html +85 -47
- django_cfg/templates/admin/snippets/components/charts_section.html +154 -64
- django_cfg/templates/admin/snippets/components/django_commands.html +3 -3
- django_cfg/templates/admin/snippets/components/recent_activity_improved.html +25 -0
- django_cfg/templates/admin/snippets/components/recent_users_table.html +1 -1
- django_cfg/templates/admin/snippets/components/system_metrics.html +179 -93
- django_cfg/templates/admin/snippets/zones/zones_table.html +2 -2
- django_cfg/templatetags/django_cfg.py +7 -1
- django_cfg/utils/smart_defaults.py +4 -4
- django_cfg-1.4.0.dist-info/METADATA +920 -0
- {django_cfg-1.3.13.dist-info → django_cfg-1.4.0.dist-info}/RECORD +424 -195
- django_cfg/apps/accounts/utils/auth_email_service.py +0 -84
- django_cfg/apps/payments/services/providers/nowpayments/parsers.py +0 -879
- django_cfg/core/generation.py +0 -621
- django_cfg/management/commands/validate_config.py +0 -189
- django_cfg/models/database.py +0 -480
- django_cfg/models/drf.py +0 -272
- django_cfg/models/ngrok.py +0 -122
- django_cfg/models/services.py +0 -440
- django_cfg/models/tasks.py +0 -550
- django_cfg/modules/django_twilio/service.py +0 -942
- django_cfg/template_archive/django_sample.zip +0 -0
- django_cfg/templates/rest_framework/api.html +0 -12
- django_cfg/utils/toolkit.py +0 -703
- django_cfg-1.3.13.dist-info/METADATA +0 -1029
- /django_cfg/apps/accounts/management/commands/{test_otp.py → otp_test.py} +0 -0
- /django_cfg/core/{environment.py → environment/detector.py} +0 -0
- /django_cfg/models/{cors.py → api/cors.py} +0 -0
- /django_cfg/models/{jwt.py → api/jwt.py} +0 -0
- /django_cfg/models/{base.py → base/config.py} +0 -0
- /django_cfg/models/{cfg.py → base/module.py} +0 -0
- /django_cfg/models/{revolution.py → django/revolution.py} +0 -0
- /django_cfg/modules/{dramatiq_setup.py → django_tasks/dramatiq_setup.py} +0 -0
- {django_cfg-1.3.13.dist-info → django_cfg-1.4.0.dist-info}/WHEEL +0 -0
- {django_cfg-1.3.13.dist-info → django_cfg-1.4.0.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.3.13.dist-info → django_cfg-1.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,285 @@
|
|
1
|
+
"""
|
2
|
+
Settings generation orchestrator.
|
3
|
+
|
4
|
+
Coordinates all specialized generators to produce complete Django settings.
|
5
|
+
Size: ~200 lines (orchestration logic)
|
6
|
+
"""
|
7
|
+
|
8
|
+
from typing import Dict, Any, List, TYPE_CHECKING
|
9
|
+
import logging
|
10
|
+
|
11
|
+
from django_cfg.core.exceptions import ConfigurationError
|
12
|
+
|
13
|
+
if TYPE_CHECKING:
|
14
|
+
from ..base.config_model import DjangoConfig
|
15
|
+
|
16
|
+
logger = logging.getLogger(__name__)
|
17
|
+
|
18
|
+
|
19
|
+
class SettingsOrchestrator:
|
20
|
+
"""
|
21
|
+
Orchestrates Django settings generation from DjangoConfig.
|
22
|
+
|
23
|
+
Responsibilities:
|
24
|
+
- Coordinate all specialized generators
|
25
|
+
- Merge settings in correct order
|
26
|
+
- Apply additional settings
|
27
|
+
- Validate generated settings
|
28
|
+
- Handle errors gracefully
|
29
|
+
|
30
|
+
Example:
|
31
|
+
```python
|
32
|
+
orchestrator = SettingsOrchestrator(config)
|
33
|
+
settings = orchestrator.generate()
|
34
|
+
```
|
35
|
+
"""
|
36
|
+
|
37
|
+
def __init__(self, config: "DjangoConfig"):
|
38
|
+
"""
|
39
|
+
Initialize orchestrator with configuration.
|
40
|
+
|
41
|
+
Args:
|
42
|
+
config: DjangoConfig instance
|
43
|
+
"""
|
44
|
+
self.config = config
|
45
|
+
|
46
|
+
def generate(self) -> Dict[str, Any]:
|
47
|
+
"""
|
48
|
+
Generate complete Django settings dictionary.
|
49
|
+
|
50
|
+
Returns:
|
51
|
+
Complete Django settings dictionary
|
52
|
+
|
53
|
+
Raises:
|
54
|
+
ConfigurationError: If settings generation fails
|
55
|
+
|
56
|
+
Example:
|
57
|
+
>>> orchestrator = SettingsOrchestrator(config)
|
58
|
+
>>> settings = orchestrator.generate()
|
59
|
+
>>> "SECRET_KEY" in settings
|
60
|
+
True
|
61
|
+
"""
|
62
|
+
try:
|
63
|
+
settings = {}
|
64
|
+
|
65
|
+
# Generate settings in dependency order
|
66
|
+
settings.update(self._generate_core_settings())
|
67
|
+
settings.update(self._generate_template_settings())
|
68
|
+
settings.update(self._generate_static_settings())
|
69
|
+
settings.update(self._generate_database_settings())
|
70
|
+
settings.update(self._generate_cache_settings())
|
71
|
+
settings.update(self._generate_security_settings())
|
72
|
+
settings.update(self._generate_email_settings())
|
73
|
+
settings.update(self._generate_logging_settings())
|
74
|
+
settings.update(self._generate_i18n_settings())
|
75
|
+
settings.update(self._generate_limits_settings())
|
76
|
+
settings.update(self._generate_session_settings())
|
77
|
+
settings.update(self._generate_third_party_settings())
|
78
|
+
settings.update(self._generate_api_settings())
|
79
|
+
settings.update(self._generate_tasks_settings())
|
80
|
+
settings.update(self._generate_tailwind_settings())
|
81
|
+
|
82
|
+
# Apply additional settings (user overrides)
|
83
|
+
settings.update(self._get_additional_settings())
|
84
|
+
|
85
|
+
return settings
|
86
|
+
|
87
|
+
except Exception as e:
|
88
|
+
raise ConfigurationError(f"Failed to generate settings: {e}") from e
|
89
|
+
|
90
|
+
def _generate_core_settings(self) -> Dict[str, Any]:
|
91
|
+
"""Generate core Django settings."""
|
92
|
+
try:
|
93
|
+
from .core_generators.settings import CoreSettingsGenerator
|
94
|
+
generator = CoreSettingsGenerator(self.config)
|
95
|
+
return generator.generate()
|
96
|
+
except Exception as e:
|
97
|
+
raise ConfigurationError(f"Failed to generate core settings: {e}") from e
|
98
|
+
|
99
|
+
def _generate_template_settings(self) -> Dict[str, Any]:
|
100
|
+
"""Generate template settings."""
|
101
|
+
try:
|
102
|
+
from .core_generators.templates import TemplateSettingsGenerator
|
103
|
+
generator = TemplateSettingsGenerator(self.config)
|
104
|
+
return generator.generate()
|
105
|
+
except Exception as e:
|
106
|
+
raise ConfigurationError(f"Failed to generate template settings: {e}") from e
|
107
|
+
|
108
|
+
def _generate_static_settings(self) -> Dict[str, Any]:
|
109
|
+
"""Generate static files settings."""
|
110
|
+
try:
|
111
|
+
from .core_generators.static import StaticFilesGenerator
|
112
|
+
generator = StaticFilesGenerator(self.config)
|
113
|
+
return generator.generate()
|
114
|
+
except Exception as e:
|
115
|
+
raise ConfigurationError(f"Failed to generate static settings: {e}") from e
|
116
|
+
|
117
|
+
def _generate_database_settings(self) -> Dict[str, Any]:
|
118
|
+
"""Generate database settings."""
|
119
|
+
try:
|
120
|
+
from .data_generators.database import DatabaseSettingsGenerator
|
121
|
+
generator = DatabaseSettingsGenerator(self.config)
|
122
|
+
return generator.generate()
|
123
|
+
except Exception as e:
|
124
|
+
raise ConfigurationError(f"Failed to generate database settings: {e}") from e
|
125
|
+
|
126
|
+
def _generate_cache_settings(self) -> Dict[str, Any]:
|
127
|
+
"""Generate cache settings."""
|
128
|
+
try:
|
129
|
+
from .data_generators.cache import CacheSettingsGenerator
|
130
|
+
generator = CacheSettingsGenerator(self.config)
|
131
|
+
return generator.generate()
|
132
|
+
except Exception as e:
|
133
|
+
raise ConfigurationError(f"Failed to generate cache settings: {e}") from e
|
134
|
+
|
135
|
+
def _generate_security_settings(self) -> Dict[str, Any]:
|
136
|
+
"""Generate security settings."""
|
137
|
+
try:
|
138
|
+
from .utility_generators.security import SecuritySettingsGenerator
|
139
|
+
generator = SecuritySettingsGenerator(self.config)
|
140
|
+
return generator.generate()
|
141
|
+
except Exception as e:
|
142
|
+
raise ConfigurationError(f"Failed to generate security settings: {e}") from e
|
143
|
+
|
144
|
+
def _generate_email_settings(self) -> Dict[str, Any]:
|
145
|
+
"""Generate email settings."""
|
146
|
+
try:
|
147
|
+
from .utility_generators.email import EmailSettingsGenerator
|
148
|
+
generator = EmailSettingsGenerator(self.config)
|
149
|
+
return generator.generate()
|
150
|
+
except Exception as e:
|
151
|
+
raise ConfigurationError(f"Failed to generate email settings: {e}") from e
|
152
|
+
|
153
|
+
def _generate_logging_settings(self) -> Dict[str, Any]:
|
154
|
+
"""Generate logging settings."""
|
155
|
+
try:
|
156
|
+
from .utility_generators.logging import LoggingSettingsGenerator
|
157
|
+
generator = LoggingSettingsGenerator(self.config)
|
158
|
+
return generator.generate()
|
159
|
+
except Exception as e:
|
160
|
+
raise ConfigurationError(f"Failed to generate logging settings: {e}") from e
|
161
|
+
|
162
|
+
def _generate_i18n_settings(self) -> Dict[str, Any]:
|
163
|
+
"""Generate i18n settings."""
|
164
|
+
try:
|
165
|
+
from .utility_generators.i18n import I18nSettingsGenerator
|
166
|
+
generator = I18nSettingsGenerator(self.config)
|
167
|
+
return generator.generate()
|
168
|
+
except Exception as e:
|
169
|
+
raise ConfigurationError(f"Failed to generate i18n settings: {e}") from e
|
170
|
+
|
171
|
+
def _generate_limits_settings(self) -> Dict[str, Any]:
|
172
|
+
"""Generate limits settings."""
|
173
|
+
try:
|
174
|
+
from .utility_generators.limits import LimitsSettingsGenerator
|
175
|
+
generator = LimitsSettingsGenerator(self.config)
|
176
|
+
return generator.generate()
|
177
|
+
except Exception as e:
|
178
|
+
raise ConfigurationError(f"Failed to generate limits settings: {e}") from e
|
179
|
+
|
180
|
+
def _generate_session_settings(self) -> Dict[str, Any]:
|
181
|
+
"""Generate session settings."""
|
182
|
+
try:
|
183
|
+
from .integration_generators.sessions import SessionSettingsGenerator
|
184
|
+
generator = SessionSettingsGenerator(self.config)
|
185
|
+
return generator.generate()
|
186
|
+
except Exception as e:
|
187
|
+
raise ConfigurationError(f"Failed to generate session settings: {e}") from e
|
188
|
+
|
189
|
+
def _generate_third_party_settings(self) -> Dict[str, Any]:
|
190
|
+
"""Generate third-party integration settings."""
|
191
|
+
try:
|
192
|
+
from .integration_generators.third_party import ThirdPartyIntegrationsGenerator
|
193
|
+
generator = ThirdPartyIntegrationsGenerator(self.config)
|
194
|
+
return generator.generate()
|
195
|
+
except Exception as e:
|
196
|
+
raise ConfigurationError(f"Failed to generate third-party settings: {e}") from e
|
197
|
+
|
198
|
+
def _generate_api_settings(self) -> Dict[str, Any]:
|
199
|
+
"""Generate API framework settings."""
|
200
|
+
try:
|
201
|
+
from .integration_generators.api import APIFrameworksGenerator
|
202
|
+
generator = APIFrameworksGenerator(self.config)
|
203
|
+
return generator.generate()
|
204
|
+
except Exception as e:
|
205
|
+
raise ConfigurationError(f"Failed to generate API settings: {e}") from e
|
206
|
+
|
207
|
+
def _generate_tasks_settings(self) -> Dict[str, Any]:
|
208
|
+
"""Generate background tasks settings."""
|
209
|
+
try:
|
210
|
+
from .integration_generators.tasks import TasksSettingsGenerator
|
211
|
+
generator = TasksSettingsGenerator(self.config)
|
212
|
+
return generator.generate()
|
213
|
+
except Exception as e:
|
214
|
+
raise ConfigurationError(f"Failed to generate tasks settings: {e}") from e
|
215
|
+
|
216
|
+
def _generate_tailwind_settings(self) -> Dict[str, Any]:
|
217
|
+
"""Generate Tailwind CSS settings."""
|
218
|
+
try:
|
219
|
+
from .integration_generators.tailwind import TailwindSettingsGenerator
|
220
|
+
generator = TailwindSettingsGenerator(self.config)
|
221
|
+
return generator.generate()
|
222
|
+
except Exception as e:
|
223
|
+
raise ConfigurationError(f"Failed to generate Tailwind settings: {e}") from e
|
224
|
+
|
225
|
+
def _get_additional_settings(self) -> Dict[str, Any]:
|
226
|
+
"""
|
227
|
+
Get additional settings from config (user overrides).
|
228
|
+
|
229
|
+
Returns:
|
230
|
+
Dictionary with additional settings
|
231
|
+
"""
|
232
|
+
if hasattr(self.config, "get_additional_settings"):
|
233
|
+
return self.config.get_additional_settings()
|
234
|
+
return {}
|
235
|
+
|
236
|
+
@staticmethod
|
237
|
+
def validate_settings(settings: Dict[str, Any]) -> List[str]:
|
238
|
+
"""
|
239
|
+
Validate generated Django settings.
|
240
|
+
|
241
|
+
Args:
|
242
|
+
settings: Generated Django settings
|
243
|
+
|
244
|
+
Returns:
|
245
|
+
List of validation errors (empty if valid)
|
246
|
+
|
247
|
+
Example:
|
248
|
+
>>> errors = SettingsOrchestrator.validate_settings(settings)
|
249
|
+
>>> if errors:
|
250
|
+
... print("Validation errors:", errors)
|
251
|
+
"""
|
252
|
+
errors = []
|
253
|
+
|
254
|
+
# Required settings validation
|
255
|
+
required_settings = [
|
256
|
+
"SECRET_KEY",
|
257
|
+
"DEBUG",
|
258
|
+
"ALLOWED_HOSTS",
|
259
|
+
"INSTALLED_APPS",
|
260
|
+
"MIDDLEWARE",
|
261
|
+
"DATABASES"
|
262
|
+
]
|
263
|
+
|
264
|
+
for setting in required_settings:
|
265
|
+
if setting not in settings:
|
266
|
+
errors.append(f"Missing required setting: {setting}")
|
267
|
+
|
268
|
+
# SECRET_KEY validation
|
269
|
+
if "SECRET_KEY" in settings:
|
270
|
+
secret_key = settings["SECRET_KEY"]
|
271
|
+
if not secret_key or len(secret_key) < 50:
|
272
|
+
errors.append("SECRET_KEY must be at least 50 characters long")
|
273
|
+
|
274
|
+
# DATABASES validation
|
275
|
+
if "DATABASES" in settings:
|
276
|
+
databases = settings["DATABASES"]
|
277
|
+
if not databases:
|
278
|
+
errors.append("DATABASES cannot be empty")
|
279
|
+
elif "default" not in databases:
|
280
|
+
errors.append("DATABASES must contain a 'default' database")
|
281
|
+
|
282
|
+
return errors
|
283
|
+
|
284
|
+
|
285
|
+
__all__ = ["SettingsOrchestrator"]
|
@@ -0,0 +1,30 @@
|
|
1
|
+
"""
|
2
|
+
Generator protocols for type safety.
|
3
|
+
|
4
|
+
Defines interfaces that all settings generators must implement.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from typing import Protocol, Dict, Any, TYPE_CHECKING
|
8
|
+
|
9
|
+
if TYPE_CHECKING:
|
10
|
+
from ..base.config_model import DjangoConfig
|
11
|
+
|
12
|
+
|
13
|
+
class SettingsGeneratorProtocol(Protocol):
|
14
|
+
"""Protocol for all settings generators."""
|
15
|
+
|
16
|
+
def __init__(self, config: "DjangoConfig") -> None:
|
17
|
+
"""Initialize generator with configuration."""
|
18
|
+
...
|
19
|
+
|
20
|
+
def generate(self) -> Dict[str, Any]:
|
21
|
+
"""
|
22
|
+
Generate Django settings dictionary.
|
23
|
+
|
24
|
+
Returns:
|
25
|
+
Dictionary of Django settings
|
26
|
+
"""
|
27
|
+
...
|
28
|
+
|
29
|
+
|
30
|
+
__all__ = ["SettingsGeneratorProtocol"]
|
File without changes
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"""
|
2
|
+
Utility generators module.
|
3
|
+
|
4
|
+
Contains generators for utility Django settings:
|
5
|
+
- Email configuration
|
6
|
+
- Logging settings
|
7
|
+
- Internationalization (i18n/l10n)
|
8
|
+
- Application limits
|
9
|
+
- Security settings
|
10
|
+
"""
|
11
|
+
|
12
|
+
from .email import EmailSettingsGenerator
|
13
|
+
from .logging import LoggingSettingsGenerator
|
14
|
+
from .i18n import I18nSettingsGenerator
|
15
|
+
from .limits import LimitsSettingsGenerator
|
16
|
+
from .security import SecuritySettingsGenerator
|
17
|
+
|
18
|
+
__all__ = [
|
19
|
+
"EmailSettingsGenerator",
|
20
|
+
"LoggingSettingsGenerator",
|
21
|
+
"I18nSettingsGenerator",
|
22
|
+
"LimitsSettingsGenerator",
|
23
|
+
"SecuritySettingsGenerator",
|
24
|
+
]
|
@@ -0,0 +1,58 @@
|
|
1
|
+
"""
|
2
|
+
Email settings generator.
|
3
|
+
|
4
|
+
Handles Django email configuration.
|
5
|
+
Size: ~50 lines (focused on email settings)
|
6
|
+
"""
|
7
|
+
|
8
|
+
from typing import Dict, Any, TYPE_CHECKING
|
9
|
+
|
10
|
+
if TYPE_CHECKING:
|
11
|
+
from ...base.config_model import DjangoConfig
|
12
|
+
|
13
|
+
|
14
|
+
class EmailSettingsGenerator:
|
15
|
+
"""
|
16
|
+
Generates email settings.
|
17
|
+
|
18
|
+
Responsibilities:
|
19
|
+
- EMAIL_BACKEND configuration
|
20
|
+
- SMTP settings
|
21
|
+
- Email authentication
|
22
|
+
|
23
|
+
Example:
|
24
|
+
```python
|
25
|
+
generator = EmailSettingsGenerator(config)
|
26
|
+
settings = generator.generate()
|
27
|
+
```
|
28
|
+
"""
|
29
|
+
|
30
|
+
def __init__(self, config: "DjangoConfig"):
|
31
|
+
"""
|
32
|
+
Initialize generator with configuration.
|
33
|
+
|
34
|
+
Args:
|
35
|
+
config: DjangoConfig instance
|
36
|
+
"""
|
37
|
+
self.config = config
|
38
|
+
|
39
|
+
def generate(self) -> Dict[str, Any]:
|
40
|
+
"""
|
41
|
+
Generate email settings.
|
42
|
+
|
43
|
+
Returns:
|
44
|
+
Dictionary with email configuration
|
45
|
+
|
46
|
+
Example:
|
47
|
+
>>> generator = EmailSettingsGenerator(config)
|
48
|
+
>>> settings = generator.generate()
|
49
|
+
"""
|
50
|
+
if not self.config.email:
|
51
|
+
return {}
|
52
|
+
|
53
|
+
email_settings = self.config.email.to_django_settings()
|
54
|
+
|
55
|
+
return email_settings
|
56
|
+
|
57
|
+
|
58
|
+
__all__ = ["EmailSettingsGenerator"]
|
@@ -0,0 +1,66 @@
|
|
1
|
+
"""
|
2
|
+
Internationalization settings generator.
|
3
|
+
|
4
|
+
Handles Django i18n/l10n configuration.
|
5
|
+
Size: ~60 lines (focused on i18n settings)
|
6
|
+
"""
|
7
|
+
|
8
|
+
from typing import Dict, Any, TYPE_CHECKING
|
9
|
+
|
10
|
+
if TYPE_CHECKING:
|
11
|
+
from ...base.config_model import DjangoConfig
|
12
|
+
|
13
|
+
|
14
|
+
class I18nSettingsGenerator:
|
15
|
+
"""
|
16
|
+
Generates internationalization settings.
|
17
|
+
|
18
|
+
Responsibilities:
|
19
|
+
- LANGUAGE_CODE, TIME_ZONE
|
20
|
+
- USE_I18N, USE_TZ flags
|
21
|
+
- Localization settings
|
22
|
+
|
23
|
+
Example:
|
24
|
+
```python
|
25
|
+
generator = I18nSettingsGenerator(config)
|
26
|
+
settings = generator.generate()
|
27
|
+
```
|
28
|
+
"""
|
29
|
+
|
30
|
+
def __init__(self, config: "DjangoConfig"):
|
31
|
+
"""
|
32
|
+
Initialize generator with configuration.
|
33
|
+
|
34
|
+
Args:
|
35
|
+
config: DjangoConfig instance
|
36
|
+
"""
|
37
|
+
self.config = config
|
38
|
+
|
39
|
+
def generate(self) -> Dict[str, Any]:
|
40
|
+
"""
|
41
|
+
Generate i18n settings.
|
42
|
+
|
43
|
+
Returns:
|
44
|
+
Dictionary with i18n configuration
|
45
|
+
|
46
|
+
Example:
|
47
|
+
>>> generator = I18nSettingsGenerator(config)
|
48
|
+
>>> settings = generator.generate()
|
49
|
+
>>> "LANGUAGE_CODE" in settings
|
50
|
+
True
|
51
|
+
"""
|
52
|
+
settings = {
|
53
|
+
"LANGUAGE_CODE": "en-us",
|
54
|
+
"TIME_ZONE": "UTC",
|
55
|
+
"USE_I18N": True,
|
56
|
+
"USE_TZ": True,
|
57
|
+
}
|
58
|
+
|
59
|
+
# Adjust for different environments
|
60
|
+
if self.config.env_mode == "development":
|
61
|
+
settings["USE_L10N"] = True # Deprecated but sometimes needed
|
62
|
+
|
63
|
+
return settings
|
64
|
+
|
65
|
+
|
66
|
+
__all__ = ["I18nSettingsGenerator"]
|
@@ -0,0 +1,58 @@
|
|
1
|
+
"""
|
2
|
+
Application limits settings generator.
|
3
|
+
|
4
|
+
Handles request limits and rate limiting configuration.
|
5
|
+
Size: ~50 lines (focused on limits settings)
|
6
|
+
"""
|
7
|
+
|
8
|
+
from typing import Dict, Any, TYPE_CHECKING
|
9
|
+
|
10
|
+
if TYPE_CHECKING:
|
11
|
+
from ...base.config_model import DjangoConfig
|
12
|
+
|
13
|
+
|
14
|
+
class LimitsSettingsGenerator:
|
15
|
+
"""
|
16
|
+
Generates application limits settings.
|
17
|
+
|
18
|
+
Responsibilities:
|
19
|
+
- DATA_UPLOAD_MAX_MEMORY_SIZE
|
20
|
+
- FILE_UPLOAD_MAX_MEMORY_SIZE
|
21
|
+
- Rate limiting configuration
|
22
|
+
|
23
|
+
Example:
|
24
|
+
```python
|
25
|
+
generator = LimitsSettingsGenerator(config)
|
26
|
+
settings = generator.generate()
|
27
|
+
```
|
28
|
+
"""
|
29
|
+
|
30
|
+
def __init__(self, config: "DjangoConfig"):
|
31
|
+
"""
|
32
|
+
Initialize generator with configuration.
|
33
|
+
|
34
|
+
Args:
|
35
|
+
config: DjangoConfig instance
|
36
|
+
"""
|
37
|
+
self.config = config
|
38
|
+
|
39
|
+
def generate(self) -> Dict[str, Any]:
|
40
|
+
"""
|
41
|
+
Generate limits settings.
|
42
|
+
|
43
|
+
Returns:
|
44
|
+
Dictionary with limits configuration
|
45
|
+
|
46
|
+
Example:
|
47
|
+
>>> generator = LimitsSettingsGenerator(config)
|
48
|
+
>>> settings = generator.generate()
|
49
|
+
"""
|
50
|
+
if not self.config.limits:
|
51
|
+
return {}
|
52
|
+
|
53
|
+
limits_settings = self.config.limits.to_django_settings()
|
54
|
+
|
55
|
+
return limits_settings
|
56
|
+
|
57
|
+
|
58
|
+
__all__ = ["LimitsSettingsGenerator"]
|
@@ -0,0 +1,66 @@
|
|
1
|
+
"""
|
2
|
+
Logging settings generator.
|
3
|
+
|
4
|
+
Handles Django logging configuration.
|
5
|
+
Size: ~60 lines (focused on logging settings)
|
6
|
+
"""
|
7
|
+
|
8
|
+
from typing import Dict, Any, TYPE_CHECKING
|
9
|
+
|
10
|
+
if TYPE_CHECKING:
|
11
|
+
from ...base.config_model import DjangoConfig
|
12
|
+
|
13
|
+
|
14
|
+
class LoggingSettingsGenerator:
|
15
|
+
"""
|
16
|
+
Generates logging settings.
|
17
|
+
|
18
|
+
Responsibilities:
|
19
|
+
- LOGGING configuration
|
20
|
+
- Environment-specific log levels
|
21
|
+
- Log handlers and formatters
|
22
|
+
|
23
|
+
Example:
|
24
|
+
```python
|
25
|
+
generator = LoggingSettingsGenerator(config)
|
26
|
+
settings = generator.generate()
|
27
|
+
```
|
28
|
+
"""
|
29
|
+
|
30
|
+
def __init__(self, config: "DjangoConfig"):
|
31
|
+
"""
|
32
|
+
Initialize generator with configuration.
|
33
|
+
|
34
|
+
Args:
|
35
|
+
config: DjangoConfig instance
|
36
|
+
"""
|
37
|
+
self.config = config
|
38
|
+
|
39
|
+
def generate(self) -> Dict[str, Any]:
|
40
|
+
"""
|
41
|
+
Generate logging settings.
|
42
|
+
|
43
|
+
Returns:
|
44
|
+
Dictionary with logging configuration
|
45
|
+
|
46
|
+
Example:
|
47
|
+
>>> generator = LoggingSettingsGenerator(config)
|
48
|
+
>>> settings = generator.generate()
|
49
|
+
>>> "LOGGING" in settings
|
50
|
+
True
|
51
|
+
"""
|
52
|
+
from ....utils.smart_defaults import SmartDefaults
|
53
|
+
|
54
|
+
# Generate logging defaults based on environment
|
55
|
+
logging_defaults = SmartDefaults.get_logging_defaults(
|
56
|
+
self.config.env_mode,
|
57
|
+
self.config.debug
|
58
|
+
)
|
59
|
+
|
60
|
+
if not logging_defaults:
|
61
|
+
return {}
|
62
|
+
|
63
|
+
return {"LOGGING": logging_defaults}
|
64
|
+
|
65
|
+
|
66
|
+
__all__ = ["LoggingSettingsGenerator"]
|
@@ -0,0 +1,101 @@
|
|
1
|
+
"""
|
2
|
+
Security settings generator.
|
3
|
+
|
4
|
+
Handles Django security configuration.
|
5
|
+
Size: ~100 lines (focused on security settings)
|
6
|
+
"""
|
7
|
+
|
8
|
+
from typing import Dict, Any, TYPE_CHECKING
|
9
|
+
|
10
|
+
if TYPE_CHECKING:
|
11
|
+
from ...base.config_model import DjangoConfig
|
12
|
+
|
13
|
+
|
14
|
+
class SecuritySettingsGenerator:
|
15
|
+
"""
|
16
|
+
Generates security settings.
|
17
|
+
|
18
|
+
Responsibilities:
|
19
|
+
- CORS configuration
|
20
|
+
- SSL/HTTPS settings
|
21
|
+
- Security headers
|
22
|
+
- Production security hardening
|
23
|
+
|
24
|
+
Example:
|
25
|
+
```python
|
26
|
+
generator = SecuritySettingsGenerator(config)
|
27
|
+
settings = generator.generate()
|
28
|
+
```
|
29
|
+
"""
|
30
|
+
|
31
|
+
def __init__(self, config: "DjangoConfig"):
|
32
|
+
"""
|
33
|
+
Initialize generator with configuration.
|
34
|
+
|
35
|
+
Args:
|
36
|
+
config: DjangoConfig instance
|
37
|
+
"""
|
38
|
+
self.config = config
|
39
|
+
|
40
|
+
def generate(self) -> Dict[str, Any]:
|
41
|
+
"""
|
42
|
+
Generate security settings.
|
43
|
+
|
44
|
+
Returns:
|
45
|
+
Dictionary with security configuration
|
46
|
+
|
47
|
+
Example:
|
48
|
+
>>> generator = SecuritySettingsGenerator(config)
|
49
|
+
>>> settings = generator.generate()
|
50
|
+
"""
|
51
|
+
settings = {}
|
52
|
+
|
53
|
+
# Generate security defaults if domains or SSL redirect are configured
|
54
|
+
if self.config.security_domains or self.config.ssl_redirect is not None:
|
55
|
+
security_defaults = self._get_security_defaults()
|
56
|
+
settings.update(security_defaults)
|
57
|
+
|
58
|
+
# Additional security settings for production
|
59
|
+
if self.config.env_mode == "production":
|
60
|
+
production_security = self._get_production_security()
|
61
|
+
settings.update(production_security)
|
62
|
+
|
63
|
+
return settings
|
64
|
+
|
65
|
+
def _get_security_defaults(self) -> Dict[str, Any]:
|
66
|
+
"""
|
67
|
+
Get security defaults based on configuration.
|
68
|
+
|
69
|
+
Returns:
|
70
|
+
Dictionary with security defaults
|
71
|
+
"""
|
72
|
+
from ....utils.smart_defaults import SmartDefaults
|
73
|
+
|
74
|
+
security_defaults = SmartDefaults.get_security_defaults(
|
75
|
+
self.config.security_domains,
|
76
|
+
self.config.env_mode,
|
77
|
+
self.config.debug,
|
78
|
+
self.config.ssl_redirect,
|
79
|
+
self.config.cors_allow_headers
|
80
|
+
)
|
81
|
+
|
82
|
+
return security_defaults
|
83
|
+
|
84
|
+
def _get_production_security(self) -> Dict[str, Any]:
|
85
|
+
"""
|
86
|
+
Get production-specific security settings.
|
87
|
+
|
88
|
+
Returns:
|
89
|
+
Dictionary with production security settings
|
90
|
+
"""
|
91
|
+
return {
|
92
|
+
"SECURE_SSL_REDIRECT": True,
|
93
|
+
"SECURE_HSTS_SECONDS": 31536000, # 1 year
|
94
|
+
"SECURE_HSTS_INCLUDE_SUBDOMAINS": True,
|
95
|
+
"SECURE_HSTS_PRELOAD": True,
|
96
|
+
"SESSION_COOKIE_SECURE": True,
|
97
|
+
"CSRF_COOKIE_SECURE": True,
|
98
|
+
}
|
99
|
+
|
100
|
+
|
101
|
+
__all__ = ["SecuritySettingsGenerator"]
|
File without changes
|