django-cfg 1.4.20__py3-none-any.whl → 1.4.23__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 +4 -4
- django_cfg/apps/accounts/__init__.py +1 -1
- django_cfg/apps/accounts/__models.py +30 -29
- django_cfg/apps/accounts/admin/__init__.py +14 -3
- django_cfg/apps/accounts/admin/activity_admin.py +19 -19
- django_cfg/apps/accounts/admin/filters.py +7 -6
- django_cfg/apps/accounts/admin/group_admin.py +10 -16
- django_cfg/apps/accounts/admin/inlines.py +21 -19
- django_cfg/apps/accounts/admin/otp_admin.py +12 -12
- django_cfg/apps/accounts/admin/registration_admin.py +24 -24
- django_cfg/apps/accounts/admin/resources.py +49 -48
- django_cfg/apps/accounts/admin/twilio_admin.py +37 -37
- django_cfg/apps/accounts/admin/user_admin.py +45 -41
- django_cfg/apps/accounts/management/commands/otp_test.py +11 -11
- django_cfg/apps/accounts/managers/__init__.py +1 -1
- django_cfg/apps/accounts/managers/user_manager.py +6 -7
- django_cfg/apps/accounts/migrations/0001_initial.py +3 -2
- django_cfg/apps/accounts/models/__init__.py +15 -16
- django_cfg/apps/accounts/models/activity.py +5 -5
- django_cfg/apps/accounts/models/integrations.py +15 -15
- django_cfg/apps/accounts/models/registration.py +3 -2
- django_cfg/apps/accounts/models/user.py +3 -2
- django_cfg/apps/accounts/serializers/__init__.py +10 -3
- django_cfg/apps/accounts/serializers/otp.py +5 -4
- django_cfg/apps/accounts/serializers/profile.py +4 -5
- django_cfg/apps/accounts/serializers/webhook.py +13 -13
- django_cfg/apps/accounts/services/activity_service.py +13 -12
- django_cfg/apps/accounts/services/otp_service.py +16 -14
- django_cfg/apps/accounts/signals.py +18 -16
- django_cfg/apps/accounts/urls.py +10 -5
- django_cfg/apps/accounts/utils/notifications.py +22 -22
- django_cfg/apps/accounts/views/__init__.py +1 -1
- django_cfg/apps/accounts/views/otp.py +15 -14
- django_cfg/apps/accounts/views/profile.py +14 -10
- django_cfg/apps/accounts/views/webhook.py +46 -48
- django_cfg/apps/agents/__init__.py +3 -3
- django_cfg/apps/agents/admin/__init__.py +1 -1
- django_cfg/apps/agents/admin/execution_admin.py +68 -72
- django_cfg/apps/agents/admin/registry_admin.py +50 -54
- django_cfg/apps/agents/admin/toolsets_admin.py +63 -67
- django_cfg/apps/agents/apps.py +3 -3
- django_cfg/apps/agents/core/__init__.py +4 -4
- django_cfg/apps/agents/core/dependencies.py +24 -23
- django_cfg/apps/agents/core/django_agent.py +41 -39
- django_cfg/apps/agents/core/exceptions.py +12 -12
- django_cfg/apps/agents/core/models.py +16 -15
- django_cfg/apps/agents/core/orchestrator.py +58 -58
- django_cfg/apps/agents/examples/simple_example.py +24 -19
- django_cfg/apps/agents/integration/__init__.py +1 -1
- django_cfg/apps/agents/integration/middleware.py +12 -11
- django_cfg/apps/agents/integration/registry.py +52 -49
- django_cfg/apps/agents/integration/signals.py +5 -5
- django_cfg/apps/agents/management/commands/create_agent.py +39 -38
- django_cfg/apps/agents/management/commands/orchestrator_status.py +40 -39
- django_cfg/apps/agents/managers/__init__.py +8 -3
- django_cfg/apps/agents/managers/execution.py +42 -41
- django_cfg/apps/agents/managers/registry.py +40 -39
- django_cfg/apps/agents/managers/toolsets.py +87 -86
- django_cfg/apps/agents/migrations/0001_initial.py +2 -1
- django_cfg/apps/agents/models/__init__.py +2 -2
- django_cfg/apps/agents/models/execution.py +43 -42
- django_cfg/apps/agents/models/registry.py +46 -45
- django_cfg/apps/agents/models/toolsets.py +63 -62
- django_cfg/apps/agents/patterns/__init__.py +5 -5
- django_cfg/apps/agents/patterns/content_agents.py +17 -16
- django_cfg/apps/agents/toolsets/__init__.py +3 -3
- django_cfg/apps/agents/toolsets/cache_toolset.py +56 -55
- django_cfg/apps/agents/toolsets/django_toolset.py +43 -42
- django_cfg/apps/agents/toolsets/file_toolset.py +64 -63
- django_cfg/apps/agents/toolsets/orm_toolset.py +75 -74
- django_cfg/apps/agents/urls.py +3 -2
- django_cfg/apps/api/commands/urls.py +1 -0
- django_cfg/apps/api/commands/views.py +23 -26
- django_cfg/apps/api/endpoints/checker.py +5 -4
- django_cfg/apps/api/endpoints/drf_views.py +2 -2
- django_cfg/apps/api/endpoints/tests.py +6 -5
- django_cfg/apps/api/endpoints/urls.py +2 -1
- django_cfg/apps/api/endpoints/views.py +1 -0
- django_cfg/apps/api/health/drf_views.py +6 -6
- django_cfg/apps/api/health/urls.py +2 -1
- django_cfg/apps/api/health/views.py +41 -41
- django_cfg/{modules/django_ipc_client → apps/ipc}/__init__.py +6 -6
- django_cfg/apps/ipc/apps.py +28 -0
- django_cfg/apps/ipc/serializers/__init__.py +19 -0
- django_cfg/apps/ipc/serializers/serializers.py +229 -0
- django_cfg/apps/ipc/services/__init__.py +7 -0
- django_cfg/apps/ipc/services/client/__init__.py +23 -0
- django_cfg/{modules/django_ipc_client → apps/ipc/services/client}/client.py +7 -6
- django_cfg/{modules/django_ipc_client → apps/ipc/services/client}/exceptions.py +1 -1
- django_cfg/{modules/django_ipc_client/dashboard → apps/ipc/services}/monitor.py +23 -5
- django_cfg/{modules/django_ipc_client/dashboard/static/django_ipc_dashboard/js/dashboard.js → apps/ipc/static/django_cfg_ipc/js/dashboard.mjs} +131 -63
- django_cfg/{modules/django_ipc_client/dashboard/templates/django_ipc_dashboard → apps/ipc/templates/django_cfg_ipc}/base.html +5 -10
- django_cfg/apps/ipc/templates/django_cfg_ipc/dashboard.html +202 -0
- django_cfg/apps/ipc/urls.py +21 -0
- django_cfg/apps/ipc/urls_admin.py +20 -0
- django_cfg/apps/ipc/views/__init__.py +8 -0
- django_cfg/apps/ipc/views/dashboard.py +15 -0
- django_cfg/apps/ipc/views/viewsets.py +245 -0
- django_cfg/apps/knowbase/admin/__init__.py +2 -2
- django_cfg/apps/knowbase/admin/actions/__init__.py +1 -1
- django_cfg/apps/knowbase/admin/actions/visibility_actions.py +2 -1
- django_cfg/apps/knowbase/admin/archive_admin.py +81 -84
- django_cfg/apps/knowbase/admin/chat_admin.py +70 -72
- django_cfg/apps/knowbase/admin/document_admin.py +10 -11
- django_cfg/apps/knowbase/admin/external_data_admin.py +69 -71
- django_cfg/apps/knowbase/admin/helpers/__init__.py +1 -1
- django_cfg/apps/knowbase/admin/helpers/configs.py +2 -2
- django_cfg/apps/knowbase/admin/helpers/statistics.py +1 -1
- django_cfg/apps/knowbase/apps.py +13 -13
- django_cfg/apps/knowbase/config/__init__.py +7 -6
- django_cfg/apps/knowbase/config/constance_fields.py +14 -12
- django_cfg/apps/knowbase/config/constance_settings.py +32 -31
- django_cfg/apps/knowbase/config/settings.py +28 -28
- django_cfg/apps/knowbase/examples/external_data_usage.py +35 -32
- django_cfg/apps/knowbase/management/commands/knowbase_stats.py +33 -32
- django_cfg/apps/knowbase/management/commands/setup_knowbase.py +11 -13
- django_cfg/apps/knowbase/managers/__init__.py +2 -2
- django_cfg/apps/knowbase/managers/archive.py +86 -85
- django_cfg/apps/knowbase/managers/base.py +5 -5
- django_cfg/apps/knowbase/managers/chat.py +29 -28
- django_cfg/apps/knowbase/managers/document.py +39 -39
- django_cfg/apps/knowbase/managers/external_data.py +74 -73
- django_cfg/apps/knowbase/migrations/0001_initial.py +2 -1
- django_cfg/apps/knowbase/migrations/0002_archiveitem_archiveitemchunk_documentarchive_and_more.py +2 -1
- django_cfg/apps/knowbase/migrations/0003_alter_documentarchive_archive_type.py +29 -0
- django_cfg/apps/knowbase/mixins/__init__.py +4 -4
- django_cfg/apps/knowbase/mixins/config/__init__.py +1 -1
- django_cfg/apps/knowbase/mixins/config/meta_config.py +1 -1
- django_cfg/apps/knowbase/mixins/config.py +19 -18
- django_cfg/apps/knowbase/mixins/creator.py +7 -7
- django_cfg/apps/knowbase/mixins/examples/vehicle_model_example.py +29 -28
- django_cfg/apps/knowbase/mixins/external_data_mixin.py +6 -5
- django_cfg/apps/knowbase/mixins/generators/__init__.py +1 -1
- django_cfg/apps/knowbase/mixins/generators/content_generator.py +2 -2
- django_cfg/apps/knowbase/mixins/service.py +47 -45
- django_cfg/apps/knowbase/models/__init__.py +7 -7
- django_cfg/apps/knowbase/models/archive.py +72 -72
- django_cfg/apps/knowbase/models/base.py +12 -13
- django_cfg/apps/knowbase/models/chat.py +20 -19
- django_cfg/apps/knowbase/models/document.py +37 -35
- django_cfg/apps/knowbase/models/external_data.py +41 -42
- django_cfg/apps/knowbase/serializers/__init__.py +7 -7
- django_cfg/apps/knowbase/serializers/archive_serializers.py +50 -42
- django_cfg/apps/knowbase/serializers/chat_serializers.py +16 -15
- django_cfg/apps/knowbase/serializers/document_serializers.py +13 -12
- django_cfg/apps/knowbase/serializers/external_data_serializers.py +31 -31
- django_cfg/apps/knowbase/serializers/public_serializers.py +10 -9
- django_cfg/apps/knowbase/services/__init__.py +7 -7
- django_cfg/apps/knowbase/services/archive/__init__.py +7 -7
- django_cfg/apps/knowbase/services/archive/analyzers/__init__.py +1 -1
- django_cfg/apps/knowbase/services/archive/analyzers/tag_generator.py +1 -1
- django_cfg/apps/knowbase/services/archive/archive_service.py +109 -112
- django_cfg/apps/knowbase/services/archive/chunking/__init__.py +3 -3
- django_cfg/apps/knowbase/services/archive/chunking/base.py +1 -0
- django_cfg/apps/knowbase/services/archive/chunking/json_chunker.py +4 -3
- django_cfg/apps/knowbase/services/archive/chunking/markdown_chunker.py +5 -4
- django_cfg/apps/knowbase/services/archive/chunking/python_chunker.py +6 -5
- django_cfg/apps/knowbase/services/archive/chunking/text_chunker.py +4 -3
- django_cfg/apps/knowbase/services/archive/chunking_service.py +3 -7
- django_cfg/apps/knowbase/services/archive/context/__init__.py +1 -1
- django_cfg/apps/knowbase/services/archive/context/builders.py +2 -1
- django_cfg/apps/knowbase/services/archive/context/models.py +2 -1
- django_cfg/apps/knowbase/services/archive/exceptions.py +5 -5
- django_cfg/apps/knowbase/services/archive/extraction_service.py +111 -110
- django_cfg/apps/knowbase/services/archive/vectorization_service.py +80 -77
- django_cfg/apps/knowbase/services/base.py +11 -9
- django_cfg/apps/knowbase/services/chat_service.py +40 -39
- django_cfg/apps/knowbase/services/document_service.py +28 -27
- django_cfg/apps/knowbase/services/embedding/__init__.py +9 -9
- django_cfg/apps/knowbase/services/embedding/async_processor.py +38 -40
- django_cfg/apps/knowbase/services/embedding/batch_processor.py +45 -42
- django_cfg/apps/knowbase/services/embedding/batch_result.py +7 -6
- django_cfg/apps/knowbase/services/embedding/models.py +52 -51
- django_cfg/apps/knowbase/services/embedding/processors.py +24 -23
- django_cfg/apps/knowbase/services/embedding/utils.py +17 -17
- django_cfg/apps/knowbase/services/prompt_builder.py +24 -23
- django_cfg/apps/knowbase/services/search_service.py +52 -49
- django_cfg/apps/knowbase/signals/__init__.py +2 -5
- django_cfg/apps/knowbase/signals/archive_signals.py +35 -34
- django_cfg/apps/knowbase/signals/chat_signals.py +6 -5
- django_cfg/apps/knowbase/signals/document_signals.py +22 -22
- django_cfg/apps/knowbase/signals/external_data_signals.py +22 -22
- django_cfg/apps/knowbase/tasks/__init__.py +6 -7
- django_cfg/apps/knowbase/tasks/archive_tasks.py +41 -41
- django_cfg/apps/knowbase/tasks/document_processing.py +49 -44
- django_cfg/apps/knowbase/tasks/external_data_tasks.py +46 -44
- django_cfg/apps/knowbase/tasks/maintenance.py +26 -24
- django_cfg/apps/knowbase/urls.py +3 -2
- django_cfg/apps/knowbase/urls_admin.py +6 -3
- django_cfg/apps/knowbase/urls_system.py +4 -5
- django_cfg/apps/knowbase/utils/chunk_settings.py +22 -20
- django_cfg/apps/knowbase/utils/text_processing.py +76 -75
- django_cfg/apps/knowbase/utils/validation.py +9 -9
- django_cfg/apps/knowbase/views/__init__.py +5 -5
- django_cfg/apps/knowbase/views/archive_views.py +90 -87
- django_cfg/apps/knowbase/views/base.py +9 -12
- django_cfg/apps/knowbase/views/chat_views.py +35 -32
- django_cfg/apps/knowbase/views/document_views.py +27 -28
- django_cfg/apps/knowbase/views/public_views.py +19 -19
- django_cfg/apps/leads/admin/leads_admin.py +41 -45
- django_cfg/apps/leads/admin/resources.py +14 -14
- django_cfg/apps/leads/admin.py +7 -9
- django_cfg/apps/leads/apps.py +1 -1
- django_cfg/apps/leads/models.py +17 -17
- django_cfg/apps/leads/serializers.py +5 -4
- django_cfg/apps/leads/signals.py +7 -7
- django_cfg/apps/leads/tests.py +47 -47
- django_cfg/apps/leads/urls.py +2 -2
- django_cfg/apps/leads/views.py +11 -11
- django_cfg/apps/maintenance/__init__.py +3 -3
- django_cfg/apps/maintenance/admin/__init__.py +1 -1
- django_cfg/apps/maintenance/admin/api_key_admin.py +36 -36
- django_cfg/apps/maintenance/admin/log_admin.py +35 -37
- django_cfg/apps/maintenance/admin/scheduled_admin.py +47 -51
- django_cfg/apps/maintenance/admin/site_admin.py +49 -52
- django_cfg/apps/maintenance/apps.py +2 -2
- django_cfg/apps/maintenance/management/commands/maintenance.py +53 -52
- django_cfg/apps/maintenance/management/commands/process_scheduled_maintenance.py +44 -44
- django_cfg/apps/maintenance/management/commands/sync_cloudflare.py +32 -32
- django_cfg/apps/maintenance/managers/__init__.py +1 -1
- django_cfg/apps/maintenance/managers/cloudflare_site_manager.py +39 -38
- django_cfg/apps/maintenance/managers/maintenance_log_manager.py +32 -31
- django_cfg/apps/maintenance/migrations/0001_initial.py +1 -0
- django_cfg/apps/maintenance/models/__init__.py +2 -2
- django_cfg/apps/maintenance/models/cloudflare_api_key.py +15 -15
- django_cfg/apps/maintenance/models/cloudflare_site.py +24 -22
- django_cfg/apps/maintenance/models/maintenance_log.py +15 -14
- django_cfg/apps/maintenance/models/scheduled_maintenance.py +53 -52
- django_cfg/apps/maintenance/services/__init__.py +3 -3
- django_cfg/apps/maintenance/services/bulk_operations_service.py +68 -68
- django_cfg/apps/maintenance/services/maintenance_service.py +59 -58
- django_cfg/apps/maintenance/services/scheduled_maintenance_service.py +52 -52
- django_cfg/apps/maintenance/services/site_sync_service.py +64 -65
- django_cfg/apps/maintenance/utils/__init__.py +1 -1
- django_cfg/apps/maintenance/utils/retry_utils.py +17 -17
- django_cfg/apps/newsletter/admin/__init__.py +12 -16
- django_cfg/apps/newsletter/admin/newsletter_admin.py +90 -87
- django_cfg/apps/newsletter/admin/resources.py +29 -29
- django_cfg/apps/newsletter/admin.py +39 -32
- django_cfg/apps/newsletter/management/commands/test_newsletter.py +3 -3
- django_cfg/apps/newsletter/managers/__init__.py +1 -1
- django_cfg/apps/newsletter/migrations/0001_initial.py +2 -1
- django_cfg/apps/newsletter/models.py +34 -33
- django_cfg/apps/newsletter/serializers.py +13 -13
- django_cfg/apps/newsletter/services/email_service.py +42 -40
- django_cfg/apps/newsletter/signals.py +4 -3
- django_cfg/apps/newsletter/urls.py +7 -7
- django_cfg/apps/newsletter/views/__init__.py +14 -19
- django_cfg/apps/newsletter/views/campaigns.py +19 -19
- django_cfg/apps/newsletter/views/emails.py +20 -20
- django_cfg/apps/newsletter/views/newsletters.py +5 -5
- django_cfg/apps/newsletter/views/subscriptions.py +24 -24
- django_cfg/apps/newsletter/views/tracking.py +6 -5
- django_cfg/apps/payments/admin/__init__.py +6 -5
- django_cfg/apps/payments/admin/api_keys_admin.py +43 -45
- django_cfg/apps/payments/admin/balance_admin.py +41 -47
- django_cfg/apps/payments/admin/currencies_admin.py +60 -62
- django_cfg/apps/payments/admin/endpoint_groups_admin.py +14 -28
- django_cfg/apps/payments/admin/filters.py +59 -59
- django_cfg/apps/payments/admin/networks_admin.py +36 -50
- django_cfg/apps/payments/admin/payments_admin.py +47 -49
- django_cfg/apps/payments/admin/subscriptions_admin.py +30 -32
- django_cfg/apps/payments/admin/tariffs_admin.py +37 -42
- django_cfg/apps/payments/admin_interface/serializers/__init__.py +12 -13
- django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py +28 -27
- django_cfg/apps/payments/admin_interface/serializers/webhook_serializers.py +4 -5
- django_cfg/apps/payments/admin_interface/templates/payments/base.html +407 -3
- django_cfg/apps/payments/admin_interface/templates/payments/components/ngrok_status.html +13 -13
- django_cfg/apps/payments/admin_interface/templates/payments/payment_dashboard.html +5 -1
- django_cfg/apps/payments/admin_interface/templates/payments/payment_detail.html +105 -49
- django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +4 -1
- django_cfg/apps/payments/admin_interface/templates/payments/payment_list.html +16 -8
- django_cfg/apps/payments/admin_interface/templates/payments/webhook_dashboard.html +16 -8
- django_cfg/apps/payments/admin_interface/views/__init__.py +8 -9
- django_cfg/apps/payments/admin_interface/views/api/__init__.py +3 -3
- django_cfg/apps/payments/admin_interface/views/api/payments.py +52 -54
- django_cfg/apps/payments/admin_interface/views/api/stats.py +33 -30
- django_cfg/apps/payments/admin_interface/views/api/users.py +10 -11
- django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +46 -51
- django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +9 -9
- django_cfg/apps/payments/admin_interface/views/base.py +17 -19
- django_cfg/apps/payments/admin_interface/views/dashboard.py +10 -10
- django_cfg/apps/payments/admin_interface/views/forms.py +21 -20
- django_cfg/apps/payments/apps.py +7 -6
- django_cfg/apps/payments/config/__init__.py +4 -4
- django_cfg/apps/payments/config/django_cfg_integration.py +22 -21
- django_cfg/apps/payments/config/helpers.py +14 -12
- django_cfg/apps/payments/management/commands/cleanup_expired_data.py +85 -86
- django_cfg/apps/payments/management/commands/currency_stats.py +84 -87
- django_cfg/apps/payments/management/commands/manage_currencies.py +59 -58
- django_cfg/apps/payments/management/commands/manage_providers.py +103 -105
- django_cfg/apps/payments/management/commands/process_pending_payments.py +67 -70
- django_cfg/apps/payments/management/commands/test_providers.py +83 -84
- django_cfg/apps/payments/middleware/__init__.py +1 -1
- django_cfg/apps/payments/middleware/api_access.py +77 -78
- django_cfg/apps/payments/middleware/rate_limiting.py +72 -72
- django_cfg/apps/payments/middleware/usage_tracking.py +66 -64
- django_cfg/apps/payments/migrations/0001_initial.py +2 -1
- django_cfg/apps/payments/models/__init__.py +11 -12
- django_cfg/apps/payments/models/api_keys.py +29 -27
- django_cfg/apps/payments/models/balance.py +38 -38
- django_cfg/apps/payments/models/base.py +12 -11
- django_cfg/apps/payments/models/currencies.py +53 -52
- django_cfg/apps/payments/models/managers/__init__.py +13 -14
- django_cfg/apps/payments/models/managers/api_key_managers.py +55 -53
- django_cfg/apps/payments/models/managers/balance_managers.py +98 -97
- django_cfg/apps/payments/models/managers/currency_managers.py +70 -69
- django_cfg/apps/payments/models/managers/payment_managers.py +113 -111
- django_cfg/apps/payments/models/managers/subscription_managers.py +99 -97
- django_cfg/apps/payments/models/payments.py +167 -73
- django_cfg/apps/payments/models/subscriptions.py +56 -54
- django_cfg/apps/payments/models/tariffs.py +35 -34
- django_cfg/apps/payments/services/__init__.py +33 -36
- django_cfg/apps/payments/services/cache/__init__.py +7 -1
- django_cfg/apps/payments/services/cache_service/__init__.py +22 -20
- django_cfg/apps/payments/services/cache_service/api_key_cache.py +6 -5
- django_cfg/apps/payments/services/cache_service/interfaces.py +5 -5
- django_cfg/apps/payments/services/cache_service/keys.py +8 -8
- django_cfg/apps/payments/services/cache_service/rate_limit_cache.py +8 -7
- django_cfg/apps/payments/services/cache_service/simple_cache.py +17 -14
- django_cfg/apps/payments/services/core/__init__.py +3 -3
- django_cfg/apps/payments/services/core/balance_service.py +69 -65
- django_cfg/apps/payments/services/core/base.py +25 -22
- django_cfg/apps/payments/services/core/currency/__init__.py +1 -1
- django_cfg/apps/payments/services/core/currency/currency_converter.py +2 -0
- django_cfg/apps/payments/services/core/currency_service.py +68 -66
- django_cfg/apps/payments/services/core/operations/__init__.py +1 -1
- django_cfg/apps/payments/services/core/operations/payment_canceller.py +2 -1
- django_cfg/apps/payments/services/core/operations/payment_creator.py +2 -1
- django_cfg/apps/payments/services/core/operations/status_checker.py +2 -1
- django_cfg/apps/payments/services/core/payment_service.py +10 -7
- django_cfg/apps/payments/services/core/providers/provider_client.py +2 -2
- django_cfg/apps/payments/services/core/subscription_service.py +77 -74
- django_cfg/apps/payments/services/core/utils/data_converter.py +1 -0
- django_cfg/apps/payments/services/core/utils/statistics_calculator.py +1 -0
- django_cfg/apps/payments/services/core/webhook_service.py +67 -63
- django_cfg/apps/payments/services/integrations/__init__.py +3 -3
- django_cfg/apps/payments/services/integrations/ngrok_service.py +1 -0
- django_cfg/apps/payments/services/integrations/providers_config.py +3 -2
- django_cfg/apps/payments/services/providers/base.py +59 -57
- django_cfg/apps/payments/services/providers/models/__init__.py +7 -14
- django_cfg/apps/payments/services/providers/models/base.py +15 -15
- django_cfg/apps/payments/services/providers/models/providers.py +13 -12
- django_cfg/apps/payments/services/providers/models/universal.py +6 -5
- django_cfg/apps/payments/services/providers/nowpayments/__init__.py +4 -4
- django_cfg/apps/payments/services/providers/nowpayments/config.py +9 -8
- django_cfg/apps/payments/services/providers/nowpayments/models.py +15 -15
- django_cfg/apps/payments/services/providers/nowpayments/parsers/data/__init__.py +2 -2
- django_cfg/apps/payments/services/providers/nowpayments/parsers/data/patterns.py +26 -26
- django_cfg/apps/payments/services/providers/nowpayments/parsers/parser.py +3 -2
- django_cfg/apps/payments/services/providers/nowpayments/provider.py +95 -99
- django_cfg/apps/payments/services/providers/nowpayments/sync.py +41 -40
- django_cfg/apps/payments/services/providers/registry.py +65 -63
- django_cfg/apps/payments/services/providers/sync_service.py +50 -50
- django_cfg/apps/payments/services/types/__init__.py +21 -22
- django_cfg/apps/payments/services/types/data.py +14 -13
- django_cfg/apps/payments/services/types/requests.py +21 -22
- django_cfg/apps/payments/services/types/responses.py +16 -15
- django_cfg/apps/payments/services/types/webhooks.py +30 -30
- django_cfg/apps/payments/signals/__init__.py +4 -6
- django_cfg/apps/payments/signals/api_key_signals.py +36 -35
- django_cfg/apps/payments/signals/balance_signals.py +28 -26
- django_cfg/apps/payments/signals/payment_signals.py +29 -28
- django_cfg/apps/payments/signals/subscription_signals.py +39 -38
- django_cfg/apps/payments/static/payments/js/ngrok-status.js +12 -8
- django_cfg/apps/payments/static/payments/js/payment-detail.js +1 -1
- django_cfg/apps/payments/static/payments/js/payment-form.js +3 -3
- django_cfg/apps/payments/static/payments/js/payment-list.js +13 -6
- django_cfg/apps/payments/static/payments/js/webhook-dashboard-mjs.js +241 -0
- django_cfg/apps/payments/tasks/__init__.py +11 -12
- django_cfg/apps/payments/tasks/types.py +10 -9
- django_cfg/apps/payments/tasks/usage_tracking.py +44 -46
- django_cfg/apps/payments/templatetags/payment_tags.py +27 -27
- django_cfg/apps/payments/urls.py +31 -14
- django_cfg/apps/payments/urls_admin.py +10 -10
- django_cfg/apps/payments/views/api/__init__.py +32 -33
- django_cfg/apps/payments/views/api/api_keys.py +62 -62
- django_cfg/apps/payments/views/api/balances.py +63 -64
- django_cfg/apps/payments/views/api/base.py +52 -52
- django_cfg/apps/payments/views/api/currencies.py +75 -63
- django_cfg/apps/payments/views/api/payments.py +73 -74
- django_cfg/apps/payments/views/api/subscriptions.py +71 -72
- django_cfg/apps/payments/views/api/webhooks.py +85 -84
- django_cfg/apps/payments/views/overview/__init__.py +7 -7
- django_cfg/apps/payments/views/overview/serializers.py +13 -14
- django_cfg/apps/payments/views/overview/services.py +66 -67
- django_cfg/apps/payments/views/overview/urls.py +2 -1
- django_cfg/apps/payments/views/overview/views.py +31 -31
- django_cfg/apps/payments/views/serializers/__init__.py +35 -36
- django_cfg/apps/payments/views/serializers/api_keys.py +59 -57
- django_cfg/apps/payments/views/serializers/balances.py +34 -33
- django_cfg/apps/payments/views/serializers/currencies.py +36 -34
- django_cfg/apps/payments/views/serializers/payments.py +48 -47
- django_cfg/apps/payments/views/serializers/subscriptions.py +50 -45
- django_cfg/apps/payments/views/serializers/webhooks.py +17 -16
- django_cfg/apps/support/admin/__init__.py +3 -3
- django_cfg/apps/support/admin/resources.py +26 -26
- django_cfg/apps/support/admin/support_admin.py +44 -48
- django_cfg/apps/support/admin.py +16 -15
- django_cfg/apps/support/apps.py +1 -1
- django_cfg/apps/support/managers/message_manager.py +4 -4
- django_cfg/apps/support/managers/ticket_manager.py +13 -12
- django_cfg/apps/support/migrations/0001_initial.py +2 -1
- django_cfg/apps/support/models.py +3 -1
- django_cfg/apps/support/serializers.py +4 -2
- django_cfg/apps/support/signals.py +12 -10
- django_cfg/apps/support/urls.py +4 -3
- django_cfg/apps/support/utils/support_email_service.py +11 -9
- django_cfg/apps/support/views/__init__.py +3 -3
- django_cfg/apps/support/views/admin.py +9 -9
- django_cfg/apps/support/views/api.py +12 -13
- django_cfg/apps/support/views/chat.py +14 -14
- django_cfg/apps/tasks/admin/tasks_admin.py +65 -74
- django_cfg/apps/tasks/apps.py +2 -2
- django_cfg/apps/tasks/serializers.py +6 -6
- django_cfg/apps/tasks/static/tasks/js/dashboard/main.mjs +44 -20
- django_cfg/apps/tasks/static/tasks/js/dashboard/overview.mjs +7 -5
- django_cfg/apps/tasks/static/tasks/js/dashboard/queues.mjs +5 -3
- django_cfg/apps/tasks/static/tasks/js/dashboard/tasks.mjs +5 -3
- django_cfg/apps/tasks/static/tasks/js/dashboard/workers.mjs +5 -3
- django_cfg/apps/tasks/tasks/demo_tasks.py +12 -11
- django_cfg/apps/tasks/templates/tasks/components/tasks_mjs_integration.html +269 -0
- django_cfg/apps/tasks/templates/tasks/pages/dashboard-improved.html +168 -0
- django_cfg/apps/tasks/templates/tasks/pages/dashboard.html +21 -2
- django_cfg/apps/tasks/urls.py +3 -2
- django_cfg/apps/tasks/urls_admin.py +1 -0
- django_cfg/apps/tasks/utils/simulator.py +49 -52
- django_cfg/apps/tasks/views/api.py +75 -73
- django_cfg/apps/tasks/views/dashboard.py +5 -4
- django_cfg/apps/urls.py +20 -11
- django_cfg/apps.py +6 -5
- django_cfg/cli/commands/create_project.py +7 -6
- django_cfg/cli/commands/info.py +25 -25
- django_cfg/cli/utils.py +27 -27
- django_cfg/config.py +1 -1
- django_cfg/core/__init__.py +8 -8
- django_cfg/core/base/config_model.py +13 -12
- django_cfg/core/builders/apps_builder.py +2 -2
- django_cfg/core/builders/middleware_builder.py +1 -1
- django_cfg/core/builders/security_builder.py +1 -1
- django_cfg/core/config.py +2 -2
- django_cfg/core/environment/detector.py +27 -28
- django_cfg/core/exceptions.py +1 -1
- django_cfg/core/generation/core_generators/settings.py +1 -1
- django_cfg/core/generation/core_generators/static.py +11 -5
- django_cfg/core/generation/core_generators/templates.py +1 -1
- django_cfg/core/generation/data_generators/__init__.py +1 -1
- django_cfg/core/generation/data_generators/cache.py +1 -1
- django_cfg/core/generation/data_generators/database.py +1 -1
- django_cfg/core/generation/generation.py +1 -3
- django_cfg/core/generation/integration_generators/__init__.py +2 -2
- django_cfg/core/generation/integration_generators/api.py +12 -2
- django_cfg/core/generation/integration_generators/sessions.py +1 -1
- django_cfg/core/generation/integration_generators/tailwind.py +1 -1
- django_cfg/core/generation/integration_generators/tasks.py +1 -1
- django_cfg/core/generation/integration_generators/third_party.py +1 -1
- django_cfg/core/generation/orchestrator.py +1 -1
- django_cfg/core/generation/protocols.py +1 -1
- django_cfg/core/generation/utility_generators/__init__.py +1 -1
- django_cfg/core/generation/utility_generators/email.py +1 -1
- django_cfg/core/generation/utility_generators/i18n.py +1 -1
- django_cfg/core/generation/utility_generators/limits.py +1 -1
- django_cfg/core/generation/utility_generators/logging.py +1 -1
- django_cfg/core/generation/utility_generators/security.py +1 -1
- django_cfg/core/generation/utils/helpers.py +1 -1
- django_cfg/core/integration/__init__.py +5 -5
- django_cfg/core/integration/commands_collector.py +38 -39
- django_cfg/core/integration/display/__init__.py +2 -2
- django_cfg/core/integration/display/base.py +30 -30
- django_cfg/core/integration/display/ngrok.py +35 -36
- django_cfg/core/integration/display/startup.py +149 -139
- django_cfg/core/integration/url_integration.py +10 -10
- django_cfg/core/integration/version_checker.py +20 -19
- django_cfg/core/services/config_service.py +4 -4
- django_cfg/core/state/__init__.py +1 -1
- django_cfg/core/state/registry.py +1 -1
- django_cfg/core/types/__init__.py +8 -1
- django_cfg/core/validation.py +36 -39
- django_cfg/management/commands/check_endpoints.py +3 -1
- django_cfg/management/commands/check_settings.py +3 -1
- django_cfg/management/commands/clear_constance.py +3 -1
- django_cfg/management/commands/create_token.py +3 -1
- django_cfg/management/commands/generate_clients.py +3 -1
- django_cfg/management/commands/migrate_all.py +3 -1
- django_cfg/management/commands/rundramatiq.py +3 -1
- django_cfg/management/commands/rundramatiq_simulator.py +3 -1
- django_cfg/management/commands/runserver_ngrok.py +3 -1
- django_cfg/management/commands/show_config.py +3 -1
- django_cfg/management/commands/superuser.py +3 -1
- django_cfg/management/commands/task_clear.py +3 -1
- django_cfg/management/commands/task_status.py +3 -1
- django_cfg/management/commands/test_email.py +3 -1
- django_cfg/management/commands/test_telegram.py +3 -1
- django_cfg/management/commands/test_twilio.py +3 -1
- django_cfg/management/commands/validate_openapi.py +3 -1
- django_cfg/middleware/pagination.py +8 -8
- django_cfg/middleware/public_endpoints.py +24 -23
- django_cfg/middleware/user_activity.py +27 -25
- django_cfg/models/__init__.py +19 -20
- django_cfg/models/api/__init__.py +4 -4
- django_cfg/models/api/config.py +23 -21
- django_cfg/models/api/cors.py +17 -16
- django_cfg/models/api/drf/__init__.py +1 -1
- django_cfg/models/api/drf/config.py +2 -1
- django_cfg/models/api/drf/redoc.py +2 -1
- django_cfg/models/api/drf/spectacular.py +4 -2
- django_cfg/models/api/drf/swagger.py +2 -1
- django_cfg/models/api/jwt.py +37 -36
- django_cfg/models/api/keys.py +13 -12
- django_cfg/models/api/limits.py +31 -30
- django_cfg/models/base/config.py +40 -41
- django_cfg/models/base/module.py +8 -8
- django_cfg/models/django/__init__.py +1 -1
- django_cfg/models/django/constance.py +8 -7
- django_cfg/models/django/environment.py +5 -3
- django_cfg/models/django/openapi.py +6 -16
- django_cfg/models/django/revolution_legacy.py +17 -16
- django_cfg/models/infrastructure/__init__.py +1 -1
- django_cfg/models/infrastructure/cache.py +46 -45
- django_cfg/models/infrastructure/database/config.py +4 -6
- django_cfg/models/infrastructure/database/converters.py +1 -1
- django_cfg/models/infrastructure/database/parsers.py +1 -1
- django_cfg/models/infrastructure/database/validators.py +1 -1
- django_cfg/models/infrastructure/logging.py +59 -57
- django_cfg/models/infrastructure/security.py +26 -24
- django_cfg/models/ngrok/auth.py +2 -1
- django_cfg/models/ngrok/config.py +3 -2
- django_cfg/models/ngrok/tunnel.py +2 -1
- django_cfg/models/payments/__init__.py +1 -1
- django_cfg/models/payments/api_keys.py +3 -1
- django_cfg/models/payments/config.py +4 -1
- django_cfg/models/payments/providers/base.py +2 -1
- django_cfg/models/payments/providers/nowpayments.py +3 -1
- django_cfg/models/services/__init__.py +1 -1
- django_cfg/models/services/base.py +2 -1
- django_cfg/models/services/email.py +28 -26
- django_cfg/models/services/telegram.py +2 -1
- django_cfg/models/tasks/__init__.py +2 -2
- django_cfg/models/tasks/backends.py +4 -3
- django_cfg/models/tasks/config.py +6 -4
- django_cfg/models/tasks/utils.py +3 -3
- django_cfg/modules/base.py +18 -17
- django_cfg/modules/django_admin/__init__.py +14 -15
- django_cfg/modules/django_admin/decorators/__init__.py +1 -1
- django_cfg/modules/django_admin/decorators/actions.py +8 -7
- django_cfg/modules/django_admin/decorators/display.py +9 -7
- django_cfg/modules/django_admin/icons/__init__.py +1 -1
- django_cfg/modules/django_admin/icons/constants.py +27 -27
- django_cfg/modules/django_admin/icons/generate_icons.py +54 -54
- django_cfg/modules/django_admin/management/commands/check_endpoints.py +5 -3
- django_cfg/modules/django_admin/management/commands/check_settings.py +40 -44
- django_cfg/modules/django_admin/management/commands/clear_constance.py +29 -30
- django_cfg/modules/django_admin/management/commands/create_token.py +42 -42
- django_cfg/modules/django_admin/management/commands/list_urls.py +37 -38
- django_cfg/modules/django_admin/management/commands/migrate_all.py +13 -15
- django_cfg/modules/django_admin/management/commands/migrator.py +17 -17
- django_cfg/modules/django_admin/management/commands/script.py +58 -60
- django_cfg/modules/django_admin/management/commands/show_config.py +32 -30
- django_cfg/modules/django_admin/management/commands/show_urls.py +46 -44
- django_cfg/modules/django_admin/management/commands/superuser.py +47 -48
- django_cfg/modules/django_admin/management/commands/tree.py +50 -54
- django_cfg/modules/django_admin/mixins/display_mixin.py +16 -15
- django_cfg/modules/django_admin/mixins/optimization_mixin.py +9 -8
- django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +25 -24
- django_cfg/modules/django_admin/models/__init__.py +4 -4
- django_cfg/modules/django_admin/models/action_models.py +3 -1
- django_cfg/modules/django_admin/models/badge_models.py +4 -2
- django_cfg/modules/django_admin/models/base.py +3 -3
- django_cfg/modules/django_admin/models/display_models.py +1 -0
- django_cfg/modules/django_admin/utils/badges.py +27 -26
- django_cfg/modules/django_admin/utils/displays.py +49 -49
- django_cfg/modules/django_client/apps.py +21 -3
- django_cfg/modules/django_client/core/__init__.py +9 -10
- django_cfg/modules/django_client/core/archive/manager.py +2 -2
- django_cfg/modules/django_client/core/cli/main.py +1 -3
- django_cfg/modules/django_client/core/config/config.py +3 -1
- django_cfg/modules/django_client/core/config/group.py +1 -0
- django_cfg/modules/django_client/core/config/service.py +2 -1
- django_cfg/modules/django_client/core/generator/__init__.py +1 -1
- django_cfg/modules/django_client/core/generator/base.py +2 -2
- django_cfg/modules/django_client/core/generator/python/async_client_gen.py +1 -1
- django_cfg/modules/django_client/core/generator/python/files_generator.py +1 -1
- django_cfg/modules/django_client/core/generator/python/generator.py +4 -4
- django_cfg/modules/django_client/core/generator/python/models_generator.py +1 -1
- django_cfg/modules/django_client/core/generator/python/operations_generator.py +2 -2
- django_cfg/modules/django_client/core/generator/python/sync_client_gen.py +1 -1
- django_cfg/modules/django_client/core/generator/typescript/client_generator.py +3 -1
- django_cfg/modules/django_client/core/generator/typescript/fetchers_generator.py +14 -13
- django_cfg/modules/django_client/core/generator/typescript/files_generator.py +1 -0
- django_cfg/modules/django_client/core/generator/typescript/generator.py +6 -6
- django_cfg/modules/django_client/core/generator/typescript/hooks_generator.py +12 -10
- django_cfg/modules/django_client/core/generator/typescript/models_generator.py +2 -1
- django_cfg/modules/django_client/core/generator/typescript/naming.py +2 -3
- django_cfg/modules/django_client/core/generator/typescript/operations_generator.py +12 -10
- django_cfg/modules/django_client/core/generator/typescript/schemas_generator.py +3 -2
- django_cfg/modules/django_client/core/generator/typescript/templates/client/client.ts.jinja +14 -6
- django_cfg/modules/django_client/core/generator/typescript/templates/main_index.ts.jinja +4 -10
- django_cfg/modules/django_client/core/groups/__init__.py +1 -1
- django_cfg/modules/django_client/core/groups/detector.py +2 -1
- django_cfg/modules/django_client/core/groups/manager.py +2 -1
- django_cfg/modules/django_client/core/ir/schema.py +1 -1
- django_cfg/modules/django_client/core/parser/base.py +0 -2
- django_cfg/modules/django_client/core/parser/models/schema.py +1 -1
- django_cfg/modules/django_client/core/validation/__init__.py +1 -1
- django_cfg/modules/django_client/core/validation/fixer.py +1 -2
- django_cfg/modules/django_client/core/validation/reporter.py +2 -2
- django_cfg/modules/django_client/core/validation/safety.py +1 -1
- django_cfg/modules/django_client/management/commands/generate_client.py +14 -11
- django_cfg/modules/django_client/management/commands/validate_openapi.py +4 -6
- django_cfg/modules/django_client/spectacular/__init__.py +1 -1
- django_cfg/modules/django_client/spectacular/async_detection.py +3 -2
- django_cfg/modules/django_client/spectacular/enum_naming.py +1 -1
- django_cfg/modules/django_client/spectacular/schema.py +5 -5
- django_cfg/modules/django_client/system/__init__.py +24 -0
- django_cfg/modules/django_client/system/base_generator.py +123 -0
- django_cfg/modules/django_client/system/generate_mjs_clients.py +174 -0
- django_cfg/modules/django_client/system/mjs_generator.py +219 -0
- django_cfg/modules/django_client/system/schema_parser.py +195 -0
- django_cfg/modules/django_client/system/templates/api_client.js.j2 +87 -0
- django_cfg/modules/django_client/system/templates/app_index.js.j2 +13 -0
- django_cfg/modules/django_client/system/templates/base_client.js.j2 +166 -0
- django_cfg/modules/django_client/system/templates/main_index.js.j2 +80 -0
- django_cfg/modules/django_client/system/templates/types.js.j2 +24 -0
- django_cfg/modules/django_client/urls.py +3 -2
- django_cfg/modules/django_currency/__init__.py +17 -18
- django_cfg/modules/django_currency/clients/__init__.py +2 -2
- django_cfg/modules/django_currency/clients/coinpaprika_client.py +48 -48
- django_cfg/modules/django_currency/clients/hybrid_client.py +76 -75
- django_cfg/modules/django_currency/core/__init__.py +7 -13
- django_cfg/modules/django_currency/core/converter.py +25 -24
- django_cfg/modules/django_currency/core/models.py +9 -8
- django_cfg/modules/django_currency/database/__init__.py +4 -4
- django_cfg/modules/django_currency/database/database_loader.py +65 -66
- django_cfg/modules/django_currency/examples/example_database_usage.py +29 -28
- django_cfg/modules/django_currency/utils/cache.py +10 -11
- django_cfg/modules/django_dashboard/__init__.py +4 -5
- django_cfg/modules/django_dashboard/components.py +11 -7
- django_cfg/modules/django_dashboard/debug.py +1 -3
- django_cfg/modules/django_dashboard/management/commands/debug_dashboard.py +3 -3
- django_cfg/modules/django_dashboard/sections/base.py +2 -1
- django_cfg/modules/django_dashboard/sections/commands.py +3 -2
- django_cfg/modules/django_dashboard/sections/documentation.py +8 -6
- django_cfg/modules/django_dashboard/sections/overview.py +13 -9
- django_cfg/modules/django_dashboard/sections/stats.py +2 -2
- django_cfg/modules/django_dashboard/sections/system.py +2 -1
- django_cfg/modules/django_drf_theme/templatetags/tailwind_tags.py +12 -4
- django_cfg/modules/django_email/management/commands/test_email.py +8 -7
- django_cfg/modules/django_email/service.py +5 -4
- django_cfg/modules/django_health/service.py +46 -44
- django_cfg/modules/django_import_export/__init__.py +7 -3
- django_cfg/modules/django_llm/__init__.py +3 -2
- django_cfg/modules/django_llm/example.py +58 -56
- django_cfg/modules/django_llm/llm/__init__.py +1 -1
- django_cfg/modules/django_llm/llm/cache.py +21 -20
- django_cfg/modules/django_llm/llm/client.py +9 -9
- django_cfg/modules/django_llm/llm/costs.py +14 -14
- django_cfg/modules/django_llm/llm/embeddings/__init__.py +1 -1
- django_cfg/modules/django_llm/llm/embeddings/mock_embedder.py +1 -2
- django_cfg/modules/django_llm/llm/embeddings/openai_embedder.py +1 -2
- django_cfg/modules/django_llm/llm/extractor.py +8 -8
- django_cfg/modules/django_llm/llm/models.py +5 -5
- django_cfg/modules/django_llm/llm/models_api/models_query.py +2 -2
- django_cfg/modules/django_llm/llm/models_cache.py +91 -92
- django_cfg/modules/django_llm/llm/providers/config_builder.py +1 -1
- django_cfg/modules/django_llm/llm/providers/provider_manager.py +2 -1
- django_cfg/modules/django_llm/llm/requests/cache_manager.py +1 -1
- django_cfg/modules/django_llm/llm/requests/chat_handler.py +2 -2
- django_cfg/modules/django_llm/llm/requests/embedding_handler.py +1 -1
- django_cfg/modules/django_llm/llm/responses/response_builder.py +2 -2
- django_cfg/modules/django_llm/llm/stats/stats_manager.py +1 -1
- django_cfg/modules/django_llm/llm/tokenizer.py +10 -9
- django_cfg/modules/django_llm/translator/__init__.py +1 -1
- django_cfg/modules/django_llm/translator/cache.py +36 -35
- django_cfg/modules/django_llm/translator/detectors/__init__.py +1 -1
- django_cfg/modules/django_llm/translator/detectors/script_detector.py +0 -1
- django_cfg/modules/django_llm/translator/stats/stats_tracker.py +1 -1
- django_cfg/modules/django_llm/translator/translator.py +5 -4
- django_cfg/modules/django_llm/translator/translators/__init__.py +1 -1
- django_cfg/modules/django_llm/translator/translators/json_translator.py +1 -1
- django_cfg/modules/django_llm/translator/utils/__init__.py +1 -1
- django_cfg/modules/django_llm/translator/utils/prompt_builder.py +0 -1
- django_cfg/modules/django_logging/__init__.py +1 -1
- django_cfg/modules/django_logging/django_logger.py +33 -34
- django_cfg/modules/django_logging/logger.py +3 -7
- django_cfg/modules/django_ngrok/__init__.py +7 -7
- django_cfg/modules/django_ngrok/management/commands/runserver_ngrok.py +33 -30
- django_cfg/modules/django_ngrok/service.py +33 -32
- django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +4 -36
- django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +1 -1
- django_cfg/modules/django_tasks/__init__.py +5 -5
- django_cfg/modules/django_tasks/dramatiq_setup.py +1 -1
- django_cfg/modules/django_tasks/factory.py +1 -1
- django_cfg/modules/django_tasks/management/commands/rundramatiq.py +39 -40
- django_cfg/modules/django_tasks/management/commands/rundramatiq_simulator.py +79 -80
- django_cfg/modules/django_tasks/management/commands/task_clear.py +34 -34
- django_cfg/modules/django_tasks/management/commands/task_status.py +34 -34
- django_cfg/modules/django_tasks/service.py +4 -3
- django_cfg/modules/django_tasks/settings.py +1 -1
- django_cfg/modules/django_telegram/__init__.py +4 -4
- django_cfg/modules/django_telegram/management/commands/test_telegram.py +4 -5
- django_cfg/modules/django_telegram/service.py +4 -3
- django_cfg/modules/django_telegram/utils.py +1 -1
- django_cfg/modules/django_twilio/__init__.py +15 -16
- django_cfg/modules/django_twilio/_imports.py +1 -1
- django_cfg/modules/django_twilio/base.py +9 -5
- django_cfg/modules/django_twilio/email_otp.py +4 -3
- django_cfg/modules/django_twilio/exceptions.py +36 -36
- django_cfg/modules/django_twilio/management/commands/test_twilio.py +6 -7
- django_cfg/modules/django_twilio/models.py +54 -53
- django_cfg/modules/django_twilio/sendgrid_service.py +70 -72
- django_cfg/modules/django_twilio/simple_service.py +42 -41
- django_cfg/modules/django_twilio/sms.py +1 -0
- django_cfg/modules/django_twilio/twilio_service.py +79 -83
- django_cfg/modules/django_twilio/unified.py +6 -5
- django_cfg/modules/django_twilio/utils.py +2 -3
- django_cfg/modules/django_twilio/whatsapp.py +3 -2
- django_cfg/modules/django_unfold/__init__.py +7 -6
- django_cfg/modules/django_unfold/callbacks/actions.py +6 -5
- django_cfg/modules/django_unfold/callbacks/apizones.py +122 -0
- django_cfg/modules/django_unfold/callbacks/base.py +9 -8
- django_cfg/modules/django_unfold/callbacks/charts.py +36 -37
- django_cfg/modules/django_unfold/callbacks/commands.py +2 -2
- django_cfg/modules/django_unfold/callbacks/main.py +27 -27
- django_cfg/modules/django_unfold/callbacks/statistics.py +12 -12
- django_cfg/modules/django_unfold/callbacks/system.py +5 -5
- django_cfg/modules/django_unfold/callbacks/users.py +4 -4
- django_cfg/modules/django_unfold/dashboard.py +29 -29
- django_cfg/modules/django_unfold/models/__init__.py +23 -8
- django_cfg/modules/django_unfold/models/config.py +84 -81
- django_cfg/modules/django_unfold/models/dashboard.py +20 -19
- django_cfg/modules/django_unfold/models/dropdown.py +6 -4
- django_cfg/modules/django_unfold/models/navigation.py +6 -4
- django_cfg/modules/django_unfold/models/tabs.py +4 -3
- django_cfg/modules/django_unfold/models.py +2 -3
- django_cfg/modules/django_unfold/system_monitor.py +27 -25
- django_cfg/modules/django_unfold/tailwind.py +12 -14
- django_cfg/modules/django_unfold/utils.py +7 -6
- django_cfg/pyproject.toml +1 -1
- django_cfg/registry/__init__.py +3 -3
- django_cfg/registry/core.py +8 -8
- django_cfg/registry/modules.py +2 -2
- django_cfg/registry/services.py +2 -2
- django_cfg/registry/third_party.py +3 -3
- django_cfg/routing/__init__.py +3 -3
- django_cfg/routing/callbacks.py +27 -26
- django_cfg/routing/routers.py +2 -2
- django_cfg/static/js/api/accounts/client.mjs +69 -0
- django_cfg/static/js/api/accounts/index.mjs +13 -0
- django_cfg/static/js/api/base.mjs +166 -0
- django_cfg/static/js/api/index.mjs +100 -0
- django_cfg/static/js/api/ipc/client.mjs +74 -0
- django_cfg/static/js/api/ipc/index.mjs +13 -0
- django_cfg/static/js/api/leads/client.mjs +71 -0
- django_cfg/static/js/api/leads/index.mjs +13 -0
- django_cfg/static/js/api/newsletter/client.mjs +109 -0
- django_cfg/static/js/api/newsletter/index.mjs +13 -0
- django_cfg/static/js/api/payments/client.mjs +1264 -0
- django_cfg/static/js/api/payments/index.mjs +13 -0
- django_cfg/static/js/api/support/client.mjs +84 -0
- django_cfg/static/js/api/support/index.mjs +13 -0
- django_cfg/static/js/api/tasks/client.mjs +74 -0
- django_cfg/static/js/api/tasks/index.mjs +13 -0
- django_cfg/static/js/api/types.mjs +729 -0
- django_cfg/static/js/api-loader.mjs +169 -0
- django_cfg/templates/admin/snippets/zones/zones_table.html +4 -3
- django_cfg/templatetags/django_cfg.py +4 -4
- django_cfg/utils/path_resolution.py +49 -50
- django_cfg/utils/smart_defaults.py +27 -29
- django_cfg/utils/version_check.py +14 -14
- {django_cfg-1.4.20.dist-info → django_cfg-1.4.23.dist-info}/METADATA +1 -1
- django_cfg-1.4.23.dist-info/RECORD +1137 -0
- django_cfg/apps/payments/static/payments/js/api-client.js +0 -408
- django_cfg/modules/django_ipc_client/dashboard/README.md +0 -517
- django_cfg/modules/django_ipc_client/dashboard/UNFOLD_INTEGRATION.md +0 -439
- django_cfg/modules/django_ipc_client/dashboard/__init__.py +0 -11
- django_cfg/modules/django_ipc_client/dashboard/apps.py +0 -22
- django_cfg/modules/django_ipc_client/dashboard/templates/django_ipc_dashboard/dashboard.html +0 -200
- django_cfg/modules/django_ipc_client/dashboard/urls.py +0 -22
- django_cfg/modules/django_ipc_client/dashboard/urls_admin.py +0 -9
- django_cfg/modules/django_ipc_client/dashboard/views.py +0 -251
- django_cfg/modules/django_rpc_old/POETRY.md +0 -344
- django_cfg/modules/django_rpc_old/README.md +0 -397
- django_cfg/modules/django_rpc_old/TESTING.md +0 -358
- django_cfg/modules/django_rpc_old/__init__.py +0 -39
- django_cfg/modules/django_rpc_old/client.py +0 -531
- django_cfg/modules/django_rpc_old/config.py +0 -279
- django_cfg/modules/django_rpc_old/exceptions.py +0 -172
- django_cfg/modules/django_unfold/callbacks/revolution.py +0 -81
- django_cfg-1.4.20.dist-info/RECORD +0 -1110
- /django_cfg/{modules/django_ipc_client → apps/ipc}/README.md +0 -0
- /django_cfg/{modules/django_ipc_client → apps/ipc/services/client}/config.py +0 -0
- {django_cfg-1.4.20.dist-info → django_cfg-1.4.23.dist-info}/WHEEL +0 -0
- {django_cfg-1.4.20.dist-info → django_cfg-1.4.23.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.4.20.dist-info → django_cfg-1.4.23.dist-info}/licenses/LICENSE +0 -0
django_cfg/cli/commands/info.py
CHANGED
@@ -5,12 +5,12 @@ Shows information about django-cfg installation and available features.
|
|
5
5
|
"""
|
6
6
|
|
7
7
|
import click
|
8
|
+
|
8
9
|
from ..utils import (
|
9
|
-
|
10
|
-
|
11
|
-
check_dependencies,
|
10
|
+
check_dependencies,
|
11
|
+
get_package_info,
|
12
12
|
get_standard_dependencies,
|
13
|
-
|
13
|
+
get_template_info,
|
14
14
|
)
|
15
15
|
|
16
16
|
|
@@ -23,27 +23,27 @@ def info(verbose: bool):
|
|
23
23
|
Displays version, installation path, available features,
|
24
24
|
and optional dependency status.
|
25
25
|
"""
|
26
|
-
|
26
|
+
|
27
27
|
click.echo("🚀 Django CFG - Production-ready Django Configuration Framework")
|
28
28
|
click.echo("=" * 70)
|
29
|
-
|
29
|
+
|
30
30
|
# Package information
|
31
31
|
package_info = get_package_info()
|
32
32
|
if not package_info["installed"]:
|
33
33
|
click.echo("❌ django-cfg not found or not properly installed")
|
34
34
|
return
|
35
|
-
|
35
|
+
|
36
36
|
click.echo(f"📦 Version: {package_info['version']}")
|
37
37
|
click.echo(f"🐍 Python: {package_info['python_version']}")
|
38
38
|
if verbose and package_info['path']:
|
39
39
|
click.echo(f"📁 Installation: {package_info['path']}")
|
40
|
-
|
40
|
+
|
41
41
|
click.echo()
|
42
|
-
|
42
|
+
|
43
43
|
# Template information
|
44
44
|
template_info = get_template_info()
|
45
45
|
click.echo("📋 Project Template:")
|
46
|
-
|
46
|
+
|
47
47
|
if template_info["available"]:
|
48
48
|
template_name = template_info['name']
|
49
49
|
if template_info["type"] == "archive":
|
@@ -52,22 +52,22 @@ def info(verbose: bool):
|
|
52
52
|
click.echo(f" {status} {template_name} archive - Available{size_info}")
|
53
53
|
else:
|
54
54
|
click.echo(f" ✅ {template_name} - Available")
|
55
|
-
|
55
|
+
|
56
56
|
if verbose and template_info['path']:
|
57
57
|
click.echo(f" 📁 Path: {template_info['path']}")
|
58
58
|
if template_info["type"] == "archive":
|
59
|
-
click.echo(
|
59
|
+
click.echo(" 📦 Type: ZIP Archive")
|
60
60
|
if "size_bytes" in template_info:
|
61
61
|
click.echo(f" 📏 Size: {template_info['size_bytes']} bytes")
|
62
62
|
else:
|
63
63
|
click.echo(" ❌ Template archive not found")
|
64
64
|
click.echo(" 💡 Run: python scripts/template_manager.py create")
|
65
|
-
|
65
|
+
|
66
66
|
click.echo()
|
67
|
-
|
67
|
+
|
68
68
|
# Dependencies check
|
69
69
|
deps = check_dependencies(get_standard_dependencies())
|
70
|
-
|
70
|
+
|
71
71
|
# Group dependencies by category
|
72
72
|
categories = {
|
73
73
|
"🔧 Core Dependencies": ["django", "pydantic", "pydantic-yaml", "click"],
|
@@ -77,40 +77,40 @@ def info(verbose: bool):
|
|
77
77
|
"⚡ Background Processing": ["dramatiq", "redis"],
|
78
78
|
"🛠️ Development Tools": ["ngrok"],
|
79
79
|
}
|
80
|
-
|
80
|
+
|
81
81
|
for category, dep_list in categories.items():
|
82
82
|
click.echo(f"{category}:")
|
83
83
|
category_deps = {dep: deps.get(dep, False) for dep in dep_list}
|
84
|
-
|
84
|
+
|
85
85
|
# Show installed first, then missing
|
86
86
|
for dep, is_installed in category_deps.items():
|
87
87
|
if is_installed:
|
88
88
|
status = "✅" if dep in ["django", "pydantic", "pydantic-yaml", "click"] else "✅"
|
89
89
|
click.echo(f" {status} {dep}")
|
90
|
-
|
90
|
+
|
91
91
|
for dep, is_installed in category_deps.items():
|
92
92
|
if not is_installed:
|
93
93
|
status = "❌" if dep in ["django", "pydantic", "pydantic-yaml", "click"] else "⚪"
|
94
94
|
click.echo(f" {status} {dep}")
|
95
|
-
|
95
|
+
|
96
96
|
click.echo()
|
97
|
-
|
97
|
+
|
98
98
|
# Legend
|
99
99
|
click.echo("Legend:")
|
100
100
|
click.echo(" ✅ Installed and available")
|
101
101
|
click.echo(" ⚪ Optional - not installed")
|
102
102
|
click.echo(" ❌ Required - missing")
|
103
|
-
|
103
|
+
|
104
104
|
click.echo()
|
105
|
-
|
105
|
+
|
106
106
|
# Available commands
|
107
107
|
click.echo("🎯 Available Commands:")
|
108
108
|
click.echo(" django-cfg create-project <name> - Create new Django project")
|
109
109
|
click.echo(" django-cfg info - Show this information")
|
110
110
|
click.echo(" django-cfg --help - Show help")
|
111
|
-
|
111
|
+
|
112
112
|
click.echo()
|
113
|
-
|
113
|
+
|
114
114
|
# Quick start
|
115
115
|
click.echo("🚀 Quick Start:")
|
116
116
|
click.echo(" # Create a new project")
|
@@ -121,7 +121,7 @@ def info(verbose: bool):
|
|
121
121
|
click.echo()
|
122
122
|
click.echo("📚 Documentation: https://djangocfg.com")
|
123
123
|
click.echo("🐙 GitHub: https://github.com/markolofsen/django-cfg")
|
124
|
-
|
124
|
+
|
125
125
|
# Warnings for missing critical dependencies
|
126
126
|
missing_critical = [dep for dep in ["django", "pydantic"] if not deps.get(dep, False)]
|
127
127
|
if missing_critical:
|
django_cfg/cli/utils.py
CHANGED
@@ -5,10 +5,10 @@ Common functions used across CLI commands.
|
|
5
5
|
"""
|
6
6
|
|
7
7
|
import sys
|
8
|
+
import sysconfig
|
8
9
|
import zipfile
|
9
10
|
from pathlib import Path
|
10
|
-
from typing import
|
11
|
-
import sysconfig
|
11
|
+
from typing import Any, Dict, Optional
|
12
12
|
|
13
13
|
|
14
14
|
def get_package_info() -> Dict[str, Any]:
|
@@ -16,7 +16,7 @@ def get_package_info() -> Dict[str, Any]:
|
|
16
16
|
try:
|
17
17
|
import django_cfg
|
18
18
|
package_path = Path(django_cfg.__file__).parent
|
19
|
-
|
19
|
+
|
20
20
|
# Get version from package
|
21
21
|
version = getattr(django_cfg, '__version__', '1.0.0')
|
22
22
|
try:
|
@@ -24,7 +24,7 @@ def get_package_info() -> Dict[str, Any]:
|
|
24
24
|
version = get_version("django-cfg")
|
25
25
|
except:
|
26
26
|
pass
|
27
|
-
|
27
|
+
|
28
28
|
return {
|
29
29
|
"version": version,
|
30
30
|
"path": package_path,
|
@@ -43,41 +43,41 @@ def get_package_info() -> Dict[str, Any]:
|
|
43
43
|
def find_template_archive() -> Optional[Path]:
|
44
44
|
"""Find template archive in various locations."""
|
45
45
|
search_paths = []
|
46
|
-
|
46
|
+
|
47
47
|
try:
|
48
48
|
import django_cfg
|
49
49
|
package_path = Path(django_cfg.__file__).parent
|
50
|
-
|
50
|
+
|
51
51
|
# Method 1: Package template_archive directory
|
52
52
|
search_paths.append(package_path / "template_archive" / "django_sample.zip")
|
53
|
-
|
53
|
+
|
54
54
|
# Method 2: Site-packages shared data
|
55
55
|
site_packages = Path(sysconfig.get_paths()["purelib"])
|
56
56
|
search_paths.append(site_packages / "django_cfg" / "template_archive" / "django_sample.zip")
|
57
|
-
|
57
|
+
|
58
58
|
# Method 3: Development installation - src directory
|
59
59
|
dev_path = package_path.parent.parent / "src" / "django_cfg" / "template_archive" / "django_sample.zip"
|
60
60
|
search_paths.append(dev_path)
|
61
|
-
|
61
|
+
|
62
62
|
except ImportError:
|
63
63
|
pass
|
64
|
-
|
64
|
+
|
65
65
|
# Method 4: Relative to CLI files (development)
|
66
66
|
cli_path = Path(__file__).parent.parent.parent.parent
|
67
67
|
search_paths.append(cli_path / "src" / "django_cfg" / "template_archive" / "django_sample.zip")
|
68
|
-
|
68
|
+
|
69
69
|
# Return first existing path
|
70
70
|
for path in search_paths:
|
71
71
|
if path.exists():
|
72
72
|
return path
|
73
|
-
|
73
|
+
|
74
74
|
return None
|
75
75
|
|
76
76
|
|
77
77
|
def get_template_info() -> Dict[str, Any]:
|
78
78
|
"""Get information about available template archive."""
|
79
79
|
archive_path = find_template_archive()
|
80
|
-
|
80
|
+
|
81
81
|
if not archive_path:
|
82
82
|
return {
|
83
83
|
"available": False,
|
@@ -85,10 +85,10 @@ def get_template_info() -> Dict[str, Any]:
|
|
85
85
|
"name": "django_sample",
|
86
86
|
"type": "archive",
|
87
87
|
}
|
88
|
-
|
88
|
+
|
89
89
|
try:
|
90
90
|
stat = archive_path.stat()
|
91
|
-
|
91
|
+
|
92
92
|
# Count files and validate archive
|
93
93
|
file_count = 0
|
94
94
|
is_valid = False
|
@@ -99,7 +99,7 @@ def get_template_info() -> Dict[str, Any]:
|
|
99
99
|
is_valid = True
|
100
100
|
except zipfile.BadZipFile:
|
101
101
|
is_valid = False
|
102
|
-
|
102
|
+
|
103
103
|
return {
|
104
104
|
"available": True,
|
105
105
|
"path": archive_path,
|
@@ -110,7 +110,7 @@ def get_template_info() -> Dict[str, Any]:
|
|
110
110
|
"file_count": file_count,
|
111
111
|
"is_valid": is_valid,
|
112
112
|
}
|
113
|
-
|
113
|
+
|
114
114
|
except Exception:
|
115
115
|
return {
|
116
116
|
"available": False,
|
@@ -132,14 +132,14 @@ def check_dependencies(dependencies: Dict[str, str]) -> Dict[str, bool]:
|
|
132
132
|
Dict of {package_name: is_installed}
|
133
133
|
"""
|
134
134
|
results = {}
|
135
|
-
|
135
|
+
|
136
136
|
for pkg_name, import_name in dependencies.items():
|
137
137
|
try:
|
138
138
|
__import__(import_name.replace("-", "_"))
|
139
139
|
results[pkg_name] = True
|
140
140
|
except ImportError:
|
141
141
|
results[pkg_name] = False
|
142
|
-
|
142
|
+
|
143
143
|
return results
|
144
144
|
|
145
145
|
|
@@ -150,25 +150,25 @@ def get_standard_dependencies() -> Dict[str, str]:
|
|
150
150
|
"django": "django",
|
151
151
|
"pydantic": "pydantic",
|
152
152
|
"pydantic-yaml": "pydantic_yaml",
|
153
|
-
|
153
|
+
|
154
154
|
# Services
|
155
155
|
"twilio": "twilio",
|
156
156
|
"sendgrid": "sendgrid",
|
157
157
|
"openai": "openai",
|
158
158
|
"telegram-bot-api": "telebot",
|
159
|
-
|
159
|
+
|
160
160
|
# Admin & UI
|
161
161
|
"django-unfold": "unfold",
|
162
162
|
"django-constance": "constance",
|
163
|
-
|
163
|
+
|
164
164
|
# API & Documentation
|
165
165
|
"djangorestframework": "rest_framework",
|
166
166
|
"drf-spectacular": "drf_spectacular",
|
167
|
-
|
167
|
+
|
168
168
|
# Tasks & Background Processing
|
169
169
|
"dramatiq": "dramatiq",
|
170
170
|
"redis": "redis",
|
171
|
-
|
171
|
+
|
172
172
|
# Development
|
173
173
|
"ngrok": "ngrok",
|
174
174
|
"click": "click",
|
@@ -179,7 +179,7 @@ def validate_project_name(name: str) -> bool:
|
|
179
179
|
"""Validate project name."""
|
180
180
|
if not name or not name.strip():
|
181
181
|
return False
|
182
|
-
|
182
|
+
|
183
183
|
# Add more validation rules as needed
|
184
184
|
invalid_chars = ['<', '>', ':', '"', '|', '?', '*', '\\', '/']
|
185
185
|
return not any(char in name for char in invalid_chars)
|
@@ -188,11 +188,11 @@ def validate_project_name(name: str) -> bool:
|
|
188
188
|
def format_dependency_status(deps: Dict[str, bool], show_installed: bool = True, show_missing: bool = True) -> str:
|
189
189
|
"""Format dependency status for display."""
|
190
190
|
lines = []
|
191
|
-
|
191
|
+
|
192
192
|
for dep_name, is_installed in deps.items():
|
193
193
|
if is_installed and show_installed:
|
194
194
|
lines.append(f" ✅ {dep_name}")
|
195
195
|
elif not is_installed and show_missing:
|
196
196
|
lines.append(f" ⚪ {dep_name}")
|
197
|
-
|
197
|
+
|
198
198
|
return "\n".join(lines)
|
django_cfg/config.py
CHANGED
@@ -5,10 +5,10 @@ Configuration settings for the django-cfg library itself.
|
|
5
5
|
"""
|
6
6
|
|
7
7
|
from typing import List
|
8
|
+
|
8
9
|
from .modules.django_admin.icons import Icons
|
9
10
|
from .modules.django_unfold.models.dropdown import SiteDropdownItem
|
10
11
|
|
11
|
-
|
12
12
|
# Library configuration
|
13
13
|
LIB_NAME = "django-cfg"
|
14
14
|
LIB_SITE_URL = "https://djangocfg.com"
|
django_cfg/core/__init__.py
CHANGED
@@ -17,23 +17,23 @@ Public API:
|
|
17
17
|
|
18
18
|
# Main exports for convenient access
|
19
19
|
from .base import DjangoConfig
|
20
|
-
from .types import EnvironmentMode, StartupInfoMode
|
21
|
-
from .state import get_current_config, set_current_config, clear_current_config
|
22
20
|
from .constants import DEFAULT_APPS, DEFAULT_MIDDLEWARE
|
23
21
|
|
24
22
|
# Integration utilities
|
25
23
|
from .integration import (
|
26
|
-
|
27
|
-
print_ngrok_tunnel_info,
|
28
|
-
get_version_info,
|
29
|
-
get_latest_version,
|
30
|
-
get_current_version,
|
24
|
+
add_django_cfg_urls,
|
31
25
|
get_all_commands,
|
32
26
|
get_command_count,
|
33
27
|
get_commands_with_descriptions,
|
34
|
-
|
28
|
+
get_current_version,
|
35
29
|
get_django_cfg_urls_info,
|
30
|
+
get_latest_version,
|
31
|
+
get_version_info,
|
32
|
+
print_ngrok_tunnel_info,
|
33
|
+
print_startup_info,
|
36
34
|
)
|
35
|
+
from .state import clear_current_config, get_current_config, set_current_config
|
36
|
+
from .types import EnvironmentMode, StartupInfoMode
|
37
37
|
|
38
38
|
# Validation
|
39
39
|
from .validation import ConfigurationValidator
|
@@ -10,27 +10,28 @@ This module contains ONLY the data model definition:
|
|
10
10
|
Total size: ~350 lines (down from 903 in original config.py)
|
11
11
|
"""
|
12
12
|
|
13
|
-
from typing import Dict, List, Optional, Any
|
14
13
|
from pathlib import Path
|
15
|
-
from
|
14
|
+
from typing import Any, Dict, List, Optional
|
16
15
|
|
17
|
-
from
|
18
|
-
|
16
|
+
from pydantic import BaseModel, Field, PrivateAttr, field_validator, model_validator
|
17
|
+
|
18
|
+
from ...apps.ipc import DjangoCfgRPCConfig
|
19
19
|
from ...models import (
|
20
|
-
|
20
|
+
ApiKeys,
|
21
21
|
CacheConfig,
|
22
|
+
DatabaseConfig,
|
23
|
+
DRFConfig,
|
22
24
|
EmailConfig,
|
25
|
+
LimitsConfig,
|
26
|
+
SpectacularConfig,
|
23
27
|
TelegramConfig,
|
24
28
|
UnfoldConfig,
|
25
|
-
DRFConfig,
|
26
|
-
SpectacularConfig,
|
27
|
-
LimitsConfig,
|
28
|
-
ApiKeys,
|
29
29
|
)
|
30
|
-
from ...models.tasks import TaskConfig
|
31
|
-
from ...models.payments import PaymentsConfig
|
32
30
|
from ...models.ngrok import NgrokConfig
|
33
|
-
from ...
|
31
|
+
from ...models.payments import PaymentsConfig
|
32
|
+
from ...models.tasks import TaskConfig
|
33
|
+
from ..exceptions import ConfigurationError
|
34
|
+
from ..types.enums import EnvironmentMode, StartupInfoMode
|
34
35
|
|
35
36
|
|
36
37
|
class DjangoConfig(BaseModel):
|
@@ -7,7 +7,7 @@ Extracted from original config.py (903 lines) for better maintainability.
|
|
7
7
|
Size: ~220 lines (focused on one task)
|
8
8
|
"""
|
9
9
|
|
10
|
-
from typing import
|
10
|
+
from typing import TYPE_CHECKING, List
|
11
11
|
|
12
12
|
from ..constants import DEFAULT_APPS
|
13
13
|
|
@@ -134,7 +134,7 @@ class InstalledAppsBuilder:
|
|
134
134
|
apps.append("django_cfg.apps.payments")
|
135
135
|
|
136
136
|
if self.config.django_ipc and self.config.django_ipc.enabled:
|
137
|
-
apps.append("django_cfg.
|
137
|
+
apps.append("django_cfg.apps.ipc")
|
138
138
|
|
139
139
|
return apps
|
140
140
|
|
@@ -7,7 +7,7 @@ Extracted from original config.py for better maintainability.
|
|
7
7
|
Size: ~100 lines (focused on security)
|
8
8
|
"""
|
9
9
|
|
10
|
-
from typing import
|
10
|
+
from typing import TYPE_CHECKING, List
|
11
11
|
|
12
12
|
if TYPE_CHECKING:
|
13
13
|
from ..base.config_model import DjangoConfig
|
django_cfg/core/config.py
CHANGED
@@ -6,13 +6,13 @@ Usage:
|
|
6
6
|
"""
|
7
7
|
|
8
8
|
from .base.config_model import DjangoConfig
|
9
|
-
from .types.enums import EnvironmentMode, StartupInfoMode
|
10
9
|
from .constants import DEFAULT_APPS, DEFAULT_MIDDLEWARE
|
11
10
|
from .state.registry import (
|
11
|
+
clear_current_config,
|
12
12
|
get_current_config,
|
13
13
|
set_current_config,
|
14
|
-
clear_current_config,
|
15
14
|
)
|
15
|
+
from .types.enums import EnvironmentMode, StartupInfoMode
|
16
16
|
|
17
17
|
# Public API
|
18
18
|
__all__ = [
|
@@ -9,8 +9,7 @@ Following CRITICAL_REQUIREMENTS.md:
|
|
9
9
|
"""
|
10
10
|
|
11
11
|
import os
|
12
|
-
from typing import
|
13
|
-
from pathlib import Path
|
12
|
+
from typing import Any, Dict, List, Optional
|
14
13
|
|
15
14
|
from django_cfg.core.exceptions import EnvironmentError
|
16
15
|
|
@@ -22,14 +21,14 @@ class EnvironmentDetector:
|
|
22
21
|
Detects the current environment from various sources with a clear priority order.
|
23
22
|
Provides consistent environment names and validation.
|
24
23
|
"""
|
25
|
-
|
24
|
+
|
26
25
|
# Environment detection priority (highest to lowest)
|
27
26
|
ENV_VARIABLES: List[str] = [
|
28
27
|
'DJANGO_ENV',
|
29
|
-
'ENVIRONMENT',
|
28
|
+
'ENVIRONMENT',
|
30
29
|
'ENV',
|
31
30
|
]
|
32
|
-
|
31
|
+
|
33
32
|
# Environment name normalization
|
34
33
|
ENV_ALIASES: Dict[str, str] = {
|
35
34
|
'dev': 'development',
|
@@ -43,15 +42,15 @@ class EnvironmentDetector:
|
|
43
42
|
'stage': 'staging',
|
44
43
|
'staging': 'staging',
|
45
44
|
}
|
46
|
-
|
45
|
+
|
47
46
|
# Valid environment names
|
48
47
|
VALID_ENVIRONMENTS: List[str] = [
|
49
48
|
'development',
|
50
|
-
'production',
|
49
|
+
'production',
|
51
50
|
'testing',
|
52
51
|
'staging',
|
53
52
|
]
|
54
|
-
|
53
|
+
|
55
54
|
@classmethod
|
56
55
|
def detect_environment(cls) -> str:
|
57
56
|
"""
|
@@ -92,7 +91,7 @@ class EnvironmentDetector:
|
|
92
91
|
f"Or use aliases: {', '.join(cls.ENV_ALIASES.keys())}"
|
93
92
|
]
|
94
93
|
)
|
95
|
-
|
94
|
+
|
96
95
|
# Check DEBUG flag as fallback
|
97
96
|
debug_value = os.environ.get('DEBUG', '').lower().strip()
|
98
97
|
if debug_value:
|
@@ -100,10 +99,10 @@ class EnvironmentDetector:
|
|
100
99
|
return 'development'
|
101
100
|
elif debug_value in ('false', '0', 'no', 'off'):
|
102
101
|
return 'production'
|
103
|
-
|
102
|
+
|
104
103
|
# Default fallback
|
105
104
|
return 'development'
|
106
|
-
|
105
|
+
|
107
106
|
except EnvironmentError:
|
108
107
|
raise # Re-raise our own exceptions
|
109
108
|
except Exception as e:
|
@@ -115,7 +114,7 @@ class EnvironmentDetector:
|
|
115
114
|
"Check environment variable syntax"
|
116
115
|
]
|
117
116
|
) from e
|
118
|
-
|
117
|
+
|
119
118
|
@classmethod
|
120
119
|
def _normalize_environment(cls, env: str) -> Optional[str]:
|
121
120
|
"""
|
@@ -129,16 +128,16 @@ class EnvironmentDetector:
|
|
129
128
|
"""
|
130
129
|
if not env:
|
131
130
|
return None
|
132
|
-
|
131
|
+
|
133
132
|
env_clean = env.lower().strip()
|
134
|
-
|
133
|
+
|
135
134
|
# Direct match with valid environments
|
136
135
|
if env_clean in cls.VALID_ENVIRONMENTS:
|
137
136
|
return env_clean
|
138
|
-
|
137
|
+
|
139
138
|
# Alias match
|
140
139
|
return cls.ENV_ALIASES.get(env_clean)
|
141
|
-
|
140
|
+
|
142
141
|
@classmethod
|
143
142
|
def is_development(cls, environment: Optional[str] = None) -> bool:
|
144
143
|
"""
|
@@ -152,7 +151,7 @@ class EnvironmentDetector:
|
|
152
151
|
"""
|
153
152
|
env = environment or cls.detect_environment()
|
154
153
|
return env == 'development'
|
155
|
-
|
154
|
+
|
156
155
|
@classmethod
|
157
156
|
def is_production(cls, environment: Optional[str] = None) -> bool:
|
158
157
|
"""
|
@@ -166,7 +165,7 @@ class EnvironmentDetector:
|
|
166
165
|
"""
|
167
166
|
env = environment or cls.detect_environment()
|
168
167
|
return env == 'production'
|
169
|
-
|
168
|
+
|
170
169
|
@classmethod
|
171
170
|
def is_testing(cls, environment: Optional[str] = None) -> bool:
|
172
171
|
"""
|
@@ -180,7 +179,7 @@ class EnvironmentDetector:
|
|
180
179
|
"""
|
181
180
|
env = environment or cls.detect_environment()
|
182
181
|
return env == 'testing'
|
183
|
-
|
182
|
+
|
184
183
|
@classmethod
|
185
184
|
def is_staging(cls, environment: Optional[str] = None) -> bool:
|
186
185
|
"""
|
@@ -194,7 +193,7 @@ class EnvironmentDetector:
|
|
194
193
|
"""
|
195
194
|
env = environment or cls.detect_environment()
|
196
195
|
return env == 'staging'
|
197
|
-
|
196
|
+
|
198
197
|
@classmethod
|
199
198
|
def get_environment_info(cls) -> Dict[str, Any]:
|
200
199
|
"""
|
@@ -205,7 +204,7 @@ class EnvironmentDetector:
|
|
205
204
|
"""
|
206
205
|
try:
|
207
206
|
detected_env = cls.detect_environment()
|
208
|
-
|
207
|
+
|
209
208
|
return {
|
210
209
|
'environment': detected_env,
|
211
210
|
'is_development': cls.is_development(detected_env),
|
@@ -219,7 +218,7 @@ class EnvironmentDetector:
|
|
219
218
|
},
|
220
219
|
'detection_source': cls._get_detection_source(),
|
221
220
|
}
|
222
|
-
|
221
|
+
|
223
222
|
except Exception as e:
|
224
223
|
return {
|
225
224
|
'error': str(e),
|
@@ -229,7 +228,7 @@ class EnvironmentDetector:
|
|
229
228
|
},
|
230
229
|
'debug_flag': os.environ.get('DEBUG', 'not_set'),
|
231
230
|
}
|
232
|
-
|
231
|
+
|
233
232
|
@classmethod
|
234
233
|
def _get_detection_source(cls) -> str:
|
235
234
|
"""
|
@@ -243,14 +242,14 @@ class EnvironmentDetector:
|
|
243
242
|
env_value = os.environ.get(env_var)
|
244
243
|
if env_value and cls._normalize_environment(env_value):
|
245
244
|
return env_var
|
246
|
-
|
245
|
+
|
247
246
|
# Check DEBUG flag
|
248
247
|
debug_value = os.environ.get('DEBUG', '').lower().strip()
|
249
248
|
if debug_value in ('true', '1', 'yes', 'on', 'false', '0', 'no', 'off'):
|
250
249
|
return 'DEBUG'
|
251
|
-
|
250
|
+
|
252
251
|
return 'default_fallback'
|
253
|
-
|
252
|
+
|
254
253
|
@classmethod
|
255
254
|
def validate_environment(cls, environment: str) -> bool:
|
256
255
|
"""
|
@@ -263,7 +262,7 @@ class EnvironmentDetector:
|
|
263
262
|
True if valid environment name
|
264
263
|
"""
|
265
264
|
return environment in cls.VALID_ENVIRONMENTS
|
266
|
-
|
265
|
+
|
267
266
|
@classmethod
|
268
267
|
def get_valid_environments(cls) -> List[str]:
|
269
268
|
"""
|
@@ -273,7 +272,7 @@ class EnvironmentDetector:
|
|
273
272
|
List of valid environment names
|
274
273
|
"""
|
275
274
|
return cls.VALID_ENVIRONMENTS.copy()
|
276
|
-
|
275
|
+
|
277
276
|
@classmethod
|
278
277
|
def get_environment_aliases(cls) -> Dict[str, str]:
|
279
278
|
"""
|
django_cfg/core/exceptions.py
CHANGED
@@ -5,7 +5,7 @@ Generates fundamental Django settings like SECRET_KEY, DEBUG, INSTALLED_APPS, et
|
|
5
5
|
Size: ~120 lines (focused on core settings)
|
6
6
|
"""
|
7
7
|
|
8
|
-
from typing import
|
8
|
+
from typing import TYPE_CHECKING, Any, Dict
|
9
9
|
|
10
10
|
if TYPE_CHECKING:
|
11
11
|
from ...base.config_model import DjangoConfig
|