django-cfg 1.4.21__py3-none-any.whl → 1.4.23__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- django_cfg/__init__.py +4 -4
- django_cfg/apps/accounts/__init__.py +1 -1
- django_cfg/apps/accounts/__models.py +30 -29
- django_cfg/apps/accounts/admin/__init__.py +14 -3
- django_cfg/apps/accounts/admin/activity_admin.py +19 -19
- django_cfg/apps/accounts/admin/filters.py +7 -6
- django_cfg/apps/accounts/admin/group_admin.py +10 -16
- django_cfg/apps/accounts/admin/inlines.py +21 -19
- django_cfg/apps/accounts/admin/otp_admin.py +12 -12
- django_cfg/apps/accounts/admin/registration_admin.py +24 -24
- django_cfg/apps/accounts/admin/resources.py +49 -48
- django_cfg/apps/accounts/admin/twilio_admin.py +37 -37
- django_cfg/apps/accounts/admin/user_admin.py +45 -41
- django_cfg/apps/accounts/management/commands/otp_test.py +11 -11
- django_cfg/apps/accounts/managers/__init__.py +1 -1
- django_cfg/apps/accounts/managers/user_manager.py +6 -7
- django_cfg/apps/accounts/migrations/0001_initial.py +3 -2
- django_cfg/apps/accounts/models/__init__.py +15 -16
- django_cfg/apps/accounts/models/activity.py +5 -5
- django_cfg/apps/accounts/models/integrations.py +15 -15
- django_cfg/apps/accounts/models/registration.py +3 -2
- django_cfg/apps/accounts/models/user.py +3 -2
- django_cfg/apps/accounts/serializers/__init__.py +10 -3
- django_cfg/apps/accounts/serializers/otp.py +5 -4
- django_cfg/apps/accounts/serializers/profile.py +4 -5
- django_cfg/apps/accounts/serializers/webhook.py +13 -13
- django_cfg/apps/accounts/services/activity_service.py +13 -12
- django_cfg/apps/accounts/services/otp_service.py +16 -14
- django_cfg/apps/accounts/signals.py +18 -16
- django_cfg/apps/accounts/urls.py +10 -5
- django_cfg/apps/accounts/utils/notifications.py +22 -22
- django_cfg/apps/accounts/views/__init__.py +1 -1
- django_cfg/apps/accounts/views/otp.py +15 -14
- django_cfg/apps/accounts/views/profile.py +14 -10
- django_cfg/apps/accounts/views/webhook.py +46 -48
- django_cfg/apps/agents/__init__.py +3 -3
- django_cfg/apps/agents/admin/__init__.py +1 -1
- django_cfg/apps/agents/admin/execution_admin.py +68 -72
- django_cfg/apps/agents/admin/registry_admin.py +50 -54
- django_cfg/apps/agents/admin/toolsets_admin.py +63 -67
- django_cfg/apps/agents/apps.py +3 -3
- django_cfg/apps/agents/core/__init__.py +4 -4
- django_cfg/apps/agents/core/dependencies.py +24 -23
- django_cfg/apps/agents/core/django_agent.py +41 -39
- django_cfg/apps/agents/core/exceptions.py +12 -12
- django_cfg/apps/agents/core/models.py +16 -15
- django_cfg/apps/agents/core/orchestrator.py +58 -58
- django_cfg/apps/agents/examples/simple_example.py +24 -19
- django_cfg/apps/agents/integration/__init__.py +1 -1
- django_cfg/apps/agents/integration/middleware.py +12 -11
- django_cfg/apps/agents/integration/registry.py +52 -49
- django_cfg/apps/agents/integration/signals.py +5 -5
- django_cfg/apps/agents/management/commands/create_agent.py +39 -38
- django_cfg/apps/agents/management/commands/orchestrator_status.py +40 -39
- django_cfg/apps/agents/managers/__init__.py +8 -3
- django_cfg/apps/agents/managers/execution.py +42 -41
- django_cfg/apps/agents/managers/registry.py +40 -39
- django_cfg/apps/agents/managers/toolsets.py +87 -86
- django_cfg/apps/agents/migrations/0001_initial.py +2 -1
- django_cfg/apps/agents/models/__init__.py +2 -2
- django_cfg/apps/agents/models/execution.py +43 -42
- django_cfg/apps/agents/models/registry.py +46 -45
- django_cfg/apps/agents/models/toolsets.py +63 -62
- django_cfg/apps/agents/patterns/__init__.py +5 -5
- django_cfg/apps/agents/patterns/content_agents.py +17 -16
- django_cfg/apps/agents/toolsets/__init__.py +3 -3
- django_cfg/apps/agents/toolsets/cache_toolset.py +56 -55
- django_cfg/apps/agents/toolsets/django_toolset.py +43 -42
- django_cfg/apps/agents/toolsets/file_toolset.py +64 -63
- django_cfg/apps/agents/toolsets/orm_toolset.py +75 -74
- django_cfg/apps/agents/urls.py +3 -2
- django_cfg/apps/api/commands/urls.py +1 -0
- django_cfg/apps/api/commands/views.py +23 -26
- django_cfg/apps/api/endpoints/checker.py +5 -4
- django_cfg/apps/api/endpoints/drf_views.py +2 -2
- django_cfg/apps/api/endpoints/tests.py +6 -5
- django_cfg/apps/api/endpoints/urls.py +2 -1
- django_cfg/apps/api/endpoints/views.py +1 -0
- django_cfg/apps/api/health/drf_views.py +6 -6
- django_cfg/apps/api/health/urls.py +2 -1
- django_cfg/apps/api/health/views.py +41 -41
- django_cfg/{modules/django_ipc_client → apps/ipc}/__init__.py +6 -6
- django_cfg/apps/ipc/apps.py +28 -0
- django_cfg/apps/ipc/serializers/__init__.py +19 -0
- django_cfg/apps/ipc/serializers/serializers.py +229 -0
- django_cfg/apps/ipc/services/__init__.py +7 -0
- django_cfg/apps/ipc/services/client/__init__.py +23 -0
- django_cfg/{modules/django_ipc_client → apps/ipc/services/client}/client.py +7 -6
- django_cfg/{modules/django_ipc_client → apps/ipc/services/client}/exceptions.py +1 -1
- django_cfg/{modules/django_ipc_client/dashboard → apps/ipc/services}/monitor.py +23 -5
- django_cfg/{modules/django_ipc_client/dashboard/static/django_ipc_dashboard/js/dashboard.js → apps/ipc/static/django_cfg_ipc/js/dashboard.mjs} +131 -63
- django_cfg/{modules/django_ipc_client/dashboard/templates/django_ipc_dashboard → apps/ipc/templates/django_cfg_ipc}/base.html +5 -10
- django_cfg/apps/ipc/templates/django_cfg_ipc/dashboard.html +202 -0
- django_cfg/apps/ipc/urls.py +21 -0
- django_cfg/apps/ipc/urls_admin.py +20 -0
- django_cfg/apps/ipc/views/__init__.py +8 -0
- django_cfg/apps/ipc/views/dashboard.py +15 -0
- django_cfg/apps/ipc/views/viewsets.py +245 -0
- django_cfg/apps/knowbase/admin/__init__.py +2 -2
- django_cfg/apps/knowbase/admin/actions/__init__.py +1 -1
- django_cfg/apps/knowbase/admin/actions/visibility_actions.py +2 -1
- django_cfg/apps/knowbase/admin/archive_admin.py +81 -84
- django_cfg/apps/knowbase/admin/chat_admin.py +70 -72
- django_cfg/apps/knowbase/admin/document_admin.py +10 -11
- django_cfg/apps/knowbase/admin/external_data_admin.py +69 -71
- django_cfg/apps/knowbase/admin/helpers/__init__.py +1 -1
- django_cfg/apps/knowbase/admin/helpers/configs.py +2 -2
- django_cfg/apps/knowbase/admin/helpers/statistics.py +1 -1
- django_cfg/apps/knowbase/apps.py +13 -13
- django_cfg/apps/knowbase/config/__init__.py +7 -6
- django_cfg/apps/knowbase/config/constance_fields.py +14 -12
- django_cfg/apps/knowbase/config/constance_settings.py +32 -31
- django_cfg/apps/knowbase/config/settings.py +28 -28
- django_cfg/apps/knowbase/examples/external_data_usage.py +35 -32
- django_cfg/apps/knowbase/management/commands/knowbase_stats.py +33 -32
- django_cfg/apps/knowbase/management/commands/setup_knowbase.py +11 -13
- django_cfg/apps/knowbase/managers/__init__.py +2 -2
- django_cfg/apps/knowbase/managers/archive.py +86 -85
- django_cfg/apps/knowbase/managers/base.py +5 -5
- django_cfg/apps/knowbase/managers/chat.py +29 -28
- django_cfg/apps/knowbase/managers/document.py +39 -39
- django_cfg/apps/knowbase/managers/external_data.py +74 -73
- django_cfg/apps/knowbase/migrations/0001_initial.py +2 -1
- django_cfg/apps/knowbase/migrations/0002_archiveitem_archiveitemchunk_documentarchive_and_more.py +2 -1
- django_cfg/apps/knowbase/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.23.dist-info}/METADATA +1 -1
- django_cfg-1.4.23.dist-info/RECORD +1137 -0
- django_cfg/apps/payments/static/payments/js/api-client.js +0 -408
- django_cfg/modules/django_ipc_client/dashboard/README.md +0 -517
- django_cfg/modules/django_ipc_client/dashboard/UNFOLD_INTEGRATION.md +0 -439
- django_cfg/modules/django_ipc_client/dashboard/__init__.py +0 -11
- django_cfg/modules/django_ipc_client/dashboard/apps.py +0 -22
- django_cfg/modules/django_ipc_client/dashboard/templates/django_ipc_dashboard/dashboard.html +0 -200
- django_cfg/modules/django_ipc_client/dashboard/urls.py +0 -22
- django_cfg/modules/django_ipc_client/dashboard/urls_admin.py +0 -9
- django_cfg/modules/django_ipc_client/dashboard/views.py +0 -251
- django_cfg/modules/django_rpc_old/POETRY.md +0 -344
- django_cfg/modules/django_rpc_old/README.md +0 -397
- django_cfg/modules/django_rpc_old/TESTING.md +0 -358
- django_cfg/modules/django_rpc_old/__init__.py +0 -39
- django_cfg/modules/django_rpc_old/client.py +0 -531
- django_cfg/modules/django_rpc_old/config.py +0 -279
- django_cfg/modules/django_rpc_old/exceptions.py +0 -172
- django_cfg/modules/django_unfold/callbacks/revolution.py +0 -81
- django_cfg-1.4.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.23.dist-info}/WHEEL +0 -0
- {django_cfg-1.4.21.dist-info → django_cfg-1.4.23.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.4.21.dist-info → django_cfg-1.4.23.dist-info}/licenses/LICENSE +0 -0
@@ -5,32 +5,27 @@ DRF ViewSets for webhook management in admin interface.
|
|
5
5
|
Requires admin permissions.
|
6
6
|
"""
|
7
7
|
|
8
|
-
from
|
8
|
+
from datetime import timedelta
|
9
|
+
|
10
|
+
from django.utils import timezone
|
9
11
|
from rest_framework.decorators import action
|
12
|
+
from rest_framework.filters import OrderingFilter, SearchFilter
|
10
13
|
from rest_framework.response import Response
|
11
|
-
from rest_framework.generics import ListAPIView
|
12
|
-
from django_filters.rest_framework import DjangoFilterBackend
|
13
|
-
from rest_framework.filters import SearchFilter, OrderingFilter
|
14
|
-
from django.utils import timezone
|
15
|
-
from django.db import models
|
16
|
-
from datetime import datetime, timedelta
|
17
14
|
|
18
|
-
from django_cfg.apps.payments.admin_interface.views.base import AdminBaseViewSet, AdminReadOnlyViewSet
|
19
15
|
from django_cfg.apps.payments.admin_interface.serializers import (
|
20
|
-
|
16
|
+
WebhookActionResultSerializer,
|
21
17
|
WebhookEventListSerializer,
|
22
18
|
WebhookStatsSerializer,
|
23
|
-
WebhookActionSerializer,
|
24
|
-
WebhookActionResultSerializer,
|
25
19
|
)
|
20
|
+
from django_cfg.apps.payments.admin_interface.views.base import AdminReadOnlyViewSet
|
26
21
|
from django_cfg.apps.payments.models import UniversalPayment
|
27
|
-
from django_cfg.
|
22
|
+
from django_cfg.apps.payments.services.core.webhook_service import WebhookService
|
28
23
|
from django_cfg.apps.payments.services.integrations.ngrok_service import (
|
29
|
-
get_all_webhook_urls,
|
30
|
-
get_api_base_url,
|
31
|
-
is_ngrok_available
|
24
|
+
get_all_webhook_urls,
|
25
|
+
get_api_base_url,
|
26
|
+
is_ngrok_available,
|
32
27
|
)
|
33
|
-
from django_cfg.
|
28
|
+
from django_cfg.modules.django_logging import get_logger
|
34
29
|
|
35
30
|
logger = get_logger("admin_webhook_api")
|
36
31
|
|
@@ -42,37 +37,37 @@ class AdminWebhookViewSet(AdminReadOnlyViewSet):
|
|
42
37
|
Read-only view for webhook configurations and provider info.
|
43
38
|
Requires admin permissions.
|
44
39
|
"""
|
45
|
-
|
40
|
+
|
46
41
|
# No model - this is for webhook configuration data
|
47
42
|
serializer_class = WebhookStatsSerializer
|
48
|
-
|
43
|
+
|
49
44
|
def __init__(self, **kwargs):
|
50
45
|
"""Initialize with ngrok service."""
|
51
46
|
super().__init__(**kwargs)
|
52
|
-
|
47
|
+
|
53
48
|
self.get_webhook_urls = get_all_webhook_urls
|
54
49
|
self.get_base_url = get_api_base_url
|
55
50
|
self.is_ngrok_active = is_ngrok_available
|
56
|
-
|
51
|
+
|
57
52
|
def list(self, request):
|
58
53
|
"""List webhook providers and configurations with real ngrok URLs."""
|
59
54
|
# Get real webhook URLs
|
60
55
|
webhook_urls = self.get_webhook_urls()
|
61
56
|
base_url = self.get_base_url()
|
62
57
|
ngrok_active = self.is_ngrok_active()
|
63
|
-
|
58
|
+
|
64
59
|
# Get real provider data based on actual payments
|
65
60
|
active_providers = UniversalPayment.objects.values('provider').distinct()
|
66
|
-
|
61
|
+
|
67
62
|
providers_data = []
|
68
63
|
for provider_data in active_providers:
|
69
64
|
provider_name = provider_data['provider']
|
70
65
|
provider_payments = UniversalPayment.objects.filter(provider=provider_name)
|
71
|
-
|
66
|
+
|
72
67
|
# Calculate real statistics
|
73
68
|
total_payments = provider_payments.count()
|
74
69
|
last_payment = provider_payments.order_by('-created_at').first()
|
75
|
-
|
70
|
+
|
76
71
|
provider_info = {
|
77
72
|
'name': provider_name,
|
78
73
|
'display_name': provider_name.title(),
|
@@ -85,7 +80,7 @@ class AdminWebhookViewSet(AdminReadOnlyViewSet):
|
|
85
80
|
'base_url': base_url
|
86
81
|
}
|
87
82
|
providers_data.append(provider_info)
|
88
|
-
|
83
|
+
|
89
84
|
# Add ngrok status to response
|
90
85
|
response_data = {
|
91
86
|
'providers': providers_data,
|
@@ -95,10 +90,10 @@ class AdminWebhookViewSet(AdminReadOnlyViewSet):
|
|
95
90
|
'webhook_urls': webhook_urls
|
96
91
|
}
|
97
92
|
}
|
98
|
-
|
93
|
+
|
99
94
|
serializer = self.get_serializer(response_data)
|
100
95
|
return Response(serializer.data)
|
101
|
-
|
96
|
+
|
102
97
|
@action(detail=False, methods=['get'])
|
103
98
|
def stats(self, request):
|
104
99
|
"""Get webhook statistics."""
|
@@ -107,7 +102,7 @@ class AdminWebhookViewSet(AdminReadOnlyViewSet):
|
|
107
102
|
recent_payments = UniversalPayment.objects.filter(
|
108
103
|
created_at__gte=timezone.now() - timedelta(days=7)
|
109
104
|
).count()
|
110
|
-
|
105
|
+
|
111
106
|
# Mock webhook stats based on real payment data
|
112
107
|
stats_data = {
|
113
108
|
'total': total_payments * 2, # Assume 2 events per payment on average
|
@@ -139,7 +134,7 @@ class AdminWebhookViewSet(AdminReadOnlyViewSet):
|
|
139
134
|
'avg_response_time': 150.5, # milliseconds
|
140
135
|
'max_response_time': 2500, # milliseconds
|
141
136
|
}
|
142
|
-
|
137
|
+
|
143
138
|
serializer = self.get_serializer(stats_data)
|
144
139
|
return Response(serializer.data)
|
145
140
|
|
@@ -151,7 +146,7 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
|
|
151
146
|
Provides listing, filtering, and actions for webhook events.
|
152
147
|
Requires admin permissions.
|
153
148
|
"""
|
154
|
-
|
149
|
+
|
155
150
|
# No model - using mock data for now
|
156
151
|
serializer_class = WebhookEventListSerializer
|
157
152
|
filter_backends = [SearchFilter, OrderingFilter]
|
@@ -159,38 +154,38 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
|
|
159
154
|
search_fields = ['event_type', 'webhook_url']
|
160
155
|
ordering_fields = ['timestamp', 'event_type', 'status']
|
161
156
|
ordering = ['-timestamp']
|
162
|
-
|
157
|
+
|
163
158
|
def __init__(self, **kwargs):
|
164
159
|
"""Initialize with webhook and ngrok services."""
|
165
160
|
super().__init__(**kwargs)
|
166
|
-
|
161
|
+
|
167
162
|
self.webhook_service = WebhookService()
|
168
163
|
self.get_webhook_urls = get_all_webhook_urls
|
169
164
|
self.get_base_url = get_api_base_url
|
170
165
|
self.is_ngrok_active = is_ngrok_available
|
171
|
-
|
166
|
+
|
172
167
|
def get_queryset(self):
|
173
168
|
"""Get webhook events queryset."""
|
174
169
|
# For now, return empty queryset since we're using mock data
|
175
170
|
# In real implementation, this would return WebhookEvent.objects.all()
|
176
171
|
return UniversalPayment.objects.none()
|
177
|
-
|
172
|
+
|
178
173
|
def list(self, request, webhook_pk=None):
|
179
174
|
"""List webhook events with filtering and pagination."""
|
180
175
|
# Get filter parameters
|
181
176
|
event_type = request.GET.get('event_type')
|
182
177
|
status_filter = request.GET.get('status')
|
183
178
|
provider = request.GET.get('provider')
|
184
|
-
|
179
|
+
|
185
180
|
# Get real payment data to generate realistic mock events
|
186
181
|
payments = UniversalPayment.objects.all()[:50] # Limit for performance
|
187
|
-
|
182
|
+
|
188
183
|
# Generate mock webhook events based on real payments
|
189
184
|
events = []
|
190
185
|
for i, payment in enumerate(payments):
|
191
186
|
# Create multiple events per payment
|
192
187
|
event_types = ['payment.created', 'payment.completed'] if payment.status == 'completed' else ['payment.created']
|
193
|
-
|
188
|
+
|
194
189
|
for event_type_name in event_types:
|
195
190
|
# Create payload for the event
|
196
191
|
payload = {
|
@@ -200,7 +195,7 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
|
|
200
195
|
'status': payment.status,
|
201
196
|
'timestamp': payment.created_at.isoformat()
|
202
197
|
}
|
203
|
-
|
198
|
+
|
204
199
|
event = {
|
205
200
|
'id': int(str(hash(f"{payment.id}_{event_type_name}_{i}"))[:8], 16),
|
206
201
|
'provider': payment.provider,
|
@@ -215,7 +210,7 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
|
|
215
210
|
'response_status_code': 200 if i % 5 != 0 else 500,
|
216
211
|
'webhook_url': self.get_webhook_urls().get(payment.provider, f"{self.get_base_url()}/api/webhooks/{payment.provider}/"),
|
217
212
|
}
|
218
|
-
|
213
|
+
|
219
214
|
# Apply filters
|
220
215
|
if event_type and event['event_type'] != event_type:
|
221
216
|
continue
|
@@ -223,20 +218,20 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
|
|
223
218
|
continue
|
224
219
|
if provider and event['provider'] != provider:
|
225
220
|
continue
|
226
|
-
|
221
|
+
|
227
222
|
events.append(event)
|
228
|
-
|
223
|
+
|
229
224
|
# Sort by timestamp descending (only if events exist)
|
230
225
|
if events:
|
231
226
|
events.sort(key=lambda x: x.get('timestamp', timezone.now()), reverse=True)
|
232
|
-
|
227
|
+
|
233
228
|
# Pagination
|
234
229
|
page_size = 20
|
235
230
|
page = int(request.GET.get('page', 1))
|
236
231
|
start = (page - 1) * page_size
|
237
232
|
end = start + page_size
|
238
233
|
paginated_events = events[start:end]
|
239
|
-
|
234
|
+
|
240
235
|
response_data = {
|
241
236
|
'events': paginated_events,
|
242
237
|
'total': len(events),
|
@@ -250,10 +245,10 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
|
|
250
245
|
'webhook_urls': self.get_webhook_urls()
|
251
246
|
}
|
252
247
|
}
|
253
|
-
|
248
|
+
|
254
249
|
serializer = self.get_serializer(response_data)
|
255
250
|
return Response(serializer.data)
|
256
|
-
|
251
|
+
|
257
252
|
@action(detail=True, methods=['post'])
|
258
253
|
def retry(self, request, pk=None):
|
259
254
|
"""Retry a failed webhook event."""
|
@@ -265,11 +260,11 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
|
|
265
260
|
'retry_count': 2,
|
266
261
|
'next_retry': timezone.now() + timedelta(minutes=5)
|
267
262
|
}
|
268
|
-
|
263
|
+
|
269
264
|
serializer = WebhookActionResultSerializer(result_data)
|
270
265
|
logger.info(f"Webhook event {pk} retry initiated by admin {request.user.id}")
|
271
266
|
return Response(serializer.data)
|
272
|
-
|
267
|
+
|
273
268
|
@action(detail=False, methods=['post'])
|
274
269
|
def clear_all(self, request):
|
275
270
|
"""Clear all webhook events."""
|
@@ -279,11 +274,11 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
|
|
279
274
|
'message': 'All webhook events cleared',
|
280
275
|
'cleared_count': 150, # Mock count
|
281
276
|
}
|
282
|
-
|
277
|
+
|
283
278
|
serializer = WebhookActionResultSerializer(result_data)
|
284
279
|
logger.info(f"All webhook events cleared by admin {request.user.id}")
|
285
280
|
return Response(serializer.data)
|
286
|
-
|
281
|
+
|
287
282
|
@action(detail=False, methods=['post'])
|
288
283
|
def retry_failed(self, request):
|
289
284
|
"""Retry all failed webhook events."""
|
@@ -291,13 +286,13 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
|
|
291
286
|
# In real implementation:
|
292
287
|
# failed_events = WebhookEvent.objects.filter(status='failed')
|
293
288
|
# results = [retry_webhook_event(event) for event in failed_events]
|
294
|
-
|
289
|
+
|
295
290
|
result_data = {
|
296
291
|
'success': True,
|
297
292
|
'message': 'All failed webhook events retry initiated',
|
298
293
|
'processed_count': 0, # Mock count
|
299
294
|
}
|
300
|
-
|
295
|
+
|
301
296
|
serializer = WebhookActionResultSerializer(result_data)
|
302
297
|
logger.info(f"All failed webhook events retry initiated by admin {request.user.id}")
|
303
298
|
return Response(serializer.data)
|
@@ -5,11 +5,11 @@ DRF ViewSets for public webhook functionality.
|
|
5
5
|
No authentication required.
|
6
6
|
"""
|
7
7
|
|
8
|
-
from
|
8
|
+
from django.utils import timezone
|
9
|
+
from rest_framework import status, viewsets
|
9
10
|
from rest_framework.decorators import action
|
10
|
-
from rest_framework.response import Response
|
11
11
|
from rest_framework.permissions import AllowAny
|
12
|
-
from
|
12
|
+
from rest_framework.response import Response
|
13
13
|
|
14
14
|
from django_cfg.apps.payments.admin_interface.serializers import WebhookStatsSerializer
|
15
15
|
from django_cfg.modules.django_logging import get_logger
|
@@ -24,10 +24,10 @@ class WebhookTestViewSet(viewsets.ViewSet):
|
|
24
24
|
Allows testing webhook endpoints without admin permissions.
|
25
25
|
Perfect for development and integration testing.
|
26
26
|
"""
|
27
|
-
|
27
|
+
|
28
28
|
permission_classes = [AllowAny] # Explicitly allow any user
|
29
29
|
serializer_class = WebhookStatsSerializer # For schema generation
|
30
|
-
|
30
|
+
|
31
31
|
@action(detail=False, methods=['post'])
|
32
32
|
def test(self, request):
|
33
33
|
"""
|
@@ -38,18 +38,18 @@ class WebhookTestViewSet(viewsets.ViewSet):
|
|
38
38
|
"""
|
39
39
|
webhook_url = request.data.get('webhook_url')
|
40
40
|
event_type = request.data.get('event_type')
|
41
|
-
|
41
|
+
|
42
42
|
if not webhook_url or not event_type:
|
43
43
|
return Response({
|
44
44
|
'success': False,
|
45
45
|
'error': 'webhook_url and event_type are required'
|
46
46
|
}, status=status.HTTP_400_BAD_REQUEST)
|
47
|
-
|
47
|
+
|
48
48
|
# TODO: In real implementation, send actual HTTP request to webhook_url
|
49
49
|
# For now, return mock success response
|
50
|
-
|
50
|
+
|
51
51
|
logger.info(f"Test webhook sent to {webhook_url} with event type {event_type}")
|
52
|
-
|
52
|
+
|
53
53
|
return Response({
|
54
54
|
'success': True,
|
55
55
|
'message': f'Test webhook sent to {webhook_url} with event type {event_type}',
|
@@ -4,17 +4,15 @@ Base ViewSet classes for Admin Interface API.
|
|
4
4
|
Common functionality for all admin interface ViewSets.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from rest_framework import viewsets, permissions, status
|
8
|
-
from rest_framework.decorators import action
|
9
|
-
from rest_framework.response import Response
|
10
|
-
from rest_framework.permissions import IsAdminUser
|
11
|
-
from django_filters.rest_framework import DjangoFilterBackend
|
12
|
-
from rest_framework.filters import SearchFilter, OrderingFilter
|
13
|
-
from django.contrib.admin.views.decorators import staff_member_required
|
14
|
-
from django.utils.decorators import method_decorator
|
15
|
-
from django.utils import timezone
|
16
7
|
from datetime import timedelta
|
17
8
|
|
9
|
+
from django.utils import timezone
|
10
|
+
from django_filters.rest_framework import DjangoFilterBackend
|
11
|
+
from rest_framework import viewsets
|
12
|
+
from rest_framework.decorators import action
|
13
|
+
from rest_framework.filters import OrderingFilter, SearchFilter
|
14
|
+
from rest_framework.permissions import IsAdminUser
|
15
|
+
from rest_framework.response import Response
|
18
16
|
|
19
17
|
from django_cfg.modules.django_logging import get_logger
|
20
18
|
|
@@ -27,14 +25,14 @@ class AdminBaseViewSet(viewsets.ModelViewSet):
|
|
27
25
|
|
28
26
|
Provides standard CRUD operations with admin-only access.
|
29
27
|
"""
|
30
|
-
|
28
|
+
|
31
29
|
permission_classes = [IsAdminUser]
|
32
30
|
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
33
31
|
ordering = ['-created_at']
|
34
|
-
|
32
|
+
|
35
33
|
# Serializer classes mapping for different actions
|
36
34
|
serializer_classes = {}
|
37
|
-
|
35
|
+
|
38
36
|
def get_queryset(self):
|
39
37
|
"""
|
40
38
|
Optimized queryset for admin interface.
|
@@ -42,20 +40,20 @@ class AdminBaseViewSet(viewsets.ModelViewSet):
|
|
42
40
|
Override in subclasses to add specific optimizations.
|
43
41
|
"""
|
44
42
|
queryset = super().get_queryset()
|
45
|
-
|
43
|
+
|
46
44
|
# Add common optimizations for admin
|
47
45
|
if hasattr(self.queryset.model, 'user'):
|
48
46
|
queryset = queryset.select_related('user')
|
49
|
-
|
47
|
+
|
50
48
|
return queryset
|
51
|
-
|
49
|
+
|
52
50
|
def get_serializer_class(self):
|
53
51
|
"""
|
54
52
|
Dynamic serializer selection based on action.
|
55
53
|
"""
|
56
54
|
serializer_classes = getattr(self, 'serializer_classes', {})
|
57
55
|
return serializer_classes.get(self.action, self.serializer_class)
|
58
|
-
|
56
|
+
|
59
57
|
def get_serializer_context(self):
|
60
58
|
"""Enhanced context for admin serializers."""
|
61
59
|
context = super().get_serializer_context()
|
@@ -64,7 +62,7 @@ class AdminBaseViewSet(viewsets.ModelViewSet):
|
|
64
62
|
'admin_user': self.request.user,
|
65
63
|
})
|
66
64
|
return context
|
67
|
-
|
65
|
+
|
68
66
|
@action(detail=False, methods=['get'])
|
69
67
|
def stats(self, request):
|
70
68
|
"""Get statistics for this resource."""
|
@@ -84,11 +82,11 @@ class AdminReadOnlyViewSet(viewsets.ReadOnlyModelViewSet):
|
|
84
82
|
|
85
83
|
For resources that should only be viewed, not modified.
|
86
84
|
"""
|
87
|
-
|
85
|
+
|
88
86
|
permission_classes = [IsAdminUser]
|
89
87
|
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
90
88
|
ordering = ['-created_at']
|
91
|
-
|
89
|
+
|
92
90
|
def get_serializer_context(self):
|
93
91
|
"""Enhanced context for admin serializers."""
|
94
92
|
context = super().get_serializer_context()
|
@@ -4,10 +4,10 @@ Admin Dashboard Template Views.
|
|
4
4
|
Django template views for admin dashboard interface.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from django.views.generic import TemplateView
|
8
|
-
from django.contrib.auth.mixins import LoginRequiredMixin
|
9
7
|
from django.contrib.admin.views.decorators import staff_member_required
|
8
|
+
from django.contrib.auth.mixins import LoginRequiredMixin
|
10
9
|
from django.utils.decorators import method_decorator
|
10
|
+
from django.views.generic import TemplateView
|
11
11
|
|
12
12
|
from .base import AdminTemplateViewMixin
|
13
13
|
|
@@ -19,20 +19,20 @@ class PaymentDashboardView(AdminTemplateViewMixin, LoginRequiredMixin, TemplateV
|
|
19
19
|
|
20
20
|
Displays overview of payments, webhooks, and system statistics.
|
21
21
|
"""
|
22
|
-
|
22
|
+
|
23
23
|
template_name = 'payments/payment_dashboard.html'
|
24
|
-
|
24
|
+
|
25
25
|
def get_context_data(self, **kwargs):
|
26
26
|
"""Add dashboard context data."""
|
27
27
|
context = super().get_context_data(**kwargs)
|
28
|
-
|
28
|
+
|
29
29
|
context.update({
|
30
30
|
'page_title': 'Payment Dashboard',
|
31
31
|
'page_subtitle': 'Overview of payment system activity',
|
32
32
|
'show_stats': True,
|
33
33
|
'auto_refresh': True,
|
34
34
|
})
|
35
|
-
|
35
|
+
|
36
36
|
return context
|
37
37
|
|
38
38
|
|
@@ -43,18 +43,18 @@ class WebhookDashboardView(AdminTemplateViewMixin, LoginRequiredMixin, TemplateV
|
|
43
43
|
|
44
44
|
Displays webhook events, provider status, and ngrok configuration.
|
45
45
|
"""
|
46
|
-
|
46
|
+
|
47
47
|
template_name = 'payments/webhook_dashboard.html'
|
48
|
-
|
48
|
+
|
49
49
|
def get_context_data(self, **kwargs):
|
50
50
|
"""Add webhook dashboard context data."""
|
51
51
|
context = super().get_context_data(**kwargs)
|
52
|
-
|
52
|
+
|
53
53
|
context.update({
|
54
54
|
'page_title': 'Webhook Dashboard',
|
55
55
|
'page_subtitle': 'Monitor and test webhook endpoints',
|
56
56
|
'show_ngrok_status': True,
|
57
57
|
'auto_refresh': True,
|
58
58
|
})
|
59
|
-
|
59
|
+
|
60
60
|
return context
|
@@ -4,15 +4,15 @@ Admin Form Template Views.
|
|
4
4
|
Django template views for payment forms and detail pages.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from django.views.generic import TemplateView, DetailView
|
8
|
-
from django.contrib.auth.mixins import LoginRequiredMixin
|
9
7
|
from django.contrib.admin.views.decorators import staff_member_required
|
8
|
+
from django.contrib.auth.mixins import LoginRequiredMixin
|
10
9
|
from django.utils.decorators import method_decorator
|
11
|
-
from django.
|
10
|
+
from django.views.generic import DetailView, TemplateView
|
12
11
|
|
13
|
-
from .base import AdminTemplateViewMixin
|
14
12
|
from django_cfg.apps.payments.models import UniversalPayment
|
15
13
|
|
14
|
+
from .base import AdminTemplateViewMixin
|
15
|
+
|
16
16
|
|
17
17
|
@method_decorator(staff_member_required, name='dispatch')
|
18
18
|
class PaymentFormView(AdminTemplateViewMixin, LoginRequiredMixin, TemplateView):
|
@@ -21,19 +21,19 @@ class PaymentFormView(AdminTemplateViewMixin, LoginRequiredMixin, TemplateView):
|
|
21
21
|
|
22
22
|
Displays form for creating new payments with provider selection.
|
23
23
|
"""
|
24
|
-
|
24
|
+
|
25
25
|
template_name = 'payments/payment_form.html'
|
26
|
-
|
26
|
+
|
27
27
|
def get_context_data(self, **kwargs):
|
28
28
|
"""Add form context data."""
|
29
29
|
context = super().get_context_data(**kwargs)
|
30
|
-
|
30
|
+
|
31
31
|
context.update({
|
32
32
|
'page_title': 'Create Payment',
|
33
33
|
'page_subtitle': 'Process a payment through the universal payment system',
|
34
34
|
'form_mode': 'create',
|
35
35
|
})
|
36
|
-
|
36
|
+
|
37
37
|
return context
|
38
38
|
|
39
39
|
|
@@ -44,33 +44,34 @@ class PaymentDetailView(AdminTemplateViewMixin, LoginRequiredMixin, DetailView):
|
|
44
44
|
|
45
45
|
Displays detailed information about a specific payment.
|
46
46
|
"""
|
47
|
-
|
47
|
+
|
48
48
|
model = UniversalPayment
|
49
49
|
template_name = 'payments/payment_detail.html'
|
50
50
|
context_object_name = 'payment'
|
51
|
-
|
51
|
+
|
52
52
|
def get_queryset(self):
|
53
53
|
"""Optimized queryset with related objects."""
|
54
54
|
return UniversalPayment.objects.select_related('user', 'currency', 'network')
|
55
|
-
|
55
|
+
|
56
56
|
def get_context_data(self, **kwargs):
|
57
57
|
"""Add detail context data."""
|
58
58
|
context = super().get_context_data(**kwargs)
|
59
|
-
|
59
|
+
|
60
60
|
payment = self.get_object()
|
61
|
-
|
61
|
+
|
62
62
|
# Force refresh from database to get latest data
|
63
63
|
payment.refresh_from_db()
|
64
|
-
|
64
|
+
|
65
65
|
context.update({
|
66
66
|
'payment': payment,
|
67
67
|
'page_title': f'Payment {payment.internal_payment_id or payment.id}',
|
68
|
-
'page_subtitle':
|
68
|
+
'page_subtitle': 'Payment details and transaction history',
|
69
69
|
'show_actions': True,
|
70
70
|
'can_cancel': payment.status in ['pending', 'confirming'],
|
71
71
|
'can_refund': payment.status == 'completed',
|
72
|
+
'payment_status_url': payment.get_payment_status_url(),
|
72
73
|
})
|
73
|
-
|
74
|
+
|
74
75
|
return context
|
75
76
|
|
76
77
|
|
@@ -81,18 +82,18 @@ class PaymentListView(AdminTemplateViewMixin, LoginRequiredMixin, TemplateView):
|
|
81
82
|
|
82
83
|
Displays paginated list of payments with filtering options.
|
83
84
|
"""
|
84
|
-
|
85
|
+
|
85
86
|
template_name = 'payments/payment_list.html'
|
86
|
-
|
87
|
+
|
87
88
|
def get_context_data(self, **kwargs):
|
88
89
|
"""Add list context data."""
|
89
90
|
context = super().get_context_data(**kwargs)
|
90
|
-
|
91
|
+
|
91
92
|
context.update({
|
92
93
|
'page_title': 'Payment List',
|
93
94
|
'page_subtitle': 'Manage and monitor all payments',
|
94
95
|
'show_filters': True,
|
95
96
|
'show_bulk_actions': True,
|
96
97
|
})
|
97
|
-
|
98
|
+
|
98
99
|
return context
|
django_cfg/apps/payments/apps.py
CHANGED
@@ -5,6 +5,7 @@ Simplified payment system focused on NowPayments with extensible architecture.
|
|
5
5
|
"""
|
6
6
|
|
7
7
|
from django.apps import AppConfig
|
8
|
+
|
8
9
|
from django_cfg.modules.django_logging import get_logger
|
9
10
|
|
10
11
|
logger = get_logger("payments")
|
@@ -12,22 +13,22 @@ logger = get_logger("payments")
|
|
12
13
|
|
13
14
|
class PaymentsConfig(AppConfig):
|
14
15
|
"""Payment system app configuration."""
|
15
|
-
|
16
|
+
|
16
17
|
default_auto_field = 'django.db.models.BigAutoField'
|
17
18
|
name = 'django_cfg.apps.payments'
|
18
19
|
verbose_name = 'Universal Payment System v2.0'
|
19
|
-
|
20
|
+
|
20
21
|
def ready(self):
|
21
22
|
"""Initialize payment system when Django starts."""
|
22
23
|
logger.info("Initializing Universal Payment System v2.0")
|
23
|
-
|
24
|
+
|
24
25
|
# Import signals to register them
|
25
26
|
try:
|
26
27
|
from . import signals # noqa: F401
|
27
28
|
logger.info("Payment signals registered successfully")
|
28
29
|
except ImportError as e:
|
29
30
|
logger.warning(f"Failed to import payment signals: {e}")
|
30
|
-
|
31
|
+
|
31
32
|
# Initialize provider registry
|
32
33
|
try:
|
33
34
|
from .services.providers.registry import get_provider_registry
|
@@ -35,7 +36,7 @@ class PaymentsConfig(AppConfig):
|
|
35
36
|
logger.info(f"Provider registry initialized with {len(registry.get_available_providers())} providers")
|
36
37
|
except Exception as e:
|
37
38
|
logger.error(f"Failed to initialize provider registry: {e}")
|
38
|
-
|
39
|
+
|
39
40
|
# Initialize cache services
|
40
41
|
try:
|
41
42
|
from .services.cache import get_cache_service
|
@@ -43,5 +44,5 @@ class PaymentsConfig(AppConfig):
|
|
43
44
|
logger.info("Cache service initialized successfully")
|
44
45
|
except Exception as e:
|
45
46
|
logger.warning(f"Cache service initialization failed: {e}")
|
46
|
-
|
47
|
+
|
47
48
|
logger.info("Universal Payment System v2.0 ready")
|
@@ -10,17 +10,17 @@ Provides unified configuration through BaseCfgAutoModule:
|
|
10
10
|
from .django_cfg_integration import (
|
11
11
|
PaymentsConfigManager,
|
12
12
|
PaymentsConfigMixin,
|
13
|
+
get_config_summary,
|
13
14
|
get_payments_config,
|
14
|
-
is_payments_enabled,
|
15
15
|
is_payments_configured,
|
16
|
-
|
16
|
+
is_payments_enabled,
|
17
17
|
reset_payments_config_cache,
|
18
18
|
)
|
19
19
|
|
20
20
|
# Configuration helpers
|
21
21
|
from .helpers import (
|
22
|
-
MiddlewareConfigHelper,
|
23
22
|
CacheConfigHelper,
|
23
|
+
MiddlewareConfigHelper,
|
24
24
|
RedisConfigHelper,
|
25
25
|
)
|
26
26
|
|
@@ -33,7 +33,7 @@ __all__ = [
|
|
33
33
|
'is_payments_configured',
|
34
34
|
'get_config_summary',
|
35
35
|
'reset_payments_config_cache',
|
36
|
-
|
36
|
+
|
37
37
|
# Configuration helpers
|
38
38
|
'MiddlewareConfigHelper',
|
39
39
|
'CacheConfigHelper',
|