django-cfg 1.3.13__py3-none-any.whl → 1.4.3__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/agents/examples/__init__.py +3 -0
- django_cfg/apps/agents/examples/simple_example.py +161 -0
- 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/examples/__init__.py +3 -0
- django_cfg/apps/knowbase/examples/external_data_usage.py +191 -0
- 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/examples/vehicle_model_example.py +199 -0
- 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_currency/examples/__init__.py +3 -0
- django_cfg/modules/django_currency/examples/example_database_usage.py +144 -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_ipc_client/README.md +346 -0
- django_cfg/modules/django_ipc_client/__init__.py +51 -0
- django_cfg/modules/django_ipc_client/client.py +540 -0
- django_cfg/modules/django_ipc_client/config.py +207 -0
- django_cfg/modules/django_ipc_client/dashboard/README.md +517 -0
- django_cfg/modules/django_ipc_client/dashboard/UNFOLD_INTEGRATION.md +439 -0
- django_cfg/modules/django_ipc_client/dashboard/__init__.py +11 -0
- django_cfg/modules/django_ipc_client/dashboard/apps.py +22 -0
- django_cfg/modules/django_ipc_client/dashboard/monitor.py +435 -0
- django_cfg/modules/django_ipc_client/dashboard/static/django_ipc_dashboard/js/dashboard.js +373 -0
- django_cfg/modules/django_ipc_client/dashboard/templates/django_ipc_dashboard/base.html +76 -0
- django_cfg/modules/django_ipc_client/dashboard/templates/django_ipc_dashboard/dashboard.html +200 -0
- django_cfg/modules/django_ipc_client/dashboard/urls.py +22 -0
- django_cfg/modules/django_ipc_client/dashboard/urls_admin.py +9 -0
- django_cfg/modules/django_ipc_client/dashboard/views.py +251 -0
- django_cfg/modules/django_ipc_client/exceptions.py +201 -0
- 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/examples/component_class_example.html +156 -0
- 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.3.dist-info/METADATA +533 -0
- {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/RECORD +432 -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.3.dist-info}/WHEEL +0 -0
- {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
"""
|
2
|
+
API configuration models for django_cfg.
|
3
|
+
|
4
|
+
API, authentication, and documentation configuration.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from .config import APIConfig
|
8
|
+
from .keys import ApiKeys
|
9
|
+
from .jwt import JWTConfig
|
10
|
+
from .cors import CORSConfig
|
11
|
+
from .limits import LimitsConfig
|
12
|
+
from .drf.config import DRFConfig
|
13
|
+
from .drf.spectacular import SpectacularConfig
|
14
|
+
from .drf.swagger import SwaggerUISettings
|
15
|
+
from .drf.redoc import RedocUISettings
|
16
|
+
|
17
|
+
__all__ = [
|
18
|
+
"APIConfig",
|
19
|
+
"ApiKeys",
|
20
|
+
"JWTConfig",
|
21
|
+
"CORSConfig",
|
22
|
+
"LimitsConfig",
|
23
|
+
"DRFConfig",
|
24
|
+
"SpectacularConfig",
|
25
|
+
"SwaggerUISettings",
|
26
|
+
"RedocUISettings",
|
27
|
+
]
|
@@ -0,0 +1,21 @@
|
|
1
|
+
"""
|
2
|
+
Django REST Framework configuration models.
|
3
|
+
|
4
|
+
Provides type-safe configuration for DRF and API documentation:
|
5
|
+
- DRFConfig: Main DRF configuration
|
6
|
+
- SpectacularConfig: OpenAPI/Swagger documentation
|
7
|
+
- SwaggerUISettings: Swagger UI settings
|
8
|
+
- RedocUISettings: Redoc UI settings
|
9
|
+
"""
|
10
|
+
|
11
|
+
from .config import DRFConfig
|
12
|
+
from .spectacular import SpectacularConfig
|
13
|
+
from .swagger import SwaggerUISettings
|
14
|
+
from .redoc import RedocUISettings
|
15
|
+
|
16
|
+
__all__ = [
|
17
|
+
"DRFConfig",
|
18
|
+
"SpectacularConfig",
|
19
|
+
"SwaggerUISettings",
|
20
|
+
"RedocUISettings",
|
21
|
+
]
|
@@ -0,0 +1,101 @@
|
|
1
|
+
"""
|
2
|
+
Django REST Framework configuration.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import Dict, Any, List
|
6
|
+
from pydantic import BaseModel, Field
|
7
|
+
|
8
|
+
|
9
|
+
class DRFConfig(BaseModel):
|
10
|
+
"""
|
11
|
+
🔧 Django REST Framework Configuration
|
12
|
+
|
13
|
+
Handles REST Framework settings with sensible defaults.
|
14
|
+
"""
|
15
|
+
|
16
|
+
# Authentication
|
17
|
+
authentication_classes: List[str] = Field(
|
18
|
+
default_factory=lambda: [
|
19
|
+
'rest_framework.authentication.TokenAuthentication',
|
20
|
+
'rest_framework.authentication.SessionAuthentication',
|
21
|
+
],
|
22
|
+
description="Default authentication classes"
|
23
|
+
)
|
24
|
+
|
25
|
+
# Permissions
|
26
|
+
permission_classes: List[str] = Field(
|
27
|
+
default_factory=lambda: [
|
28
|
+
'rest_framework.permissions.IsAuthenticated',
|
29
|
+
],
|
30
|
+
description="Default permission classes"
|
31
|
+
)
|
32
|
+
|
33
|
+
# Pagination
|
34
|
+
pagination_class: str = Field(
|
35
|
+
default='django_cfg.middleware.pagination.DefaultPagination',
|
36
|
+
description="Default pagination class"
|
37
|
+
)
|
38
|
+
page_size: int = Field(default=100, description="Default page size")
|
39
|
+
|
40
|
+
# Schema
|
41
|
+
schema_class: str = Field(
|
42
|
+
default='drf_spectacular.openapi.AutoSchema',
|
43
|
+
description="Default schema class"
|
44
|
+
)
|
45
|
+
|
46
|
+
# Throttling
|
47
|
+
throttle_classes: List[str] = Field(
|
48
|
+
default_factory=lambda: [
|
49
|
+
'rest_framework.throttling.AnonRateThrottle',
|
50
|
+
'rest_framework.throttling.UserRateThrottle'
|
51
|
+
],
|
52
|
+
description="Default throttle classes"
|
53
|
+
)
|
54
|
+
throttle_rates: Dict[str, str] = Field(
|
55
|
+
default_factory=lambda: {
|
56
|
+
'anon': '200/hour',
|
57
|
+
'user': '2000/hour'
|
58
|
+
},
|
59
|
+
description="Default throttle rates"
|
60
|
+
)
|
61
|
+
|
62
|
+
# Versioning
|
63
|
+
versioning_class: str = Field(
|
64
|
+
default='rest_framework.versioning.NamespaceVersioning',
|
65
|
+
description="Default versioning class"
|
66
|
+
)
|
67
|
+
default_version: str = Field(default='v1', description="Default API version")
|
68
|
+
allowed_versions: List[str] = Field(
|
69
|
+
default_factory=lambda: ['v1'],
|
70
|
+
description="Allowed API versions"
|
71
|
+
)
|
72
|
+
|
73
|
+
# Renderers
|
74
|
+
renderer_classes: List[str] = Field(
|
75
|
+
default_factory=lambda: [
|
76
|
+
'rest_framework.renderers.JSONRenderer',
|
77
|
+
'django_cfg.modules.django_drf_theme.renderers.TailwindBrowsableAPIRenderer',
|
78
|
+
],
|
79
|
+
description="Default renderer classes (JSON + Tailwind Browsable API)"
|
80
|
+
)
|
81
|
+
|
82
|
+
def get_rest_framework_settings(self) -> Dict[str, Any]:
|
83
|
+
"""Get complete REST Framework settings."""
|
84
|
+
return {
|
85
|
+
'DEFAULT_AUTHENTICATION_CLASSES': self.authentication_classes,
|
86
|
+
'DEFAULT_PERMISSION_CLASSES': self.permission_classes,
|
87
|
+
'DEFAULT_RENDERER_CLASSES': self.renderer_classes,
|
88
|
+
'DEFAULT_PAGINATION_CLASS': self.pagination_class,
|
89
|
+
'PAGE_SIZE': self.page_size,
|
90
|
+
'DEFAULT_SCHEMA_CLASS': self.schema_class,
|
91
|
+
'DEFAULT_THROTTLE_CLASSES': self.throttle_classes,
|
92
|
+
'DEFAULT_THROTTLE_RATES': self.throttle_rates,
|
93
|
+
'DEFAULT_VERSIONING_CLASS': self.versioning_class,
|
94
|
+
'DEFAULT_VERSION': self.default_version,
|
95
|
+
'ALLOWED_VERSIONS': self.allowed_versions,
|
96
|
+
}
|
97
|
+
|
98
|
+
|
99
|
+
__all__ = [
|
100
|
+
"DRFConfig",
|
101
|
+
]
|
@@ -0,0 +1,31 @@
|
|
1
|
+
"""
|
2
|
+
Redoc UI settings for DRF Spectacular.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import Dict, Any
|
6
|
+
from pydantic import BaseModel, Field
|
7
|
+
|
8
|
+
|
9
|
+
class RedocUISettings(BaseModel):
|
10
|
+
"""Redoc UI specific settings."""
|
11
|
+
|
12
|
+
native_scrollbars: bool = Field(default=True, description="Use native scrollbars")
|
13
|
+
theme_color: str = Field(default="#7c3aed", description="Primary theme color")
|
14
|
+
|
15
|
+
def to_dict(self) -> Dict[str, Any]:
|
16
|
+
"""Convert to dictionary for Redoc UI."""
|
17
|
+
return {
|
18
|
+
"nativeScrollbars": self.native_scrollbars,
|
19
|
+
"theme": {
|
20
|
+
"colors": {
|
21
|
+
"primary": {
|
22
|
+
"main": self.theme_color
|
23
|
+
}
|
24
|
+
}
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
|
29
|
+
__all__ = [
|
30
|
+
"RedocUISettings",
|
31
|
+
]
|
@@ -0,0 +1,129 @@
|
|
1
|
+
"""
|
2
|
+
DRF Spectacular configuration for OpenAPI/Swagger documentation.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import Dict, Any, Optional, List
|
6
|
+
from pydantic import BaseModel, Field
|
7
|
+
from .swagger import SwaggerUISettings
|
8
|
+
from .redoc import RedocUISettings
|
9
|
+
|
10
|
+
|
11
|
+
class SpectacularConfig(BaseModel):
|
12
|
+
"""
|
13
|
+
📚 Spectacular Configuration
|
14
|
+
|
15
|
+
Handles DRF Spectacular settings for OpenAPI/Swagger documentation.
|
16
|
+
"""
|
17
|
+
|
18
|
+
# API Information
|
19
|
+
title: str = Field(default="API Documentation", description="API title")
|
20
|
+
description: str = Field(default="RESTful API with modern architecture", description="API description")
|
21
|
+
version: str = Field(default="1.0.0", description="API version")
|
22
|
+
terms_of_service: Optional[str] = Field(
|
23
|
+
default=None, description="Terms of service URL"
|
24
|
+
)
|
25
|
+
|
26
|
+
# Contact Information
|
27
|
+
contact_name: Optional[str] = Field(default=None, description="Contact name")
|
28
|
+
contact_email: Optional[str] = Field(default=None, description="Contact email")
|
29
|
+
contact_url: Optional[str] = Field(default=None, description="Contact URL")
|
30
|
+
|
31
|
+
# License Information
|
32
|
+
license_name: Optional[str] = Field(default=None, description="License name")
|
33
|
+
license_url: Optional[str] = Field(default=None, description="License URL")
|
34
|
+
|
35
|
+
# Schema Settings
|
36
|
+
schema_path_prefix: str = Field(default="/api", description="Schema path prefix")
|
37
|
+
serve_include_schema: bool = Field(default=False, description="Include schema in UI")
|
38
|
+
component_split_request: bool = Field(default=True, description="Split request components")
|
39
|
+
sort_operations: bool = Field(default=False, description="Sort operations")
|
40
|
+
|
41
|
+
# UI Settings
|
42
|
+
swagger_ui_settings: SwaggerUISettings = Field(
|
43
|
+
default_factory=SwaggerUISettings, description="Swagger UI settings"
|
44
|
+
)
|
45
|
+
redoc_ui_settings: RedocUISettings = Field(
|
46
|
+
default_factory=RedocUISettings, description="Redoc UI settings"
|
47
|
+
)
|
48
|
+
|
49
|
+
# Post-processing
|
50
|
+
postprocessing_hooks: List[str] = Field(
|
51
|
+
default_factory=lambda: [
|
52
|
+
'drf_spectacular.contrib.djangorestframework_camel_case.camelize_serializer_fields'
|
53
|
+
],
|
54
|
+
description="Post-processing hooks"
|
55
|
+
)
|
56
|
+
|
57
|
+
# NOTE: Enum generation settings are handled by django-revolution
|
58
|
+
# Only override if you need different values than Revolution defaults
|
59
|
+
|
60
|
+
# Enum overrides
|
61
|
+
enum_name_overrides: Dict[str, str] = Field(
|
62
|
+
default_factory=lambda: {
|
63
|
+
'ValidationErrorEnum': 'django.contrib.auth.models.ValidationError',
|
64
|
+
},
|
65
|
+
description="Enum name overrides"
|
66
|
+
)
|
67
|
+
|
68
|
+
def get_spectacular_settings(self, project_name: Optional[str] = None) -> Dict[str, Any]:
|
69
|
+
"""
|
70
|
+
Get django-cfg Spectacular extensions.
|
71
|
+
|
72
|
+
NOTE: This extends Revolution's base settings, not replaces them.
|
73
|
+
Only include settings that are unique to django-cfg or critical fixes.
|
74
|
+
|
75
|
+
Args:
|
76
|
+
project_name: Project name from DjangoConfig to use as API title
|
77
|
+
"""
|
78
|
+
settings = {
|
79
|
+
# django-cfg specific UI enhancements
|
80
|
+
"REDOC_UI_SETTINGS": self.redoc_ui_settings.to_dict(), # Revolution doesn't have custom Redoc settings
|
81
|
+
|
82
|
+
# django-cfg specific processing extensions
|
83
|
+
"ENUM_NAME_OVERRIDES": self.enum_name_overrides, # Custom enum overrides
|
84
|
+
|
85
|
+
# CRITICAL: Ensure enum generation is always enabled (fix Revolution gaps)
|
86
|
+
# These settings ensure proper enum generation even if Revolution config changes
|
87
|
+
"GENERATE_ENUM_FROM_CHOICES": True,
|
88
|
+
"ENUM_GENERATE_CHOICE_FROM_PATH": True,
|
89
|
+
"ENUM_NAME_SUFFIX": "Enum",
|
90
|
+
"CAMELIZE_NAMES": False,
|
91
|
+
"ENUM_ADD_EXPLICIT_BLANK_NULL_CHOICE": False,
|
92
|
+
}
|
93
|
+
|
94
|
+
# Use project_name as API title if provided and title is default
|
95
|
+
if project_name and self.title == "API Documentation":
|
96
|
+
settings["TITLE"] = f"{project_name} API"
|
97
|
+
elif self.title != "API Documentation":
|
98
|
+
settings["TITLE"] = self.title
|
99
|
+
|
100
|
+
# Always set description and version
|
101
|
+
settings["DESCRIPTION"] = self.description
|
102
|
+
settings["VERSION"] = self.version
|
103
|
+
|
104
|
+
# Add optional fields if present
|
105
|
+
if self.terms_of_service:
|
106
|
+
settings["TERMS_OF_SERVICE"] = self.terms_of_service
|
107
|
+
|
108
|
+
# Contact information
|
109
|
+
if any([self.contact_name, self.contact_email, self.contact_url]):
|
110
|
+
settings["CONTACT"] = {}
|
111
|
+
if self.contact_name:
|
112
|
+
settings["CONTACT"]["name"] = self.contact_name
|
113
|
+
if self.contact_email:
|
114
|
+
settings["CONTACT"]["email"] = self.contact_email
|
115
|
+
if self.contact_url:
|
116
|
+
settings["CONTACT"]["url"] = self.contact_url
|
117
|
+
|
118
|
+
# License information
|
119
|
+
if self.license_name:
|
120
|
+
settings["LICENSE"] = {"name": self.license_name}
|
121
|
+
if self.license_url:
|
122
|
+
settings["LICENSE"]["url"] = self.license_url
|
123
|
+
|
124
|
+
return settings
|
125
|
+
|
126
|
+
|
127
|
+
__all__ = [
|
128
|
+
"SpectacularConfig",
|
129
|
+
]
|
@@ -0,0 +1,59 @@
|
|
1
|
+
"""
|
2
|
+
Swagger UI settings for DRF Spectacular.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import Dict, Any
|
6
|
+
from pydantic import BaseModel, Field
|
7
|
+
|
8
|
+
|
9
|
+
class SwaggerUISettings(BaseModel):
|
10
|
+
"""Swagger UI specific settings."""
|
11
|
+
|
12
|
+
try_it_out_enabled: bool = Field(
|
13
|
+
default=True, description="Enable Try It Out feature"
|
14
|
+
)
|
15
|
+
doc_expansion: str = Field(
|
16
|
+
default="list", description="Default expansion setting (list, full, none)"
|
17
|
+
)
|
18
|
+
deep_linking: bool = Field(default=True, description="Enable deep linking")
|
19
|
+
persist_authorization: bool = Field(
|
20
|
+
default=True, description="Persist authorization data"
|
21
|
+
)
|
22
|
+
display_operation_id: bool = Field(
|
23
|
+
default=True, description="Display operation IDs"
|
24
|
+
)
|
25
|
+
default_models_expand_depth: int = Field(
|
26
|
+
default=1, description="Default expansion depth for models"
|
27
|
+
)
|
28
|
+
default_model_expand_depth: int = Field(
|
29
|
+
default=1, description="Default expansion depth for model"
|
30
|
+
)
|
31
|
+
default_model_rendering: str = Field(
|
32
|
+
default="model", description="Default model rendering"
|
33
|
+
)
|
34
|
+
filter: bool = Field(default=True, description="Enable filtering")
|
35
|
+
show_extensions: bool = Field(default=False, description="Show extensions")
|
36
|
+
show_common_extensions: bool = Field(
|
37
|
+
default=True, description="Show common extensions"
|
38
|
+
)
|
39
|
+
|
40
|
+
def to_dict(self) -> Dict[str, Any]:
|
41
|
+
"""Convert to dictionary for Swagger UI."""
|
42
|
+
return {
|
43
|
+
"tryItOutEnabled": self.try_it_out_enabled,
|
44
|
+
"docExpansion": self.doc_expansion,
|
45
|
+
"deepLinking": self.deep_linking,
|
46
|
+
"persistAuthorization": self.persist_authorization,
|
47
|
+
"displayOperationId": self.display_operation_id,
|
48
|
+
"defaultModelsExpandDepth": self.default_models_expand_depth,
|
49
|
+
"defaultModelExpandDepth": self.default_model_expand_depth,
|
50
|
+
"defaultModelRendering": self.default_model_rendering,
|
51
|
+
"filter": self.filter,
|
52
|
+
"showExtensions": self.show_extensions,
|
53
|
+
"showCommonExtensions": self.show_common_extensions,
|
54
|
+
}
|
55
|
+
|
56
|
+
|
57
|
+
__all__ = [
|
58
|
+
"SwaggerUISettings",
|
59
|
+
]
|
@@ -51,14 +51,19 @@ class ApiKeys(BaseModel):
|
|
51
51
|
"""Validate OpenAI API key format."""
|
52
52
|
if v is None:
|
53
53
|
return v
|
54
|
-
|
54
|
+
|
55
55
|
key_str = v.get_secret_value()
|
56
|
+
|
57
|
+
# Treat empty string as None
|
58
|
+
if not key_str or key_str.strip() == "":
|
59
|
+
return None
|
60
|
+
|
56
61
|
if not key_str.startswith(("sk-", "sk-proj-")):
|
57
62
|
raise ValueError("OpenAI API key must start with 'sk-' or 'sk-proj-'")
|
58
|
-
|
63
|
+
|
59
64
|
if len(key_str) < 20:
|
60
65
|
raise ValueError("OpenAI API key appears to be too short")
|
61
|
-
|
66
|
+
|
62
67
|
return v
|
63
68
|
|
64
69
|
@field_validator("openrouter")
|
@@ -67,14 +72,19 @@ class ApiKeys(BaseModel):
|
|
67
72
|
"""Validate OpenRouter API key format."""
|
68
73
|
if v is None:
|
69
74
|
return v
|
70
|
-
|
75
|
+
|
71
76
|
key_str = v.get_secret_value()
|
77
|
+
|
78
|
+
# Treat empty string as None
|
79
|
+
if not key_str or key_str.strip() == "":
|
80
|
+
return None
|
81
|
+
|
72
82
|
if not key_str.startswith(("sk-or-", "sk-proj-")):
|
73
83
|
raise ValueError("OpenRouter API key must start with 'sk-or-' or 'sk-proj-'")
|
74
|
-
|
84
|
+
|
75
85
|
if len(key_str) < 20:
|
76
86
|
raise ValueError("OpenRouter API key appears to be too short")
|
77
|
-
|
87
|
+
|
78
88
|
return v
|
79
89
|
|
80
90
|
def get_openai_key(self) -> Optional[str]:
|
@@ -10,7 +10,6 @@ Following CRITICAL_REQUIREMENTS.md:
|
|
10
10
|
|
11
11
|
from typing import Optional, Dict, Any, List
|
12
12
|
from pydantic import BaseModel, Field, field_validator, model_validator
|
13
|
-
from django_cfg.core.exceptions import ConfigurationError
|
14
13
|
|
15
14
|
|
16
15
|
class LimitsConfig(BaseModel):
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"""
|
2
|
+
Base configuration models for django_cfg.
|
3
|
+
|
4
|
+
Provides foundation classes for all configuration models.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from .config import BaseConfig, BaseSettings
|
8
|
+
from .module import BaseCfgAutoModule
|
9
|
+
|
10
|
+
__all__ = [
|
11
|
+
"BaseConfig",
|
12
|
+
"BaseSettings",
|
13
|
+
"BaseCfgAutoModule",
|
14
|
+
]
|
@@ -0,0 +1,16 @@
|
|
1
|
+
"""
|
2
|
+
Django-specific configuration models for django_cfg.
|
3
|
+
|
4
|
+
Django integrations and extensions.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from .environment import EnvironmentConfig
|
8
|
+
from .constance import ConstanceConfig, ConstanceField
|
9
|
+
from .revolution import RevolutionConfig
|
10
|
+
|
11
|
+
__all__ = [
|
12
|
+
"EnvironmentConfig",
|
13
|
+
"ConstanceConfig",
|
14
|
+
"ConstanceField",
|
15
|
+
"RevolutionConfig",
|
16
|
+
]
|
@@ -8,7 +8,7 @@ Unfold admin integration and smart field grouping.
|
|
8
8
|
from typing import Dict, List, Optional, Any, Union, Literal
|
9
9
|
from pydantic import BaseModel, Field, field_validator
|
10
10
|
import traceback
|
11
|
-
from django_cfg.models.
|
11
|
+
from django_cfg.models.base import BaseCfgAutoModule
|
12
12
|
|
13
13
|
|
14
14
|
class ConstanceField(BaseModel):
|
@@ -0,0 +1,17 @@
|
|
1
|
+
"""
|
2
|
+
Infrastructure configuration models for django_cfg.
|
3
|
+
|
4
|
+
Core infrastructure components: database, cache, logging, security.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from .database import DatabaseConfig
|
8
|
+
from .cache import CacheConfig
|
9
|
+
from .logging import LoggingConfig
|
10
|
+
from .security import SecurityConfig
|
11
|
+
|
12
|
+
__all__ = [
|
13
|
+
"DatabaseConfig",
|
14
|
+
"CacheConfig",
|
15
|
+
"LoggingConfig",
|
16
|
+
"SecurityConfig",
|
17
|
+
]
|
@@ -12,8 +12,6 @@ from typing import Dict, Optional, Any, Literal, Union
|
|
12
12
|
from pydantic import BaseModel, Field, field_validator, model_validator
|
13
13
|
from urllib.parse import urlparse
|
14
14
|
|
15
|
-
from django_cfg.core.exceptions import CacheError, ValidationError
|
16
|
-
|
17
15
|
|
18
16
|
class CacheConfig(BaseModel):
|
19
17
|
"""
|
@@ -237,6 +235,9 @@ class CacheConfig(BaseModel):
|
|
237
235
|
Raises:
|
238
236
|
CacheError: If configuration cannot be converted
|
239
237
|
"""
|
238
|
+
# Import here to avoid circular dependency
|
239
|
+
from django_cfg.core.exceptions import CacheError
|
240
|
+
|
240
241
|
try:
|
241
242
|
backend = self.get_backend_type(environment, debug)
|
242
243
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
"""
|
2
|
+
Database configuration for django_cfg.
|
3
|
+
|
4
|
+
Provides type-safe database configuration with:
|
5
|
+
- Connection string parsing
|
6
|
+
- Field validation
|
7
|
+
- Django settings conversion
|
8
|
+
- Database routing
|
9
|
+
|
10
|
+
Organized into focused modules:
|
11
|
+
- config.py - Main DatabaseConfig class
|
12
|
+
- validators.py - Field validators
|
13
|
+
- parsers.py - Connection string parsers
|
14
|
+
- converters.py - Django settings converters
|
15
|
+
- routing.py - Database routing utilities
|
16
|
+
"""
|
17
|
+
|
18
|
+
from .config import DatabaseConfig
|
19
|
+
|
20
|
+
__all__ = [
|
21
|
+
"DatabaseConfig",
|
22
|
+
]
|