django-cfg 1.4.21__py3-none-any.whl → 1.4.24__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 +36 -7
- 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/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 +32 -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 +33 -32
- 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 +10 -9
- 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.21.dist-info → django_cfg-1.4.24.dist-info}/METADATA +1 -1
- django_cfg-1.4.24.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.21.dist-info/RECORD +0 -1111
- /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.21.dist-info → django_cfg-1.4.24.dist-info}/WHEEL +0 -0
- {django_cfg-1.4.21.dist-info → django_cfg-1.4.24.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.4.21.dist-info → django_cfg-1.4.24.dist-info}/licenses/LICENSE +0 -0
@@ -4,46 +4,43 @@ Toolsets admin interfaces using Django Admin Utilities.
|
|
4
4
|
Enhanced toolset management with Material Icons and optimized queries.
|
5
5
|
"""
|
6
6
|
|
7
|
+
from datetime import timedelta
|
8
|
+
|
7
9
|
from django.contrib import admin, messages
|
8
|
-
from django.urls import reverse
|
9
|
-
from django.utils.safestring import mark_safe
|
10
10
|
from django.db import models
|
11
|
-
from django.db.models import Count, Avg, Sum, Q
|
12
|
-
from django.utils import timezone
|
13
11
|
from django.db.models.fields.json import JSONField
|
14
|
-
from
|
12
|
+
from django.utils import timezone
|
15
13
|
from django_json_widget.widgets import JSONEditorWidget
|
16
|
-
from unfold.admin import ModelAdmin
|
17
|
-
from unfold.contrib.filters.admin import AutocompleteSelectFilter
|
14
|
+
from unfold.admin import ModelAdmin
|
15
|
+
from unfold.contrib.filters.admin import AutocompleteSelectFilter
|
18
16
|
from unfold.contrib.forms.widgets import WysiwygWidget
|
19
|
-
from django_cfg import ExportMixin, ExportForm
|
20
17
|
|
18
|
+
from django_cfg import ExportForm, ExportMixin
|
21
19
|
from django_cfg.modules.django_admin import (
|
22
|
-
|
23
|
-
DisplayMixin,
|
24
|
-
MoneyDisplayConfig,
|
25
|
-
StatusBadgeConfig,
|
20
|
+
ActionVariant,
|
26
21
|
DateTimeDisplayConfig,
|
22
|
+
DisplayMixin,
|
27
23
|
Icons,
|
28
|
-
|
24
|
+
OptimizedModelAdmin,
|
25
|
+
StatusBadgeConfig,
|
26
|
+
action,
|
29
27
|
display,
|
30
|
-
action
|
31
28
|
)
|
32
29
|
from django_cfg.modules.django_admin.utils.badges import StatusBadge
|
33
30
|
|
34
|
-
from ..models.toolsets import
|
31
|
+
from ..models.toolsets import ApprovalLog, ToolExecution, ToolsetConfiguration
|
35
32
|
|
36
33
|
|
37
34
|
@admin.register(ToolExecution)
|
38
35
|
class ToolExecutionAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMixin):
|
39
36
|
"""Enhanced admin for ToolExecution model using Django Admin Utilities."""
|
40
|
-
|
37
|
+
|
41
38
|
# Performance optimization
|
42
39
|
select_related_fields = ['agent_execution', 'approval_log']
|
43
|
-
|
40
|
+
|
44
41
|
# Export-only configuration
|
45
42
|
export_form_class = ExportForm
|
46
|
-
|
43
|
+
|
47
44
|
list_display = [
|
48
45
|
'id_display', 'tool_name_display', 'toolset_display', 'status_display',
|
49
46
|
'duration_display', 'retry_count_display', 'created_at_display'
|
@@ -59,13 +56,13 @@ class ToolExecutionAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMi
|
|
59
56
|
'id', 'execution_time', 'retry_count', 'created_at', 'started_at', 'completed_at'
|
60
57
|
]
|
61
58
|
ordering = ['-created_at']
|
62
|
-
|
59
|
+
|
63
60
|
# Unfold form field overrides
|
64
61
|
formfield_overrides = {
|
65
62
|
models.TextField: {"widget": WysiwygWidget},
|
66
63
|
JSONField: {"widget": JSONEditorWidget},
|
67
64
|
}
|
68
|
-
|
65
|
+
|
69
66
|
fieldsets = (
|
70
67
|
("🔧 Tool Info", {
|
71
68
|
'fields': ('id', 'tool_name', 'toolset_class', 'agent_execution'),
|
@@ -88,9 +85,9 @@ class ToolExecutionAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMi
|
|
88
85
|
'classes': ('tab', 'collapse')
|
89
86
|
}),
|
90
87
|
)
|
91
|
-
|
88
|
+
|
92
89
|
actions = ['retry_failed_executions', 'clear_errors']
|
93
|
-
|
90
|
+
|
94
91
|
@display(description="ID")
|
95
92
|
def id_display(self, obj):
|
96
93
|
"""Enhanced ID display."""
|
@@ -100,7 +97,7 @@ class ToolExecutionAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMi
|
|
100
97
|
variant="secondary",
|
101
98
|
config=config
|
102
99
|
)
|
103
|
-
|
100
|
+
|
104
101
|
@display(description="Tool")
|
105
102
|
def tool_name_display(self, obj):
|
106
103
|
"""Enhanced tool name display."""
|
@@ -110,23 +107,23 @@ class ToolExecutionAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMi
|
|
110
107
|
variant="primary",
|
111
108
|
config=config
|
112
109
|
)
|
113
|
-
|
110
|
+
|
114
111
|
@display(description="Toolset")
|
115
112
|
def toolset_display(self, obj):
|
116
113
|
"""Toolset class display with badge."""
|
117
114
|
if not obj.toolset_class:
|
118
115
|
return "—"
|
119
|
-
|
116
|
+
|
120
117
|
# Extract class name from full path
|
121
118
|
class_name = obj.toolset_class.split('.')[-1] if '.' in obj.toolset_class else obj.toolset_class
|
122
|
-
|
119
|
+
|
123
120
|
config = StatusBadgeConfig(show_icons=True, icon=Icons.EXTENSION)
|
124
121
|
return StatusBadge.create(
|
125
122
|
text=class_name,
|
126
123
|
variant="info",
|
127
124
|
config=config
|
128
125
|
)
|
129
|
-
|
126
|
+
|
130
127
|
@display(description="Status")
|
131
128
|
def status_display(self, obj):
|
132
129
|
"""Status display with appropriate icons."""
|
@@ -142,14 +139,14 @@ class ToolExecutionAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMi
|
|
142
139
|
icon=Icons.PLAY_ARROW if obj.status == 'running' else Icons.CHECK_CIRCLE if obj.status == 'completed' else Icons.ERROR if obj.status == 'failed' else Icons.SCHEDULE
|
143
140
|
)
|
144
141
|
return self.display_status_auto(obj, 'status', status_config)
|
145
|
-
|
142
|
+
|
146
143
|
@display(description="Duration")
|
147
144
|
def duration_display(self, obj):
|
148
145
|
"""Execution duration display."""
|
149
146
|
if obj.execution_time:
|
150
147
|
return f"{obj.execution_time:.3f}s"
|
151
148
|
return "—"
|
152
|
-
|
149
|
+
|
153
150
|
@display(description="Retries")
|
154
151
|
def retry_count_display(self, obj):
|
155
152
|
"""Retry count display with badge."""
|
@@ -162,19 +159,19 @@ class ToolExecutionAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMi
|
|
162
159
|
config=config
|
163
160
|
)
|
164
161
|
return "0"
|
165
|
-
|
162
|
+
|
166
163
|
@display(description="Created")
|
167
164
|
def created_at_display(self, obj):
|
168
165
|
"""Created time with relative display."""
|
169
166
|
config = DateTimeDisplayConfig(show_relative=True)
|
170
167
|
return self.display_datetime_relative(obj, 'created_at', config)
|
171
|
-
|
168
|
+
|
172
169
|
@action(description="Retry failed executions", variant=ActionVariant.WARNING)
|
173
170
|
def retry_failed_executions(self, request, queryset):
|
174
171
|
"""Retry failed tool executions."""
|
175
172
|
failed_count = queryset.filter(status='failed').count()
|
176
173
|
messages.warning(request, f"Retry functionality not implemented yet. {failed_count} failed executions selected.")
|
177
|
-
|
174
|
+
|
178
175
|
@action(description="Clear error messages", variant=ActionVariant.INFO)
|
179
176
|
def clear_errors(self, request, queryset):
|
180
177
|
"""Clear error messages from executions."""
|
@@ -185,13 +182,13 @@ class ToolExecutionAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMi
|
|
185
182
|
@admin.register(ApprovalLog)
|
186
183
|
class ApprovalLogAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMixin):
|
187
184
|
"""Enhanced admin for ApprovalLog model using Django Admin Utilities."""
|
188
|
-
|
185
|
+
|
189
186
|
# Performance optimization
|
190
187
|
select_related_fields = ['approved_by']
|
191
|
-
|
188
|
+
|
192
189
|
# Export-only configuration
|
193
190
|
export_form_class = ExportForm
|
194
|
-
|
191
|
+
|
195
192
|
list_display = [
|
196
193
|
'approval_id_display', 'tool_name_display', 'status_display',
|
197
194
|
'approved_by_display', 'decision_time_display', 'expires_at_display'
|
@@ -207,13 +204,13 @@ class ApprovalLogAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMixi
|
|
207
204
|
'id', 'requested_at', 'decided_at', 'expires_at'
|
208
205
|
]
|
209
206
|
ordering = ['-requested_at']
|
210
|
-
|
207
|
+
|
211
208
|
# Unfold form field overrides
|
212
209
|
formfield_overrides = {
|
213
210
|
models.TextField: {"widget": WysiwygWidget},
|
214
211
|
JSONField: {"widget": JSONEditorWidget},
|
215
212
|
}
|
216
|
-
|
213
|
+
|
217
214
|
fieldsets = (
|
218
215
|
("🔐 Approval Info", {
|
219
216
|
'fields': ('id', 'tool_name', 'status', 'approved_by'),
|
@@ -228,9 +225,9 @@ class ApprovalLogAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMixi
|
|
228
225
|
'classes': ('tab',)
|
229
226
|
}),
|
230
227
|
)
|
231
|
-
|
228
|
+
|
232
229
|
actions = ['approve_pending', 'reject_pending', 'extend_expiry']
|
233
|
-
|
230
|
+
|
234
231
|
@display(description="Approval ID")
|
235
232
|
def approval_id_display(self, obj):
|
236
233
|
"""Enhanced approval ID display."""
|
@@ -240,7 +237,7 @@ class ApprovalLogAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMixi
|
|
240
237
|
variant="secondary",
|
241
238
|
config=config
|
242
239
|
)
|
243
|
-
|
240
|
+
|
244
241
|
@display(description="Tool")
|
245
242
|
def tool_name_display(self, obj):
|
246
243
|
"""Enhanced tool name display."""
|
@@ -250,7 +247,7 @@ class ApprovalLogAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMixi
|
|
250
247
|
variant="primary",
|
251
248
|
config=config
|
252
249
|
)
|
253
|
-
|
250
|
+
|
254
251
|
@display(description="Status")
|
255
252
|
def status_display(self, obj):
|
256
253
|
"""Status display with appropriate icons."""
|
@@ -265,30 +262,30 @@ class ApprovalLogAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMixi
|
|
265
262
|
icon=Icons.CHECK_CIRCLE if obj.status == 'approved' else Icons.CANCEL if obj.status == 'rejected' else Icons.SCHEDULE if obj.status == 'pending' else Icons.TIMER_OFF
|
266
263
|
)
|
267
264
|
return self.display_status_auto(obj, 'status', status_config)
|
268
|
-
|
265
|
+
|
269
266
|
@display(description="Approved By")
|
270
267
|
def approved_by_display(self, obj):
|
271
268
|
"""Approved by user display."""
|
272
269
|
if not obj.approved_by:
|
273
270
|
return "—"
|
274
271
|
return self.display_user_simple(obj.approved_by)
|
275
|
-
|
272
|
+
|
276
273
|
@display(description="Decision Time")
|
277
274
|
def decision_time_display(self, obj):
|
278
275
|
"""Decision time display."""
|
279
276
|
if obj.decision_time:
|
280
277
|
return f"{obj.decision_time:.2f}s"
|
281
278
|
return "—"
|
282
|
-
|
279
|
+
|
283
280
|
@display(description="Expires")
|
284
281
|
def expires_at_display(self, obj):
|
285
282
|
"""Expiry time with relative display."""
|
286
283
|
if not obj.expires_at:
|
287
284
|
return "—"
|
288
|
-
|
285
|
+
|
289
286
|
config = DateTimeDisplayConfig(show_relative=True)
|
290
287
|
return self.display_datetime_relative(obj, 'expires_at', config)
|
291
|
-
|
288
|
+
|
292
289
|
@action(description="Approve pending", variant=ActionVariant.SUCCESS)
|
293
290
|
def approve_pending(self, request, queryset):
|
294
291
|
"""Approve pending approvals."""
|
@@ -298,7 +295,7 @@ class ApprovalLogAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMixi
|
|
298
295
|
decision_time=timezone.now()
|
299
296
|
)
|
300
297
|
messages.success(request, f"Approved {updated} pending requests.")
|
301
|
-
|
298
|
+
|
302
299
|
@action(description="Reject pending", variant=ActionVariant.DANGER)
|
303
300
|
def reject_pending(self, request, queryset):
|
304
301
|
"""Reject pending approvals."""
|
@@ -308,11 +305,10 @@ class ApprovalLogAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMixi
|
|
308
305
|
decision_time=timezone.now()
|
309
306
|
)
|
310
307
|
messages.warning(request, f"Rejected {updated} pending requests.")
|
311
|
-
|
308
|
+
|
312
309
|
@action(description="Extend expiry", variant=ActionVariant.INFO)
|
313
310
|
def extend_expiry(self, request, queryset):
|
314
311
|
"""Extend expiry time for pending approvals."""
|
315
|
-
from datetime import timedelta
|
316
312
|
new_expiry = timezone.now() + timedelta(hours=24)
|
317
313
|
updated = queryset.filter(status='pending').update(expires_at=new_expiry)
|
318
314
|
messages.info(request, f"Extended expiry for {updated} approvals by 24 hours.")
|
@@ -321,13 +317,13 @@ class ApprovalLogAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMixi
|
|
321
317
|
@admin.register(ToolsetConfiguration)
|
322
318
|
class ToolsetConfigurationAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, ExportMixin):
|
323
319
|
"""Enhanced admin for ToolsetConfiguration model using Django Admin Utilities."""
|
324
|
-
|
320
|
+
|
325
321
|
# Performance optimization
|
326
322
|
select_related_fields = ['created_by']
|
327
|
-
|
323
|
+
|
328
324
|
# Export-only configuration
|
329
325
|
export_form_class = ExportForm
|
330
|
-
|
326
|
+
|
331
327
|
list_display = [
|
332
328
|
'name_display', 'toolset_class_display', 'status_display',
|
333
329
|
'usage_count_display', 'created_by_display', 'created_at_display'
|
@@ -343,13 +339,13 @@ class ToolsetConfigurationAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, E
|
|
343
339
|
'id', 'created_at', 'updated_at'
|
344
340
|
]
|
345
341
|
ordering = ['-created_at']
|
346
|
-
|
342
|
+
|
347
343
|
# Unfold form field overrides
|
348
344
|
formfield_overrides = {
|
349
345
|
models.TextField: {"widget": WysiwygWidget},
|
350
346
|
JSONField: {"widget": JSONEditorWidget},
|
351
347
|
}
|
352
|
-
|
348
|
+
|
353
349
|
fieldsets = (
|
354
350
|
("⚙️ Configuration Info", {
|
355
351
|
'fields': ('id', 'name', 'description', 'toolset_class'),
|
@@ -368,9 +364,9 @@ class ToolsetConfigurationAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, E
|
|
368
364
|
'classes': ('tab', 'collapse')
|
369
365
|
}),
|
370
366
|
)
|
371
|
-
|
367
|
+
|
372
368
|
actions = ['activate_configurations', 'deactivate_configurations', 'reset_usage']
|
373
|
-
|
369
|
+
|
374
370
|
@display(description="Configuration Name")
|
375
371
|
def name_display(self, obj):
|
376
372
|
"""Enhanced configuration name display."""
|
@@ -380,23 +376,23 @@ class ToolsetConfigurationAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, E
|
|
380
376
|
variant="primary",
|
381
377
|
config=config
|
382
378
|
)
|
383
|
-
|
379
|
+
|
384
380
|
@display(description="Toolset Class")
|
385
381
|
def toolset_class_display(self, obj):
|
386
382
|
"""Toolset class display with badge."""
|
387
383
|
if not obj.toolset_class:
|
388
384
|
return "—"
|
389
|
-
|
385
|
+
|
390
386
|
# Extract class name from full path
|
391
387
|
class_name = obj.toolset_class.split('.')[-1] if '.' in obj.toolset_class else obj.toolset_class
|
392
|
-
|
388
|
+
|
393
389
|
config = StatusBadgeConfig(show_icons=True, icon=Icons.EXTENSION)
|
394
390
|
return StatusBadge.create(
|
395
391
|
text=class_name,
|
396
392
|
variant="info",
|
397
393
|
config=config
|
398
394
|
)
|
399
|
-
|
395
|
+
|
400
396
|
@display(description="Status")
|
401
397
|
def status_display(self, obj):
|
402
398
|
"""Status display based on active state."""
|
@@ -406,41 +402,41 @@ class ToolsetConfigurationAdmin(OptimizedModelAdmin, DisplayMixin, ModelAdmin, E
|
|
406
402
|
else:
|
407
403
|
config = StatusBadgeConfig(show_icons=True, icon=Icons.PAUSE_CIRCLE)
|
408
404
|
return StatusBadge.create(text="Inactive", variant="secondary", config=config)
|
409
|
-
|
405
|
+
|
410
406
|
@display(description="Usage")
|
411
407
|
def usage_count_display(self, obj):
|
412
408
|
"""Usage count display."""
|
413
409
|
if not obj.usage_count:
|
414
410
|
return "Not used"
|
415
411
|
return f"{obj.usage_count} times"
|
416
|
-
|
412
|
+
|
417
413
|
@display(description="Created By")
|
418
414
|
def created_by_display(self, obj):
|
419
415
|
"""Created by user display."""
|
420
416
|
if not obj.created_by:
|
421
417
|
return "—"
|
422
418
|
return self.display_user_simple(obj.created_by)
|
423
|
-
|
419
|
+
|
424
420
|
@display(description="Created")
|
425
421
|
def created_at_display(self, obj):
|
426
422
|
"""Created time with relative display."""
|
427
423
|
config = DateTimeDisplayConfig(show_relative=True)
|
428
424
|
return self.display_datetime_relative(obj, 'created_at', config)
|
429
|
-
|
425
|
+
|
430
426
|
@action(description="Activate configurations", variant=ActionVariant.SUCCESS)
|
431
427
|
def activate_configurations(self, request, queryset):
|
432
428
|
"""Activate selected configurations."""
|
433
429
|
updated = queryset.update(is_active=True)
|
434
430
|
messages.success(request, f"Activated {updated} configurations.")
|
435
|
-
|
431
|
+
|
436
432
|
@action(description="Deactivate configurations", variant=ActionVariant.WARNING)
|
437
433
|
def deactivate_configurations(self, request, queryset):
|
438
434
|
"""Deactivate selected configurations."""
|
439
435
|
updated = queryset.update(is_active=False)
|
440
436
|
messages.warning(request, f"Deactivated {updated} configurations.")
|
441
|
-
|
437
|
+
|
442
438
|
@action(description="Reset usage count", variant=ActionVariant.INFO)
|
443
439
|
def reset_usage(self, request, queryset):
|
444
440
|
"""Reset usage count for selected configurations."""
|
445
441
|
updated = queryset.update(usage_count=0)
|
446
|
-
messages.info(request, f"Reset usage count for {updated} configurations.")
|
442
|
+
messages.info(request, f"Reset usage count for {updated} configurations.")
|
django_cfg/apps/agents/apps.py
CHANGED
@@ -7,12 +7,12 @@ from django.apps import AppConfig
|
|
7
7
|
|
8
8
|
class AgentsConfig(AppConfig):
|
9
9
|
"""Django app configuration for Django Agents."""
|
10
|
-
|
10
|
+
|
11
11
|
default_auto_field = 'django.db.models.BigAutoField'
|
12
12
|
name = 'django_cfg.apps.agents'
|
13
13
|
label = 'django_cfg_agents'
|
14
14
|
verbose_name = 'Django Agents'
|
15
|
-
|
15
|
+
|
16
16
|
def ready(self):
|
17
17
|
"""Initialize app when Django starts."""
|
18
18
|
# Import signal handlers
|
@@ -20,7 +20,7 @@ class AgentsConfig(AppConfig):
|
|
20
20
|
from . import signals # noqa
|
21
21
|
except ImportError:
|
22
22
|
pass
|
23
|
-
|
23
|
+
|
24
24
|
# Initialize orchestrator registry
|
25
25
|
try:
|
26
26
|
from .integration.registry import initialize_registry
|
@@ -2,15 +2,15 @@
|
|
2
2
|
Core components for Django Orchestrator.
|
3
3
|
"""
|
4
4
|
|
5
|
-
from .django_agent import DjangoAgent
|
6
|
-
from .orchestrator import SimpleOrchestrator
|
7
5
|
from .dependencies import DjangoDeps
|
6
|
+
from .django_agent import DjangoAgent
|
7
|
+
from .exceptions import AgentNotFoundError, ExecutionError, OrchestratorError
|
8
8
|
from .models import ExecutionResult, WorkflowConfig
|
9
|
-
from .
|
9
|
+
from .orchestrator import SimpleOrchestrator
|
10
10
|
|
11
11
|
__all__ = [
|
12
12
|
"DjangoAgent",
|
13
|
-
"SimpleOrchestrator",
|
13
|
+
"SimpleOrchestrator",
|
14
14
|
"DjangoDeps",
|
15
15
|
"ExecutionResult",
|
16
16
|
"WorkflowConfig",
|
@@ -3,7 +3,8 @@ Dependency injection classes for Django Orchestrator.
|
|
3
3
|
"""
|
4
4
|
|
5
5
|
from dataclasses import dataclass, field
|
6
|
-
from typing import
|
6
|
+
from typing import TYPE_CHECKING, Any, Dict, Optional
|
7
|
+
|
7
8
|
from django.http import HttpRequest
|
8
9
|
|
9
10
|
# Re-export RunContext from pydantic_ai for convenience
|
@@ -18,11 +19,11 @@ __all__ = ["DjangoDeps", "ContentDeps", "RunContext"]
|
|
18
19
|
@dataclass
|
19
20
|
class DjangoDeps:
|
20
21
|
"""Standard Django dependencies for agent execution."""
|
21
|
-
|
22
|
+
|
22
23
|
user: "AbstractUser"
|
23
24
|
request: Optional[HttpRequest] = None
|
24
25
|
session_data: Dict[str, Any] = field(default_factory=dict)
|
25
|
-
|
26
|
+
|
26
27
|
@classmethod
|
27
28
|
async def from_request(cls, request: HttpRequest) -> 'DjangoDeps':
|
28
29
|
"""Create dependencies from Django request."""
|
@@ -31,7 +32,7 @@ class DjangoDeps:
|
|
31
32
|
request=request,
|
32
33
|
session_data=dict(request.session) if request.session else {}
|
33
34
|
)
|
34
|
-
|
35
|
+
|
35
36
|
@classmethod
|
36
37
|
async def from_user_id(cls, user_id: int) -> 'DjangoDeps':
|
37
38
|
"""Create dependencies from user ID."""
|
@@ -39,12 +40,12 @@ class DjangoDeps:
|
|
39
40
|
User = get_user_model()
|
40
41
|
user = await User.objects.aget(id=user_id)
|
41
42
|
return cls(user=user)
|
42
|
-
|
43
|
+
|
43
44
|
@classmethod
|
44
45
|
async def from_user(cls, user: "AbstractUser") -> 'DjangoDeps':
|
45
46
|
"""Create dependencies from user instance."""
|
46
47
|
return cls(user=user)
|
47
|
-
|
48
|
+
|
48
49
|
def to_dict(self) -> Dict[str, Any]:
|
49
50
|
"""Convert to dictionary for serialization."""
|
50
51
|
return {
|
@@ -58,19 +59,19 @@ class DjangoDeps:
|
|
58
59
|
@dataclass
|
59
60
|
class ContentDeps(DjangoDeps):
|
60
61
|
"""Content-specific dependencies."""
|
61
|
-
|
62
|
+
|
62
63
|
content_id: Optional[int] = None
|
63
64
|
content_type: str = "article"
|
64
65
|
target_audience: str = "general"
|
65
|
-
|
66
|
+
|
66
67
|
async def get_content(self):
|
67
68
|
"""Get content object if content_id is provided."""
|
68
69
|
if not self.content_id:
|
69
70
|
return None
|
70
|
-
|
71
|
+
|
71
72
|
# Import here to avoid circular imports
|
72
73
|
from django.apps import apps
|
73
|
-
|
74
|
+
|
74
75
|
try:
|
75
76
|
Content = apps.get_model('your_app', 'Content') # Adjust app name
|
76
77
|
return await Content.objects.aget(id=self.content_id)
|
@@ -81,19 +82,19 @@ class ContentDeps(DjangoDeps):
|
|
81
82
|
@dataclass
|
82
83
|
class DataProcessingDeps(DjangoDeps):
|
83
84
|
"""Dependencies for data processing agents."""
|
84
|
-
|
85
|
+
|
85
86
|
dataset_id: Optional[int] = None
|
86
87
|
processing_options: Dict[str, Any] = field(default_factory=dict)
|
87
88
|
batch_size: int = 100
|
88
|
-
|
89
|
+
|
89
90
|
async def get_dataset(self):
|
90
91
|
"""Get dataset object if dataset_id is provided."""
|
91
92
|
if not self.dataset_id:
|
92
93
|
return None
|
93
|
-
|
94
|
+
|
94
95
|
# Import here to avoid circular imports
|
95
96
|
from django.apps import apps
|
96
|
-
|
97
|
+
|
97
98
|
try:
|
98
99
|
Dataset = apps.get_model('your_app', 'Dataset') # Adjust app name
|
99
100
|
return await Dataset.objects.aget(id=self.dataset_id)
|
@@ -104,19 +105,19 @@ class DataProcessingDeps(DjangoDeps):
|
|
104
105
|
@dataclass
|
105
106
|
class BusinessLogicDeps(DjangoDeps):
|
106
107
|
"""Dependencies for business logic agents."""
|
107
|
-
|
108
|
+
|
108
109
|
business_context: Dict[str, Any] = field(default_factory=dict)
|
109
110
|
rules_version: str = "latest"
|
110
111
|
organization_id: Optional[int] = None
|
111
|
-
|
112
|
+
|
112
113
|
async def get_organization(self):
|
113
114
|
"""Get organization object if organization_id is provided."""
|
114
115
|
if not self.organization_id:
|
115
116
|
return None
|
116
|
-
|
117
|
+
|
117
118
|
# Import here to avoid circular imports
|
118
119
|
from django.apps import apps
|
119
|
-
|
120
|
+
|
120
121
|
try:
|
121
122
|
Organization = apps.get_model('your_app', 'Organization') # Adjust app name
|
122
123
|
return await Organization.objects.aget(id=self.organization_id)
|
@@ -127,15 +128,15 @@ class BusinessLogicDeps(DjangoDeps):
|
|
127
128
|
@dataclass
|
128
129
|
class IntegrationDeps(DjangoDeps):
|
129
130
|
"""Dependencies for external integration agents."""
|
130
|
-
|
131
|
+
|
131
132
|
api_credentials: Dict[str, str] = field(default_factory=dict)
|
132
133
|
service_config: Dict[str, Any] = field(default_factory=dict)
|
133
134
|
rate_limit_key: Optional[str] = None
|
134
|
-
|
135
|
+
|
135
136
|
def get_api_key(self, service_name: str) -> Optional[str]:
|
136
137
|
"""Get API key for specific service."""
|
137
138
|
return self.api_credentials.get(f"{service_name}_api_key")
|
138
|
-
|
139
|
+
|
139
140
|
def get_service_config(self, service_name: str) -> Dict[str, Any]:
|
140
141
|
"""Get configuration for specific service."""
|
141
142
|
return self.service_config.get(service_name, {})
|
@@ -144,11 +145,11 @@ class IntegrationDeps(DjangoDeps):
|
|
144
145
|
@dataclass
|
145
146
|
class TestDeps:
|
146
147
|
"""Simple dependencies for testing."""
|
147
|
-
|
148
|
+
|
148
149
|
user_id: int
|
149
150
|
test_data: Dict[str, Any] = field(default_factory=dict)
|
150
151
|
mock_responses: Dict[str, Any] = field(default_factory=dict)
|
151
|
-
|
152
|
+
|
152
153
|
def get_mock_response(self, key: str) -> Any:
|
153
154
|
"""Get mock response for testing."""
|
154
155
|
return self.mock_responses.get(key)
|