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
@@ -5,10 +5,10 @@ This command provides utilities for clearing failed tasks,
|
|
5
5
|
specific queues, or all tasks from the Dramatiq system.
|
6
6
|
"""
|
7
7
|
|
8
|
+
from typing import List
|
9
|
+
|
8
10
|
from django.core.management.base import BaseCommand, CommandError
|
9
|
-
|
10
|
-
from typing import Any, Optional, List
|
11
|
-
import logging
|
11
|
+
|
12
12
|
from django_cfg.modules.django_logging import get_logger
|
13
13
|
|
14
14
|
logger = get_logger('task_clear')
|
@@ -30,7 +30,7 @@ class Command(BaseCommand):
|
|
30
30
|
is_destructive = True
|
31
31
|
|
32
32
|
help = "Clear tasks from Dramatiq queues"
|
33
|
-
|
33
|
+
|
34
34
|
def add_arguments(self, parser):
|
35
35
|
"""Add command line arguments."""
|
36
36
|
parser.add_argument(
|
@@ -53,35 +53,35 @@ class Command(BaseCommand):
|
|
53
53
|
action="store_true",
|
54
54
|
help="Show what would be cleared without actually clearing",
|
55
55
|
)
|
56
|
-
|
56
|
+
|
57
57
|
def handle(self, *args, **options):
|
58
58
|
"""Handle the command execution."""
|
59
59
|
logger.info("Starting task_clear command")
|
60
|
-
|
60
|
+
|
61
61
|
try:
|
62
62
|
# Import here to avoid issues if dramatiq is not installed
|
63
63
|
from django_cfg.modules.django_tasks import get_task_service
|
64
|
-
|
64
|
+
|
65
65
|
# Get task service
|
66
66
|
task_service = get_task_service()
|
67
|
-
|
67
|
+
|
68
68
|
# Check if task system is enabled
|
69
69
|
if not task_service.is_enabled():
|
70
70
|
raise CommandError(
|
71
71
|
"Task system is not enabled. "
|
72
72
|
"Please configure 'tasks' in your Django-CFG configuration."
|
73
73
|
)
|
74
|
-
|
74
|
+
|
75
75
|
# Get task manager
|
76
76
|
manager = task_service.manager
|
77
77
|
if not manager:
|
78
78
|
raise CommandError("Task manager not available")
|
79
|
-
|
79
|
+
|
80
80
|
# Get configuration
|
81
81
|
config = task_service.config
|
82
82
|
if not config:
|
83
83
|
raise CommandError("Task configuration not available")
|
84
|
-
|
84
|
+
|
85
85
|
# Determine queues to clear
|
86
86
|
if options.get("queue"):
|
87
87
|
queues_to_clear = [options["queue"]]
|
@@ -95,25 +95,25 @@ class Command(BaseCommand):
|
|
95
95
|
)
|
96
96
|
else:
|
97
97
|
queues_to_clear = config.get_effective_queues()
|
98
|
-
|
98
|
+
|
99
99
|
# Show what will be cleared
|
100
100
|
self._show_clear_plan(queues_to_clear, options)
|
101
|
-
|
101
|
+
|
102
102
|
if options["dry_run"]:
|
103
103
|
self.stdout.write(
|
104
104
|
self.style.SUCCESS("Dry run completed - no tasks were cleared")
|
105
105
|
)
|
106
106
|
return
|
107
|
-
|
107
|
+
|
108
108
|
# Confirm action
|
109
109
|
if not options["confirm"]:
|
110
110
|
if not self._confirm_clear(queues_to_clear, options):
|
111
111
|
self.stdout.write("Operation cancelled")
|
112
112
|
return
|
113
|
-
|
113
|
+
|
114
114
|
# Perform clearing
|
115
115
|
self._clear_queues(manager, queues_to_clear, options)
|
116
|
-
|
116
|
+
|
117
117
|
except ImportError:
|
118
118
|
raise CommandError(
|
119
119
|
"Dramatiq dependencies not installed. "
|
@@ -122,36 +122,36 @@ class Command(BaseCommand):
|
|
122
122
|
except Exception as e:
|
123
123
|
logger.exception("Failed to clear tasks")
|
124
124
|
raise CommandError(f"Failed to clear tasks: {e}")
|
125
|
-
|
125
|
+
|
126
126
|
def _show_clear_plan(self, queues: List[str], options):
|
127
127
|
"""Show what will be cleared."""
|
128
128
|
self.stdout.write(
|
129
129
|
self.style.SUCCESS("=== Clear Plan ===")
|
130
130
|
)
|
131
|
-
|
131
|
+
|
132
132
|
if options.get("failed_only"):
|
133
133
|
self.stdout.write("Action: Clear FAILED tasks only")
|
134
134
|
else:
|
135
135
|
self.stdout.write("Action: Clear ALL tasks")
|
136
|
-
|
136
|
+
|
137
137
|
self.stdout.write(f"Queues: {', '.join(queues)}")
|
138
|
-
|
138
|
+
|
139
139
|
# Get current queue statistics
|
140
140
|
try:
|
141
141
|
from django_cfg.modules.django_tasks import get_task_service
|
142
142
|
task_service = get_task_service()
|
143
143
|
manager = task_service.manager
|
144
|
-
|
144
|
+
|
145
145
|
if manager:
|
146
146
|
queue_stats = manager.get_queue_stats()
|
147
|
-
|
147
|
+
|
148
148
|
self.stdout.write("\nCurrent Queue Statistics:")
|
149
149
|
for stat in queue_stats:
|
150
150
|
if stat["name"] in queues:
|
151
151
|
name = stat["name"]
|
152
152
|
pending = stat.get("pending", 0)
|
153
153
|
failed = stat.get("failed", 0)
|
154
|
-
|
154
|
+
|
155
155
|
if options.get("failed_only"):
|
156
156
|
self.stdout.write(f" {name}: {failed} failed tasks")
|
157
157
|
else:
|
@@ -159,39 +159,39 @@ class Command(BaseCommand):
|
|
159
159
|
self.stdout.write(f" {name}: {total} total tasks")
|
160
160
|
except Exception as e:
|
161
161
|
self.stdout.write(f"Could not get queue statistics: {e}")
|
162
|
-
|
162
|
+
|
163
163
|
self.stdout.write()
|
164
|
-
|
164
|
+
|
165
165
|
def _confirm_clear(self, queues: List[str], options) -> bool:
|
166
166
|
"""Confirm the clear operation with user."""
|
167
167
|
if options.get("failed_only"):
|
168
168
|
action = "clear FAILED tasks"
|
169
169
|
else:
|
170
170
|
action = "clear ALL tasks"
|
171
|
-
|
171
|
+
|
172
172
|
queue_list = ", ".join(queues)
|
173
|
-
|
173
|
+
|
174
174
|
self.stdout.write(
|
175
175
|
self.style.WARNING(
|
176
176
|
f"This will {action} from queues: {queue_list}"
|
177
177
|
)
|
178
178
|
)
|
179
|
-
|
179
|
+
|
180
180
|
response = input("Are you sure? [y/N]: ").lower().strip()
|
181
181
|
return response in ["y", "yes"]
|
182
|
-
|
182
|
+
|
183
183
|
def _clear_queues(self, manager, queues: List[str], options):
|
184
184
|
"""Clear the specified queues."""
|
185
185
|
cleared_count = 0
|
186
|
-
|
186
|
+
|
187
187
|
self.stdout.write(
|
188
188
|
self.style.SUCCESS("Starting queue clearing...")
|
189
189
|
)
|
190
|
-
|
190
|
+
|
191
191
|
for queue_name in queues:
|
192
192
|
try:
|
193
193
|
self.stdout.write(f"Clearing queue: {queue_name}")
|
194
|
-
|
194
|
+
|
195
195
|
if options.get("failed_only"):
|
196
196
|
# Clear only failed tasks
|
197
197
|
# TODO: Implement failed task clearing
|
@@ -210,12 +210,12 @@ class Command(BaseCommand):
|
|
210
210
|
self.stdout.write(
|
211
211
|
self.style.ERROR(f" Failed to clear queue: {queue_name}")
|
212
212
|
)
|
213
|
-
|
213
|
+
|
214
214
|
except Exception as e:
|
215
215
|
self.stdout.write(
|
216
216
|
self.style.ERROR(f" Error clearing queue {queue_name}: {e}")
|
217
217
|
)
|
218
|
-
|
218
|
+
|
219
219
|
if cleared_count > 0:
|
220
220
|
self.stdout.write(
|
221
221
|
self.style.SUCCESS(f"Successfully cleared {cleared_count} tasks")
|
@@ -6,11 +6,11 @@ Dramatiq task system, including queue statistics, worker status,
|
|
6
6
|
and configuration details.
|
7
7
|
"""
|
8
8
|
|
9
|
-
from django.core.management.base import BaseCommand, CommandError
|
10
|
-
from django.conf import settings
|
11
|
-
from typing import Any, Dict, List
|
12
9
|
import json
|
13
|
-
import
|
10
|
+
from typing import Any, Dict
|
11
|
+
|
12
|
+
from django.core.management.base import BaseCommand, CommandError
|
13
|
+
|
14
14
|
from django_cfg.modules.django_logging import get_logger
|
15
15
|
|
16
16
|
logger = get_logger('task_status')
|
@@ -34,7 +34,7 @@ class Command(BaseCommand):
|
|
34
34
|
is_destructive = False
|
35
35
|
|
36
36
|
help = "Display task system status and statistics"
|
37
|
-
|
37
|
+
|
38
38
|
def add_arguments(self, parser):
|
39
39
|
"""Add command line arguments."""
|
40
40
|
parser.add_argument(
|
@@ -48,26 +48,26 @@ class Command(BaseCommand):
|
|
48
48
|
action="store_true",
|
49
49
|
help="Show detailed information",
|
50
50
|
)
|
51
|
-
|
51
|
+
|
52
52
|
def handle(self, *args, **options):
|
53
53
|
"""Handle the command execution."""
|
54
54
|
logger.info("Starting task_status command")
|
55
55
|
try:
|
56
56
|
# Import here to avoid issues if dramatiq is not installed
|
57
57
|
from django_cfg.modules.django_tasks import get_task_service
|
58
|
-
|
58
|
+
|
59
59
|
# Get task service
|
60
60
|
task_service = get_task_service()
|
61
|
-
|
61
|
+
|
62
62
|
# Get comprehensive health status
|
63
63
|
status = task_service.get_health_status()
|
64
|
-
|
64
|
+
|
65
65
|
# Format and display output
|
66
66
|
if options["format"] == "json":
|
67
67
|
self._output_json(status)
|
68
68
|
else:
|
69
69
|
self._output_text(status, options["verbose"])
|
70
|
-
|
70
|
+
|
71
71
|
except ImportError:
|
72
72
|
raise CommandError(
|
73
73
|
"Dramatiq dependencies not installed. "
|
@@ -76,11 +76,11 @@ class Command(BaseCommand):
|
|
76
76
|
except Exception as e:
|
77
77
|
logger.exception("Failed to get task status")
|
78
78
|
raise CommandError(f"Failed to get status: {e}")
|
79
|
-
|
79
|
+
|
80
80
|
def _output_json(self, status: Dict[str, Any]):
|
81
81
|
"""Output status in JSON format."""
|
82
82
|
self.stdout.write(json.dumps(status, indent=2, default=str))
|
83
|
-
|
83
|
+
|
84
84
|
def _output_text(self, status: Dict[str, Any], verbose: bool):
|
85
85
|
"""Output status in human-readable text format."""
|
86
86
|
# Header
|
@@ -88,7 +88,7 @@ class Command(BaseCommand):
|
|
88
88
|
self.style.SUCCESS("=== Django-CFG Task System Status ===")
|
89
89
|
)
|
90
90
|
self.stdout.write()
|
91
|
-
|
91
|
+
|
92
92
|
# Basic status
|
93
93
|
enabled = status.get("enabled", False)
|
94
94
|
if enabled:
|
@@ -100,7 +100,7 @@ class Command(BaseCommand):
|
|
100
100
|
self.style.ERROR("✗ Task system is DISABLED")
|
101
101
|
)
|
102
102
|
return
|
103
|
-
|
103
|
+
|
104
104
|
# Redis connection
|
105
105
|
redis_ok = status.get("redis_connection", False)
|
106
106
|
if redis_ok:
|
@@ -111,7 +111,7 @@ class Command(BaseCommand):
|
|
111
111
|
self.stdout.write(
|
112
112
|
self.style.ERROR("✗ Redis connection FAILED")
|
113
113
|
)
|
114
|
-
|
114
|
+
|
115
115
|
# Configuration validation
|
116
116
|
config_valid = status.get("configuration_valid", False)
|
117
117
|
if config_valid:
|
@@ -122,13 +122,13 @@ class Command(BaseCommand):
|
|
122
122
|
self.stdout.write(
|
123
123
|
self.style.ERROR("✗ Configuration is INVALID")
|
124
124
|
)
|
125
|
-
|
125
|
+
|
126
126
|
self.stdout.write()
|
127
|
-
|
127
|
+
|
128
128
|
# Configuration details (if verbose)
|
129
129
|
if verbose:
|
130
130
|
self._show_configuration_details()
|
131
|
-
|
131
|
+
|
132
132
|
# Queue statistics
|
133
133
|
queues = status.get("queues", [])
|
134
134
|
if queues:
|
@@ -141,14 +141,14 @@ class Command(BaseCommand):
|
|
141
141
|
running = queue.get("running", 0)
|
142
142
|
completed = queue.get("completed", 0)
|
143
143
|
failed = queue.get("failed", 0)
|
144
|
-
|
144
|
+
|
145
145
|
self.stdout.write(f"Queue: {name}")
|
146
146
|
self.stdout.write(f" Pending: {pending}")
|
147
147
|
self.stdout.write(f" Running: {running}")
|
148
148
|
self.stdout.write(f" Completed: {completed}")
|
149
149
|
self.stdout.write(f" Failed: {failed}")
|
150
150
|
self.stdout.write()
|
151
|
-
|
151
|
+
|
152
152
|
# Worker status
|
153
153
|
workers = status.get("workers", [])
|
154
154
|
if workers:
|
@@ -160,13 +160,13 @@ class Command(BaseCommand):
|
|
160
160
|
worker_status = worker.get("status", "unknown")
|
161
161
|
current_task = worker.get("current_task")
|
162
162
|
processed = worker.get("processed_tasks", 0)
|
163
|
-
|
163
|
+
|
164
164
|
status_style = (
|
165
|
-
self.style.SUCCESS if worker_status == "active"
|
165
|
+
self.style.SUCCESS if worker_status == "active"
|
166
166
|
else self.style.WARNING if worker_status == "idle"
|
167
167
|
else self.style.ERROR
|
168
168
|
)
|
169
|
-
|
169
|
+
|
170
170
|
self.stdout.write(f"Worker: {worker_id}")
|
171
171
|
self.stdout.write(f" Status: {status_style(worker_status)}")
|
172
172
|
if current_task:
|
@@ -177,7 +177,7 @@ class Command(BaseCommand):
|
|
177
177
|
self.stdout.write(
|
178
178
|
self.style.WARNING("No active workers found")
|
179
179
|
)
|
180
|
-
|
180
|
+
|
181
181
|
# Discovered modules
|
182
182
|
modules = status.get("discovered_modules", [])
|
183
183
|
if modules:
|
@@ -191,37 +191,37 @@ class Command(BaseCommand):
|
|
191
191
|
self.stdout.write(
|
192
192
|
self.style.WARNING("No task modules discovered")
|
193
193
|
)
|
194
|
-
|
194
|
+
|
195
195
|
# Error information
|
196
196
|
if "error" in status:
|
197
197
|
self.stdout.write(
|
198
198
|
self.style.ERROR(f"Error: {status['error']}")
|
199
199
|
)
|
200
|
-
|
200
|
+
|
201
201
|
def _show_configuration_details(self):
|
202
202
|
"""Show detailed configuration information."""
|
203
203
|
try:
|
204
204
|
from django_cfg.modules.django_tasks import get_task_service
|
205
|
-
|
205
|
+
|
206
206
|
task_service = get_task_service()
|
207
207
|
config = task_service.config
|
208
|
-
|
208
|
+
|
209
209
|
if not config:
|
210
210
|
self.stdout.write(
|
211
211
|
self.style.WARNING("Configuration not available")
|
212
212
|
)
|
213
213
|
return
|
214
|
-
|
214
|
+
|
215
215
|
self.stdout.write(
|
216
216
|
self.style.SUCCESS("=== Configuration Details ===")
|
217
217
|
)
|
218
|
-
|
218
|
+
|
219
219
|
# Basic settings
|
220
220
|
self.stdout.write(f"Backend: {config.backend}")
|
221
221
|
self.stdout.write(f"Enabled: {config.enabled}")
|
222
222
|
self.stdout.write(f"Auto-discover: {config.auto_discover_tasks}")
|
223
223
|
self.stdout.write()
|
224
|
-
|
224
|
+
|
225
225
|
# Dramatiq settings
|
226
226
|
dramatiq = config.dramatiq
|
227
227
|
self.stdout.write("Dramatiq Configuration:")
|
@@ -233,7 +233,7 @@ class Command(BaseCommand):
|
|
233
233
|
self.stdout.write(f" Time Limit: {dramatiq.time_limit_seconds}s")
|
234
234
|
self.stdout.write(f" Max Age: {dramatiq.max_age_seconds}s")
|
235
235
|
self.stdout.write()
|
236
|
-
|
236
|
+
|
237
237
|
# Worker settings
|
238
238
|
worker = config.worker
|
239
239
|
self.stdout.write("Worker Configuration:")
|
@@ -243,14 +243,14 @@ class Command(BaseCommand):
|
|
243
243
|
if worker.max_memory_mb:
|
244
244
|
self.stdout.write(f" Memory Limit: {worker.max_memory_mb}MB")
|
245
245
|
self.stdout.write()
|
246
|
-
|
246
|
+
|
247
247
|
# Middleware
|
248
248
|
if dramatiq.middleware:
|
249
249
|
self.stdout.write("Middleware Stack:")
|
250
250
|
for middleware in dramatiq.middleware:
|
251
251
|
self.stdout.write(f" - {middleware}")
|
252
252
|
self.stdout.write()
|
253
|
-
|
253
|
+
|
254
254
|
except Exception as e:
|
255
255
|
self.stdout.write(
|
256
256
|
self.style.ERROR(f"Failed to show configuration: {e}")
|
@@ -4,13 +4,14 @@ Django-CFG Task Service.
|
|
4
4
|
Main DjangoTasks class for Dramatiq integration.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from typing import Optional, Dict, Any, List
|
8
7
|
import logging
|
8
|
+
from typing import Any, Dict, List, Optional
|
9
9
|
from urllib.parse import urlparse
|
10
10
|
|
11
|
-
from ..base import BaseCfgModule
|
12
|
-
from django_cfg.models.tasks import TaskConfig, validate_task_config
|
13
11
|
from django_cfg.models.django.constance import ConstanceField
|
12
|
+
from django_cfg.models.tasks import TaskConfig, validate_task_config
|
13
|
+
|
14
|
+
from ..base import BaseCfgModule
|
14
15
|
|
15
16
|
# Django imports
|
16
17
|
try:
|
@@ -5,16 +5,16 @@ Auto-configuring Telegram notification service that integrates with DjangoConfig
|
|
5
5
|
"""
|
6
6
|
|
7
7
|
from .service import (
|
8
|
-
|
9
|
-
TelegramError,
|
8
|
+
DjangoTelegram,
|
10
9
|
TelegramConfigError,
|
10
|
+
TelegramError,
|
11
|
+
TelegramParseMode,
|
11
12
|
TelegramSendError,
|
12
|
-
DjangoTelegram,
|
13
13
|
)
|
14
14
|
from .utils import (
|
15
|
+
send_telegram_document,
|
15
16
|
send_telegram_message,
|
16
17
|
send_telegram_photo,
|
17
|
-
send_telegram_document,
|
18
18
|
)
|
19
19
|
|
20
20
|
__all__ = [
|
@@ -5,9 +5,8 @@ Tests Telegram notification functionality using django_cfg configuration.
|
|
5
5
|
"""
|
6
6
|
|
7
7
|
from django.core.management.base import BaseCommand
|
8
|
-
from django_cfg.modules.django_logging import get_logger
|
9
|
-
|
10
8
|
|
9
|
+
from django_cfg.modules.django_logging import get_logger
|
11
10
|
|
12
11
|
logger = get_logger('test_telegram')
|
13
12
|
|
@@ -39,7 +38,7 @@ class Command(BaseCommand):
|
|
39
38
|
try:
|
40
39
|
from django_cfg.modules.django_telegram import DjangoTelegram
|
41
40
|
telegram_service = DjangoTelegram()
|
42
|
-
|
41
|
+
|
43
42
|
self.stdout.write("\n📱 Sending test messages...")
|
44
43
|
|
45
44
|
# Send info message (модуль сам знает настройки!)
|
@@ -48,7 +47,7 @@ class Command(BaseCommand):
|
|
48
47
|
message,
|
49
48
|
{
|
50
49
|
"Type": "System Test",
|
51
|
-
"Status": "Running",
|
50
|
+
"Status": "Running",
|
52
51
|
"Environment": "Development"
|
53
52
|
}
|
54
53
|
)
|
@@ -65,4 +64,4 @@ class Command(BaseCommand):
|
|
65
64
|
self.stdout.write(self.style.SUCCESS("\n✅ All test messages sent successfully!"))
|
66
65
|
|
67
66
|
except Exception as e:
|
68
|
-
self.stdout.write(self.style.ERROR(f"\n❌ Failed to send Telegram messages: {e}"))
|
67
|
+
self.stdout.write(self.style.ERROR(f"\n❌ Failed to send Telegram messages: {e}"))
|
@@ -5,12 +5,13 @@ Auto-configuring Telegram notification service that integrates with DjangoConfig
|
|
5
5
|
"""
|
6
6
|
|
7
7
|
import logging
|
8
|
-
from typing import Optional, Dict, Any, Union, BinaryIO
|
9
8
|
from enum import Enum
|
9
|
+
from typing import Any, BinaryIO, Dict, Optional, Union
|
10
|
+
|
11
|
+
import telebot
|
10
12
|
import yaml
|
13
|
+
|
11
14
|
from ..base import BaseCfgModule
|
12
|
-
from django_cfg.core.exceptions import ConfigurationError
|
13
|
-
import telebot
|
14
15
|
|
15
16
|
logger = logging.getLogger(__name__)
|
16
17
|
|
@@ -14,41 +14,40 @@ Features:
|
|
14
14
|
"""
|
15
15
|
|
16
16
|
# Configuration
|
17
|
-
from django_cfg.modules.django_twilio.models import TwilioConfig
|
18
|
-
|
19
17
|
# Services
|
20
18
|
from django_cfg.modules.django_twilio.base import BaseTwilioService, is_async_context
|
21
|
-
from django_cfg.modules.django_twilio.whatsapp import WhatsAppOTPService
|
22
19
|
from django_cfg.modules.django_twilio.email_otp import EmailOTPService
|
23
|
-
from django_cfg.modules.django_twilio.sms import SMSOTPService
|
24
|
-
from django_cfg.modules.django_twilio.unified import UnifiedOTPService, DjangoTwilioService
|
25
|
-
|
26
|
-
# Simple messaging service
|
27
|
-
from django_cfg.modules.django_twilio.simple_service import SimpleTwilioService
|
28
20
|
|
29
21
|
# Exceptions
|
30
22
|
from django_cfg.modules.django_twilio.exceptions import (
|
31
|
-
TwilioError,
|
32
23
|
TwilioConfigurationError,
|
33
|
-
|
24
|
+
TwilioError,
|
34
25
|
TwilioSendError,
|
26
|
+
TwilioVerificationError,
|
35
27
|
)
|
28
|
+
from django_cfg.modules.django_twilio.models import TwilioConfig
|
29
|
+
|
30
|
+
# Simple messaging service
|
31
|
+
from django_cfg.modules.django_twilio.simple_service import SimpleTwilioService
|
32
|
+
from django_cfg.modules.django_twilio.sms import SMSOTPService
|
33
|
+
from django_cfg.modules.django_twilio.unified import DjangoTwilioService, UnifiedOTPService
|
36
34
|
|
37
35
|
# Convenience functions
|
38
36
|
from django_cfg.modules.django_twilio.utils import (
|
39
|
-
send_whatsapp_otp,
|
40
|
-
send_email_otp,
|
41
|
-
send_sms_otp,
|
42
|
-
verify_otp,
|
43
|
-
asend_whatsapp_otp,
|
44
37
|
asend_email_otp,
|
45
38
|
asend_sms_otp,
|
39
|
+
asend_whatsapp_otp,
|
46
40
|
averify_otp,
|
41
|
+
send_email_otp,
|
42
|
+
send_sms_otp,
|
43
|
+
send_whatsapp_otp,
|
44
|
+
verify_otp,
|
47
45
|
)
|
46
|
+
from django_cfg.modules.django_twilio.whatsapp import WhatsAppOTPService
|
48
47
|
|
49
48
|
# Simple messaging convenience functions
|
50
49
|
try:
|
51
|
-
from django_cfg.modules.django_twilio.simple_service import
|
50
|
+
from django_cfg.modules.django_twilio.simple_service import send_sms, send_whatsapp
|
52
51
|
except ImportError:
|
53
52
|
send_whatsapp = None
|
54
53
|
send_sms = None
|
@@ -6,8 +6,8 @@ Makes twilio and sendgrid imports optional for testing and when not using Twilio
|
|
6
6
|
|
7
7
|
# Third-party imports (optional - only required when using Twilio functionality)
|
8
8
|
try:
|
9
|
-
from twilio.rest import Client
|
10
9
|
from twilio.base.exceptions import TwilioException
|
10
|
+
from twilio.rest import Client
|
11
11
|
TWILIO_AVAILABLE = True
|
12
12
|
except ImportError:
|
13
13
|
Client = None # type: ignore
|
@@ -9,18 +9,22 @@ import asyncio
|
|
9
9
|
import logging
|
10
10
|
import random
|
11
11
|
import string
|
12
|
-
from typing import Optional, Dict, Any
|
13
12
|
from datetime import datetime, timedelta
|
14
|
-
|
15
|
-
# Third-party imports (optional)
|
16
|
-
from ._imports import Client, TwilioException, SendGridAPIClient, TWILIO_AVAILABLE, SENDGRID_AVAILABLE
|
13
|
+
from typing import Any, Dict, Optional
|
17
14
|
|
18
15
|
# Django CFG imports
|
19
16
|
from django_cfg.modules.base import BaseCfgModule
|
20
|
-
from django_cfg.modules.django_twilio.models import TwilioConfig
|
21
17
|
from django_cfg.modules.django_twilio.exceptions import (
|
22
18
|
TwilioConfigurationError,
|
23
19
|
)
|
20
|
+
from django_cfg.modules.django_twilio.models import TwilioConfig
|
21
|
+
|
22
|
+
# Third-party imports (optional)
|
23
|
+
from ._imports import (
|
24
|
+
Client,
|
25
|
+
SendGridAPIClient,
|
26
|
+
TwilioException,
|
27
|
+
)
|
24
28
|
|
25
29
|
logger = logging.getLogger(__name__)
|
26
30
|
|
@@ -6,8 +6,9 @@ comprehensive deliverability optimization.
|
|
6
6
|
"""
|
7
7
|
|
8
8
|
import logging
|
9
|
-
from typing import
|
10
|
-
|
9
|
+
from typing import Any, Dict, Optional, Tuple
|
10
|
+
|
11
|
+
from django_cfg.modules.django_twilio._imports import SendGridAPIClient
|
11
12
|
|
12
13
|
# Import Mail helper conditionally
|
13
14
|
try:
|
@@ -18,11 +19,11 @@ except ImportError:
|
|
18
19
|
from asgiref.sync import sync_to_async
|
19
20
|
|
20
21
|
from .base import BaseTwilioService
|
21
|
-
from .models import SendGridConfig
|
22
22
|
from .exceptions import (
|
23
23
|
TwilioConfigurationError,
|
24
24
|
TwilioSendError,
|
25
25
|
)
|
26
|
+
from .models import SendGridConfig
|
26
27
|
|
27
28
|
logger = logging.getLogger(__name__)
|
28
29
|
|