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
@@ -0,0 +1,122 @@
|
|
1
|
+
"""
|
2
|
+
Django Client (OpenAPI) integration callbacks.
|
3
|
+
"""
|
4
|
+
|
5
|
+
import logging
|
6
|
+
from typing import Any, Dict, List, Tuple
|
7
|
+
|
8
|
+
from django.conf import settings
|
9
|
+
|
10
|
+
logger = logging.getLogger(__name__)
|
11
|
+
|
12
|
+
|
13
|
+
class OpenAPIClientCallbacks:
|
14
|
+
"""Django Client (OpenAPI) integration callbacks."""
|
15
|
+
|
16
|
+
def get_openapi_groups_data(self) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]:
|
17
|
+
"""Get Django Client (OpenAPI) groups data."""
|
18
|
+
try:
|
19
|
+
# Get groups from OpenAPI service (includes default cfg group)
|
20
|
+
from django_cfg.modules.django_client.core import get_openapi_service
|
21
|
+
|
22
|
+
service = get_openapi_service()
|
23
|
+
if not service.config:
|
24
|
+
return [], {"total_apps": 0, "total_endpoints": 0, "total_groups": 0}
|
25
|
+
|
26
|
+
# Get groups with defaults (includes cfg group automatically)
|
27
|
+
groups_dict = service.get_groups()
|
28
|
+
groups_list = list(groups_dict.values())
|
29
|
+
api_prefix = getattr(service.config, "api_prefix", "api")
|
30
|
+
|
31
|
+
# Ensure urlconf modules AND URL patterns are created for all groups with apps
|
32
|
+
try:
|
33
|
+
from django.urls import path
|
34
|
+
from drf_spectacular.views import SpectacularAPIView
|
35
|
+
from django_cfg.modules.django_client.core.groups import GroupManager
|
36
|
+
from django_cfg.modules.django_client import urls as client_urls
|
37
|
+
|
38
|
+
manager = GroupManager(service.config)
|
39
|
+
for group in groups_list:
|
40
|
+
group_name = getattr(group, "name", "unknown") if not isinstance(group, dict) else group.get("name", "unknown")
|
41
|
+
apps = getattr(group, "apps", []) if not isinstance(group, dict) else group.get("apps", [])
|
42
|
+
group_version = getattr(group, "version", "1.0.0") if not isinstance(group, dict) else group.get("version", "1.0.0")
|
43
|
+
|
44
|
+
if apps:
|
45
|
+
try:
|
46
|
+
# Create urlconf module
|
47
|
+
manager.create_urlconf_module(group_name)
|
48
|
+
|
49
|
+
# Check if URL pattern already exists
|
50
|
+
url_name = f'openapi-schema-{group_name}'
|
51
|
+
url_exists = any(
|
52
|
+
hasattr(pattern, 'name') and pattern.name == url_name
|
53
|
+
for pattern in client_urls.urlpatterns
|
54
|
+
)
|
55
|
+
|
56
|
+
# Add URL pattern if it doesn't exist
|
57
|
+
if not url_exists:
|
58
|
+
new_pattern = path(
|
59
|
+
f'{group_name}/schema/',
|
60
|
+
SpectacularAPIView.as_view(
|
61
|
+
urlconf=f'_django_client_urlconf_{group_name}',
|
62
|
+
api_version=group_version,
|
63
|
+
),
|
64
|
+
name=url_name,
|
65
|
+
)
|
66
|
+
client_urls.urlpatterns.append(new_pattern)
|
67
|
+
except Exception:
|
68
|
+
pass # Silently skip if already exists or fails
|
69
|
+
except Exception:
|
70
|
+
pass # Silently skip if GroupManager fails
|
71
|
+
|
72
|
+
groups_data = []
|
73
|
+
total_apps = 0
|
74
|
+
total_endpoints = 0
|
75
|
+
|
76
|
+
for group in groups_list:
|
77
|
+
# Handle both dict and object access
|
78
|
+
if isinstance(group, dict):
|
79
|
+
group_name = group.get("name", "unknown")
|
80
|
+
title = group.get("title", group_name.title())
|
81
|
+
description = group.get("description", f"{group_name} group")
|
82
|
+
apps = group.get("apps", [])
|
83
|
+
else:
|
84
|
+
# Handle object access (for OpenAPIGroupConfig instances)
|
85
|
+
group_name = getattr(group, "name", "unknown")
|
86
|
+
title = getattr(group, "title", group_name.title())
|
87
|
+
description = getattr(group, "description", f"{group_name} group")
|
88
|
+
apps = getattr(group, "apps", [])
|
89
|
+
|
90
|
+
# Count actual endpoints by checking URL patterns (simplified estimate)
|
91
|
+
endpoint_count = len(apps) * 3 # Conservative estimate
|
92
|
+
|
93
|
+
groups_data.append({
|
94
|
+
"name": group_name,
|
95
|
+
"title": title,
|
96
|
+
"description": description,
|
97
|
+
"app_count": len(apps),
|
98
|
+
"endpoint_count": endpoint_count,
|
99
|
+
"status": "active",
|
100
|
+
"schema_url": f"/cfg/openapi/{group_name}/schema/",
|
101
|
+
"api_url": f"/{api_prefix}/{group_name}/",
|
102
|
+
})
|
103
|
+
|
104
|
+
total_apps += len(apps)
|
105
|
+
total_endpoints += endpoint_count
|
106
|
+
|
107
|
+
return groups_data, {
|
108
|
+
"total_apps": total_apps,
|
109
|
+
"total_endpoints": total_endpoints,
|
110
|
+
"total_groups": len(groups_list),
|
111
|
+
}
|
112
|
+
except Exception as e:
|
113
|
+
logger.error(f"Error getting OpenAPI groups: {e}")
|
114
|
+
return [], {
|
115
|
+
"total_apps": 0,
|
116
|
+
"total_endpoints": 0,
|
117
|
+
"total_groups": 0,
|
118
|
+
}
|
119
|
+
|
120
|
+
|
121
|
+
# Keep backward compatibility alias
|
122
|
+
RevolutionCallbacks = OpenAPIClientCallbacks
|
@@ -2,13 +2,14 @@
|
|
2
2
|
Base utilities and helper functions for callbacks.
|
3
3
|
"""
|
4
4
|
|
5
|
-
import
|
5
|
+
import importlib
|
6
6
|
import inspect
|
7
|
-
|
7
|
+
import logging
|
8
|
+
from typing import Any, Dict, Set
|
9
|
+
|
8
10
|
from django.contrib.auth import get_user_model
|
9
11
|
from django.core.management import get_commands
|
10
12
|
from django.core.management.base import BaseCommand
|
11
|
-
import importlib
|
12
13
|
|
13
14
|
logger = logging.getLogger(__name__)
|
14
15
|
|
@@ -242,14 +243,14 @@ def get_available_commands():
|
|
242
243
|
def get_commands_by_category():
|
243
244
|
"""Get commands categorized by type."""
|
244
245
|
commands = get_available_commands()
|
245
|
-
|
246
|
+
|
246
247
|
categorized = {
|
247
248
|
'django_cfg': [],
|
248
249
|
'django_core': [],
|
249
250
|
'third_party': [],
|
250
251
|
'project': [],
|
251
252
|
}
|
252
|
-
|
253
|
+
|
253
254
|
for cmd in commands:
|
254
255
|
if cmd['app'] == 'django_cfg':
|
255
256
|
categorized['django_cfg'].append(cmd)
|
@@ -259,7 +260,7 @@ def get_commands_by_category():
|
|
259
260
|
categorized['project'].append(cmd)
|
260
261
|
else:
|
261
262
|
categorized['third_party'].append(cmd)
|
262
|
-
|
263
|
+
|
263
264
|
return categorized
|
264
265
|
|
265
266
|
|
@@ -267,10 +268,10 @@ def get_user_admin_urls():
|
|
267
268
|
"""Get admin URLs for user model."""
|
268
269
|
try:
|
269
270
|
User = get_user_model()
|
270
|
-
|
271
|
+
|
271
272
|
app_label = User._meta.app_label
|
272
273
|
model_name = User._meta.model_name
|
273
|
-
|
274
|
+
|
274
275
|
return {
|
275
276
|
'changelist': f'admin:{app_label}_{model_name}_changelist',
|
276
277
|
'add': f'admin:{app_label}_{model_name}_add',
|
@@ -3,13 +3,12 @@ Charts data callbacks.
|
|
3
3
|
"""
|
4
4
|
|
5
5
|
import logging
|
6
|
-
import random
|
7
|
-
from typing import Dict, Any, List
|
8
6
|
from datetime import timedelta
|
7
|
+
from typing import Any, Dict, List
|
9
8
|
|
9
|
+
from django.contrib.auth import get_user_model
|
10
10
|
from django.db.models import Count
|
11
11
|
from django.utils import timezone
|
12
|
-
from django.contrib.auth import get_user_model
|
13
12
|
|
14
13
|
from ..models.dashboard import ChartData, ChartDataset
|
15
14
|
|
@@ -18,11 +17,11 @@ logger = logging.getLogger(__name__)
|
|
18
17
|
|
19
18
|
class ChartsCallbacks:
|
20
19
|
"""Charts data callbacks."""
|
21
|
-
|
20
|
+
|
22
21
|
def _get_user_model(self):
|
23
22
|
"""Get the user model safely."""
|
24
23
|
return get_user_model()
|
25
|
-
|
24
|
+
|
26
25
|
def _get_empty_chart_data(self, label: str) -> Dict[str, Any]:
|
27
26
|
"""Get empty chart data structure."""
|
28
27
|
return ChartData(
|
@@ -37,7 +36,7 @@ class ChartsCallbacks:
|
|
37
36
|
)
|
38
37
|
]
|
39
38
|
).model_dump()
|
40
|
-
|
39
|
+
|
41
40
|
def get_user_registration_chart_data(self) -> Dict[str, Any]:
|
42
41
|
"""Get user registration chart data."""
|
43
42
|
try:
|
@@ -45,20 +44,20 @@ class ChartsCallbacks:
|
|
45
44
|
from django.apps import apps
|
46
45
|
if not apps.ready:
|
47
46
|
return self._get_empty_chart_data("New Users")
|
48
|
-
|
47
|
+
|
49
48
|
User = self._get_user_model()
|
50
|
-
|
49
|
+
|
51
50
|
# Get last 7 days of registration data
|
52
51
|
end_date = timezone.now().date()
|
53
52
|
start_date = end_date - timedelta(days=6)
|
54
|
-
|
53
|
+
|
55
54
|
# Generate date range
|
56
55
|
date_range = []
|
57
56
|
current_date = start_date
|
58
57
|
while current_date <= end_date:
|
59
58
|
date_range.append(current_date)
|
60
59
|
current_date += timedelta(days=1)
|
61
|
-
|
60
|
+
|
62
61
|
# Get registration counts by date
|
63
62
|
registration_data = (
|
64
63
|
User.objects.filter(date_joined__date__gte=start_date)
|
@@ -67,14 +66,14 @@ class ChartsCallbacks:
|
|
67
66
|
.annotate(count=Count('id'))
|
68
67
|
.order_by('date')
|
69
68
|
)
|
70
|
-
|
69
|
+
|
71
70
|
# Create data dictionary for easy lookup
|
72
71
|
data_dict = {item['date']: item['count'] for item in registration_data}
|
73
|
-
|
72
|
+
|
74
73
|
# Build chart data
|
75
74
|
labels = [date.strftime("%m/%d") for date in date_range]
|
76
75
|
data_points = [data_dict.get(date, 0) for date in date_range]
|
77
|
-
|
76
|
+
|
78
77
|
chart_data = ChartData(
|
79
78
|
labels=labels,
|
80
79
|
datasets=[
|
@@ -87,9 +86,9 @@ class ChartsCallbacks:
|
|
87
86
|
)
|
88
87
|
]
|
89
88
|
)
|
90
|
-
|
89
|
+
|
91
90
|
return chart_data.model_dump()
|
92
|
-
|
91
|
+
|
93
92
|
except Exception as e:
|
94
93
|
logger.error(f"Error getting user registration chart data: {e}")
|
95
94
|
return self._get_empty_chart_data("New Users")
|
@@ -101,20 +100,20 @@ class ChartsCallbacks:
|
|
101
100
|
from django.apps import apps
|
102
101
|
if not apps.ready:
|
103
102
|
return self._get_empty_chart_data("Active Users")
|
104
|
-
|
103
|
+
|
105
104
|
User = self._get_user_model()
|
106
|
-
|
105
|
+
|
107
106
|
# Get activity data for last 7 days
|
108
107
|
end_date = timezone.now().date()
|
109
108
|
start_date = end_date - timedelta(days=6)
|
110
|
-
|
109
|
+
|
111
110
|
# Generate date range
|
112
111
|
date_range = []
|
113
112
|
current_date = start_date
|
114
113
|
while current_date <= end_date:
|
115
114
|
date_range.append(current_date)
|
116
115
|
current_date += timedelta(days=1)
|
117
|
-
|
116
|
+
|
118
117
|
# Get login activity (users who logged in each day)
|
119
118
|
activity_data = (
|
120
119
|
User.objects.filter(last_login__date__gte=start_date, last_login__isnull=False)
|
@@ -123,14 +122,14 @@ class ChartsCallbacks:
|
|
123
122
|
.annotate(count=Count('id'))
|
124
123
|
.order_by('date')
|
125
124
|
)
|
126
|
-
|
125
|
+
|
127
126
|
# Create data dictionary for easy lookup
|
128
127
|
data_dict = {item['date']: item['count'] for item in activity_data}
|
129
|
-
|
128
|
+
|
130
129
|
# Build chart data
|
131
130
|
labels = [date.strftime("%m/%d") for date in date_range]
|
132
131
|
data_points = [data_dict.get(date, 0) for date in date_range]
|
133
|
-
|
132
|
+
|
134
133
|
chart_data = ChartData(
|
135
134
|
labels=labels,
|
136
135
|
datasets=[
|
@@ -143,13 +142,13 @@ class ChartsCallbacks:
|
|
143
142
|
)
|
144
143
|
]
|
145
144
|
)
|
146
|
-
|
145
|
+
|
147
146
|
return chart_data.model_dump()
|
148
|
-
|
147
|
+
|
149
148
|
except Exception as e:
|
150
149
|
logger.error(f"Error getting user activity chart data: {e}")
|
151
150
|
return self._get_empty_chart_data("Active Users")
|
152
|
-
|
151
|
+
|
153
152
|
def get_activity_tracker_data(self) -> List[Dict[str, str]]:
|
154
153
|
"""Get activity tracker data for the last 52 weeks (GitHub-style)."""
|
155
154
|
try:
|
@@ -157,13 +156,13 @@ class ChartsCallbacks:
|
|
157
156
|
from django.apps import apps
|
158
157
|
if not apps.ready:
|
159
158
|
return self._get_empty_tracker_data()
|
160
|
-
|
159
|
+
|
161
160
|
User = self._get_user_model()
|
162
|
-
|
161
|
+
|
163
162
|
# Get data for last 52 weeks (365 days)
|
164
163
|
end_date = timezone.now().date()
|
165
164
|
start_date = end_date - timedelta(days=364) # 52 weeks * 7 days - 1
|
166
|
-
|
165
|
+
|
167
166
|
# Get activity data by date
|
168
167
|
activity_data = (
|
169
168
|
User.objects.filter(last_login__date__gte=start_date, last_login__isnull=False)
|
@@ -172,17 +171,17 @@ class ChartsCallbacks:
|
|
172
171
|
.annotate(count=Count('id'))
|
173
172
|
.order_by('date')
|
174
173
|
)
|
175
|
-
|
174
|
+
|
176
175
|
# Create data dictionary for easy lookup
|
177
176
|
data_dict = {item['date']: item['count'] for item in activity_data}
|
178
|
-
|
177
|
+
|
179
178
|
# Generate tracker data for each day
|
180
179
|
tracker_data = []
|
181
180
|
current_date = start_date
|
182
|
-
|
181
|
+
|
183
182
|
while current_date <= end_date:
|
184
183
|
activity_count = data_dict.get(current_date, 0)
|
185
|
-
|
184
|
+
|
186
185
|
# Determine color based on activity level
|
187
186
|
if activity_count == 0:
|
188
187
|
color = "bg-base-200 dark:bg-base-700"
|
@@ -199,20 +198,20 @@ class ChartsCallbacks:
|
|
199
198
|
else:
|
200
199
|
color = "bg-green-800 dark:bg-green-400"
|
201
200
|
level = "Very high activity"
|
202
|
-
|
201
|
+
|
203
202
|
tracker_data.append({
|
204
203
|
"color": color,
|
205
204
|
"tooltip": f"{current_date.strftime('%Y-%m-%d')}: {activity_count} active users ({level})"
|
206
205
|
})
|
207
|
-
|
206
|
+
|
208
207
|
current_date += timedelta(days=1)
|
209
|
-
|
208
|
+
|
210
209
|
return tracker_data
|
211
|
-
|
210
|
+
|
212
211
|
except Exception as e:
|
213
212
|
logger.error(f"Error getting activity tracker data: {e}")
|
214
213
|
return self._get_empty_tracker_data()
|
215
|
-
|
214
|
+
|
216
215
|
def _get_empty_tracker_data(self) -> List[Dict[str, str]]:
|
217
216
|
"""Get empty tracker data (365 days of no activity)."""
|
218
217
|
tracker_data = []
|
@@ -3,7 +3,7 @@ Django commands callbacks.
|
|
3
3
|
"""
|
4
4
|
|
5
5
|
import logging
|
6
|
-
from typing import
|
6
|
+
from typing import Any, Dict
|
7
7
|
|
8
8
|
from .base import get_available_commands, get_commands_by_category
|
9
9
|
|
@@ -12,7 +12,7 @@ logger = logging.getLogger(__name__)
|
|
12
12
|
|
13
13
|
class CommandsCallbacks:
|
14
14
|
"""Django commands callbacks."""
|
15
|
-
|
15
|
+
|
16
16
|
def get_django_commands(self) -> Dict[str, Any]:
|
17
17
|
"""Get Django management commands information."""
|
18
18
|
try:
|
@@ -4,32 +4,32 @@ Main Unfold Dashboard Callbacks
|
|
4
4
|
Combines all callback modules into a single interface.
|
5
5
|
"""
|
6
6
|
|
7
|
-
import logging
|
8
7
|
import json
|
9
|
-
|
8
|
+
import logging
|
9
|
+
from typing import Any, Dict
|
10
10
|
|
11
11
|
from django.utils import timezone
|
12
12
|
|
13
|
-
from ...base import BaseCfgModule
|
14
|
-
from ..models.dashboard import DashboardData
|
15
13
|
from django_cfg.core.state import get_current_config
|
16
|
-
|
17
|
-
from .
|
18
|
-
from .
|
19
|
-
from .actions import ActionsCallbacks
|
20
|
-
from .charts import ChartsCallbacks
|
21
|
-
from .commands import CommandsCallbacks
|
22
|
-
from .revolution import OpenAPIClientCallbacks
|
23
|
-
from .users import UsersCallbacks
|
24
|
-
from .base import get_user_admin_urls
|
14
|
+
from django_cfg.modules.django_dashboard.debug import save_section_render
|
15
|
+
from django_cfg.modules.django_dashboard.sections.commands import CommandsSection
|
16
|
+
from django_cfg.modules.django_dashboard.sections.documentation import DocumentationSection
|
25
17
|
|
26
18
|
# Import new dashboard sections
|
27
19
|
from django_cfg.modules.django_dashboard.sections.overview import OverviewSection
|
28
20
|
from django_cfg.modules.django_dashboard.sections.stats import StatsSection
|
29
21
|
from django_cfg.modules.django_dashboard.sections.system import SystemSection
|
30
|
-
|
31
|
-
from
|
32
|
-
from
|
22
|
+
|
23
|
+
from ...base import BaseCfgModule
|
24
|
+
from ..models.dashboard import DashboardData
|
25
|
+
from .actions import ActionsCallbacks
|
26
|
+
from .base import get_user_admin_urls
|
27
|
+
from .charts import ChartsCallbacks
|
28
|
+
from .commands import CommandsCallbacks
|
29
|
+
from .apizones import OpenAPIClientCallbacks
|
30
|
+
from .statistics import StatisticsCallbacks
|
31
|
+
from .system import SystemCallbacks
|
32
|
+
from .users import UsersCallbacks
|
33
33
|
|
34
34
|
logger = logging.getLogger(__name__)
|
35
35
|
|
@@ -50,7 +50,7 @@ class UnfoldCallbacks(
|
|
50
50
|
Combines all callback modules using multiple inheritance for
|
51
51
|
clean separation of concerns while maintaining a single interface.
|
52
52
|
"""
|
53
|
-
|
53
|
+
|
54
54
|
def main_dashboard_callback(self, request, context: Dict[str, Any]) -> Dict[str, Any]:
|
55
55
|
"""
|
56
56
|
Main dashboard callback function with comprehensive system data.
|
@@ -192,7 +192,7 @@ class UnfoldCallbacks(
|
|
192
192
|
"quick_actions": [
|
193
193
|
action.model_dump() for action in dashboard_data.quick_actions
|
194
194
|
],
|
195
|
-
|
195
|
+
|
196
196
|
# Additional categorized actions
|
197
197
|
"admin_actions": [
|
198
198
|
action.model_dump()
|
@@ -222,17 +222,17 @@ class UnfoldCallbacks(
|
|
222
222
|
],
|
223
223
|
"rows": OpenAPIClientCallbacks().get_openapi_groups_data()[0],
|
224
224
|
},
|
225
|
-
|
225
|
+
|
226
226
|
# Recent users
|
227
227
|
"recent_users": self.get_recent_users(),
|
228
228
|
"user_admin_urls": get_user_admin_urls(),
|
229
|
-
|
229
|
+
|
230
230
|
# App statistics
|
231
231
|
"app_statistics": self.get_app_statistics(),
|
232
|
-
|
232
|
+
|
233
233
|
# Django commands
|
234
234
|
"django_commands": self.get_django_commands(),
|
235
|
-
|
235
|
+
|
236
236
|
# Charts data - serialize to JSON for JavaScript
|
237
237
|
"charts": {
|
238
238
|
"user_registrations_json": json.dumps(self.get_user_registration_chart_data()),
|
@@ -240,11 +240,11 @@ class UnfoldCallbacks(
|
|
240
240
|
"user_registrations": self.get_user_registration_chart_data(),
|
241
241
|
"user_activity": self.get_user_activity_chart_data(),
|
242
242
|
},
|
243
|
-
|
243
|
+
|
244
244
|
# Activity tracker data
|
245
245
|
"activity_tracker": self.get_activity_tracker_data(),
|
246
|
-
|
247
|
-
|
246
|
+
|
247
|
+
|
248
248
|
# Meta information
|
249
249
|
"last_updated": dashboard_data.last_updated,
|
250
250
|
"environment": dashboard_data.environment,
|
@@ -260,13 +260,13 @@ class UnfoldCallbacks(
|
|
260
260
|
if 'user_activity' in charts_data:
|
261
261
|
act_data = charts_data['user_activity']
|
262
262
|
logger.info(f"Activity chart labels: {act_data.get('labels', [])}")
|
263
|
-
|
263
|
+
|
264
264
|
# Log recent users data for debugging
|
265
265
|
recent_users_data = context.get('recent_users', [])
|
266
266
|
logger.info(f"Recent users data count: {len(recent_users_data)}")
|
267
267
|
if recent_users_data:
|
268
268
|
logger.info(f"First user: {recent_users_data[0].get('username', 'N/A')}")
|
269
|
-
|
269
|
+
|
270
270
|
# Log activity tracker data for debugging
|
271
271
|
activity_tracker_data = context.get('activity_tracker', [])
|
272
272
|
logger.info(f"Activity tracker data count: {len(activity_tracker_data)}")
|
@@ -3,27 +3,27 @@ Statistics callbacks for dashboard.
|
|
3
3
|
"""
|
4
4
|
|
5
5
|
import logging
|
6
|
-
from typing import List, Dict, Any
|
7
6
|
from datetime import timedelta
|
7
|
+
from typing import Any, Dict, List
|
8
8
|
|
9
|
-
from django.db.models import Count
|
10
|
-
from django.utils import timezone
|
11
|
-
from django.contrib.auth import get_user_model
|
12
9
|
from django.apps import apps
|
10
|
+
from django.contrib.auth import get_user_model
|
11
|
+
from django.utils import timezone
|
13
12
|
|
14
|
-
from ..models.dashboard import StatCard
|
15
13
|
from django_cfg.modules.django_admin.icons import Icons
|
16
14
|
|
15
|
+
from ..models.dashboard import StatCard
|
16
|
+
|
17
17
|
logger = logging.getLogger(__name__)
|
18
18
|
|
19
19
|
|
20
20
|
class StatisticsCallbacks:
|
21
21
|
"""Statistics-related callbacks."""
|
22
|
-
|
22
|
+
|
23
23
|
def _get_user_model(self):
|
24
24
|
"""Get the user model safely."""
|
25
25
|
return get_user_model()
|
26
|
-
|
26
|
+
|
27
27
|
def get_user_statistics(self) -> List[StatCard]:
|
28
28
|
"""Get user-related statistics as Pydantic models."""
|
29
29
|
try:
|
@@ -94,16 +94,16 @@ class StatisticsCallbacks:
|
|
94
94
|
# Check if support is enabled
|
95
95
|
if not self.is_support_enabled():
|
96
96
|
return []
|
97
|
-
|
97
|
+
|
98
98
|
from django_cfg.apps.support.models import Ticket
|
99
|
-
|
99
|
+
|
100
100
|
total_tickets = Ticket.objects.count()
|
101
101
|
open_tickets = Ticket.objects.filter(status='open').count()
|
102
102
|
resolved_tickets = Ticket.objects.filter(status='resolved').count()
|
103
103
|
new_tickets_7d = Ticket.objects.filter(
|
104
104
|
created_at__gte=timezone.now() - timedelta(days=7)
|
105
105
|
).count()
|
106
|
-
|
106
|
+
|
107
107
|
return [
|
108
108
|
StatCard(
|
109
109
|
title="Total Tickets",
|
@@ -123,8 +123,8 @@ class StatisticsCallbacks:
|
|
123
123
|
else "0%"
|
124
124
|
),
|
125
125
|
change_type=(
|
126
|
-
"negative" if open_tickets > total_tickets * 0.3
|
127
|
-
else "positive" if open_tickets == 0
|
126
|
+
"negative" if open_tickets > total_tickets * 0.3
|
127
|
+
else "positive" if open_tickets == 0
|
128
128
|
else "neutral"
|
129
129
|
),
|
130
130
|
description="Awaiting response",
|
@@ -4,11 +4,11 @@ System health and metrics callbacks.
|
|
4
4
|
|
5
5
|
import logging
|
6
6
|
import shutil
|
7
|
-
from typing import
|
7
|
+
from typing import Any, Dict, List
|
8
8
|
|
9
|
-
from django.utils import timezone
|
10
|
-
from django.db import connection
|
11
9
|
from django.core.cache import cache
|
10
|
+
from django.db import connection
|
11
|
+
from django.utils import timezone
|
12
12
|
|
13
13
|
from ..models.dashboard import SystemHealthItem
|
14
14
|
|
@@ -17,7 +17,7 @@ logger = logging.getLogger(__name__)
|
|
17
17
|
|
18
18
|
class SystemCallbacks:
|
19
19
|
"""System health and metrics callbacks."""
|
20
|
-
|
20
|
+
|
21
21
|
def get_system_health(self) -> List[SystemHealthItem]:
|
22
22
|
"""Get system health status as Pydantic models."""
|
23
23
|
health_items = []
|
@@ -105,7 +105,7 @@ class SystemCallbacks:
|
|
105
105
|
health_percentage=int(free_percentage),
|
106
106
|
)
|
107
107
|
)
|
108
|
-
except Exception
|
108
|
+
except Exception:
|
109
109
|
health_items.append(
|
110
110
|
SystemHealthItem(
|
111
111
|
component="storage",
|
@@ -3,7 +3,7 @@ Users data callbacks.
|
|
3
3
|
"""
|
4
4
|
|
5
5
|
import logging
|
6
|
-
from typing import
|
6
|
+
from typing import Any, Dict, List
|
7
7
|
|
8
8
|
from django.contrib.auth import get_user_model
|
9
9
|
|
@@ -14,11 +14,11 @@ logger = logging.getLogger(__name__)
|
|
14
14
|
|
15
15
|
class UsersCallbacks:
|
16
16
|
"""Users data callbacks."""
|
17
|
-
|
17
|
+
|
18
18
|
def _get_user_model(self):
|
19
19
|
"""Get the user model safely."""
|
20
20
|
return get_user_model()
|
21
|
-
|
21
|
+
|
22
22
|
def get_recent_users(self) -> List[Dict[str, Any]]:
|
23
23
|
"""Get recent users data for template."""
|
24
24
|
try:
|
@@ -26,7 +26,7 @@ class UsersCallbacks:
|
|
26
26
|
from django.apps import apps
|
27
27
|
if not apps.ready:
|
28
28
|
return []
|
29
|
-
|
29
|
+
|
30
30
|
User = self._get_user_model()
|
31
31
|
recent_users = User.objects.select_related().order_by("-date_joined")[:10]
|
32
32
|
|