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,8 +4,10 @@ Email Configuration Model
|
|
4
4
|
Django email settings with Pydantic 2.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from typing import
|
7
|
+
from typing import Any, Dict, Optional
|
8
|
+
|
8
9
|
from pydantic import Field, field_validator
|
10
|
+
|
9
11
|
from ..base import BaseConfig
|
10
12
|
|
11
13
|
|
@@ -16,70 +18,70 @@ class EmailConfig(BaseConfig):
|
|
16
18
|
Supports SMTP, console, file, and other email backends
|
17
19
|
with environment-aware defaults.
|
18
20
|
"""
|
19
|
-
|
21
|
+
|
20
22
|
# Email backend
|
21
23
|
backend: str = Field(
|
22
24
|
default="console",
|
23
25
|
description="Email backend (smtp/console/file/memory)"
|
24
26
|
)
|
25
|
-
|
27
|
+
|
26
28
|
# SMTP settings
|
27
29
|
host: str = Field(
|
28
30
|
default="localhost",
|
29
31
|
description="SMTP server host"
|
30
32
|
)
|
31
|
-
|
33
|
+
|
32
34
|
port: int = Field(
|
33
35
|
default=587,
|
34
36
|
ge=1,
|
35
37
|
le=65535,
|
36
38
|
description="SMTP server port"
|
37
39
|
)
|
38
|
-
|
40
|
+
|
39
41
|
username: Optional[str] = Field(
|
40
42
|
default=None,
|
41
43
|
description="SMTP username"
|
42
44
|
)
|
43
|
-
|
45
|
+
|
44
46
|
password: Optional[str] = Field(
|
45
47
|
default=None,
|
46
48
|
description="SMTP password"
|
47
49
|
)
|
48
|
-
|
50
|
+
|
49
51
|
use_tls: bool = Field(
|
50
52
|
default=True,
|
51
53
|
description="Use TLS for SMTP"
|
52
54
|
)
|
53
|
-
|
55
|
+
|
54
56
|
use_ssl: bool = Field(
|
55
57
|
default=False,
|
56
58
|
description="Use SSL for SMTP"
|
57
59
|
)
|
58
|
-
|
60
|
+
|
59
61
|
timeout: int = Field(
|
60
62
|
default=30,
|
61
63
|
ge=1,
|
62
64
|
le=300,
|
63
65
|
description="SMTP timeout in seconds"
|
64
66
|
)
|
65
|
-
|
67
|
+
|
66
68
|
# Email addresses
|
67
69
|
default_from: str = Field(
|
68
70
|
default="noreply@example.com",
|
69
71
|
description="Default 'from' email address"
|
70
72
|
)
|
71
|
-
|
73
|
+
|
72
74
|
admin_email: Optional[str] = Field(
|
73
75
|
default=None,
|
74
76
|
description="Admin email for error notifications"
|
75
77
|
)
|
76
|
-
|
78
|
+
|
77
79
|
# File backend settings
|
78
80
|
file_path: str = Field(
|
79
81
|
default="emails/",
|
80
82
|
description="Path for file-based email backend"
|
81
83
|
)
|
82
|
-
|
84
|
+
|
83
85
|
@field_validator('backend')
|
84
86
|
@classmethod
|
85
87
|
def validate_backend(cls, v: str) -> str:
|
@@ -88,7 +90,7 @@ class EmailConfig(BaseConfig):
|
|
88
90
|
if v not in valid_backends:
|
89
91
|
raise ValueError(f"Email backend must be one of: {valid_backends}")
|
90
92
|
return v
|
91
|
-
|
93
|
+
|
92
94
|
@field_validator('default_from', 'admin_email')
|
93
95
|
@classmethod
|
94
96
|
def validate_email(cls, v: Optional[str]) -> Optional[str]:
|
@@ -96,7 +98,7 @@ class EmailConfig(BaseConfig):
|
|
96
98
|
if v and '@' not in v:
|
97
99
|
raise ValueError("Invalid email address format")
|
98
100
|
return v
|
99
|
-
|
101
|
+
|
100
102
|
@field_validator('use_tls', 'use_ssl', mode='after')
|
101
103
|
@classmethod
|
102
104
|
def validate_tls_ssl(cls, v, info):
|
@@ -105,12 +107,12 @@ class EmailConfig(BaseConfig):
|
|
105
107
|
if data.get('use_tls') and data.get('use_ssl'):
|
106
108
|
raise ValueError("Cannot use both TLS and SSL simultaneously")
|
107
109
|
return v
|
108
|
-
|
110
|
+
|
109
111
|
def to_django_settings(self) -> Dict[str, Any]:
|
110
112
|
"""Convert to Django email settings."""
|
111
113
|
if self.backend == 'smtp':
|
112
114
|
backend_class = 'django.core.mail.backends.smtp.EmailBackend'
|
113
|
-
|
115
|
+
|
114
116
|
settings = {
|
115
117
|
'EMAIL_BACKEND': backend_class,
|
116
118
|
'EMAIL_HOST': self.host,
|
@@ -120,44 +122,44 @@ class EmailConfig(BaseConfig):
|
|
120
122
|
'EMAIL_TIMEOUT': self.timeout,
|
121
123
|
'DEFAULT_FROM_EMAIL': self.default_from,
|
122
124
|
}
|
123
|
-
|
125
|
+
|
124
126
|
if self.username:
|
125
127
|
settings['EMAIL_HOST_USER'] = self.username
|
126
|
-
|
128
|
+
|
127
129
|
if self.password:
|
128
130
|
settings['EMAIL_HOST_PASSWORD'] = self.password
|
129
|
-
|
131
|
+
|
130
132
|
elif self.backend == 'console':
|
131
133
|
settings = {
|
132
134
|
'EMAIL_BACKEND': 'django.core.mail.backends.console.EmailBackend',
|
133
135
|
'DEFAULT_FROM_EMAIL': self.default_from,
|
134
136
|
}
|
135
|
-
|
137
|
+
|
136
138
|
elif self.backend == 'file':
|
137
139
|
settings = {
|
138
140
|
'EMAIL_BACKEND': 'django.core.mail.backends.filebased.EmailBackend',
|
139
141
|
'EMAIL_FILE_PATH': self.file_path,
|
140
142
|
'DEFAULT_FROM_EMAIL': self.default_from,
|
141
143
|
}
|
142
|
-
|
144
|
+
|
143
145
|
elif self.backend == 'memory':
|
144
146
|
settings = {
|
145
147
|
'EMAIL_BACKEND': 'django.core.mail.backends.locmem.EmailBackend',
|
146
148
|
'DEFAULT_FROM_EMAIL': self.default_from,
|
147
149
|
}
|
148
|
-
|
150
|
+
|
149
151
|
elif self.backend == 'dummy':
|
150
152
|
settings = {
|
151
153
|
'EMAIL_BACKEND': 'django.core.mail.backends.dummy.EmailBackend',
|
152
154
|
'DEFAULT_FROM_EMAIL': self.default_from,
|
153
155
|
}
|
154
|
-
|
156
|
+
|
155
157
|
else:
|
156
158
|
raise ValueError(f"Unsupported email backend: {self.backend}")
|
157
|
-
|
159
|
+
|
158
160
|
# Add admin email if provided
|
159
161
|
if self.admin_email:
|
160
162
|
settings['ADMINS'] = [('Admin', self.admin_email)]
|
161
163
|
settings['MANAGERS'] = [('Manager', self.admin_email)]
|
162
|
-
|
164
|
+
|
163
165
|
return settings
|
@@ -4,7 +4,8 @@ Telegram service configuration for django_cfg.
|
|
4
4
|
Type-safe Telegram bot configuration with validation.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from typing import
|
7
|
+
from typing import Any, Dict, Literal, Optional
|
8
|
+
|
8
9
|
from pydantic import BaseModel, Field, field_validator
|
9
10
|
|
10
11
|
|
@@ -30,9 +30,9 @@ Example:
|
|
30
30
|
```
|
31
31
|
"""
|
32
32
|
|
33
|
-
from .config import TaskConfig, TaskBackend, QueuePriority
|
34
33
|
from .backends import DramatiqConfig, WorkerConfig
|
35
|
-
from .
|
34
|
+
from .config import QueuePriority, TaskBackend, TaskConfig
|
35
|
+
from .utils import get_default_task_config, get_smart_queues, validate_task_config
|
36
36
|
|
37
37
|
__all__ = [
|
38
38
|
# Main configuration
|
@@ -5,10 +5,11 @@ Contains Dramatiq and Worker configuration models.
|
|
5
5
|
Size: ~200 lines (focused on backend settings)
|
6
6
|
"""
|
7
7
|
|
8
|
-
from pydantic import BaseModel, Field, field_validator
|
9
|
-
from typing import Optional, List, Literal
|
10
|
-
import os
|
11
8
|
import logging
|
9
|
+
import os
|
10
|
+
from typing import List, Literal, Optional
|
11
|
+
|
12
|
+
from pydantic import BaseModel, Field, field_validator
|
12
13
|
|
13
14
|
logger = logging.getLogger(__name__)
|
14
15
|
|
@@ -5,11 +5,12 @@ Contains TaskConfig class (main entry point) and related enums.
|
|
5
5
|
Size: ~250 lines (focused on main configuration)
|
6
6
|
"""
|
7
7
|
|
8
|
-
from pydantic import BaseModel, Field, field_validator
|
9
|
-
from typing import Optional, List, Dict, Any
|
10
|
-
from enum import Enum
|
11
|
-
import os
|
12
8
|
import logging
|
9
|
+
import os
|
10
|
+
from enum import Enum
|
11
|
+
from typing import Any, Dict, List, Optional
|
12
|
+
|
13
|
+
from pydantic import BaseModel, Field, field_validator
|
13
14
|
|
14
15
|
from django_cfg.models.base import BaseCfgAutoModule
|
15
16
|
|
@@ -303,6 +304,7 @@ class TaskConfig(BaseModel, BaseCfgAutoModule):
|
|
303
304
|
|
304
305
|
# Resolve forward references for Pydantic v2
|
305
306
|
from .backends import DramatiqConfig, WorkerConfig
|
307
|
+
|
306
308
|
TaskConfig.model_rebuild()
|
307
309
|
|
308
310
|
__all__ = [
|
django_cfg/models/tasks/utils.py
CHANGED
@@ -9,8 +9,8 @@ Contains utility functions for task configuration:
|
|
9
9
|
Size: ~120 lines (focused on utilities)
|
10
10
|
"""
|
11
11
|
|
12
|
-
from typing import List, Optional, TYPE_CHECKING
|
13
12
|
import logging
|
13
|
+
from typing import TYPE_CHECKING, List, Optional
|
14
14
|
|
15
15
|
if TYPE_CHECKING:
|
16
16
|
from .config import TaskConfig
|
@@ -87,8 +87,8 @@ def get_default_task_config(debug: bool = False) -> 'TaskConfig':
|
|
87
87
|
>>> config.dramatiq.processes
|
88
88
|
2
|
89
89
|
"""
|
90
|
-
from .config import TaskConfig
|
91
90
|
from .backends import DramatiqConfig, WorkerConfig
|
91
|
+
from .config import TaskConfig
|
92
92
|
|
93
93
|
smart_queues = get_smart_queues(debug)
|
94
94
|
|
@@ -158,8 +158,8 @@ def validate_task_config(config: 'TaskConfig', redis_url: Optional[str] = None)
|
|
158
158
|
|
159
159
|
# Check if Dramatiq is available
|
160
160
|
try:
|
161
|
-
import dramatiq
|
162
161
|
import django_dramatiq
|
162
|
+
import dramatiq
|
163
163
|
except ImportError as e:
|
164
164
|
logger.error(f"Dramatiq dependencies not available: {e}")
|
165
165
|
return False
|
django_cfg/modules/base.py
CHANGED
@@ -4,10 +4,10 @@ Base Module for Django CFG
|
|
4
4
|
Provides base functionality for all auto-configuring modules.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from typing import Any, Optional, TYPE_CHECKING
|
8
|
-
from abc import ABC
|
9
7
|
import importlib
|
10
8
|
import os
|
9
|
+
from abc import ABC
|
10
|
+
from typing import TYPE_CHECKING, Any, Optional
|
11
11
|
|
12
12
|
if TYPE_CHECKING:
|
13
13
|
from django_cfg.core.config import DjangoConfig
|
@@ -20,13 +20,13 @@ class BaseCfgModule(ABC):
|
|
20
20
|
Provides common functionality and configuration access.
|
21
21
|
Auto-discovers configuration from Django settings.
|
22
22
|
"""
|
23
|
-
|
23
|
+
|
24
24
|
_config_instance: Optional["DjangoConfig"] = None
|
25
|
-
|
25
|
+
|
26
26
|
def __init__(self):
|
27
27
|
"""Initialize the base module."""
|
28
28
|
self._config = None
|
29
|
-
|
29
|
+
|
30
30
|
@classmethod
|
31
31
|
def get_config(cls) -> Optional["DjangoConfig"]:
|
32
32
|
"""Get the DjangoConfig instance automatically."""
|
@@ -51,6 +51,7 @@ class BaseCfgModule(ABC):
|
|
51
51
|
|
52
52
|
# Fallback: try to create minimal config from Django settings
|
53
53
|
from django.conf import settings
|
54
|
+
|
54
55
|
from django_cfg.core.config import DjangoConfig
|
55
56
|
|
56
57
|
return DjangoConfig(
|
@@ -67,7 +68,7 @@ class BaseCfgModule(ABC):
|
|
67
68
|
def reset_config(cls):
|
68
69
|
"""Reset the cached config instance (useful for testing)."""
|
69
70
|
cls._config_instance = None
|
70
|
-
|
71
|
+
|
71
72
|
def set_config(self, config: Any) -> None:
|
72
73
|
"""
|
73
74
|
Set the configuration instance.
|
@@ -76,7 +77,7 @@ class BaseCfgModule(ABC):
|
|
76
77
|
config: The DjangoConfig instance
|
77
78
|
"""
|
78
79
|
self._config = config
|
79
|
-
|
80
|
+
|
80
81
|
def _get_config_key(self, key: str, default: Any) -> Any:
|
81
82
|
"""
|
82
83
|
Get a key from the configuration instance.
|
@@ -88,15 +89,15 @@ class BaseCfgModule(ABC):
|
|
88
89
|
try:
|
89
90
|
# Get config using class method
|
90
91
|
config = self.get_config()
|
91
|
-
|
92
|
+
|
92
93
|
# If config is available, get the key
|
93
94
|
if config is not None:
|
94
95
|
result = getattr(config, key, default)
|
95
96
|
return result
|
96
|
-
|
97
|
+
|
97
98
|
# Fallback to default if no config available
|
98
99
|
return default
|
99
|
-
|
100
|
+
|
100
101
|
except Exception:
|
101
102
|
# Return default on any error
|
102
103
|
return default
|
@@ -109,7 +110,7 @@ class BaseCfgModule(ABC):
|
|
109
110
|
True if Support is enabled, False otherwise
|
110
111
|
"""
|
111
112
|
return self._get_config_key('enable_support', True)
|
112
|
-
|
113
|
+
|
113
114
|
def is_accounts_enabled(self) -> bool:
|
114
115
|
"""
|
115
116
|
Check if django-cfg Accounts is enabled.
|
@@ -118,7 +119,7 @@ class BaseCfgModule(ABC):
|
|
118
119
|
True if Accounts is enabled, False otherwise
|
119
120
|
"""
|
120
121
|
return self._get_config_key('enable_accounts', False)
|
121
|
-
|
122
|
+
|
122
123
|
def is_newsletter_enabled(self) -> bool:
|
123
124
|
"""
|
124
125
|
Check if django-cfg Newsletter is enabled.
|
@@ -127,7 +128,7 @@ class BaseCfgModule(ABC):
|
|
127
128
|
True if Newsletter is enabled, False otherwise
|
128
129
|
"""
|
129
130
|
return self._get_config_key('enable_newsletter', False)
|
130
|
-
|
131
|
+
|
131
132
|
def is_leads_enabled(self) -> bool:
|
132
133
|
"""
|
133
134
|
Check if django-cfg Leads is enabled.
|
@@ -136,7 +137,7 @@ class BaseCfgModule(ABC):
|
|
136
137
|
True if Leads is enabled, False otherwise
|
137
138
|
"""
|
138
139
|
return self._get_config_key('enable_leads', False)
|
139
|
-
|
140
|
+
|
140
141
|
def is_agents_enabled(self) -> bool:
|
141
142
|
"""
|
142
143
|
Check if django-cfg Agents is enabled.
|
@@ -145,7 +146,7 @@ class BaseCfgModule(ABC):
|
|
145
146
|
True if Agents is enabled, False otherwise
|
146
147
|
"""
|
147
148
|
return self._get_config_key('enable_agents', False)
|
148
|
-
|
149
|
+
|
149
150
|
def is_knowbase_enabled(self) -> bool:
|
150
151
|
"""
|
151
152
|
Check if django-cfg Knowbase is enabled.
|
@@ -154,7 +155,7 @@ class BaseCfgModule(ABC):
|
|
154
155
|
True if Knowbase is enabled, False otherwise
|
155
156
|
"""
|
156
157
|
return self._get_config_key('enable_knowbase', False)
|
157
|
-
|
158
|
+
|
158
159
|
def should_enable_tasks(self) -> bool:
|
159
160
|
"""
|
160
161
|
Check if django-cfg Tasks is enabled.
|
@@ -165,7 +166,7 @@ class BaseCfgModule(ABC):
|
|
165
166
|
"""
|
166
167
|
|
167
168
|
return self.get_config().should_enable_tasks()
|
168
|
-
|
169
|
+
|
169
170
|
def is_maintenance_enabled(self) -> bool:
|
170
171
|
"""
|
171
172
|
Check if django-cfg Maintenance is enabled.
|
@@ -5,49 +5,48 @@ Clean, type-safe admin utilities with no HTML duplication.
|
|
5
5
|
"""
|
6
6
|
|
7
7
|
# Core utilities
|
8
|
-
|
9
|
-
from .
|
8
|
+
# Decorators
|
9
|
+
from .decorators import action, display
|
10
10
|
|
11
11
|
# Icons
|
12
|
-
from .icons import
|
12
|
+
from .icons import IconCategories, Icons
|
13
13
|
|
14
14
|
# Admin mixins
|
15
15
|
from .mixins.display_mixin import DisplayMixin
|
16
16
|
from .mixins.optimization_mixin import OptimizedModelAdmin
|
17
17
|
from .mixins.standalone_actions_mixin import StandaloneActionsMixin, standalone_action
|
18
|
-
|
19
|
-
# Configuration models
|
20
|
-
from .models.display_models import UserDisplayConfig, MoneyDisplayConfig, DateTimeDisplayConfig
|
18
|
+
from .models.action_models import ActionConfig, ActionVariant
|
21
19
|
from .models.badge_models import BadgeConfig, BadgeVariant, StatusBadgeConfig
|
22
|
-
from .models.action_models import ActionVariant, ActionConfig
|
23
20
|
|
24
|
-
#
|
25
|
-
from .
|
21
|
+
# Configuration models
|
22
|
+
from .models.display_models import DateTimeDisplayConfig, MoneyDisplayConfig, UserDisplayConfig
|
23
|
+
from .utils.badges import CounterBadge, ProgressBadge, StatusBadge
|
24
|
+
from .utils.displays import DateTimeDisplay, MoneyDisplay, StatusDisplay, UserDisplay
|
26
25
|
|
27
26
|
__version__ = "1.0.0"
|
28
27
|
|
29
28
|
__all__ = [
|
30
29
|
# Display utilities
|
31
30
|
"UserDisplay",
|
32
|
-
"MoneyDisplay",
|
31
|
+
"MoneyDisplay",
|
33
32
|
"StatusDisplay",
|
34
33
|
"DateTimeDisplay",
|
35
|
-
|
34
|
+
|
36
35
|
# Badge utilities
|
37
36
|
"StatusBadge",
|
38
37
|
"ProgressBadge",
|
39
38
|
"CounterBadge",
|
40
|
-
|
39
|
+
|
41
40
|
# Icons
|
42
41
|
"Icons",
|
43
42
|
"IconCategories",
|
44
|
-
|
43
|
+
|
45
44
|
# Admin mixins
|
46
45
|
"OptimizedModelAdmin",
|
47
46
|
"DisplayMixin",
|
48
47
|
"StandaloneActionsMixin",
|
49
48
|
"standalone_action",
|
50
|
-
|
49
|
+
|
51
50
|
# Configuration models
|
52
51
|
"UserDisplayConfig",
|
53
52
|
"MoneyDisplayConfig",
|
@@ -57,7 +56,7 @@ __all__ = [
|
|
57
56
|
"StatusBadgeConfig",
|
58
57
|
"ActionVariant",
|
59
58
|
"ActionConfig",
|
60
|
-
|
59
|
+
|
61
60
|
# Decorators
|
62
61
|
"display",
|
63
62
|
"action",
|
@@ -4,8 +4,8 @@ Django Admin Decorators - Wrappers for Unfold decorators.
|
|
4
4
|
Provides consistent, type-safe decorators with our admin utilities integration.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from .display import display
|
8
7
|
from .actions import action
|
8
|
+
from .display import display
|
9
9
|
|
10
10
|
__all__ = [
|
11
11
|
'display',
|
@@ -4,14 +4,15 @@ Action decorator wrapper for Unfold integration.
|
|
4
4
|
Provides type-safe action decorators with consistent styling.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from typing import Optional, Callable, Any
|
8
7
|
from functools import wraps
|
8
|
+
from typing import Any, Callable, Optional
|
9
|
+
|
9
10
|
from unfold.decorators import action as unfold_action
|
10
11
|
from unfold.enums import ActionVariant as UnfoldActionVariant
|
11
12
|
|
12
13
|
from django_cfg.modules.django_logging import get_logger
|
13
|
-
from ..models.action_models import ActionVariant
|
14
14
|
|
15
|
+
from ..models.action_models import ActionVariant
|
15
16
|
|
16
17
|
logger = get_logger("django_admin.decorators.actions")
|
17
18
|
|
@@ -66,13 +67,13 @@ def action(
|
|
66
67
|
except Exception as e:
|
67
68
|
# Log error and show user message
|
68
69
|
logger.error(f"Error in action {func.__name__}: {e}")
|
69
|
-
|
70
|
+
|
70
71
|
self.message_user(
|
71
72
|
request,
|
72
73
|
f"Error executing action: {str(e)}",
|
73
74
|
level='ERROR'
|
74
75
|
)
|
75
|
-
|
76
|
+
|
76
77
|
# Convert our ActionVariant to Unfold ActionVariant
|
77
78
|
action_variant = None
|
78
79
|
if variant:
|
@@ -86,7 +87,7 @@ def action(
|
|
86
87
|
ActionVariant.DANGER: UnfoldActionVariant.DANGER,
|
87
88
|
}
|
88
89
|
action_variant = unfold_variant_mapping.get(variant, UnfoldActionVariant.DEFAULT)
|
89
|
-
|
90
|
+
|
90
91
|
# Build decorator kwargs
|
91
92
|
decorator_kwargs = {'description': description}
|
92
93
|
if action_variant:
|
@@ -99,8 +100,8 @@ def action(
|
|
99
100
|
decorator_kwargs['url_path'] = url_path
|
100
101
|
if attrs:
|
101
102
|
decorator_kwargs['attrs'] = attrs
|
102
|
-
|
103
|
+
|
103
104
|
# Apply Unfold decorator
|
104
105
|
return unfold_action(**decorator_kwargs)(wrapper)
|
105
|
-
|
106
|
+
|
106
107
|
return decorator
|
@@ -4,10 +4,12 @@ Display decorator wrapper for Unfold integration.
|
|
4
4
|
Provides type-safe display decorators with our admin utilities.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from typing import Optional, Callable, Any, Union
|
8
7
|
from functools import wraps
|
8
|
+
from typing import Any, Callable, Optional, Union
|
9
|
+
|
9
10
|
from django.utils.safestring import SafeString, mark_safe
|
10
11
|
from unfold.decorators import display as unfold_display
|
12
|
+
|
11
13
|
from django_cfg.modules.django_logging import get_logger
|
12
14
|
|
13
15
|
logger = get_logger('django_admin.decorators.display')
|
@@ -65,25 +67,25 @@ def display(
|
|
65
67
|
def wrapper(self, obj: Any) -> Any:
|
66
68
|
try:
|
67
69
|
result = func(self, obj)
|
68
|
-
|
70
|
+
|
69
71
|
# Handle empty values (use our default if unfold's empty_value is None)
|
70
72
|
if result is None or result == "":
|
71
73
|
return empty_value if empty_value is not None else "—"
|
72
|
-
|
74
|
+
|
73
75
|
# Auto-mark HTML as safe if it contains HTML tags
|
74
76
|
if isinstance(result, str) and ('<' in result and '>' in result):
|
75
77
|
return mark_safe(result)
|
76
|
-
|
78
|
+
|
77
79
|
# SafeString is already safe
|
78
80
|
if isinstance(result, SafeString):
|
79
81
|
return result
|
80
|
-
|
82
|
+
|
81
83
|
return result
|
82
84
|
except Exception as e:
|
83
85
|
# Log error and return safe fallback
|
84
86
|
logger.error(f"Error in display method {func.__name__}: {e}")
|
85
87
|
return empty_value if empty_value is not None else "—"
|
86
|
-
|
88
|
+
|
87
89
|
# Apply Unfold decorator with all parameters
|
88
90
|
return unfold_display(
|
89
91
|
function=None, # We handle the function ourselves
|
@@ -96,7 +98,7 @@ def display(
|
|
96
98
|
label=label,
|
97
99
|
header=header
|
98
100
|
)(wrapper)
|
99
|
-
|
101
|
+
|
100
102
|
# Support both @display and @display(...) usage
|
101
103
|
if function is not None:
|
102
104
|
# Direct usage: @display
|