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
@@ -4,34 +4,36 @@ Logging Configuration Model
|
|
4
4
|
Django logging settings with Pydantic 2.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from typing import Dict, Any, List, Optional
|
8
7
|
from pathlib import Path
|
8
|
+
from typing import Any, Dict, List, Optional
|
9
|
+
|
9
10
|
from pydantic import Field, field_validator
|
11
|
+
|
10
12
|
from ..base import BaseConfig
|
11
13
|
|
12
14
|
|
13
15
|
class LoggerConfig(BaseConfig):
|
14
16
|
"""Configuration for a single logger."""
|
15
|
-
|
17
|
+
|
16
18
|
name: str = Field(
|
17
19
|
description="Logger name"
|
18
20
|
)
|
19
|
-
|
21
|
+
|
20
22
|
level: str = Field(
|
21
23
|
default="INFO",
|
22
24
|
description="Log level"
|
23
25
|
)
|
24
|
-
|
26
|
+
|
25
27
|
handlers: List[str] = Field(
|
26
28
|
default_factory=list,
|
27
29
|
description="Handler names for this logger"
|
28
30
|
)
|
29
|
-
|
31
|
+
|
30
32
|
propagate: bool = Field(
|
31
33
|
default=True,
|
32
34
|
description="Whether to propagate to parent loggers"
|
33
35
|
)
|
34
|
-
|
36
|
+
|
35
37
|
@field_validator('level')
|
36
38
|
@classmethod
|
37
39
|
def validate_level(cls, v: str) -> str:
|
@@ -44,40 +46,40 @@ class LoggerConfig(BaseConfig):
|
|
44
46
|
|
45
47
|
class HandlerConfig(BaseConfig):
|
46
48
|
"""Configuration for a log handler."""
|
47
|
-
|
49
|
+
|
48
50
|
name: str = Field(
|
49
51
|
description="Handler name"
|
50
52
|
)
|
51
|
-
|
53
|
+
|
52
54
|
class_name: str = Field(
|
53
55
|
description="Handler class"
|
54
56
|
)
|
55
|
-
|
57
|
+
|
56
58
|
level: str = Field(
|
57
|
-
default="INFO",
|
59
|
+
default="INFO",
|
58
60
|
description="Handler log level"
|
59
61
|
)
|
60
|
-
|
62
|
+
|
61
63
|
formatter: str = Field(
|
62
64
|
default="verbose",
|
63
65
|
description="Formatter name"
|
64
66
|
)
|
65
|
-
|
67
|
+
|
66
68
|
filename: Optional[str] = Field(
|
67
69
|
default=None,
|
68
70
|
description="Log file path (for file handlers)"
|
69
71
|
)
|
70
|
-
|
72
|
+
|
71
73
|
max_bytes: int = Field(
|
72
74
|
default=10485760, # 10MB
|
73
75
|
description="Max bytes for rotating file handler"
|
74
76
|
)
|
75
|
-
|
77
|
+
|
76
78
|
backup_count: int = Field(
|
77
79
|
default=5,
|
78
80
|
description="Backup count for rotating file handler"
|
79
81
|
)
|
80
|
-
|
82
|
+
|
81
83
|
@field_validator('level')
|
82
84
|
@classmethod
|
83
85
|
def validate_level(cls, v: str) -> str:
|
@@ -90,15 +92,15 @@ class HandlerConfig(BaseConfig):
|
|
90
92
|
|
91
93
|
class FormatterConfig(BaseConfig):
|
92
94
|
"""Configuration for a log formatter."""
|
93
|
-
|
95
|
+
|
94
96
|
name: str = Field(
|
95
97
|
description="Formatter name"
|
96
98
|
)
|
97
|
-
|
99
|
+
|
98
100
|
format_string: str = Field(
|
99
101
|
description="Log format string"
|
100
102
|
)
|
101
|
-
|
103
|
+
|
102
104
|
date_format: Optional[str] = Field(
|
103
105
|
default=None,
|
104
106
|
description="Date format string"
|
@@ -112,79 +114,79 @@ class LoggingConfig(BaseConfig):
|
|
112
114
|
Complete logging configuration with formatters, handlers,
|
113
115
|
and loggers for Django applications.
|
114
116
|
"""
|
115
|
-
|
117
|
+
|
116
118
|
# Global settings
|
117
119
|
version: int = Field(
|
118
120
|
default=1,
|
119
121
|
description="Logging config version"
|
120
122
|
)
|
121
|
-
|
123
|
+
|
122
124
|
disable_existing_loggers: bool = Field(
|
123
125
|
default=False,
|
124
126
|
description="Disable existing loggers"
|
125
127
|
)
|
126
|
-
|
128
|
+
|
127
129
|
# Log level settings
|
128
130
|
root_level: str = Field(
|
129
131
|
default="INFO",
|
130
132
|
description="Root logger level"
|
131
133
|
)
|
132
|
-
|
134
|
+
|
133
135
|
django_level: str = Field(
|
134
136
|
default="INFO",
|
135
137
|
description="Django logger level"
|
136
138
|
)
|
137
|
-
|
139
|
+
|
138
140
|
# File settings
|
139
141
|
log_dir: Optional[str] = Field(
|
140
142
|
default=None,
|
141
143
|
description="Directory for log files"
|
142
144
|
)
|
143
|
-
|
145
|
+
|
144
146
|
# Console settings
|
145
147
|
console_enabled: bool = Field(
|
146
148
|
default=True,
|
147
149
|
description="Enable console logging"
|
148
150
|
)
|
149
|
-
|
151
|
+
|
150
152
|
# File logging settings
|
151
153
|
file_enabled: bool = Field(
|
152
154
|
default=True,
|
153
155
|
description="Enable file logging"
|
154
156
|
)
|
155
|
-
|
157
|
+
|
156
158
|
# Rotating file settings
|
157
159
|
rotating_enabled: bool = Field(
|
158
160
|
default=True,
|
159
161
|
description="Enable rotating file logging"
|
160
162
|
)
|
161
|
-
|
163
|
+
|
162
164
|
max_file_size: int = Field(
|
163
165
|
default=10485760, # 10MB
|
164
166
|
description="Maximum log file size in bytes"
|
165
167
|
)
|
166
|
-
|
168
|
+
|
167
169
|
backup_count: int = Field(
|
168
170
|
default=5,
|
169
171
|
description="Number of backup log files to keep"
|
170
172
|
)
|
171
|
-
|
173
|
+
|
172
174
|
# Custom loggers, handlers, formatters
|
173
175
|
custom_loggers: List[LoggerConfig] = Field(
|
174
176
|
default_factory=list,
|
175
177
|
description="Custom logger configurations"
|
176
178
|
)
|
177
|
-
|
179
|
+
|
178
180
|
custom_handlers: List[HandlerConfig] = Field(
|
179
181
|
default_factory=list,
|
180
182
|
description="Custom handler configurations"
|
181
183
|
)
|
182
|
-
|
184
|
+
|
183
185
|
custom_formatters: List[FormatterConfig] = Field(
|
184
186
|
default_factory=list,
|
185
187
|
description="Custom formatter configurations"
|
186
188
|
)
|
187
|
-
|
189
|
+
|
188
190
|
@field_validator('root_level', 'django_level')
|
189
191
|
@classmethod
|
190
192
|
def validate_levels(cls, v: str) -> str:
|
@@ -193,15 +195,15 @@ class LoggingConfig(BaseConfig):
|
|
193
195
|
if v.upper() not in valid_levels:
|
194
196
|
raise ValueError(f"Log level must be one of: {valid_levels}")
|
195
197
|
return v.upper()
|
196
|
-
|
198
|
+
|
197
199
|
def get_log_directory(self) -> Path:
|
198
200
|
"""Get log directory path."""
|
199
201
|
if self.log_dir:
|
200
202
|
return Path(self.log_dir)
|
201
|
-
|
203
|
+
|
202
204
|
# Default to logs/ in current directory
|
203
205
|
return Path.cwd() / "logs"
|
204
|
-
|
206
|
+
|
205
207
|
def get_default_formatters(self) -> Dict[str, Any]:
|
206
208
|
"""Get default log formatters."""
|
207
209
|
formatters = {
|
@@ -220,7 +222,7 @@ class LoggingConfig(BaseConfig):
|
|
220
222
|
'datefmt': '%Y-%m-%d %H:%M:%S',
|
221
223
|
},
|
222
224
|
}
|
223
|
-
|
225
|
+
|
224
226
|
# Add custom formatters
|
225
227
|
for formatter in self.custom_formatters:
|
226
228
|
formatters[formatter.name] = {
|
@@ -229,13 +231,13 @@ class LoggingConfig(BaseConfig):
|
|
229
231
|
}
|
230
232
|
if formatter.date_format:
|
231
233
|
formatters[formatter.name]['datefmt'] = formatter.date_format
|
232
|
-
|
234
|
+
|
233
235
|
return formatters
|
234
|
-
|
236
|
+
|
235
237
|
def get_default_handlers(self) -> Dict[str, Any]:
|
236
238
|
"""Get default log handlers."""
|
237
239
|
handlers = {}
|
238
|
-
|
240
|
+
|
239
241
|
# Console handler
|
240
242
|
if self.console_enabled:
|
241
243
|
handlers['console'] = {
|
@@ -243,24 +245,24 @@ class LoggingConfig(BaseConfig):
|
|
243
245
|
'class': 'logging.StreamHandler',
|
244
246
|
'formatter': 'simple',
|
245
247
|
}
|
246
|
-
|
248
|
+
|
247
249
|
# File handler
|
248
250
|
if self.file_enabled:
|
249
251
|
log_dir = self.get_log_directory()
|
250
252
|
log_dir.mkdir(exist_ok=True)
|
251
|
-
|
253
|
+
|
252
254
|
handlers['file'] = {
|
253
255
|
'level': 'INFO',
|
254
256
|
'class': 'logging.FileHandler',
|
255
257
|
'filename': str(log_dir / 'django.log'),
|
256
258
|
'formatter': 'verbose',
|
257
259
|
}
|
258
|
-
|
260
|
+
|
259
261
|
# Rotating file handler
|
260
262
|
if self.rotating_enabled:
|
261
263
|
log_dir = self.get_log_directory()
|
262
264
|
log_dir.mkdir(exist_ok=True)
|
263
|
-
|
265
|
+
|
264
266
|
handlers['rotating_file'] = {
|
265
267
|
'level': 'INFO',
|
266
268
|
'class': 'logging.handlers.RotatingFileHandler',
|
@@ -269,19 +271,19 @@ class LoggingConfig(BaseConfig):
|
|
269
271
|
'backupCount': self.backup_count,
|
270
272
|
'formatter': 'verbose',
|
271
273
|
}
|
272
|
-
|
274
|
+
|
273
275
|
# Error file handler
|
274
276
|
if self.file_enabled:
|
275
277
|
log_dir = self.get_log_directory()
|
276
278
|
log_dir.mkdir(exist_ok=True)
|
277
|
-
|
279
|
+
|
278
280
|
handlers['error_file'] = {
|
279
281
|
'level': 'ERROR',
|
280
282
|
'class': 'logging.FileHandler',
|
281
283
|
'filename': str(log_dir / 'django_errors.log'),
|
282
284
|
'formatter': 'verbose',
|
283
285
|
}
|
284
|
-
|
286
|
+
|
285
287
|
# Add custom handlers
|
286
288
|
for handler in self.custom_handlers:
|
287
289
|
handler_config = {
|
@@ -289,18 +291,18 @@ class LoggingConfig(BaseConfig):
|
|
289
291
|
'class': handler.class_name,
|
290
292
|
'formatter': handler.formatter,
|
291
293
|
}
|
292
|
-
|
294
|
+
|
293
295
|
if handler.filename:
|
294
296
|
handler_config['filename'] = handler.filename
|
295
|
-
|
297
|
+
|
296
298
|
if 'RotatingFileHandler' in handler.class_name:
|
297
299
|
handler_config['maxBytes'] = handler.max_bytes
|
298
300
|
handler_config['backupCount'] = handler.backup_count
|
299
|
-
|
301
|
+
|
300
302
|
handlers[handler.name] = handler_config
|
301
|
-
|
303
|
+
|
302
304
|
return handlers
|
303
|
-
|
305
|
+
|
304
306
|
def get_default_loggers(self) -> Dict[str, Any]:
|
305
307
|
"""Get default logger configurations."""
|
306
308
|
# Determine available handlers
|
@@ -311,7 +313,7 @@ class LoggingConfig(BaseConfig):
|
|
311
313
|
available_handlers.extend(['file', 'error_file'])
|
312
314
|
if self.rotating_enabled:
|
313
315
|
available_handlers.append('rotating_file')
|
314
|
-
|
316
|
+
|
315
317
|
loggers = {
|
316
318
|
'django': {
|
317
319
|
'handlers': available_handlers,
|
@@ -329,7 +331,7 @@ class LoggingConfig(BaseConfig):
|
|
329
331
|
'propagate': False,
|
330
332
|
},
|
331
333
|
}
|
332
|
-
|
334
|
+
|
333
335
|
# Add custom loggers
|
334
336
|
for logger in self.custom_loggers:
|
335
337
|
loggers[logger.name] = {
|
@@ -337,9 +339,9 @@ class LoggingConfig(BaseConfig):
|
|
337
339
|
'level': logger.level,
|
338
340
|
'propagate': logger.propagate,
|
339
341
|
}
|
340
|
-
|
342
|
+
|
341
343
|
return loggers
|
342
|
-
|
344
|
+
|
343
345
|
def to_django_settings(self) -> Dict[str, Any]:
|
344
346
|
"""Convert to Django LOGGING setting."""
|
345
347
|
# Determine root handlers
|
@@ -348,7 +350,7 @@ class LoggingConfig(BaseConfig):
|
|
348
350
|
root_handlers.append('console')
|
349
351
|
if self.file_enabled:
|
350
352
|
root_handlers.append('file')
|
351
|
-
|
353
|
+
|
352
354
|
logging_config = {
|
353
355
|
'version': self.version,
|
354
356
|
'disable_existing_loggers': self.disable_existing_loggers,
|
@@ -360,7 +362,7 @@ class LoggingConfig(BaseConfig):
|
|
360
362
|
},
|
361
363
|
'loggers': self.get_default_loggers(),
|
362
364
|
}
|
363
|
-
|
365
|
+
|
364
366
|
return {
|
365
367
|
'LOGGING': logging_config
|
366
368
|
}
|
@@ -4,8 +4,10 @@ Security Configuration Model
|
|
4
4
|
Django security settings with Pydantic 2.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from typing import
|
7
|
+
from typing import Any, Dict, List
|
8
|
+
|
8
9
|
from pydantic import Field, field_validator
|
10
|
+
|
9
11
|
from ..base import BaseConfig
|
10
12
|
|
11
13
|
|
@@ -16,7 +18,7 @@ class SecurityConfig(BaseConfig):
|
|
16
18
|
Handles CORS, CSRF, SSL, sessions, and other security configurations
|
17
19
|
with environment-aware defaults.
|
18
20
|
"""
|
19
|
-
|
21
|
+
|
20
22
|
# CORS settings
|
21
23
|
cors_enabled: bool = Field(default=True, description="Enable CORS support")
|
22
24
|
cors_allow_all_origins: bool = Field(default=False, description="Allow all origins (dev only)")
|
@@ -25,7 +27,7 @@ class SecurityConfig(BaseConfig):
|
|
25
27
|
cors_allow_headers: List[str] = Field(
|
26
28
|
default_factory=lambda: [
|
27
29
|
"accept",
|
28
|
-
"accept-encoding",
|
30
|
+
"accept-encoding",
|
29
31
|
"authorization",
|
30
32
|
"content-type",
|
31
33
|
"dnt",
|
@@ -36,21 +38,21 @@ class SecurityConfig(BaseConfig):
|
|
36
38
|
],
|
37
39
|
description="CORS allowed headers with common defaults for API usage",
|
38
40
|
)
|
39
|
-
|
41
|
+
|
40
42
|
# CSRF settings
|
41
43
|
csrf_enabled: bool = Field(default=True, description="Enable CSRF protection")
|
42
44
|
csrf_trusted_origins: List[str] = Field(default_factory=list, description="CSRF trusted origins")
|
43
45
|
csrf_cookie_secure: bool = Field(default=False, description="Secure CSRF cookies")
|
44
|
-
|
46
|
+
|
45
47
|
# SSL/HTTPS settings
|
46
48
|
ssl_redirect: bool = Field(default=False, description="Redirect HTTP to HTTPS")
|
47
49
|
hsts_enabled: bool = Field(default=False, description="Enable HTTP Strict Transport Security")
|
48
50
|
hsts_max_age: int = Field(default=31536000, description="HSTS max age in seconds")
|
49
|
-
|
51
|
+
|
50
52
|
# Session settings
|
51
53
|
session_cookie_secure: bool = Field(default=False, description="Secure session cookies")
|
52
54
|
session_cookie_age: int = Field(default=86400, description="Session cookie age in seconds")
|
53
|
-
|
55
|
+
|
54
56
|
# Production domains for auto-configuration
|
55
57
|
production_domains: List[str] = Field(
|
56
58
|
default_factory=lambda: [
|
@@ -60,7 +62,7 @@ class SecurityConfig(BaseConfig):
|
|
60
62
|
],
|
61
63
|
description="Production domains for security configuration"
|
62
64
|
)
|
63
|
-
|
65
|
+
|
64
66
|
@field_validator('hsts_max_age')
|
65
67
|
@classmethod
|
66
68
|
def validate_hsts_max_age(cls, v: int) -> int:
|
@@ -68,7 +70,7 @@ class SecurityConfig(BaseConfig):
|
|
68
70
|
if v < 0:
|
69
71
|
raise ValueError("HSTS max age must be non-negative")
|
70
72
|
return v
|
71
|
-
|
73
|
+
|
72
74
|
def configure_for_production(self) -> None:
|
73
75
|
"""Configure security settings for production."""
|
74
76
|
self.cors_allow_all_origins = False
|
@@ -78,7 +80,7 @@ class SecurityConfig(BaseConfig):
|
|
78
80
|
self.ssl_redirect = True
|
79
81
|
self.hsts_enabled = True
|
80
82
|
self.session_cookie_secure = True
|
81
|
-
|
83
|
+
|
82
84
|
def configure_for_development(self) -> None:
|
83
85
|
"""
|
84
86
|
Configure security settings for development.
|
@@ -91,39 +93,39 @@ class SecurityConfig(BaseConfig):
|
|
91
93
|
self.cors_allow_all_origins = True
|
92
94
|
self.cors_allowed_origins = []
|
93
95
|
self.csrf_cookie_secure = False
|
94
|
-
|
96
|
+
|
95
97
|
# Common development origins for CSRF
|
96
98
|
# Note: CORS_ALLOW_ALL_ORIGINS doesn't affect CSRF - it needs explicit origins
|
97
99
|
|
98
100
|
# function smart diapason for dev ports
|
99
101
|
def smart_diapason(start: int, end: int) -> List[str]:
|
100
102
|
return [f'http://localhost:{i}' for i in range(start, end)]
|
101
|
-
|
103
|
+
|
102
104
|
dev_local_origins = [
|
103
105
|
'http://localhost:3000',
|
104
106
|
'http://localhost:8000',
|
105
107
|
'http://127.0.0.1:3000',
|
106
108
|
'http://127.0.0.1:8000',
|
107
109
|
] + smart_diapason(3000, 3010) + smart_diapason(8000, 8010)
|
108
|
-
|
110
|
+
|
109
111
|
# Combine dev defaults with existing trusted origins (from security_domains)
|
110
112
|
# Remove duplicates while preserving order
|
111
113
|
combined = dev_local_origins + self.csrf_trusted_origins
|
112
|
-
|
114
|
+
|
113
115
|
# unique and sorted
|
114
116
|
combined_unique = list(dict.fromkeys(combined))
|
115
117
|
combined_unique.sort()
|
116
118
|
|
117
119
|
self.csrf_trusted_origins = combined_unique
|
118
|
-
|
120
|
+
|
119
121
|
self.ssl_redirect = False
|
120
122
|
self.hsts_enabled = False
|
121
123
|
self.session_cookie_secure = False
|
122
|
-
|
124
|
+
|
123
125
|
def to_django_settings(self) -> Dict[str, Any]:
|
124
126
|
"""Convert to Django security settings."""
|
125
127
|
settings = {}
|
126
|
-
|
128
|
+
|
127
129
|
# CORS settings
|
128
130
|
if self.cors_enabled:
|
129
131
|
settings.update({
|
@@ -132,27 +134,27 @@ class SecurityConfig(BaseConfig):
|
|
132
134
|
'CORS_ALLOW_CREDENTIALS': self.cors_allow_credentials,
|
133
135
|
'CORS_ALLOW_HEADERS': self.cors_allow_headers,
|
134
136
|
})
|
135
|
-
|
137
|
+
|
136
138
|
# Add corsheaders to middleware if not present
|
137
139
|
# This will be handled by the main DjangoConfig
|
138
|
-
|
140
|
+
|
139
141
|
# CSRF settings
|
140
142
|
settings.update({
|
141
143
|
'CSRF_TRUSTED_ORIGINS': self.csrf_trusted_origins,
|
142
144
|
'CSRF_COOKIE_SECURE': self.csrf_cookie_secure,
|
143
145
|
})
|
144
|
-
|
146
|
+
|
145
147
|
# SSL/HTTPS settings
|
146
148
|
if self.ssl_redirect:
|
147
149
|
settings['SECURE_SSL_REDIRECT'] = True
|
148
|
-
|
150
|
+
|
149
151
|
if self.hsts_enabled:
|
150
152
|
settings.update({
|
151
153
|
'SECURE_HSTS_SECONDS': self.hsts_max_age,
|
152
154
|
'SECURE_HSTS_INCLUDE_SUBDOMAINS': True,
|
153
155
|
'SECURE_HSTS_PRELOAD': True,
|
154
156
|
})
|
155
|
-
|
157
|
+
|
156
158
|
# Session settings
|
157
159
|
settings.update({
|
158
160
|
'SESSION_COOKIE_SECURE': self.session_cookie_secure,
|
@@ -160,12 +162,12 @@ class SecurityConfig(BaseConfig):
|
|
160
162
|
'SESSION_COOKIE_HTTPONLY': True,
|
161
163
|
'SESSION_COOKIE_SAMESITE': 'Lax',
|
162
164
|
})
|
163
|
-
|
165
|
+
|
164
166
|
# Additional security headers
|
165
167
|
settings.update({
|
166
168
|
'SECURE_CONTENT_TYPE_NOSNIFF': True,
|
167
169
|
'SECURE_BROWSER_XSS_FILTER': True,
|
168
170
|
'X_FRAME_OPTIONS': 'DENY',
|
169
171
|
})
|
170
|
-
|
172
|
+
|
171
173
|
return settings
|
django_cfg/models/ngrok/auth.py
CHANGED
@@ -5,9 +5,10 @@ Simplified flat structure - only essential fields.
|
|
5
5
|
Domain and schemes are auto-determined from api_url in config.
|
6
6
|
"""
|
7
7
|
|
8
|
-
from typing import Optional, List
|
9
|
-
from pydantic import BaseModel, Field, field_validator
|
10
8
|
import os
|
9
|
+
from typing import List, Optional
|
10
|
+
|
11
|
+
from pydantic import BaseModel, Field, field_validator
|
11
12
|
|
12
13
|
|
13
14
|
class NgrokConfig(BaseModel):
|
@@ -8,8 +8,8 @@ Provides type-safe configuration for payment providers and API keys:
|
|
8
8
|
- NowPaymentsProviderConfig: NowPayments provider
|
9
9
|
"""
|
10
10
|
|
11
|
-
from .config import PaymentsConfig
|
12
11
|
from .api_keys import ProviderAPIKeysConfig
|
12
|
+
from .config import PaymentsConfig
|
13
13
|
from .providers import BaseProviderConfig, NowPaymentsProviderConfig
|
14
14
|
|
15
15
|
__all__ = [
|
@@ -4,9 +4,12 @@ Main payments configuration for django_cfg.
|
|
4
4
|
Payments app configuration with middleware, rate limiting, and usage tracking.
|
5
5
|
"""
|
6
6
|
|
7
|
+
from typing import Dict, List
|
8
|
+
|
7
9
|
from pydantic import BaseModel, Field
|
8
|
-
|
10
|
+
|
9
11
|
from django_cfg.models.base import BaseCfgAutoModule
|
12
|
+
|
10
13
|
from .api_keys import ProviderAPIKeysConfig
|
11
14
|
|
12
15
|
|
@@ -2,9 +2,10 @@
|
|
2
2
|
Base provider configuration for payment providers.
|
3
3
|
"""
|
4
4
|
|
5
|
-
from pydantic import BaseModel, Field
|
6
5
|
from typing import Dict
|
7
6
|
|
7
|
+
from pydantic import BaseModel, Field
|
8
|
+
|
8
9
|
|
9
10
|
class BaseProviderConfig(BaseModel):
|
10
11
|
"""Base configuration for payment providers."""
|
@@ -7,9 +7,9 @@ Provides type-safe configuration for various services:
|
|
7
7
|
- ServiceConfig: Generic service configuration
|
8
8
|
"""
|
9
9
|
|
10
|
+
from .base import ServiceConfig
|
10
11
|
from .email import EmailConfig
|
11
12
|
from .telegram import TelegramConfig
|
12
|
-
from .base import ServiceConfig
|
13
13
|
|
14
14
|
__all__ = [
|
15
15
|
"EmailConfig",
|