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
@@ -2,22 +2,22 @@
|
|
2
2
|
Startup display manager for Django CFG.
|
3
3
|
"""
|
4
4
|
|
5
|
-
from typing import Optional, Dict, Any, List
|
6
|
-
from rich.text import Text
|
7
|
-
from rich.table import Table
|
8
5
|
from rich.panel import Panel
|
9
|
-
from .
|
6
|
+
from rich.table import Table
|
7
|
+
from rich.text import Text
|
8
|
+
|
9
|
+
from .base import BaseDisplayManager
|
10
10
|
from .ngrok import NgrokDisplayManager
|
11
11
|
|
12
12
|
|
13
13
|
class StartupDisplayManager(BaseDisplayManager):
|
14
14
|
"""Manager for displaying startup information."""
|
15
|
-
|
15
|
+
|
16
16
|
def __init__(self, config=None):
|
17
17
|
"""Initialize startup display manager."""
|
18
18
|
super().__init__(config)
|
19
19
|
self.ngrok_manager = NgrokDisplayManager(config)
|
20
|
-
|
20
|
+
|
21
21
|
def display_startup_info(self):
|
22
22
|
"""Display startup information based on config.startup_info_mode."""
|
23
23
|
if not self.config:
|
@@ -35,7 +35,7 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
35
35
|
self.display_essential_info()
|
36
36
|
elif mode == StartupInfoMode.FULL:
|
37
37
|
self.display_complete_info()
|
38
|
-
|
38
|
+
|
39
39
|
def display_minimal_info(self):
|
40
40
|
"""Display minimal startup info (NONE mode)."""
|
41
41
|
try:
|
@@ -70,7 +70,7 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
70
70
|
print(f"❌ ERROR in display_minimal_info: {e}")
|
71
71
|
print("🔍 TRACEBACK:")
|
72
72
|
traceback.print_exc()
|
73
|
-
|
73
|
+
|
74
74
|
def display_essential_info(self):
|
75
75
|
"""Display essential startup info (SHORT mode)."""
|
76
76
|
try:
|
@@ -105,7 +105,7 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
105
105
|
print(f"❌ ERROR in display_essential_info: {e}")
|
106
106
|
print("🔍 TRACEBACK:")
|
107
107
|
traceback.print_exc()
|
108
|
-
|
108
|
+
|
109
109
|
def display_complete_info(self):
|
110
110
|
"""Display complete startup info (FULL mode)."""
|
111
111
|
try:
|
@@ -114,8 +114,10 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
114
114
|
|
115
115
|
# Get library info
|
116
116
|
from django_cfg.config import (
|
117
|
-
|
118
|
-
|
117
|
+
LIB_DOCS_URL,
|
118
|
+
LIB_GITHUB_URL,
|
119
|
+
LIB_SITE_URL,
|
120
|
+
LIB_SUPPORT_URL,
|
119
121
|
)
|
120
122
|
|
121
123
|
# Create main info table
|
@@ -172,17 +174,17 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
172
174
|
print(f"❌ ERROR in display_complete_info: {e}")
|
173
175
|
print("🔍 TRACEBACK:")
|
174
176
|
traceback.print_exc()
|
175
|
-
|
177
|
+
|
176
178
|
def _display_update_notification_short(self):
|
177
179
|
"""Display update notification for SHORT mode."""
|
178
180
|
try:
|
179
181
|
from ..version_checker import get_version_info
|
180
182
|
version_info = get_version_info()
|
181
|
-
|
183
|
+
|
182
184
|
if version_info.get('update_available'):
|
183
185
|
current = version_info.get('current_version', 'unknown')
|
184
186
|
latest = version_info.get('latest_version', 'unknown')
|
185
|
-
|
187
|
+
|
186
188
|
update_text = Text()
|
187
189
|
update_text.append("🚨 Update available: ", style="bold yellow")
|
188
190
|
update_text.append(f"{current}", style="red")
|
@@ -190,7 +192,7 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
190
192
|
update_text.append(f"{latest}", style="green")
|
191
193
|
update_text.append("\n💡 Run: ", style="dim")
|
192
194
|
update_text.append("poetry add django-cfg@latest", style="bright_blue")
|
193
|
-
|
195
|
+
|
194
196
|
update_panel = self.create_panel(
|
195
197
|
update_text,
|
196
198
|
title="",
|
@@ -201,38 +203,38 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
201
203
|
self.console.print(update_panel)
|
202
204
|
except Exception:
|
203
205
|
pass
|
204
|
-
|
206
|
+
|
205
207
|
def _display_update_notification_full(self):
|
206
208
|
"""Display update notification for FULL mode."""
|
207
209
|
try:
|
208
210
|
from ..version_checker import get_version_info
|
209
211
|
version_info = get_version_info()
|
210
|
-
|
212
|
+
|
211
213
|
if version_info.get('update_available'):
|
212
214
|
update_table = self.create_table()
|
213
215
|
update_table.add_column("Info", style="yellow", width=15)
|
214
216
|
update_table.add_column("Value", style="white")
|
215
|
-
|
217
|
+
|
216
218
|
current = version_info.get('current_version', 'unknown')
|
217
219
|
latest = version_info.get('latest_version', 'unknown')
|
218
220
|
update_url = version_info.get('update_url', '')
|
219
|
-
|
221
|
+
|
220
222
|
update_table.add_row("Current", f"[red]{current}[/red]")
|
221
223
|
update_table.add_row("Latest", f"[green]{latest}[/green]")
|
222
224
|
update_table.add_row("💡 Update", "[bright_blue]poetry add django-cfg@latest[/bright_blue]")
|
223
225
|
if update_url:
|
224
226
|
update_table.add_row("PyPI", update_url)
|
225
|
-
|
227
|
+
|
226
228
|
update_panel = self.create_full_width_panel(
|
227
229
|
update_table,
|
228
230
|
title="🚨 Update Available",
|
229
231
|
border_style="yellow"
|
230
232
|
)
|
231
|
-
|
233
|
+
|
232
234
|
self.console.print(update_panel)
|
233
235
|
except Exception:
|
234
236
|
pass
|
235
|
-
|
237
|
+
|
236
238
|
def _display_essential_columns(self):
|
237
239
|
"""Display essential info in columns for SHORT mode."""
|
238
240
|
# Enabled apps
|
@@ -243,14 +245,14 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
243
245
|
for app in enabled_apps[:5]: # Limit for SHORT mode
|
244
246
|
app_name = app.split('.')[-1]
|
245
247
|
apps_table.add_row(f"• {app_name}")
|
246
|
-
|
248
|
+
|
247
249
|
# Key endpoints
|
248
250
|
endpoints_table = self.create_table()
|
249
251
|
endpoints_table.add_column("Endpoint", style="bright_green")
|
250
|
-
|
252
|
+
|
251
253
|
endpoints_table.add_row(f"• {self.get_base_url('cfg', 'health')}")
|
252
254
|
endpoints_table.add_row(f"• {self.get_base_url('api', 'payments')}")
|
253
|
-
|
255
|
+
|
254
256
|
# Use new two-column table method for perfect 50/50 layout
|
255
257
|
self.print_two_column_table(
|
256
258
|
left_content=apps_table,
|
@@ -260,7 +262,7 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
260
262
|
left_style="blue",
|
261
263
|
right_style="green"
|
262
264
|
)
|
263
|
-
|
265
|
+
|
264
266
|
def _display_main_columns(self):
|
265
267
|
"""Display main columns (apps and endpoints) for FULL mode."""
|
266
268
|
# Enabled apps
|
@@ -271,15 +273,15 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
271
273
|
for app in enabled_apps:
|
272
274
|
app_name = app.split('.')[-1]
|
273
275
|
apps_table.add_row(f"• {app_name}")
|
274
|
-
|
276
|
+
|
275
277
|
# Endpoints
|
276
278
|
endpoints_table = self.create_table()
|
277
279
|
endpoints_table.add_column("Endpoint", style="bright_green")
|
278
|
-
|
280
|
+
|
279
281
|
# Add core endpoints
|
280
282
|
endpoints_table.add_row(f"• {self.get_base_url('cfg', 'health')}")
|
281
283
|
endpoints_table.add_row(f"• {self.get_base_url('cfg', 'commands')}")
|
282
|
-
|
284
|
+
|
283
285
|
# Add app-specific API endpoints based on enabled apps
|
284
286
|
for app in enabled_apps:
|
285
287
|
app_name = app.split('.')[-1]
|
@@ -287,7 +289,7 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
287
289
|
continue
|
288
290
|
else:
|
289
291
|
endpoints_table.add_row(f"• {self.get_base_url('api', app_name)}")
|
290
|
-
|
292
|
+
|
291
293
|
# Use new two-column table method for perfect 50/50 layout
|
292
294
|
self.print_two_column_table(
|
293
295
|
left_content=apps_table,
|
@@ -297,38 +299,38 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
297
299
|
left_style="blue",
|
298
300
|
right_style="green"
|
299
301
|
)
|
300
|
-
|
302
|
+
|
301
303
|
def _display_config_panels(self):
|
302
304
|
"""Display app-specific configuration panels."""
|
303
305
|
config_panels = []
|
304
|
-
|
306
|
+
|
305
307
|
# Payments configuration
|
306
|
-
if (self.config and hasattr(self.config, 'payments') and
|
308
|
+
if (self.config and hasattr(self.config, 'payments') and
|
307
309
|
self.config.payments and self.config.payments.enabled):
|
308
|
-
|
310
|
+
|
309
311
|
payment_table = self.create_table()
|
310
312
|
payment_table.add_column("Setting", style="cyan", width=20)
|
311
313
|
payment_table.add_column("Value", style="white")
|
312
|
-
|
314
|
+
|
313
315
|
payment_table.add_row("Enabled", f"[green]{self.config.payments.enabled}[/green]")
|
314
316
|
middleware_enabled = self.config.payments.middleware_enabled
|
315
317
|
color = 'green' if middleware_enabled else 'red'
|
316
318
|
payment_table.add_row("Middleware", f"[{color}]{middleware_enabled}[/{color}]")
|
317
|
-
|
319
|
+
|
318
320
|
config_panels.append(self.create_panel(
|
319
|
-
payment_table,
|
320
|
-
title="💳 Payments",
|
321
|
+
payment_table,
|
322
|
+
title="💳 Payments",
|
321
323
|
border_style="yellow"
|
322
324
|
))
|
323
|
-
|
325
|
+
|
324
326
|
# Tasks configuration - removed from config_panels, will be shown separately
|
325
|
-
|
327
|
+
|
326
328
|
# Constance configuration
|
327
329
|
try:
|
328
330
|
constance_table = self.create_table()
|
329
331
|
constance_table.add_column("Setting", style="cyan", width=20)
|
330
332
|
constance_table.add_column("Value", style="white")
|
331
|
-
|
333
|
+
|
332
334
|
# Constance fields moved to separate block
|
333
335
|
# Get cache info
|
334
336
|
try:
|
@@ -339,7 +341,7 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
339
341
|
constance_table.add_row("Cache", "[yellow]Not configured[/yellow]")
|
340
342
|
except Exception:
|
341
343
|
constance_table.add_row("Cache", "[red]Error[/red]")
|
342
|
-
|
344
|
+
|
343
345
|
# Add validation info
|
344
346
|
try:
|
345
347
|
from django_cfg.core.validation import ConfigurationValidator
|
@@ -351,22 +353,22 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
351
353
|
constance_table.add_row("Validation", f"[red]✗ {error_count} errors[/red]")
|
352
354
|
except Exception:
|
353
355
|
constance_table.add_row("Validation", "[red]Error[/red]")
|
354
|
-
|
356
|
+
|
355
357
|
# Add installed apps count
|
356
358
|
try:
|
357
359
|
installed_apps = self.config.get_installed_apps() if hasattr(self.config, 'get_installed_apps') else []
|
358
360
|
constance_table.add_row("Apps", f"[blue]{len(installed_apps)}[/blue]")
|
359
361
|
except Exception:
|
360
362
|
constance_table.add_row("Apps", "[red]Error[/red]")
|
361
|
-
|
363
|
+
|
362
364
|
config_panels.append(self.create_panel(
|
363
|
-
constance_table,
|
364
|
-
title="⚙️ Configuration",
|
365
|
+
constance_table,
|
366
|
+
title="⚙️ Configuration",
|
365
367
|
border_style="cyan"
|
366
368
|
))
|
367
369
|
except Exception:
|
368
370
|
pass
|
369
|
-
|
371
|
+
|
370
372
|
# Show config panels
|
371
373
|
if len(config_panels) >= 2:
|
372
374
|
# Show first two panels in 50/50 layout
|
@@ -378,7 +380,7 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
378
380
|
left_style=config_panels[0].border_style,
|
379
381
|
right_style=config_panels[1].border_style
|
380
382
|
)
|
381
|
-
|
383
|
+
|
382
384
|
# Show remaining panels individually
|
383
385
|
for panel in config_panels[2:]:
|
384
386
|
self.console.print(panel)
|
@@ -386,73 +388,73 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
386
388
|
# Show single panel
|
387
389
|
for panel in config_panels:
|
388
390
|
self.console.print(panel)
|
389
|
-
|
391
|
+
|
390
392
|
# Show Background Tasks separately
|
391
393
|
self._display_background_tasks()
|
392
|
-
|
394
|
+
|
393
395
|
# Show detailed Constance information (includes summary)
|
394
396
|
self._display_constance_details()
|
395
|
-
|
397
|
+
|
396
398
|
def _display_background_tasks(self):
|
397
399
|
"""Display Background Tasks information in a separate panel."""
|
398
400
|
try:
|
399
401
|
# Always show Background Tasks section if config exists
|
400
402
|
if not self.config:
|
401
403
|
return
|
402
|
-
|
404
|
+
|
403
405
|
task_table = self.create_table()
|
404
406
|
task_table.add_column("Setting", style="cyan", width=20)
|
405
407
|
task_table.add_column("Value", style="white")
|
406
|
-
|
408
|
+
|
407
409
|
# Show real tasks status
|
408
410
|
tasks_enabled = self.config.should_enable_tasks()
|
409
411
|
if tasks_enabled:
|
410
412
|
task_table.add_row("Tasks Enabled", "[green]True[/green]")
|
411
413
|
else:
|
412
414
|
task_table.add_row("Tasks Enabled", "[yellow]False[/yellow]")
|
413
|
-
|
415
|
+
|
414
416
|
if hasattr(self.config, 'tasks') and self.config.tasks:
|
415
417
|
queue_name = getattr(self.config.tasks, 'queue_name', 'default')
|
416
418
|
task_table.add_row("Queue", f"[yellow]{queue_name}[/yellow]")
|
417
419
|
else:
|
418
420
|
task_table.add_row("Queue", "[yellow]default[/yellow]")
|
419
|
-
|
421
|
+
|
420
422
|
# Add worker command
|
421
423
|
task_table.add_row("Start Workers", "[bright_blue]poetry run python manage.py rundramatiq[/bright_blue]")
|
422
|
-
|
424
|
+
|
423
425
|
task_panel = self.create_full_width_panel(
|
424
|
-
task_table,
|
425
|
-
title="⚡ Background Tasks",
|
426
|
+
task_table,
|
427
|
+
title="⚡ Background Tasks",
|
426
428
|
border_style="purple"
|
427
429
|
)
|
428
|
-
|
430
|
+
|
429
431
|
self.console.print(task_panel)
|
430
|
-
|
432
|
+
|
431
433
|
except Exception as e:
|
432
434
|
import traceback
|
433
435
|
print(f"❌ ERROR in _display_background_tasks: {e}")
|
434
436
|
traceback.print_exc()
|
435
|
-
|
437
|
+
|
436
438
|
def _display_constance_integrated_block(self, constance_config, all_fields):
|
437
439
|
"""Display integrated Constance block with summary and field details."""
|
438
440
|
try:
|
439
441
|
# Create main content table that will contain everything
|
440
442
|
main_content = Table(show_header=False, box=None, padding=(0, 1))
|
441
443
|
main_content.add_column("Content", justify="left")
|
442
|
-
|
444
|
+
|
443
445
|
# 1. Add summary section
|
444
446
|
summary_table = self.create_table()
|
445
447
|
summary_table.add_column("Source", style="cyan", width=20)
|
446
448
|
summary_table.add_column("Fields", style="white")
|
447
|
-
|
449
|
+
|
448
450
|
# Count fields by source
|
449
451
|
user_fields = len(constance_config.fields)
|
450
|
-
|
452
|
+
|
451
453
|
# Count by app
|
452
454
|
tasks_count = 0
|
453
455
|
knowbase_count = 0
|
454
456
|
payments_count = 0
|
455
|
-
|
457
|
+
|
456
458
|
config = self.config
|
457
459
|
if config and config.should_enable_tasks():
|
458
460
|
try:
|
@@ -461,23 +463,27 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
461
463
|
tasks_count = len(tasks_fields)
|
462
464
|
except:
|
463
465
|
pass
|
464
|
-
|
466
|
+
|
465
467
|
if config and config.enable_knowbase:
|
466
468
|
try:
|
467
|
-
from django_cfg.apps.knowbase.config import
|
469
|
+
from django_cfg.apps.knowbase.config import (
|
470
|
+
get_django_cfg_knowbase_constance_fields,
|
471
|
+
)
|
468
472
|
knowbase_fields = get_django_cfg_knowbase_constance_fields()
|
469
473
|
knowbase_count = len(knowbase_fields)
|
470
474
|
except:
|
471
475
|
pass
|
472
|
-
|
476
|
+
|
473
477
|
if config and config.payments and config.payments.enabled:
|
474
478
|
try:
|
475
|
-
from django_cfg.apps.payments.config import
|
479
|
+
from django_cfg.apps.payments.config import (
|
480
|
+
get_django_cfg_payments_constance_fields,
|
481
|
+
)
|
476
482
|
payments_fields = get_django_cfg_payments_constance_fields()
|
477
483
|
payments_count = len(payments_fields)
|
478
484
|
except:
|
479
485
|
pass
|
480
|
-
|
486
|
+
|
481
487
|
summary_table.add_row("User Defined", f"[blue]{user_fields}[/blue]")
|
482
488
|
if tasks_count > 0:
|
483
489
|
summary_table.add_row("Tasks Module", f"[green]{tasks_count}[/green]")
|
@@ -486,10 +492,10 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
486
492
|
if payments_count > 0:
|
487
493
|
summary_table.add_row("Payments App", f"[green]{payments_count}[/green]")
|
488
494
|
summary_table.add_row("Total", f"[yellow]{len(all_fields)}[/yellow]")
|
489
|
-
|
495
|
+
|
490
496
|
main_content.add_row(summary_table)
|
491
497
|
main_content.add_row("") # Spacer
|
492
|
-
|
498
|
+
|
493
499
|
# 2. Add field details section
|
494
500
|
groups = {}
|
495
501
|
for field in all_fields:
|
@@ -497,29 +503,29 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
497
503
|
if group not in groups:
|
498
504
|
groups[group] = []
|
499
505
|
groups[group].append(field)
|
500
|
-
|
506
|
+
|
501
507
|
group_names = list(groups.keys())[:2]
|
502
|
-
|
508
|
+
|
503
509
|
if len(group_names) >= 2:
|
504
510
|
# Create two-column layout for field details
|
505
511
|
details_table = Table(show_header=False, box=None, padding=(0, 2))
|
506
512
|
details_table.add_column("Left", justify="left")
|
507
513
|
details_table.add_column("Right", justify="left")
|
508
|
-
|
514
|
+
|
509
515
|
# Left column - first group
|
510
516
|
left_table = self.create_table()
|
511
517
|
left_table.add_column("Field", style="bright_cyan")
|
512
518
|
left_table.add_column("Type", style="yellow")
|
513
519
|
for field in groups[group_names[0]][:8]:
|
514
520
|
left_table.add_row(field.name, field.field_type)
|
515
|
-
|
516
|
-
# Right column - second group
|
521
|
+
|
522
|
+
# Right column - second group
|
517
523
|
right_table = self.create_table()
|
518
524
|
right_table.add_column("Field", style="bright_cyan")
|
519
525
|
right_table.add_column("Type", style="yellow")
|
520
526
|
for field in groups[group_names[1]][:8]:
|
521
527
|
right_table.add_row(field.name, field.field_type)
|
522
|
-
|
528
|
+
|
523
529
|
# Create panels for each group
|
524
530
|
left_panel = Panel(
|
525
531
|
left_table,
|
@@ -528,7 +534,7 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
528
534
|
expand=True,
|
529
535
|
padding=(1, 1)
|
530
536
|
)
|
531
|
-
|
537
|
+
|
532
538
|
right_panel = Panel(
|
533
539
|
right_table,
|
534
540
|
title=f"🔧 {group_names[1]} Settings",
|
@@ -536,21 +542,21 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
536
542
|
expand=True,
|
537
543
|
padding=(1, 1)
|
538
544
|
)
|
539
|
-
|
545
|
+
|
540
546
|
details_table.add_row(left_panel, right_panel)
|
541
547
|
main_content.add_row(details_table)
|
542
|
-
|
548
|
+
|
543
549
|
elif len(group_names) == 1:
|
544
550
|
# Single group
|
545
551
|
single_table = self.create_table()
|
546
552
|
single_table.add_column("Field", style="bright_cyan")
|
547
553
|
single_table.add_column("Type", style="yellow")
|
548
554
|
single_table.add_column("Default", style="white")
|
549
|
-
|
555
|
+
|
550
556
|
for field in groups[group_names[0]][:10]:
|
551
557
|
default_str = str(field.default)[:20] + "..." if len(str(field.default)) > 20 else str(field.default)
|
552
558
|
single_table.add_row(field.name, field.field_type, default_str)
|
553
|
-
|
559
|
+
|
554
560
|
single_panel = Panel(
|
555
561
|
single_table,
|
556
562
|
title=f"🔧 {group_names[0]} Settings",
|
@@ -559,53 +565,53 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
559
565
|
padding=(1, 1)
|
560
566
|
)
|
561
567
|
main_content.add_row(single_panel)
|
562
|
-
|
568
|
+
|
563
569
|
# Create the main panel containing everything
|
564
570
|
integrated_panel = self.create_full_width_panel(
|
565
571
|
main_content,
|
566
572
|
title="📊 Constance Fields Summary",
|
567
573
|
border_style="purple"
|
568
574
|
)
|
569
|
-
|
575
|
+
|
570
576
|
self.console.print(integrated_panel)
|
571
|
-
|
577
|
+
|
572
578
|
except Exception as e:
|
573
579
|
import traceback
|
574
580
|
print(f"❌ ERROR in _display_constance_integrated_block: {e}")
|
575
581
|
traceback.print_exc()
|
576
|
-
|
582
|
+
|
577
583
|
def _display_constance_details(self):
|
578
584
|
"""Display detailed Constance configuration information."""
|
579
585
|
try:
|
580
586
|
if not (self.config and hasattr(self.config, 'constance')):
|
581
587
|
return
|
582
|
-
|
588
|
+
|
583
589
|
constance_config = self.config.constance
|
584
590
|
all_fields = constance_config.get_all_fields()
|
585
|
-
|
591
|
+
|
586
592
|
if not all_fields:
|
587
593
|
return
|
588
|
-
|
594
|
+
|
589
595
|
# Show integrated summary and details in one block
|
590
596
|
self._display_constance_integrated_block(constance_config, all_fields)
|
591
|
-
|
597
|
+
|
592
598
|
except Exception as e:
|
593
599
|
import traceback
|
594
600
|
print(f"❌ ERROR in _display_constance_details: {e}")
|
595
601
|
traceback.print_exc()
|
596
|
-
|
602
|
+
|
597
603
|
def _display_constance_summary(self, constance_config, all_fields):
|
598
604
|
"""Display summary of Constance fields by source."""
|
599
605
|
try:
|
600
606
|
# Count fields by source
|
601
607
|
user_fields = len(constance_config.fields) # User-defined fields
|
602
608
|
app_fields = constance_config._get_app_constance_fields()
|
603
|
-
|
609
|
+
|
604
610
|
# Count by app
|
605
611
|
tasks_count = 0
|
606
612
|
knowbase_count = 0
|
607
613
|
payments_count = 0
|
608
|
-
|
614
|
+
|
609
615
|
# Try to get individual app field counts
|
610
616
|
config = self.config
|
611
617
|
if config and config.should_enable_tasks():
|
@@ -615,52 +621,56 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
615
621
|
tasks_count = len(tasks_fields)
|
616
622
|
except:
|
617
623
|
pass
|
618
|
-
|
624
|
+
|
619
625
|
if config and config.enable_knowbase:
|
620
626
|
try:
|
621
|
-
from django_cfg.apps.knowbase.config import
|
627
|
+
from django_cfg.apps.knowbase.config import (
|
628
|
+
get_django_cfg_knowbase_constance_fields,
|
629
|
+
)
|
622
630
|
knowbase_fields = get_django_cfg_knowbase_constance_fields()
|
623
631
|
knowbase_count = len(knowbase_fields)
|
624
632
|
except:
|
625
633
|
pass
|
626
|
-
|
634
|
+
|
627
635
|
if config and config.payments and config.payments.enabled:
|
628
636
|
try:
|
629
|
-
from django_cfg.apps.payments.config import
|
637
|
+
from django_cfg.apps.payments.config import (
|
638
|
+
get_django_cfg_payments_constance_fields,
|
639
|
+
)
|
630
640
|
payments_fields = get_django_cfg_payments_constance_fields()
|
631
641
|
payments_count = len(payments_fields)
|
632
642
|
except:
|
633
643
|
pass
|
634
|
-
|
644
|
+
|
635
645
|
# Create summary table
|
636
646
|
summary_table = self.create_table()
|
637
647
|
summary_table.add_column("Source", style="cyan", width=20)
|
638
648
|
summary_table.add_column("Fields", style="white")
|
639
|
-
|
649
|
+
|
640
650
|
summary_table.add_row("User Defined", f"[blue]{user_fields}[/blue]")
|
641
|
-
|
651
|
+
|
642
652
|
if tasks_count > 0:
|
643
653
|
summary_table.add_row("Tasks Module", f"[green]{tasks_count}[/green]")
|
644
654
|
if knowbase_count > 0:
|
645
655
|
summary_table.add_row("Knowbase App", f"[green]{knowbase_count}[/green]")
|
646
656
|
if payments_count > 0:
|
647
657
|
summary_table.add_row("Payments App", f"[green]{payments_count}[/green]")
|
648
|
-
|
658
|
+
|
649
659
|
summary_table.add_row("Total", f"[yellow]{len(all_fields)}[/yellow]")
|
650
|
-
|
660
|
+
|
651
661
|
summary_panel = self.create_panel(
|
652
662
|
summary_table,
|
653
663
|
title="📊 Constance Fields Summary",
|
654
664
|
border_style="purple"
|
655
665
|
)
|
656
|
-
|
666
|
+
|
657
667
|
self.console.print(summary_panel)
|
658
|
-
|
668
|
+
|
659
669
|
except Exception as e:
|
660
670
|
import traceback
|
661
671
|
print(f"❌ ERROR in _display_constance_summary: {e}")
|
662
672
|
traceback.print_exc()
|
663
|
-
|
673
|
+
|
664
674
|
def _display_openapi_client_info(self):
|
665
675
|
"""Display Django Client (OpenAPI) information."""
|
666
676
|
try:
|
@@ -696,91 +706,91 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
696
706
|
pass
|
697
707
|
except Exception:
|
698
708
|
pass
|
699
|
-
|
709
|
+
|
700
710
|
def _display_commands_info(self):
|
701
711
|
"""Display management commands information."""
|
702
712
|
try:
|
703
|
-
from ..commands_collector import get_all_commands
|
704
|
-
|
713
|
+
from ..commands_collector import get_all_commands
|
714
|
+
|
705
715
|
# Get command counts
|
706
716
|
all_commands = get_all_commands()
|
707
717
|
core_count = sum(len(commands) for commands in all_commands.get('django_cfg_core', {}).values())
|
708
718
|
app_count = sum(len(commands) for commands in all_commands.get('django_cfg_apps', {}).values())
|
709
719
|
project_count = sum(len(commands) for commands in all_commands.get('project_commands', {}).values())
|
710
720
|
total_count = core_count + app_count + project_count
|
711
|
-
|
721
|
+
|
712
722
|
# Main commands info
|
713
723
|
commands_table = self.create_table()
|
714
724
|
commands_table.add_column("Type", style="cyan", width=20)
|
715
725
|
commands_table.add_column("Count", style="white")
|
716
|
-
|
726
|
+
|
717
727
|
commands_table.add_row("🔧 Core Commands", str(core_count))
|
718
728
|
commands_table.add_row("📱 App Commands", str(app_count))
|
719
729
|
commands_table.add_row("🏗️ Project Commands", str(project_count))
|
720
730
|
commands_table.add_row("📊 Total", str(total_count))
|
721
|
-
|
731
|
+
|
722
732
|
commands_panel = self.create_full_width_panel(
|
723
733
|
commands_table,
|
724
734
|
title="⚡ Management Commands",
|
725
735
|
border_style="purple"
|
726
736
|
)
|
727
|
-
|
737
|
+
|
728
738
|
self.console.print(commands_panel)
|
729
|
-
|
739
|
+
|
730
740
|
# Detailed commands breakdown
|
731
741
|
self._display_commands_breakdown()
|
732
|
-
|
742
|
+
|
733
743
|
except Exception as e:
|
734
744
|
import traceback
|
735
745
|
print(f"❌ ERROR in _display_commands_info: {e}")
|
736
746
|
traceback.print_exc()
|
737
|
-
|
747
|
+
|
738
748
|
def _display_commands_breakdown(self):
|
739
749
|
"""Display detailed commands breakdown."""
|
740
750
|
try:
|
741
751
|
from ..commands_collector import get_all_commands
|
742
752
|
all_commands = get_all_commands()
|
743
|
-
|
753
|
+
|
744
754
|
columns_content = []
|
745
|
-
|
755
|
+
|
746
756
|
# Core commands
|
747
757
|
core_commands_dict = all_commands.get('django_cfg_core', {})
|
748
758
|
if core_commands_dict:
|
749
759
|
core_table = self.create_table()
|
750
760
|
core_table.add_column("Command", style="bright_blue")
|
751
|
-
|
761
|
+
|
752
762
|
# Flatten all core commands
|
753
763
|
all_core_commands = []
|
754
764
|
for commands_list in core_commands_dict.values():
|
755
765
|
all_core_commands.extend(commands_list)
|
756
|
-
|
766
|
+
|
757
767
|
for cmd in all_core_commands[:15]: # Limit to first 15
|
758
768
|
core_table.add_row(f"• {cmd}")
|
759
|
-
|
769
|
+
|
760
770
|
columns_content.append(self.create_panel(
|
761
|
-
core_table,
|
762
|
-
title="🔧 Core Commands",
|
771
|
+
core_table,
|
772
|
+
title="🔧 Core Commands",
|
763
773
|
border_style="blue"
|
764
774
|
))
|
765
|
-
|
775
|
+
|
766
776
|
# App commands
|
767
777
|
app_commands_dict = all_commands.get('django_cfg_apps', {})
|
768
778
|
if app_commands_dict:
|
769
779
|
app_table = self.create_table()
|
770
780
|
app_table.add_column("Command", style="bright_green")
|
771
|
-
|
781
|
+
|
772
782
|
for app_name, commands_list in app_commands_dict.items():
|
773
783
|
if commands_list:
|
774
784
|
app_table.add_row(f"[bold]{app_name.title()}:[/bold]")
|
775
785
|
for cmd in commands_list[:3]: # Limit per app
|
776
786
|
app_table.add_row(f" • {cmd}")
|
777
|
-
|
787
|
+
|
778
788
|
columns_content.append(self.create_panel(
|
779
|
-
app_table,
|
780
|
-
title="📱 App Commands",
|
789
|
+
app_table,
|
790
|
+
title="📱 App Commands",
|
781
791
|
border_style="green"
|
782
792
|
))
|
783
|
-
|
793
|
+
|
784
794
|
# Show command columns in 50/50 layout
|
785
795
|
if len(columns_content) == 2:
|
786
796
|
self.print_two_column_table(
|
@@ -797,7 +807,7 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
797
807
|
elif columns_content:
|
798
808
|
# Fallback for other cases
|
799
809
|
self.print_columns(columns_content, equal=True, expand=True)
|
800
|
-
|
810
|
+
|
801
811
|
# Project commands (separate panel due to length)
|
802
812
|
project_commands_dict = all_commands.get('project_commands', {})
|
803
813
|
if project_commands_dict:
|
@@ -805,31 +815,31 @@ class StartupDisplayManager(BaseDisplayManager):
|
|
805
815
|
all_project_commands = []
|
806
816
|
for commands_list in project_commands_dict.values():
|
807
817
|
all_project_commands.extend(commands_list)
|
808
|
-
|
818
|
+
|
809
819
|
# Split commands into two columns
|
810
820
|
mid_point = len(all_project_commands) // 2
|
811
821
|
left_commands = all_project_commands[:mid_point]
|
812
822
|
right_commands = all_project_commands[mid_point:]
|
813
|
-
|
823
|
+
|
814
824
|
# Create two-column table inside one panel
|
815
825
|
project_columns_table = Table(show_header=False, box=None, padding=(0, 2))
|
816
826
|
project_columns_table.add_column("Left", justify="left")
|
817
827
|
project_columns_table.add_column("Right", justify="left")
|
818
|
-
|
828
|
+
|
819
829
|
# Create content for each column
|
820
830
|
left_content = "\n".join([f"• {cmd}" for cmd in left_commands[:15]]) # Limit to 15 per column
|
821
831
|
right_content = "\n".join([f"• {cmd}" for cmd in right_commands[:15]])
|
822
|
-
|
832
|
+
|
823
833
|
project_columns_table.add_row(left_content, right_content)
|
824
|
-
|
834
|
+
|
825
835
|
project_panel = self.create_full_width_panel(
|
826
|
-
project_columns_table,
|
827
|
-
title="🏗️ Project Commands",
|
836
|
+
project_columns_table,
|
837
|
+
title="🏗️ Project Commands",
|
828
838
|
border_style="yellow"
|
829
839
|
)
|
830
|
-
|
840
|
+
|
831
841
|
self.console.print(project_panel)
|
832
|
-
|
842
|
+
|
833
843
|
except Exception as e:
|
834
844
|
import traceback
|
835
845
|
print(f"❌ ERROR in _display_commands_breakdown: {e}")
|