django-cfg 1.4.21__py3-none-any.whl ā 1.4.24__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- django_cfg/__init__.py +4 -4
- django_cfg/apps/accounts/__init__.py +1 -1
- django_cfg/apps/accounts/__models.py +30 -29
- django_cfg/apps/accounts/admin/__init__.py +14 -3
- django_cfg/apps/accounts/admin/activity_admin.py +19 -19
- django_cfg/apps/accounts/admin/filters.py +7 -6
- django_cfg/apps/accounts/admin/group_admin.py +10 -16
- django_cfg/apps/accounts/admin/inlines.py +21 -19
- django_cfg/apps/accounts/admin/otp_admin.py +12 -12
- django_cfg/apps/accounts/admin/registration_admin.py +24 -24
- django_cfg/apps/accounts/admin/resources.py +49 -48
- django_cfg/apps/accounts/admin/twilio_admin.py +37 -37
- django_cfg/apps/accounts/admin/user_admin.py +45 -41
- django_cfg/apps/accounts/management/commands/otp_test.py +11 -11
- django_cfg/apps/accounts/managers/__init__.py +1 -1
- django_cfg/apps/accounts/managers/user_manager.py +6 -7
- django_cfg/apps/accounts/migrations/0001_initial.py +3 -2
- django_cfg/apps/accounts/models/__init__.py +15 -16
- django_cfg/apps/accounts/models/activity.py +5 -5
- django_cfg/apps/accounts/models/integrations.py +15 -15
- django_cfg/apps/accounts/models/registration.py +3 -2
- django_cfg/apps/accounts/models/user.py +3 -2
- django_cfg/apps/accounts/serializers/__init__.py +10 -3
- django_cfg/apps/accounts/serializers/otp.py +5 -4
- django_cfg/apps/accounts/serializers/profile.py +4 -5
- django_cfg/apps/accounts/serializers/webhook.py +13 -13
- django_cfg/apps/accounts/services/activity_service.py +13 -12
- django_cfg/apps/accounts/services/otp_service.py +16 -14
- django_cfg/apps/accounts/signals.py +18 -16
- django_cfg/apps/accounts/urls.py +10 -5
- django_cfg/apps/accounts/utils/notifications.py +22 -22
- django_cfg/apps/accounts/views/__init__.py +1 -1
- django_cfg/apps/accounts/views/otp.py +15 -14
- django_cfg/apps/accounts/views/profile.py +14 -10
- django_cfg/apps/accounts/views/webhook.py +46 -48
- django_cfg/apps/agents/__init__.py +3 -3
- django_cfg/apps/agents/admin/__init__.py +1 -1
- django_cfg/apps/agents/admin/execution_admin.py +68 -72
- django_cfg/apps/agents/admin/registry_admin.py +50 -54
- django_cfg/apps/agents/admin/toolsets_admin.py +63 -67
- django_cfg/apps/agents/apps.py +3 -3
- django_cfg/apps/agents/core/__init__.py +4 -4
- django_cfg/apps/agents/core/dependencies.py +24 -23
- django_cfg/apps/agents/core/django_agent.py +41 -39
- django_cfg/apps/agents/core/exceptions.py +12 -12
- django_cfg/apps/agents/core/models.py +16 -15
- django_cfg/apps/agents/core/orchestrator.py +58 -58
- django_cfg/apps/agents/examples/simple_example.py +24 -19
- django_cfg/apps/agents/integration/__init__.py +1 -1
- django_cfg/apps/agents/integration/middleware.py +12 -11
- django_cfg/apps/agents/integration/registry.py +52 -49
- django_cfg/apps/agents/integration/signals.py +5 -5
- django_cfg/apps/agents/management/commands/create_agent.py +39 -38
- django_cfg/apps/agents/management/commands/orchestrator_status.py +40 -39
- django_cfg/apps/agents/managers/__init__.py +8 -3
- django_cfg/apps/agents/managers/execution.py +42 -41
- django_cfg/apps/agents/managers/registry.py +40 -39
- django_cfg/apps/agents/managers/toolsets.py +87 -86
- django_cfg/apps/agents/migrations/0001_initial.py +2 -1
- django_cfg/apps/agents/models/__init__.py +2 -2
- django_cfg/apps/agents/models/execution.py +43 -42
- django_cfg/apps/agents/models/registry.py +46 -45
- django_cfg/apps/agents/models/toolsets.py +63 -62
- django_cfg/apps/agents/patterns/__init__.py +5 -5
- django_cfg/apps/agents/patterns/content_agents.py +17 -16
- django_cfg/apps/agents/toolsets/__init__.py +3 -3
- django_cfg/apps/agents/toolsets/cache_toolset.py +56 -55
- django_cfg/apps/agents/toolsets/django_toolset.py +43 -42
- django_cfg/apps/agents/toolsets/file_toolset.py +64 -63
- django_cfg/apps/agents/toolsets/orm_toolset.py +75 -74
- django_cfg/apps/agents/urls.py +3 -2
- django_cfg/apps/api/commands/urls.py +1 -0
- django_cfg/apps/api/commands/views.py +23 -26
- django_cfg/apps/api/endpoints/checker.py +5 -4
- django_cfg/apps/api/endpoints/drf_views.py +2 -2
- django_cfg/apps/api/endpoints/tests.py +6 -5
- django_cfg/apps/api/endpoints/urls.py +2 -1
- django_cfg/apps/api/endpoints/views.py +1 -0
- django_cfg/apps/api/health/drf_views.py +6 -6
- django_cfg/apps/api/health/urls.py +2 -1
- django_cfg/apps/api/health/views.py +41 -41
- django_cfg/{modules/django_ipc_client ā apps/ipc}/__init__.py +6 -6
- django_cfg/apps/ipc/apps.py +28 -0
- django_cfg/apps/ipc/serializers/__init__.py +19 -0
- django_cfg/apps/ipc/serializers/serializers.py +229 -0
- django_cfg/apps/ipc/services/__init__.py +7 -0
- django_cfg/apps/ipc/services/client/__init__.py +23 -0
- django_cfg/{modules/django_ipc_client ā apps/ipc/services/client}/client.py +7 -6
- django_cfg/{modules/django_ipc_client ā apps/ipc/services/client}/exceptions.py +1 -1
- django_cfg/{modules/django_ipc_client/dashboard ā apps/ipc/services}/monitor.py +36 -7
- django_cfg/{modules/django_ipc_client/dashboard/static/django_ipc_dashboard/js/dashboard.js ā apps/ipc/static/django_cfg_ipc/js/dashboard.mjs} +131 -63
- django_cfg/{modules/django_ipc_client/dashboard/templates/django_ipc_dashboard ā apps/ipc/templates/django_cfg_ipc}/base.html +5 -10
- django_cfg/apps/ipc/templates/django_cfg_ipc/dashboard.html +202 -0
- django_cfg/apps/ipc/urls.py +21 -0
- django_cfg/apps/ipc/urls_admin.py +20 -0
- django_cfg/apps/ipc/views/__init__.py +8 -0
- django_cfg/apps/ipc/views/dashboard.py +15 -0
- django_cfg/apps/ipc/views/viewsets.py +245 -0
- django_cfg/apps/knowbase/admin/__init__.py +2 -2
- django_cfg/apps/knowbase/admin/actions/__init__.py +1 -1
- django_cfg/apps/knowbase/admin/actions/visibility_actions.py +2 -1
- django_cfg/apps/knowbase/admin/archive_admin.py +81 -84
- django_cfg/apps/knowbase/admin/chat_admin.py +70 -72
- django_cfg/apps/knowbase/admin/document_admin.py +10 -11
- django_cfg/apps/knowbase/admin/external_data_admin.py +69 -71
- django_cfg/apps/knowbase/admin/helpers/__init__.py +1 -1
- django_cfg/apps/knowbase/admin/helpers/configs.py +2 -2
- django_cfg/apps/knowbase/admin/helpers/statistics.py +1 -1
- django_cfg/apps/knowbase/apps.py +13 -13
- django_cfg/apps/knowbase/config/__init__.py +7 -6
- django_cfg/apps/knowbase/config/constance_fields.py +14 -12
- django_cfg/apps/knowbase/config/constance_settings.py +32 -31
- django_cfg/apps/knowbase/config/settings.py +28 -28
- django_cfg/apps/knowbase/examples/external_data_usage.py +35 -32
- django_cfg/apps/knowbase/management/commands/knowbase_stats.py +33 -32
- django_cfg/apps/knowbase/management/commands/setup_knowbase.py +11 -13
- django_cfg/apps/knowbase/managers/__init__.py +2 -2
- django_cfg/apps/knowbase/managers/archive.py +86 -85
- django_cfg/apps/knowbase/managers/base.py +5 -5
- django_cfg/apps/knowbase/managers/chat.py +29 -28
- django_cfg/apps/knowbase/managers/document.py +39 -39
- django_cfg/apps/knowbase/managers/external_data.py +74 -73
- django_cfg/apps/knowbase/migrations/0001_initial.py +2 -1
- django_cfg/apps/knowbase/migrations/0002_archiveitem_archiveitemchunk_documentarchive_and_more.py +2 -1
- django_cfg/apps/knowbase/mixins/__init__.py +4 -4
- django_cfg/apps/knowbase/mixins/config/__init__.py +1 -1
- django_cfg/apps/knowbase/mixins/config/meta_config.py +1 -1
- django_cfg/apps/knowbase/mixins/config.py +19 -18
- django_cfg/apps/knowbase/mixins/creator.py +7 -7
- django_cfg/apps/knowbase/mixins/examples/vehicle_model_example.py +29 -28
- django_cfg/apps/knowbase/mixins/external_data_mixin.py +6 -5
- django_cfg/apps/knowbase/mixins/generators/__init__.py +1 -1
- django_cfg/apps/knowbase/mixins/generators/content_generator.py +2 -2
- django_cfg/apps/knowbase/mixins/service.py +47 -45
- django_cfg/apps/knowbase/models/__init__.py +7 -7
- django_cfg/apps/knowbase/models/archive.py +72 -72
- django_cfg/apps/knowbase/models/base.py +12 -13
- django_cfg/apps/knowbase/models/chat.py +20 -19
- django_cfg/apps/knowbase/models/document.py +37 -35
- django_cfg/apps/knowbase/models/external_data.py +41 -42
- django_cfg/apps/knowbase/serializers/__init__.py +7 -7
- django_cfg/apps/knowbase/serializers/archive_serializers.py +50 -42
- django_cfg/apps/knowbase/serializers/chat_serializers.py +16 -15
- django_cfg/apps/knowbase/serializers/document_serializers.py +13 -12
- django_cfg/apps/knowbase/serializers/external_data_serializers.py +31 -31
- django_cfg/apps/knowbase/serializers/public_serializers.py +10 -9
- django_cfg/apps/knowbase/services/__init__.py +7 -7
- django_cfg/apps/knowbase/services/archive/__init__.py +7 -7
- django_cfg/apps/knowbase/services/archive/analyzers/__init__.py +1 -1
- django_cfg/apps/knowbase/services/archive/analyzers/tag_generator.py +1 -1
- django_cfg/apps/knowbase/services/archive/archive_service.py +109 -112
- django_cfg/apps/knowbase/services/archive/chunking/__init__.py +3 -3
- django_cfg/apps/knowbase/services/archive/chunking/base.py +1 -0
- django_cfg/apps/knowbase/services/archive/chunking/json_chunker.py +4 -3
- django_cfg/apps/knowbase/services/archive/chunking/markdown_chunker.py +5 -4
- django_cfg/apps/knowbase/services/archive/chunking/python_chunker.py +6 -5
- django_cfg/apps/knowbase/services/archive/chunking/text_chunker.py +4 -3
- django_cfg/apps/knowbase/services/archive/chunking_service.py +3 -7
- django_cfg/apps/knowbase/services/archive/context/__init__.py +1 -1
- django_cfg/apps/knowbase/services/archive/context/builders.py +2 -1
- django_cfg/apps/knowbase/services/archive/context/models.py +2 -1
- django_cfg/apps/knowbase/services/archive/exceptions.py +5 -5
- django_cfg/apps/knowbase/services/archive/extraction_service.py +111 -110
- django_cfg/apps/knowbase/services/archive/vectorization_service.py +80 -77
- django_cfg/apps/knowbase/services/base.py +11 -9
- django_cfg/apps/knowbase/services/chat_service.py +40 -39
- django_cfg/apps/knowbase/services/document_service.py +28 -27
- django_cfg/apps/knowbase/services/embedding/__init__.py +9 -9
- django_cfg/apps/knowbase/services/embedding/async_processor.py +38 -40
- django_cfg/apps/knowbase/services/embedding/batch_processor.py +45 -42
- django_cfg/apps/knowbase/services/embedding/batch_result.py +7 -6
- django_cfg/apps/knowbase/services/embedding/models.py +52 -51
- django_cfg/apps/knowbase/services/embedding/processors.py +24 -23
- django_cfg/apps/knowbase/services/embedding/utils.py +17 -17
- django_cfg/apps/knowbase/services/prompt_builder.py +24 -23
- django_cfg/apps/knowbase/services/search_service.py +52 -49
- django_cfg/apps/knowbase/signals/__init__.py +2 -5
- django_cfg/apps/knowbase/signals/archive_signals.py +35 -34
- django_cfg/apps/knowbase/signals/chat_signals.py +6 -5
- django_cfg/apps/knowbase/signals/document_signals.py +22 -22
- django_cfg/apps/knowbase/signals/external_data_signals.py +22 -22
- django_cfg/apps/knowbase/tasks/__init__.py +6 -7
- django_cfg/apps/knowbase/tasks/archive_tasks.py +41 -41
- django_cfg/apps/knowbase/tasks/document_processing.py +49 -44
- django_cfg/apps/knowbase/tasks/external_data_tasks.py +46 -44
- django_cfg/apps/knowbase/tasks/maintenance.py +26 -24
- django_cfg/apps/knowbase/urls.py +3 -2
- django_cfg/apps/knowbase/urls_admin.py +6 -3
- django_cfg/apps/knowbase/urls_system.py +4 -5
- django_cfg/apps/knowbase/utils/chunk_settings.py +22 -20
- django_cfg/apps/knowbase/utils/text_processing.py +76 -75
- django_cfg/apps/knowbase/utils/validation.py +9 -9
- django_cfg/apps/knowbase/views/__init__.py +5 -5
- django_cfg/apps/knowbase/views/archive_views.py +90 -87
- django_cfg/apps/knowbase/views/base.py +9 -12
- django_cfg/apps/knowbase/views/chat_views.py +32 -32
- django_cfg/apps/knowbase/views/document_views.py +27 -28
- django_cfg/apps/knowbase/views/public_views.py +19 -19
- django_cfg/apps/leads/admin/leads_admin.py +41 -45
- django_cfg/apps/leads/admin/resources.py +14 -14
- django_cfg/apps/leads/admin.py +7 -9
- django_cfg/apps/leads/apps.py +1 -1
- django_cfg/apps/leads/models.py +17 -17
- django_cfg/apps/leads/serializers.py +5 -4
- django_cfg/apps/leads/signals.py +7 -7
- django_cfg/apps/leads/tests.py +47 -47
- django_cfg/apps/leads/urls.py +2 -2
- django_cfg/apps/leads/views.py +11 -11
- django_cfg/apps/maintenance/__init__.py +3 -3
- django_cfg/apps/maintenance/admin/__init__.py +1 -1
- django_cfg/apps/maintenance/admin/api_key_admin.py +36 -36
- django_cfg/apps/maintenance/admin/log_admin.py +35 -37
- django_cfg/apps/maintenance/admin/scheduled_admin.py +47 -51
- django_cfg/apps/maintenance/admin/site_admin.py +49 -52
- django_cfg/apps/maintenance/apps.py +2 -2
- django_cfg/apps/maintenance/management/commands/maintenance.py +53 -52
- django_cfg/apps/maintenance/management/commands/process_scheduled_maintenance.py +44 -44
- django_cfg/apps/maintenance/management/commands/sync_cloudflare.py +32 -32
- django_cfg/apps/maintenance/managers/__init__.py +1 -1
- django_cfg/apps/maintenance/managers/cloudflare_site_manager.py +39 -38
- django_cfg/apps/maintenance/managers/maintenance_log_manager.py +32 -31
- django_cfg/apps/maintenance/migrations/0001_initial.py +1 -0
- django_cfg/apps/maintenance/models/__init__.py +2 -2
- django_cfg/apps/maintenance/models/cloudflare_api_key.py +15 -15
- django_cfg/apps/maintenance/models/cloudflare_site.py +24 -22
- django_cfg/apps/maintenance/models/maintenance_log.py +15 -14
- django_cfg/apps/maintenance/models/scheduled_maintenance.py +53 -52
- django_cfg/apps/maintenance/services/__init__.py +3 -3
- django_cfg/apps/maintenance/services/bulk_operations_service.py +68 -68
- django_cfg/apps/maintenance/services/maintenance_service.py +59 -58
- django_cfg/apps/maintenance/services/scheduled_maintenance_service.py +52 -52
- django_cfg/apps/maintenance/services/site_sync_service.py +64 -65
- django_cfg/apps/maintenance/utils/__init__.py +1 -1
- django_cfg/apps/maintenance/utils/retry_utils.py +17 -17
- django_cfg/apps/newsletter/admin/__init__.py +12 -16
- django_cfg/apps/newsletter/admin/newsletter_admin.py +90 -87
- django_cfg/apps/newsletter/admin/resources.py +29 -29
- django_cfg/apps/newsletter/admin.py +39 -32
- django_cfg/apps/newsletter/management/commands/test_newsletter.py +3 -3
- django_cfg/apps/newsletter/managers/__init__.py +1 -1
- django_cfg/apps/newsletter/migrations/0001_initial.py +2 -1
- django_cfg/apps/newsletter/models.py +34 -33
- django_cfg/apps/newsletter/serializers.py +13 -13
- django_cfg/apps/newsletter/services/email_service.py +42 -40
- django_cfg/apps/newsletter/signals.py +4 -3
- django_cfg/apps/newsletter/urls.py +7 -7
- django_cfg/apps/newsletter/views/__init__.py +14 -19
- django_cfg/apps/newsletter/views/campaigns.py +19 -19
- django_cfg/apps/newsletter/views/emails.py +20 -20
- django_cfg/apps/newsletter/views/newsletters.py +5 -5
- django_cfg/apps/newsletter/views/subscriptions.py +24 -24
- django_cfg/apps/newsletter/views/tracking.py +6 -5
- django_cfg/apps/payments/admin/__init__.py +6 -5
- django_cfg/apps/payments/admin/api_keys_admin.py +43 -45
- django_cfg/apps/payments/admin/balance_admin.py +41 -47
- django_cfg/apps/payments/admin/currencies_admin.py +60 -62
- django_cfg/apps/payments/admin/endpoint_groups_admin.py +14 -28
- django_cfg/apps/payments/admin/filters.py +59 -59
- django_cfg/apps/payments/admin/networks_admin.py +36 -50
- django_cfg/apps/payments/admin/payments_admin.py +47 -49
- django_cfg/apps/payments/admin/subscriptions_admin.py +30 -32
- django_cfg/apps/payments/admin/tariffs_admin.py +37 -42
- django_cfg/apps/payments/admin_interface/serializers/__init__.py +12 -13
- django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py +28 -27
- django_cfg/apps/payments/admin_interface/serializers/webhook_serializers.py +4 -5
- django_cfg/apps/payments/admin_interface/templates/payments/base.html +407 -3
- django_cfg/apps/payments/admin_interface/templates/payments/components/ngrok_status.html +13 -13
- django_cfg/apps/payments/admin_interface/templates/payments/payment_dashboard.html +5 -1
- django_cfg/apps/payments/admin_interface/templates/payments/payment_detail.html +105 -49
- django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +4 -1
- django_cfg/apps/payments/admin_interface/templates/payments/payment_list.html +16 -8
- django_cfg/apps/payments/admin_interface/templates/payments/webhook_dashboard.html +16 -8
- django_cfg/apps/payments/admin_interface/views/__init__.py +8 -9
- django_cfg/apps/payments/admin_interface/views/api/__init__.py +3 -3
- django_cfg/apps/payments/admin_interface/views/api/payments.py +52 -54
- django_cfg/apps/payments/admin_interface/views/api/stats.py +33 -30
- django_cfg/apps/payments/admin_interface/views/api/users.py +10 -11
- django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +46 -51
- django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +9 -9
- django_cfg/apps/payments/admin_interface/views/base.py +17 -19
- django_cfg/apps/payments/admin_interface/views/dashboard.py +10 -10
- django_cfg/apps/payments/admin_interface/views/forms.py +21 -20
- django_cfg/apps/payments/apps.py +7 -6
- django_cfg/apps/payments/config/__init__.py +4 -4
- django_cfg/apps/payments/config/django_cfg_integration.py +22 -21
- django_cfg/apps/payments/config/helpers.py +14 -12
- django_cfg/apps/payments/management/commands/cleanup_expired_data.py +85 -86
- django_cfg/apps/payments/management/commands/currency_stats.py +84 -87
- django_cfg/apps/payments/management/commands/manage_currencies.py +59 -58
- django_cfg/apps/payments/management/commands/manage_providers.py +103 -105
- django_cfg/apps/payments/management/commands/process_pending_payments.py +67 -70
- django_cfg/apps/payments/management/commands/test_providers.py +83 -84
- django_cfg/apps/payments/middleware/__init__.py +1 -1
- django_cfg/apps/payments/middleware/api_access.py +77 -78
- django_cfg/apps/payments/middleware/rate_limiting.py +72 -72
- django_cfg/apps/payments/middleware/usage_tracking.py +66 -64
- django_cfg/apps/payments/migrations/0001_initial.py +2 -1
- django_cfg/apps/payments/models/__init__.py +11 -12
- django_cfg/apps/payments/models/api_keys.py +29 -27
- django_cfg/apps/payments/models/balance.py +38 -38
- django_cfg/apps/payments/models/base.py +12 -11
- django_cfg/apps/payments/models/currencies.py +53 -52
- django_cfg/apps/payments/models/managers/__init__.py +13 -14
- django_cfg/apps/payments/models/managers/api_key_managers.py +55 -53
- django_cfg/apps/payments/models/managers/balance_managers.py +98 -97
- django_cfg/apps/payments/models/managers/currency_managers.py +70 -69
- django_cfg/apps/payments/models/managers/payment_managers.py +113 -111
- django_cfg/apps/payments/models/managers/subscription_managers.py +99 -97
- django_cfg/apps/payments/models/payments.py +167 -73
- django_cfg/apps/payments/models/subscriptions.py +56 -54
- django_cfg/apps/payments/models/tariffs.py +35 -34
- django_cfg/apps/payments/services/__init__.py +33 -36
- django_cfg/apps/payments/services/cache/__init__.py +7 -1
- django_cfg/apps/payments/services/cache_service/__init__.py +22 -20
- django_cfg/apps/payments/services/cache_service/api_key_cache.py +6 -5
- django_cfg/apps/payments/services/cache_service/interfaces.py +5 -5
- django_cfg/apps/payments/services/cache_service/keys.py +8 -8
- django_cfg/apps/payments/services/cache_service/rate_limit_cache.py +8 -7
- django_cfg/apps/payments/services/cache_service/simple_cache.py +17 -14
- django_cfg/apps/payments/services/core/__init__.py +3 -3
- django_cfg/apps/payments/services/core/balance_service.py +69 -65
- django_cfg/apps/payments/services/core/base.py +25 -22
- django_cfg/apps/payments/services/core/currency/__init__.py +1 -1
- django_cfg/apps/payments/services/core/currency/currency_converter.py +2 -0
- django_cfg/apps/payments/services/core/currency_service.py +68 -66
- django_cfg/apps/payments/services/core/operations/__init__.py +1 -1
- django_cfg/apps/payments/services/core/operations/payment_canceller.py +2 -1
- django_cfg/apps/payments/services/core/operations/payment_creator.py +2 -1
- django_cfg/apps/payments/services/core/operations/status_checker.py +2 -1
- django_cfg/apps/payments/services/core/payment_service.py +10 -7
- django_cfg/apps/payments/services/core/providers/provider_client.py +2 -2
- django_cfg/apps/payments/services/core/subscription_service.py +77 -74
- django_cfg/apps/payments/services/core/utils/data_converter.py +1 -0
- django_cfg/apps/payments/services/core/utils/statistics_calculator.py +1 -0
- django_cfg/apps/payments/services/core/webhook_service.py +67 -63
- django_cfg/apps/payments/services/integrations/__init__.py +3 -3
- django_cfg/apps/payments/services/integrations/ngrok_service.py +1 -0
- django_cfg/apps/payments/services/integrations/providers_config.py +3 -2
- django_cfg/apps/payments/services/providers/base.py +59 -57
- django_cfg/apps/payments/services/providers/models/__init__.py +7 -14
- django_cfg/apps/payments/services/providers/models/base.py +15 -15
- django_cfg/apps/payments/services/providers/models/providers.py +13 -12
- django_cfg/apps/payments/services/providers/models/universal.py +6 -5
- django_cfg/apps/payments/services/providers/nowpayments/__init__.py +4 -4
- django_cfg/apps/payments/services/providers/nowpayments/config.py +9 -8
- django_cfg/apps/payments/services/providers/nowpayments/models.py +15 -15
- django_cfg/apps/payments/services/providers/nowpayments/parsers/data/__init__.py +2 -2
- django_cfg/apps/payments/services/providers/nowpayments/parsers/data/patterns.py +26 -26
- django_cfg/apps/payments/services/providers/nowpayments/parsers/parser.py +3 -2
- django_cfg/apps/payments/services/providers/nowpayments/provider.py +95 -99
- django_cfg/apps/payments/services/providers/nowpayments/sync.py +41 -40
- django_cfg/apps/payments/services/providers/registry.py +65 -63
- django_cfg/apps/payments/services/providers/sync_service.py +50 -50
- django_cfg/apps/payments/services/types/__init__.py +21 -22
- django_cfg/apps/payments/services/types/data.py +14 -13
- django_cfg/apps/payments/services/types/requests.py +21 -22
- django_cfg/apps/payments/services/types/responses.py +16 -15
- django_cfg/apps/payments/services/types/webhooks.py +30 -30
- django_cfg/apps/payments/signals/__init__.py +4 -6
- django_cfg/apps/payments/signals/api_key_signals.py +33 -32
- django_cfg/apps/payments/signals/balance_signals.py +28 -26
- django_cfg/apps/payments/signals/payment_signals.py +29 -28
- django_cfg/apps/payments/signals/subscription_signals.py +39 -38
- django_cfg/apps/payments/static/payments/js/ngrok-status.js +12 -8
- django_cfg/apps/payments/static/payments/js/payment-detail.js +1 -1
- django_cfg/apps/payments/static/payments/js/payment-form.js +3 -3
- django_cfg/apps/payments/static/payments/js/payment-list.js +13 -6
- django_cfg/apps/payments/static/payments/js/webhook-dashboard-mjs.js +241 -0
- django_cfg/apps/payments/tasks/__init__.py +11 -12
- django_cfg/apps/payments/tasks/types.py +10 -9
- django_cfg/apps/payments/tasks/usage_tracking.py +44 -46
- django_cfg/apps/payments/templatetags/payment_tags.py +27 -27
- django_cfg/apps/payments/urls.py +31 -14
- django_cfg/apps/payments/urls_admin.py +10 -10
- django_cfg/apps/payments/views/api/__init__.py +32 -33
- django_cfg/apps/payments/views/api/api_keys.py +62 -62
- django_cfg/apps/payments/views/api/balances.py +63 -64
- django_cfg/apps/payments/views/api/base.py +52 -52
- django_cfg/apps/payments/views/api/currencies.py +75 -63
- django_cfg/apps/payments/views/api/payments.py +73 -74
- django_cfg/apps/payments/views/api/subscriptions.py +71 -72
- django_cfg/apps/payments/views/api/webhooks.py +85 -84
- django_cfg/apps/payments/views/overview/__init__.py +7 -7
- django_cfg/apps/payments/views/overview/serializers.py +13 -14
- django_cfg/apps/payments/views/overview/services.py +66 -67
- django_cfg/apps/payments/views/overview/urls.py +2 -1
- django_cfg/apps/payments/views/overview/views.py +31 -31
- django_cfg/apps/payments/views/serializers/__init__.py +35 -36
- django_cfg/apps/payments/views/serializers/api_keys.py +59 -57
- django_cfg/apps/payments/views/serializers/balances.py +34 -33
- django_cfg/apps/payments/views/serializers/currencies.py +36 -34
- django_cfg/apps/payments/views/serializers/payments.py +48 -47
- django_cfg/apps/payments/views/serializers/subscriptions.py +50 -45
- django_cfg/apps/payments/views/serializers/webhooks.py +17 -16
- django_cfg/apps/support/admin/__init__.py +3 -3
- django_cfg/apps/support/admin/resources.py +26 -26
- django_cfg/apps/support/admin/support_admin.py +44 -48
- django_cfg/apps/support/admin.py +16 -15
- django_cfg/apps/support/apps.py +1 -1
- django_cfg/apps/support/managers/message_manager.py +4 -4
- django_cfg/apps/support/managers/ticket_manager.py +13 -12
- django_cfg/apps/support/migrations/0001_initial.py +2 -1
- django_cfg/apps/support/models.py +3 -1
- django_cfg/apps/support/serializers.py +4 -2
- django_cfg/apps/support/signals.py +12 -10
- django_cfg/apps/support/urls.py +4 -3
- django_cfg/apps/support/utils/support_email_service.py +11 -9
- django_cfg/apps/support/views/__init__.py +3 -3
- django_cfg/apps/support/views/admin.py +9 -9
- django_cfg/apps/support/views/api.py +10 -9
- django_cfg/apps/support/views/chat.py +14 -14
- django_cfg/apps/tasks/admin/tasks_admin.py +65 -74
- django_cfg/apps/tasks/apps.py +2 -2
- django_cfg/apps/tasks/serializers.py +6 -6
- django_cfg/apps/tasks/static/tasks/js/dashboard/main.mjs +44 -20
- django_cfg/apps/tasks/static/tasks/js/dashboard/overview.mjs +7 -5
- django_cfg/apps/tasks/static/tasks/js/dashboard/queues.mjs +5 -3
- django_cfg/apps/tasks/static/tasks/js/dashboard/tasks.mjs +5 -3
- django_cfg/apps/tasks/static/tasks/js/dashboard/workers.mjs +5 -3
- django_cfg/apps/tasks/tasks/demo_tasks.py +12 -11
- django_cfg/apps/tasks/templates/tasks/components/tasks_mjs_integration.html +269 -0
- django_cfg/apps/tasks/templates/tasks/pages/dashboard-improved.html +168 -0
- django_cfg/apps/tasks/templates/tasks/pages/dashboard.html +21 -2
- django_cfg/apps/tasks/urls.py +3 -2
- django_cfg/apps/tasks/urls_admin.py +1 -0
- django_cfg/apps/tasks/utils/simulator.py +49 -52
- django_cfg/apps/tasks/views/api.py +75 -73
- django_cfg/apps/tasks/views/dashboard.py +5 -4
- django_cfg/apps/urls.py +20 -11
- django_cfg/apps.py +6 -5
- django_cfg/cli/commands/create_project.py +7 -6
- django_cfg/cli/commands/info.py +25 -25
- django_cfg/cli/utils.py +27 -27
- django_cfg/config.py +1 -1
- django_cfg/core/__init__.py +8 -8
- django_cfg/core/base/config_model.py +13 -12
- django_cfg/core/builders/apps_builder.py +2 -2
- django_cfg/core/builders/middleware_builder.py +1 -1
- django_cfg/core/builders/security_builder.py +1 -1
- django_cfg/core/config.py +2 -2
- django_cfg/core/environment/detector.py +27 -28
- django_cfg/core/exceptions.py +1 -1
- django_cfg/core/generation/core_generators/settings.py +1 -1
- django_cfg/core/generation/core_generators/static.py +11 -5
- django_cfg/core/generation/core_generators/templates.py +1 -1
- django_cfg/core/generation/data_generators/__init__.py +1 -1
- django_cfg/core/generation/data_generators/cache.py +1 -1
- django_cfg/core/generation/data_generators/database.py +1 -1
- django_cfg/core/generation/generation.py +1 -3
- django_cfg/core/generation/integration_generators/__init__.py +2 -2
- django_cfg/core/generation/integration_generators/api.py +12 -2
- django_cfg/core/generation/integration_generators/sessions.py +1 -1
- django_cfg/core/generation/integration_generators/tailwind.py +1 -1
- django_cfg/core/generation/integration_generators/tasks.py +1 -1
- django_cfg/core/generation/integration_generators/third_party.py +1 -1
- django_cfg/core/generation/orchestrator.py +1 -1
- django_cfg/core/generation/protocols.py +1 -1
- django_cfg/core/generation/utility_generators/__init__.py +1 -1
- django_cfg/core/generation/utility_generators/email.py +1 -1
- django_cfg/core/generation/utility_generators/i18n.py +1 -1
- django_cfg/core/generation/utility_generators/limits.py +1 -1
- django_cfg/core/generation/utility_generators/logging.py +1 -1
- django_cfg/core/generation/utility_generators/security.py +1 -1
- django_cfg/core/generation/utils/helpers.py +1 -1
- django_cfg/core/integration/__init__.py +5 -5
- django_cfg/core/integration/commands_collector.py +38 -39
- django_cfg/core/integration/display/__init__.py +2 -2
- django_cfg/core/integration/display/base.py +30 -30
- django_cfg/core/integration/display/ngrok.py +35 -36
- django_cfg/core/integration/display/startup.py +149 -139
- django_cfg/core/integration/url_integration.py +10 -10
- django_cfg/core/integration/version_checker.py +20 -19
- django_cfg/core/services/config_service.py +4 -4
- django_cfg/core/state/__init__.py +1 -1
- django_cfg/core/state/registry.py +1 -1
- django_cfg/core/types/__init__.py +8 -1
- django_cfg/core/validation.py +36 -39
- django_cfg/management/commands/check_endpoints.py +3 -1
- django_cfg/management/commands/check_settings.py +3 -1
- django_cfg/management/commands/clear_constance.py +3 -1
- django_cfg/management/commands/create_token.py +3 -1
- django_cfg/management/commands/generate_clients.py +3 -1
- django_cfg/management/commands/migrate_all.py +3 -1
- django_cfg/management/commands/rundramatiq.py +3 -1
- django_cfg/management/commands/rundramatiq_simulator.py +3 -1
- django_cfg/management/commands/runserver_ngrok.py +3 -1
- django_cfg/management/commands/show_config.py +3 -1
- django_cfg/management/commands/superuser.py +3 -1
- django_cfg/management/commands/task_clear.py +3 -1
- django_cfg/management/commands/task_status.py +3 -1
- django_cfg/management/commands/test_email.py +3 -1
- django_cfg/management/commands/test_telegram.py +3 -1
- django_cfg/management/commands/test_twilio.py +3 -1
- django_cfg/management/commands/validate_openapi.py +3 -1
- django_cfg/middleware/pagination.py +8 -8
- django_cfg/middleware/public_endpoints.py +24 -23
- django_cfg/middleware/user_activity.py +27 -25
- django_cfg/models/__init__.py +19 -20
- django_cfg/models/api/__init__.py +4 -4
- django_cfg/models/api/config.py +23 -21
- django_cfg/models/api/cors.py +17 -16
- django_cfg/models/api/drf/__init__.py +1 -1
- django_cfg/models/api/drf/config.py +2 -1
- django_cfg/models/api/drf/redoc.py +2 -1
- django_cfg/models/api/drf/spectacular.py +4 -2
- django_cfg/models/api/drf/swagger.py +2 -1
- django_cfg/models/api/jwt.py +37 -36
- django_cfg/models/api/keys.py +13 -12
- django_cfg/models/api/limits.py +31 -30
- django_cfg/models/base/config.py +40 -41
- django_cfg/models/base/module.py +8 -8
- django_cfg/models/django/__init__.py +1 -1
- django_cfg/models/django/constance.py +8 -7
- django_cfg/models/django/environment.py +5 -3
- django_cfg/models/django/openapi.py +6 -16
- django_cfg/models/django/revolution_legacy.py +17 -16
- django_cfg/models/infrastructure/__init__.py +1 -1
- django_cfg/models/infrastructure/cache.py +46 -45
- django_cfg/models/infrastructure/database/config.py +4 -6
- django_cfg/models/infrastructure/database/converters.py +1 -1
- django_cfg/models/infrastructure/database/parsers.py +1 -1
- django_cfg/models/infrastructure/database/validators.py +1 -1
- django_cfg/models/infrastructure/logging.py +59 -57
- django_cfg/models/infrastructure/security.py +26 -24
- django_cfg/models/ngrok/auth.py +2 -1
- django_cfg/models/ngrok/config.py +3 -2
- django_cfg/models/ngrok/tunnel.py +2 -1
- django_cfg/models/payments/__init__.py +1 -1
- django_cfg/models/payments/api_keys.py +3 -1
- django_cfg/models/payments/config.py +4 -1
- django_cfg/models/payments/providers/base.py +2 -1
- django_cfg/models/payments/providers/nowpayments.py +3 -1
- django_cfg/models/services/__init__.py +1 -1
- django_cfg/models/services/base.py +2 -1
- django_cfg/models/services/email.py +28 -26
- django_cfg/models/services/telegram.py +2 -1
- django_cfg/models/tasks/__init__.py +2 -2
- django_cfg/models/tasks/backends.py +4 -3
- django_cfg/models/tasks/config.py +6 -4
- django_cfg/models/tasks/utils.py +3 -3
- django_cfg/modules/base.py +18 -17
- django_cfg/modules/django_admin/__init__.py +14 -15
- django_cfg/modules/django_admin/decorators/__init__.py +1 -1
- django_cfg/modules/django_admin/decorators/actions.py +8 -7
- django_cfg/modules/django_admin/decorators/display.py +9 -7
- django_cfg/modules/django_admin/icons/__init__.py +1 -1
- django_cfg/modules/django_admin/icons/constants.py +27 -27
- django_cfg/modules/django_admin/icons/generate_icons.py +54 -54
- django_cfg/modules/django_admin/management/commands/check_endpoints.py +5 -3
- django_cfg/modules/django_admin/management/commands/check_settings.py +40 -44
- django_cfg/modules/django_admin/management/commands/clear_constance.py +29 -30
- django_cfg/modules/django_admin/management/commands/create_token.py +42 -42
- django_cfg/modules/django_admin/management/commands/list_urls.py +37 -38
- django_cfg/modules/django_admin/management/commands/migrate_all.py +13 -15
- django_cfg/modules/django_admin/management/commands/migrator.py +17 -17
- django_cfg/modules/django_admin/management/commands/script.py +58 -60
- django_cfg/modules/django_admin/management/commands/show_config.py +32 -30
- django_cfg/modules/django_admin/management/commands/show_urls.py +46 -44
- django_cfg/modules/django_admin/management/commands/superuser.py +47 -48
- django_cfg/modules/django_admin/management/commands/tree.py +50 -54
- django_cfg/modules/django_admin/mixins/display_mixin.py +16 -15
- django_cfg/modules/django_admin/mixins/optimization_mixin.py +9 -8
- django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +25 -24
- django_cfg/modules/django_admin/models/__init__.py +4 -4
- django_cfg/modules/django_admin/models/action_models.py +3 -1
- django_cfg/modules/django_admin/models/badge_models.py +4 -2
- django_cfg/modules/django_admin/models/base.py +3 -3
- django_cfg/modules/django_admin/models/display_models.py +1 -0
- django_cfg/modules/django_admin/utils/badges.py +27 -26
- django_cfg/modules/django_admin/utils/displays.py +49 -49
- django_cfg/modules/django_client/apps.py +21 -3
- django_cfg/modules/django_client/core/__init__.py +9 -10
- django_cfg/modules/django_client/core/archive/manager.py +2 -2
- django_cfg/modules/django_client/core/cli/main.py +1 -3
- django_cfg/modules/django_client/core/config/config.py +3 -1
- django_cfg/modules/django_client/core/config/group.py +1 -0
- django_cfg/modules/django_client/core/config/service.py +2 -1
- django_cfg/modules/django_client/core/generator/__init__.py +1 -1
- django_cfg/modules/django_client/core/generator/base.py +2 -2
- django_cfg/modules/django_client/core/generator/python/async_client_gen.py +1 -1
- django_cfg/modules/django_client/core/generator/python/files_generator.py +1 -1
- django_cfg/modules/django_client/core/generator/python/generator.py +4 -4
- django_cfg/modules/django_client/core/generator/python/models_generator.py +1 -1
- django_cfg/modules/django_client/core/generator/python/operations_generator.py +2 -2
- django_cfg/modules/django_client/core/generator/python/sync_client_gen.py +1 -1
- django_cfg/modules/django_client/core/generator/typescript/client_generator.py +3 -1
- django_cfg/modules/django_client/core/generator/typescript/fetchers_generator.py +14 -13
- django_cfg/modules/django_client/core/generator/typescript/files_generator.py +1 -0
- django_cfg/modules/django_client/core/generator/typescript/generator.py +6 -6
- django_cfg/modules/django_client/core/generator/typescript/hooks_generator.py +12 -10
- django_cfg/modules/django_client/core/generator/typescript/models_generator.py +2 -1
- django_cfg/modules/django_client/core/generator/typescript/naming.py +2 -3
- django_cfg/modules/django_client/core/generator/typescript/operations_generator.py +12 -10
- django_cfg/modules/django_client/core/generator/typescript/schemas_generator.py +3 -2
- django_cfg/modules/django_client/core/generator/typescript/templates/client/client.ts.jinja +14 -6
- django_cfg/modules/django_client/core/generator/typescript/templates/main_index.ts.jinja +4 -10
- django_cfg/modules/django_client/core/groups/__init__.py +1 -1
- django_cfg/modules/django_client/core/groups/detector.py +2 -1
- django_cfg/modules/django_client/core/groups/manager.py +2 -1
- django_cfg/modules/django_client/core/ir/schema.py +1 -1
- django_cfg/modules/django_client/core/parser/base.py +0 -2
- django_cfg/modules/django_client/core/parser/models/schema.py +1 -1
- django_cfg/modules/django_client/core/validation/__init__.py +1 -1
- django_cfg/modules/django_client/core/validation/fixer.py +1 -2
- django_cfg/modules/django_client/core/validation/reporter.py +2 -2
- django_cfg/modules/django_client/core/validation/safety.py +1 -1
- django_cfg/modules/django_client/management/commands/generate_client.py +14 -11
- django_cfg/modules/django_client/management/commands/validate_openapi.py +4 -6
- django_cfg/modules/django_client/spectacular/__init__.py +1 -1
- django_cfg/modules/django_client/spectacular/async_detection.py +3 -2
- django_cfg/modules/django_client/spectacular/enum_naming.py +1 -1
- django_cfg/modules/django_client/spectacular/schema.py +5 -5
- django_cfg/modules/django_client/system/__init__.py +24 -0
- django_cfg/modules/django_client/system/base_generator.py +123 -0
- django_cfg/modules/django_client/system/generate_mjs_clients.py +174 -0
- django_cfg/modules/django_client/system/mjs_generator.py +219 -0
- django_cfg/modules/django_client/system/schema_parser.py +195 -0
- django_cfg/modules/django_client/system/templates/api_client.js.j2 +87 -0
- django_cfg/modules/django_client/system/templates/app_index.js.j2 +13 -0
- django_cfg/modules/django_client/system/templates/base_client.js.j2 +166 -0
- django_cfg/modules/django_client/system/templates/main_index.js.j2 +80 -0
- django_cfg/modules/django_client/system/templates/types.js.j2 +24 -0
- django_cfg/modules/django_client/urls.py +3 -2
- django_cfg/modules/django_currency/__init__.py +17 -18
- django_cfg/modules/django_currency/clients/__init__.py +2 -2
- django_cfg/modules/django_currency/clients/coinpaprika_client.py +48 -48
- django_cfg/modules/django_currency/clients/hybrid_client.py +76 -75
- django_cfg/modules/django_currency/core/__init__.py +7 -13
- django_cfg/modules/django_currency/core/converter.py +25 -24
- django_cfg/modules/django_currency/core/models.py +9 -8
- django_cfg/modules/django_currency/database/__init__.py +4 -4
- django_cfg/modules/django_currency/database/database_loader.py +65 -66
- django_cfg/modules/django_currency/examples/example_database_usage.py +29 -28
- django_cfg/modules/django_currency/utils/cache.py +10 -11
- django_cfg/modules/django_dashboard/__init__.py +4 -5
- django_cfg/modules/django_dashboard/components.py +11 -7
- django_cfg/modules/django_dashboard/debug.py +1 -3
- django_cfg/modules/django_dashboard/management/commands/debug_dashboard.py +3 -3
- django_cfg/modules/django_dashboard/sections/base.py +2 -1
- django_cfg/modules/django_dashboard/sections/commands.py +3 -2
- django_cfg/modules/django_dashboard/sections/documentation.py +8 -6
- django_cfg/modules/django_dashboard/sections/overview.py +13 -9
- django_cfg/modules/django_dashboard/sections/stats.py +2 -2
- django_cfg/modules/django_dashboard/sections/system.py +2 -1
- django_cfg/modules/django_drf_theme/templatetags/tailwind_tags.py +12 -4
- django_cfg/modules/django_email/management/commands/test_email.py +8 -7
- django_cfg/modules/django_email/service.py +5 -4
- django_cfg/modules/django_health/service.py +46 -44
- django_cfg/modules/django_import_export/__init__.py +7 -3
- django_cfg/modules/django_llm/__init__.py +3 -2
- django_cfg/modules/django_llm/example.py +58 -56
- django_cfg/modules/django_llm/llm/__init__.py +1 -1
- django_cfg/modules/django_llm/llm/cache.py +21 -20
- django_cfg/modules/django_llm/llm/client.py +9 -9
- django_cfg/modules/django_llm/llm/costs.py +14 -14
- django_cfg/modules/django_llm/llm/embeddings/__init__.py +1 -1
- django_cfg/modules/django_llm/llm/embeddings/mock_embedder.py +1 -2
- django_cfg/modules/django_llm/llm/embeddings/openai_embedder.py +1 -2
- django_cfg/modules/django_llm/llm/extractor.py +8 -8
- django_cfg/modules/django_llm/llm/models.py +5 -5
- django_cfg/modules/django_llm/llm/models_api/models_query.py +2 -2
- django_cfg/modules/django_llm/llm/models_cache.py +91 -92
- django_cfg/modules/django_llm/llm/providers/config_builder.py +1 -1
- django_cfg/modules/django_llm/llm/providers/provider_manager.py +2 -1
- django_cfg/modules/django_llm/llm/requests/cache_manager.py +1 -1
- django_cfg/modules/django_llm/llm/requests/chat_handler.py +2 -2
- django_cfg/modules/django_llm/llm/requests/embedding_handler.py +1 -1
- django_cfg/modules/django_llm/llm/responses/response_builder.py +2 -2
- django_cfg/modules/django_llm/llm/stats/stats_manager.py +1 -1
- django_cfg/modules/django_llm/llm/tokenizer.py +10 -9
- django_cfg/modules/django_llm/translator/__init__.py +1 -1
- django_cfg/modules/django_llm/translator/cache.py +36 -35
- django_cfg/modules/django_llm/translator/detectors/__init__.py +1 -1
- django_cfg/modules/django_llm/translator/detectors/script_detector.py +0 -1
- django_cfg/modules/django_llm/translator/stats/stats_tracker.py +1 -1
- django_cfg/modules/django_llm/translator/translator.py +5 -4
- django_cfg/modules/django_llm/translator/translators/__init__.py +1 -1
- django_cfg/modules/django_llm/translator/translators/json_translator.py +1 -1
- django_cfg/modules/django_llm/translator/utils/__init__.py +1 -1
- django_cfg/modules/django_llm/translator/utils/prompt_builder.py +0 -1
- django_cfg/modules/django_logging/__init__.py +1 -1
- django_cfg/modules/django_logging/django_logger.py +33 -34
- django_cfg/modules/django_logging/logger.py +3 -7
- django_cfg/modules/django_ngrok/__init__.py +7 -7
- django_cfg/modules/django_ngrok/management/commands/runserver_ngrok.py +33 -30
- django_cfg/modules/django_ngrok/service.py +33 -32
- django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +4 -36
- django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +1 -1
- django_cfg/modules/django_tasks/__init__.py +5 -5
- django_cfg/modules/django_tasks/dramatiq_setup.py +1 -1
- django_cfg/modules/django_tasks/factory.py +1 -1
- django_cfg/modules/django_tasks/management/commands/rundramatiq.py +39 -40
- django_cfg/modules/django_tasks/management/commands/rundramatiq_simulator.py +79 -80
- django_cfg/modules/django_tasks/management/commands/task_clear.py +34 -34
- django_cfg/modules/django_tasks/management/commands/task_status.py +34 -34
- django_cfg/modules/django_tasks/service.py +4 -3
- django_cfg/modules/django_tasks/settings.py +1 -1
- django_cfg/modules/django_telegram/__init__.py +4 -4
- django_cfg/modules/django_telegram/management/commands/test_telegram.py +4 -5
- django_cfg/modules/django_telegram/service.py +4 -3
- django_cfg/modules/django_telegram/utils.py +1 -1
- django_cfg/modules/django_twilio/__init__.py +15 -16
- django_cfg/modules/django_twilio/_imports.py +1 -1
- django_cfg/modules/django_twilio/base.py +9 -5
- django_cfg/modules/django_twilio/email_otp.py +4 -3
- django_cfg/modules/django_twilio/exceptions.py +36 -36
- django_cfg/modules/django_twilio/management/commands/test_twilio.py +6 -7
- django_cfg/modules/django_twilio/models.py +54 -53
- django_cfg/modules/django_twilio/sendgrid_service.py +70 -72
- django_cfg/modules/django_twilio/simple_service.py +42 -41
- django_cfg/modules/django_twilio/sms.py +1 -0
- django_cfg/modules/django_twilio/twilio_service.py +79 -83
- django_cfg/modules/django_twilio/unified.py +6 -5
- django_cfg/modules/django_twilio/utils.py +2 -3
- django_cfg/modules/django_twilio/whatsapp.py +3 -2
- django_cfg/modules/django_unfold/__init__.py +7 -6
- django_cfg/modules/django_unfold/callbacks/actions.py +6 -5
- django_cfg/modules/django_unfold/callbacks/apizones.py +122 -0
- django_cfg/modules/django_unfold/callbacks/base.py +9 -8
- django_cfg/modules/django_unfold/callbacks/charts.py +36 -37
- django_cfg/modules/django_unfold/callbacks/commands.py +2 -2
- django_cfg/modules/django_unfold/callbacks/main.py +27 -27
- django_cfg/modules/django_unfold/callbacks/statistics.py +12 -12
- django_cfg/modules/django_unfold/callbacks/system.py +5 -5
- django_cfg/modules/django_unfold/callbacks/users.py +4 -4
- django_cfg/modules/django_unfold/dashboard.py +29 -29
- django_cfg/modules/django_unfold/models/__init__.py +23 -8
- django_cfg/modules/django_unfold/models/config.py +84 -81
- django_cfg/modules/django_unfold/models/dashboard.py +20 -19
- django_cfg/modules/django_unfold/models/dropdown.py +6 -4
- django_cfg/modules/django_unfold/models/navigation.py +6 -4
- django_cfg/modules/django_unfold/models/tabs.py +4 -3
- django_cfg/modules/django_unfold/models.py +2 -3
- django_cfg/modules/django_unfold/system_monitor.py +27 -25
- django_cfg/modules/django_unfold/tailwind.py +12 -14
- django_cfg/modules/django_unfold/utils.py +7 -6
- django_cfg/pyproject.toml +1 -1
- django_cfg/registry/__init__.py +3 -3
- django_cfg/registry/core.py +8 -8
- django_cfg/registry/modules.py +2 -2
- django_cfg/registry/services.py +2 -2
- django_cfg/registry/third_party.py +3 -3
- django_cfg/routing/__init__.py +3 -3
- django_cfg/routing/callbacks.py +27 -26
- django_cfg/routing/routers.py +2 -2
- django_cfg/static/js/api/accounts/client.mjs +69 -0
- django_cfg/static/js/api/accounts/index.mjs +13 -0
- django_cfg/static/js/api/base.mjs +166 -0
- django_cfg/static/js/api/index.mjs +100 -0
- django_cfg/static/js/api/ipc/client.mjs +74 -0
- django_cfg/static/js/api/ipc/index.mjs +13 -0
- django_cfg/static/js/api/leads/client.mjs +71 -0
- django_cfg/static/js/api/leads/index.mjs +13 -0
- django_cfg/static/js/api/newsletter/client.mjs +109 -0
- django_cfg/static/js/api/newsletter/index.mjs +13 -0
- django_cfg/static/js/api/payments/client.mjs +1264 -0
- django_cfg/static/js/api/payments/index.mjs +13 -0
- django_cfg/static/js/api/support/client.mjs +84 -0
- django_cfg/static/js/api/support/index.mjs +13 -0
- django_cfg/static/js/api/tasks/client.mjs +74 -0
- django_cfg/static/js/api/tasks/index.mjs +13 -0
- django_cfg/static/js/api/types.mjs +729 -0
- django_cfg/static/js/api-loader.mjs +169 -0
- django_cfg/templates/admin/snippets/zones/zones_table.html +4 -3
- django_cfg/templatetags/django_cfg.py +4 -4
- django_cfg/utils/path_resolution.py +49 -50
- django_cfg/utils/smart_defaults.py +27 -29
- django_cfg/utils/version_check.py +14 -14
- {django_cfg-1.4.21.dist-info ā django_cfg-1.4.24.dist-info}/METADATA +1 -1
- django_cfg-1.4.24.dist-info/RECORD +1137 -0
- django_cfg/apps/payments/static/payments/js/api-client.js +0 -408
- django_cfg/modules/django_ipc_client/dashboard/README.md +0 -517
- django_cfg/modules/django_ipc_client/dashboard/UNFOLD_INTEGRATION.md +0 -439
- django_cfg/modules/django_ipc_client/dashboard/__init__.py +0 -11
- django_cfg/modules/django_ipc_client/dashboard/apps.py +0 -22
- django_cfg/modules/django_ipc_client/dashboard/templates/django_ipc_dashboard/dashboard.html +0 -200
- django_cfg/modules/django_ipc_client/dashboard/urls.py +0 -22
- django_cfg/modules/django_ipc_client/dashboard/urls_admin.py +0 -9
- django_cfg/modules/django_ipc_client/dashboard/views.py +0 -251
- django_cfg/modules/django_rpc_old/POETRY.md +0 -344
- django_cfg/modules/django_rpc_old/README.md +0 -397
- django_cfg/modules/django_rpc_old/TESTING.md +0 -358
- django_cfg/modules/django_rpc_old/__init__.py +0 -39
- django_cfg/modules/django_rpc_old/client.py +0 -531
- django_cfg/modules/django_rpc_old/config.py +0 -279
- django_cfg/modules/django_rpc_old/exceptions.py +0 -172
- django_cfg/modules/django_unfold/callbacks/revolution.py +0 -81
- django_cfg-1.4.21.dist-info/RECORD +0 -1111
- /django_cfg/{modules/django_ipc_client ā apps/ipc}/README.md +0 -0
- /django_cfg/{modules/django_ipc_client ā apps/ipc/services/client}/config.py +0 -0
- {django_cfg-1.4.21.dist-info ā django_cfg-1.4.24.dist-info}/WHEEL +0 -0
- {django_cfg-1.4.21.dist-info ā django_cfg-1.4.24.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.4.21.dist-info ā django_cfg-1.4.24.dist-info}/licenses/LICENSE +0 -0
@@ -131,7 +131,7 @@ class OperationsGenerator:
|
|
131
131
|
if return_type != "None":
|
132
132
|
if operation.is_list_operation:
|
133
133
|
# Paginated list response - extract results
|
134
|
-
body_lines.append(
|
134
|
+
body_lines.append("data = response.json()")
|
135
135
|
body_lines.append(f'return [{primary_response.schema_name}.model_validate(item) for item in data.get("results", [])]')
|
136
136
|
else:
|
137
137
|
body_lines.append(f"return {primary_response.schema_name}.model_validate(response.json())")
|
@@ -249,7 +249,7 @@ class OperationsGenerator:
|
|
249
249
|
if operation.is_list_operation:
|
250
250
|
# List response - validate each item (paginated)
|
251
251
|
primary_schema = primary_response.schema_name
|
252
|
-
body_lines.append(
|
252
|
+
body_lines.append("data = response.json()")
|
253
253
|
body_lines.append(f'return [{primary_schema}.model_validate(item) for item in data.get("results", [])]')
|
254
254
|
else:
|
255
255
|
# Single object response
|
@@ -5,9 +5,11 @@ TypeScript Client Generator - Generates TypeScript APIClient classes.
|
|
5
5
|
from __future__ import annotations
|
6
6
|
|
7
7
|
from jinja2 import Environment
|
8
|
+
|
8
9
|
from ...ir import IROperationObject
|
9
10
|
from ..base import GeneratedFile
|
10
11
|
|
12
|
+
|
11
13
|
class ClientGenerator:
|
12
14
|
"""Generates TypeScript APIClient classes (flat and namespaced)."""
|
13
15
|
|
@@ -19,7 +21,7 @@ class ClientGenerator:
|
|
19
21
|
|
20
22
|
def generate_client_file(self):
|
21
23
|
"""Generate client.ts with APIClient class."""
|
22
|
-
|
24
|
+
|
23
25
|
|
24
26
|
# Client class
|
25
27
|
client_code = self._generate_client_class()
|
@@ -11,8 +11,9 @@ This generator creates universal TypeScript functions that:
|
|
11
11
|
from __future__ import annotations
|
12
12
|
|
13
13
|
from jinja2 import Environment
|
14
|
-
|
14
|
+
|
15
15
|
from ...ir import IRContext, IROperationObject
|
16
|
+
from ..base import BaseGenerator, GeneratedFile
|
16
17
|
from .naming import operation_to_method_name
|
17
18
|
|
18
19
|
|
@@ -88,8 +89,8 @@ class FetchersGenerator:
|
|
88
89
|
cfg_accounts_otp_request_create -> createAccountsOtpRequest
|
89
90
|
cfg_accounts_profile_partial_update (PUT) -> partialUpdateAccountsProfilePut
|
90
91
|
"""
|
91
|
-
|
92
|
-
|
92
|
+
|
93
|
+
|
93
94
|
# Remove cfg_ prefix but keep tag + resource for uniqueness
|
94
95
|
operation_id = operation.operation_id
|
95
96
|
# Remove only cfg_/django_cfg_ prefix
|
@@ -97,7 +98,7 @@ class FetchersGenerator:
|
|
97
98
|
operation_id = operation_id.replace('django_cfg_', '', 1)
|
98
99
|
elif operation_id.startswith('cfg_'):
|
99
100
|
operation_id = operation_id.replace('cfg_', '', 1)
|
100
|
-
|
101
|
+
|
101
102
|
# Determine prefix based on HTTP method
|
102
103
|
if operation.http_method == 'GET':
|
103
104
|
prefix = 'get'
|
@@ -112,7 +113,7 @@ class FetchersGenerator:
|
|
112
113
|
prefix = 'delete'
|
113
114
|
else:
|
114
115
|
prefix = ''
|
115
|
-
|
116
|
+
|
116
117
|
return operation_to_method_name(operation_id, operation.http_method, prefix, self.base)
|
117
118
|
|
118
119
|
def _get_param_structure(self, operation: IROperationObject) -> dict:
|
@@ -164,7 +165,7 @@ class FetchersGenerator:
|
|
164
165
|
if operation.request_body:
|
165
166
|
# Check if this is a file upload operation
|
166
167
|
is_multipart = operation.request_body.content_type == "multipart/form-data"
|
167
|
-
|
168
|
+
|
168
169
|
if is_multipart:
|
169
170
|
# For multipart, unpack data properties to match client signature
|
170
171
|
schema_name = operation.request_body.schema_name
|
@@ -176,19 +177,19 @@ class FetchersGenerator:
|
|
176
177
|
# IMPORTANT: Order must match client - required first, then optional
|
177
178
|
required_props = []
|
178
179
|
optional_props = []
|
179
|
-
|
180
|
+
|
180
181
|
for prop_name, prop in schema.properties.items():
|
181
182
|
if prop_name in schema.required:
|
182
183
|
required_props.append(prop_name)
|
183
184
|
else:
|
184
185
|
optional_props.append(prop_name)
|
185
|
-
|
186
|
+
|
186
187
|
# Add required first, then optional (matches client signature)
|
187
188
|
for prop_name in required_props + optional_props:
|
188
189
|
api_call_params.append(f"data.{prop_name}")
|
189
190
|
else:
|
190
191
|
# Inline schema - use data as-is
|
191
|
-
func_params.append(
|
192
|
+
func_params.append("data: FormData")
|
192
193
|
api_call_params.append("data")
|
193
194
|
else:
|
194
195
|
# JSON request body - pass data object
|
@@ -206,7 +207,7 @@ class FetchersGenerator:
|
|
206
207
|
func_params.append(f"data?: {schema_name}")
|
207
208
|
api_call_params.append("data")
|
208
209
|
else:
|
209
|
-
func_params.append(
|
210
|
+
func_params.append("data?: any")
|
210
211
|
api_call_params.append("data")
|
211
212
|
|
212
213
|
# Query parameters (passed as params object, but unpacked when calling API)
|
@@ -332,8 +333,8 @@ class FetchersGenerator:
|
|
332
333
|
API.posts.create
|
333
334
|
API.accounts.otpRequest (custom action)
|
334
335
|
"""
|
335
|
-
|
336
|
-
|
336
|
+
|
337
|
+
|
337
338
|
tag = operation.tags[0] if operation.tags else "default"
|
338
339
|
tag_property = self.base.tag_to_property_name(tag)
|
339
340
|
|
@@ -378,7 +379,7 @@ class FetchersGenerator:
|
|
378
379
|
# Only add if schema exists in components (not inline)
|
379
380
|
if operation.request_body.schema_name in self.context.schemas:
|
380
381
|
schema_names.add(operation.request_body.schema_name)
|
381
|
-
|
382
|
+
|
382
383
|
# Add patch request body schemas
|
383
384
|
if operation.patch_request_body and operation.patch_request_body.schema_name:
|
384
385
|
# Only add if schema exists in components (not inline)
|
@@ -12,18 +12,18 @@ This generator creates a complete TypeScript API client from IR:
|
|
12
12
|
from __future__ import annotations
|
13
13
|
|
14
14
|
import pathlib
|
15
|
+
|
15
16
|
from jinja2 import Environment, FileSystemLoader, select_autoescape
|
16
17
|
|
17
|
-
from ..base import BaseGenerator, GeneratedFile
|
18
18
|
from ...ir import IROperationObject, IRSchemaObject
|
19
|
-
|
20
|
-
from .models_generator import ModelsGenerator
|
21
|
-
from .operations_generator import OperationsGenerator
|
19
|
+
from ..base import BaseGenerator, GeneratedFile
|
22
20
|
from .client_generator import ClientGenerator
|
23
|
-
from .files_generator import FilesGenerator
|
24
|
-
from .schemas_generator import SchemasGenerator
|
25
21
|
from .fetchers_generator import FetchersGenerator
|
22
|
+
from .files_generator import FilesGenerator
|
26
23
|
from .hooks_generator import HooksGenerator
|
24
|
+
from .models_generator import ModelsGenerator
|
25
|
+
from .operations_generator import OperationsGenerator
|
26
|
+
from .schemas_generator import SchemasGenerator
|
27
27
|
|
28
28
|
|
29
29
|
class TypeScriptGenerator(BaseGenerator):
|
@@ -17,10 +17,12 @@ Architecture:
|
|
17
17
|
from __future__ import annotations
|
18
18
|
|
19
19
|
from jinja2 import Environment
|
20
|
+
|
21
|
+
from ...ir import IRContext, IROperationObject
|
20
22
|
from ..base import BaseGenerator, GeneratedFile
|
21
|
-
from ...ir import IROperationObject, IRContext
|
22
23
|
from .naming import operation_to_method_name
|
23
24
|
|
25
|
+
|
24
26
|
class HooksGenerator:
|
25
27
|
"""
|
26
28
|
SWR hooks generator for React.
|
@@ -132,14 +134,14 @@ class HooksGenerator:
|
|
132
134
|
cfg_health_drf_retrieve -> useHealthDrf
|
133
135
|
cfg_accounts_otp_request_create -> useCreateAccountsOtpRequest
|
134
136
|
"""
|
135
|
-
|
137
|
+
|
136
138
|
# Remove cfg_ prefix but keep tag + resource for uniqueness (same as fetchers)
|
137
139
|
operation_id = operation.operation_id
|
138
140
|
if operation_id.startswith('django_cfg_'):
|
139
141
|
operation_id = operation_id.replace('django_cfg_', '', 1)
|
140
142
|
elif operation_id.startswith('cfg_'):
|
141
143
|
operation_id = operation_id.replace('cfg_', '', 1)
|
142
|
-
|
144
|
+
|
143
145
|
# Determine prefix based on HTTP method
|
144
146
|
if operation.http_method == 'GET':
|
145
147
|
prefix = 'use'
|
@@ -154,21 +156,21 @@ class HooksGenerator:
|
|
154
156
|
prefix = 'useDelete'
|
155
157
|
else:
|
156
158
|
prefix = 'use'
|
157
|
-
|
159
|
+
|
158
160
|
# For hooks, path is not critical but pass for consistency
|
159
161
|
return operation_to_method_name(operation_id, operation.http_method, prefix, self.base, operation.path)
|
160
162
|
|
161
163
|
def _operation_to_fetcher_name(self, operation: IROperationObject) -> str:
|
162
164
|
"""Get corresponding fetcher function name (must match fetchers_generator logic)."""
|
163
|
-
|
164
|
-
|
165
|
+
|
166
|
+
|
165
167
|
# Remove cfg_ prefix but keep tag + resource (must match fetchers_generator exactly)
|
166
168
|
operation_id = operation.operation_id
|
167
169
|
if operation_id.startswith('django_cfg_'):
|
168
170
|
operation_id = operation_id.replace('django_cfg_', '', 1)
|
169
171
|
elif operation_id.startswith('cfg_'):
|
170
172
|
operation_id = operation_id.replace('cfg_', '', 1)
|
171
|
-
|
173
|
+
|
172
174
|
# Determine prefix (must match fetchers_generator exactly)
|
173
175
|
if operation.http_method == 'GET':
|
174
176
|
prefix = 'get'
|
@@ -183,7 +185,7 @@ class HooksGenerator:
|
|
183
185
|
prefix = 'delete'
|
184
186
|
else:
|
185
187
|
prefix = ''
|
186
|
-
|
188
|
+
|
187
189
|
# Must match fetchers exactly, including path
|
188
190
|
return operation_to_method_name(operation_id, operation.http_method, prefix, self.base, operation.path)
|
189
191
|
|
@@ -224,7 +226,7 @@ class HooksGenerator:
|
|
224
226
|
func_params.append(f"data?: {schema_name}")
|
225
227
|
fetcher_params.append("data")
|
226
228
|
else:
|
227
|
-
func_params.append(
|
229
|
+
func_params.append("data?: any")
|
228
230
|
fetcher_params.append("data")
|
229
231
|
|
230
232
|
# Query parameters (must come AFTER request body to match fetcher signature!)
|
@@ -382,7 +384,7 @@ class HooksGenerator:
|
|
382
384
|
|
383
385
|
# Get display name for documentation
|
384
386
|
tag_display_name = self.base.tag_to_display_name(tag)
|
385
|
-
|
387
|
+
|
386
388
|
# Get tag file name for fetchers import
|
387
389
|
folder_name = self.base.tag_and_app_to_folder_name(tag, operations)
|
388
390
|
tag_file = folder_name
|
@@ -5,6 +5,7 @@ TypeScript Models Generator - Generates TypeScript interfaces and enums.
|
|
5
5
|
from __future__ import annotations
|
6
6
|
|
7
7
|
from jinja2 import Environment
|
8
|
+
|
8
9
|
from ...ir import IRSchemaObject
|
9
10
|
from ..base import GeneratedFile
|
10
11
|
|
@@ -176,7 +177,7 @@ class ModelsGenerator:
|
|
176
177
|
# - not required: add ? optional marker
|
177
178
|
if schema.nullable:
|
178
179
|
ts_type = f"{ts_type} | null"
|
179
|
-
|
180
|
+
|
180
181
|
optional_marker = "" if is_required else "?"
|
181
182
|
|
182
183
|
# Comment
|
@@ -4,7 +4,6 @@ Simple naming strategy for TypeScript code generation.
|
|
4
4
|
Strategy: Use full operation_id, remove tag prefix, convert to camelCase/PascalCase.
|
5
5
|
"""
|
6
6
|
|
7
|
-
import re
|
8
7
|
|
9
8
|
|
10
9
|
def to_camel_case(s: str) -> str:
|
@@ -73,11 +72,11 @@ def operation_to_method_name(
|
|
73
72
|
"""
|
74
73
|
# Remove tag prefix
|
75
74
|
clean_id = remove_tag_prefix(operation_id)
|
76
|
-
|
75
|
+
|
77
76
|
# For client methods (no prefix): camelCase
|
78
77
|
if not prefix:
|
79
78
|
return to_camel_case(clean_id)
|
80
|
-
|
79
|
+
|
81
80
|
# For fetchers/hooks (with prefix): prefix + PascalCase
|
82
81
|
return f"{prefix}{to_pascal_case(clean_id)}"
|
83
82
|
|
@@ -5,8 +5,10 @@ TypeScript Operations Generator - Generates TypeScript async operation methods.
|
|
5
5
|
from __future__ import annotations
|
6
6
|
|
7
7
|
from jinja2 import Environment
|
8
|
+
|
8
9
|
from ...ir import IROperationObject
|
9
|
-
from .naming import operation_to_method_name
|
10
|
+
from .naming import operation_to_method_name
|
11
|
+
|
10
12
|
|
11
13
|
class OperationsGenerator:
|
12
14
|
"""Generates TypeScript async operation methods."""
|
@@ -18,8 +20,8 @@ class OperationsGenerator:
|
|
18
20
|
|
19
21
|
def generate_operation(self, operation: IROperationObject, remove_tag_prefix: bool = False, in_subclient: bool = False) -> str:
|
20
22
|
"""Generate async method for operation."""
|
21
|
-
|
22
|
-
|
23
|
+
|
24
|
+
|
23
25
|
# Get method name using universal logic
|
24
26
|
# For client methods, we use empty prefix to get short names: list, create, retrieve
|
25
27
|
operation_id = operation.operation_id
|
@@ -59,7 +61,7 @@ class OperationsGenerator:
|
|
59
61
|
# Add required params first, then optional (TypeScript requirement)
|
60
62
|
required_params = []
|
61
63
|
optional_params = []
|
62
|
-
|
64
|
+
|
63
65
|
for prop_name, prop in schema.properties.items():
|
64
66
|
# Check if it's a file field (format: binary)
|
65
67
|
if prop.format == "binary":
|
@@ -71,13 +73,13 @@ class OperationsGenerator:
|
|
71
73
|
param_str = f"{prop_name}: {prop_type}"
|
72
74
|
else:
|
73
75
|
param_str = f"{prop_name}?: {prop_type}"
|
74
|
-
|
76
|
+
|
75
77
|
# Separate required and optional
|
76
78
|
if prop_name in schema.required:
|
77
79
|
required_params.append(param_str)
|
78
80
|
else:
|
79
81
|
optional_params.append(param_str)
|
80
|
-
|
82
|
+
|
81
83
|
# Add required first, then optional
|
82
84
|
params.extend(required_params)
|
83
85
|
params.extend(optional_params)
|
@@ -167,7 +169,7 @@ class OperationsGenerator:
|
|
167
169
|
if use_rest_params and query_params_list:
|
168
170
|
# Extract parameters from args array
|
169
171
|
path_params_count = len(operation.path_parameters)
|
170
|
-
|
172
|
+
|
171
173
|
# For multipart, body params are unpacked as individual fields
|
172
174
|
if is_multipart and operation.request_body:
|
173
175
|
schema_name = operation.request_body.schema_name
|
@@ -178,7 +180,7 @@ class OperationsGenerator:
|
|
178
180
|
body_params_count = 1 # data: FormData
|
179
181
|
else:
|
180
182
|
body_params_count = 1 if (operation.request_body or operation.patch_request_body) else 0
|
181
|
-
|
183
|
+
|
182
184
|
first_query_pos = path_params_count + body_params_count
|
183
185
|
|
184
186
|
# Extract path parameters
|
@@ -223,7 +225,7 @@ class OperationsGenerator:
|
|
223
225
|
if use_rest_params:
|
224
226
|
# Extract params from args array - handle both calling styles
|
225
227
|
path_params_count = len(operation.path_parameters)
|
226
|
-
|
228
|
+
|
227
229
|
# For multipart, body params are unpacked as individual fields
|
228
230
|
if is_multipart and operation.request_body:
|
229
231
|
schema_name = operation.request_body.schema_name
|
@@ -234,7 +236,7 @@ class OperationsGenerator:
|
|
234
236
|
body_params_count = 1 # data: FormData
|
235
237
|
else:
|
236
238
|
body_params_count = 1 if (operation.request_body or operation.patch_request_body) else 0
|
237
|
-
|
239
|
+
|
238
240
|
first_query_pos = path_params_count + body_params_count
|
239
241
|
|
240
242
|
body_lines.append("let params;")
|
@@ -11,8 +11,9 @@ This generator creates Zod schemas for runtime validation:
|
|
11
11
|
from __future__ import annotations
|
12
12
|
|
13
13
|
from jinja2 import Environment
|
14
|
-
|
14
|
+
|
15
15
|
from ...ir import IRContext, IRSchemaObject
|
16
|
+
from ..base import BaseGenerator, GeneratedFile
|
16
17
|
|
17
18
|
|
18
19
|
class SchemasGenerator:
|
@@ -123,7 +124,7 @@ class SchemasGenerator:
|
|
123
124
|
# - not required: field can be undefined (use .optional())
|
124
125
|
if schema.nullable:
|
125
126
|
zod_type = f"{zod_type}.nullable()"
|
126
|
-
|
127
|
+
|
127
128
|
if not is_required:
|
128
129
|
zod_type = f"{zod_type}.optional()"
|
129
130
|
|
@@ -88,6 +88,7 @@ export class APIClient {
|
|
88
88
|
params?: Record<string, any>;
|
89
89
|
body?: any;
|
90
90
|
formData?: FormData;
|
91
|
+
headers?: Record<string, string>;
|
91
92
|
}
|
92
93
|
): Promise<T> {
|
93
94
|
// Wrap request in retry logic if configured
|
@@ -123,16 +124,19 @@ export class APIClient {
|
|
123
124
|
params?: Record<string, any>;
|
124
125
|
body?: any;
|
125
126
|
formData?: FormData;
|
127
|
+
headers?: Record<string, string>;
|
126
128
|
}
|
127
129
|
): Promise<T> {
|
128
130
|
const url = new URL(path, this.baseUrl);
|
129
131
|
const startTime = Date.now();
|
130
132
|
|
131
|
-
// Build headers
|
132
|
-
const headers: Record<string, string> = {
|
133
|
+
// Build headers - start with custom headers from options
|
134
|
+
const headers: Record<string, string> = {
|
135
|
+
...(options?.headers || {})
|
136
|
+
};
|
133
137
|
|
134
138
|
// Don't set Content-Type for FormData (browser will set it with boundary)
|
135
|
-
if (!options?.formData) {
|
139
|
+
if (!options?.formData && !headers['Content-Type']) {
|
136
140
|
headers['Content-Type'] = 'application/json';
|
137
141
|
}
|
138
142
|
|
@@ -322,6 +326,7 @@ export class APIClient {
|
|
322
326
|
params?: Record<string, any>;
|
323
327
|
body?: any;
|
324
328
|
formData?: FormData;
|
329
|
+
headers?: Record<string, string>;
|
325
330
|
}
|
326
331
|
): Promise<T> {
|
327
332
|
// Wrap request in retry logic if configured
|
@@ -343,15 +348,18 @@ export class APIClient {
|
|
343
348
|
params?: Record<string, any>;
|
344
349
|
body?: any;
|
345
350
|
formData?: FormData;
|
351
|
+
headers?: Record<string, string>;
|
346
352
|
}
|
347
353
|
): Promise<T> {
|
348
354
|
const url = new URL(path, this.baseUrl);
|
349
355
|
|
350
|
-
// Build headers
|
351
|
-
const headers: Record<string, string> = {
|
356
|
+
// Build headers - start with custom headers from options
|
357
|
+
const headers: Record<string, string> = {
|
358
|
+
...(options?.headers || {})
|
359
|
+
};
|
352
360
|
|
353
361
|
// Don't set Content-Type for FormData (browser will set it with boundary)
|
354
|
-
if (!options?.formData) {
|
362
|
+
if (!options?.formData && !headers['Content-Type']) {
|
355
363
|
headers['Content-Type'] = 'application/json';
|
356
364
|
}
|
357
365
|
|
@@ -167,20 +167,14 @@ export class API {
|
|
167
167
|
this._client.request = async <T>(
|
168
168
|
method: string,
|
169
169
|
path: string,
|
170
|
-
options?: { params?: Record<string, any>; body?: any }
|
170
|
+
options?: { params?: Record<string, any>; body?: any; formData?: FormData; headers?: Record<string, string> }
|
171
171
|
): Promise<T> => {
|
172
|
-
|
173
|
-
|
174
|
-
if (this._token) {
|
175
|
-
headers['Authorization'] = `Bearer ${this._token}`;
|
176
|
-
}
|
177
|
-
|
178
|
-
// Merge with existing options
|
172
|
+
// Merge Authorization header with existing headers
|
179
173
|
const mergedOptions = {
|
180
174
|
...options,
|
181
175
|
headers: {
|
182
|
-
...(options
|
183
|
-
...
|
176
|
+
...(options?.headers || {}),
|
177
|
+
...(this._token ? { 'Authorization': `Bearer ${this._token}` } : {}),
|
184
178
|
},
|
185
179
|
};
|
186
180
|
|
@@ -7,7 +7,8 @@ Detects which Django apps belong to which groups, with wildcard support.
|
|
7
7
|
import fnmatch
|
8
8
|
import logging
|
9
9
|
from typing import Dict, List, Set
|
10
|
-
|
10
|
+
|
11
|
+
from ..config import OpenAPIConfig
|
11
12
|
|
12
13
|
logger = logging.getLogger(__name__)
|
13
14
|
|
@@ -8,6 +8,7 @@ import logging
|
|
8
8
|
import sys
|
9
9
|
from types import ModuleType
|
10
10
|
from typing import Dict, List, Optional
|
11
|
+
|
11
12
|
from ..config import OpenAPIConfig
|
12
13
|
from .detector import GroupDetector
|
13
14
|
|
@@ -205,7 +206,7 @@ class GroupManager:
|
|
205
206
|
|
206
207
|
# Check if this is django-cfg built-in apps group
|
207
208
|
is_django_cfg_group = all(
|
208
|
-
app_name.startswith("django_cfg.apps.")
|
209
|
+
app_name.startswith("django_cfg.apps.")
|
209
210
|
for app_name in apps
|
210
211
|
)
|
211
212
|
|
@@ -8,8 +8,8 @@ to improve OpenAPI schema quality.
|
|
8
8
|
from .checker import ValidationChecker
|
9
9
|
from .fixer import SafeFixer
|
10
10
|
from .reporter import IssueReporter
|
11
|
-
from .safety import SafetyManager
|
12
11
|
from .rules.base import Issue, Severity, ValidationRule
|
12
|
+
from .safety import SafetyManager
|
13
13
|
|
14
14
|
__all__ = [
|
15
15
|
'ValidationChecker',
|
@@ -3,7 +3,7 @@
|
|
3
3
|
import json
|
4
4
|
from collections import defaultdict
|
5
5
|
from pathlib import Path
|
6
|
-
from typing import Dict, List
|
6
|
+
from typing import Any, Dict, List
|
7
7
|
|
8
8
|
from .rules import Issue, Severity
|
9
9
|
|
@@ -90,7 +90,7 @@ class IssueReporter:
|
|
90
90
|
|
91
91
|
stats = self._get_statistics(issues)
|
92
92
|
|
93
|
-
print(
|
93
|
+
print("\nš Validation Summary")
|
94
94
|
print(f" Total: {stats['total']} issue(s)")
|
95
95
|
print(f" Errors: {stats['by_severity']['error']} | "
|
96
96
|
f"Warnings: {stats['by_severity']['warning']} | "
|
@@ -9,11 +9,11 @@ Ensures all code modifications are:
|
|
9
9
|
"""
|
10
10
|
|
11
11
|
import ast
|
12
|
+
import logging
|
12
13
|
import shutil
|
13
14
|
from datetime import datetime, timedelta
|
14
15
|
from pathlib import Path
|
15
16
|
from typing import Dict, List, Optional
|
16
|
-
import logging
|
17
17
|
|
18
18
|
logger = logging.getLogger(__name__)
|
19
19
|
|