django-cfg 1.4.20__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/migrations/0003_alter_documentarchive_archive_type.py +29 -0
- 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 +35 -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 +36 -35
- 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 +12 -13
- 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.20.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.20.dist-info/RECORD +0 -1110
- /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.20.dist-info ā django_cfg-1.4.23.dist-info}/WHEEL +0 -0
- {django_cfg-1.4.20.dist-info ā django_cfg-1.4.23.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.4.20.dist-info ā django_cfg-1.4.23.dist-info}/licenses/LICENSE +0 -0
@@ -23,7 +23,7 @@ class Icons:
|
|
23
23
|
icon = Icons.SETTINGS
|
24
24
|
icon = Icons.PEOPLE
|
25
25
|
"""
|
26
|
-
|
26
|
+
|
27
27
|
_10K: Final[str] = "10k"
|
28
28
|
_10MP: Final[str] = "10mp"
|
29
29
|
_11MP: Final[str] = "11mp"
|
@@ -2275,7 +2275,7 @@ class Icons:
|
|
2275
2275
|
# IDE-friendly icon categories for easy discovery
|
2276
2276
|
class IconCategories:
|
2277
2277
|
"""Categorized icon collections for easy discovery."""
|
2278
|
-
|
2278
|
+
|
2279
2279
|
NAVIGATION: Dict[str, str] = {
|
2280
2280
|
'add_home': Icons.ADD_HOME,
|
2281
2281
|
'add_home_work': Icons.ADD_HOME_WORK,
|
@@ -2298,7 +2298,7 @@ class IconCategories:
|
|
2298
2298
|
'arrow_circle_up': Icons.ARROW_CIRCLE_UP,
|
2299
2299
|
'arrow_downward': Icons.ARROW_DOWNWARD,
|
2300
2300
|
}
|
2301
|
-
|
2301
|
+
|
2302
2302
|
USERS: Dict[str, str] = {
|
2303
2303
|
'account_balance': Icons.ACCOUNT_BALANCE,
|
2304
2304
|
'account_balance_wallet': Icons.ACCOUNT_BALANCE_WALLET,
|
@@ -2321,7 +2321,7 @@ class IconCategories:
|
|
2321
2321
|
'group_off': Icons.GROUP_OFF,
|
2322
2322
|
'group_remove': Icons.GROUP_REMOVE,
|
2323
2323
|
}
|
2324
|
-
|
2324
|
+
|
2325
2325
|
DOCUMENTS: Dict[str, str] = {
|
2326
2326
|
'article': Icons.ARTICLE,
|
2327
2327
|
'attach_file': Icons.ATTACH_FILE,
|
@@ -2344,7 +2344,7 @@ class IconCategories:
|
|
2344
2344
|
'file_download_off': Icons.FILE_DOWNLOAD_OFF,
|
2345
2345
|
'file_open': Icons.FILE_OPEN,
|
2346
2346
|
}
|
2347
|
-
|
2347
|
+
|
2348
2348
|
COMMUNICATION: Dict[str, str] = {
|
2349
2349
|
'3p': Icons._3P,
|
2350
2350
|
'add_call': Icons.ADD_CALL,
|
@@ -2367,7 +2367,7 @@ class IconCategories:
|
|
2367
2367
|
'call_missed': Icons.CALL_MISSED,
|
2368
2368
|
'call_missed': Icons.CALL_MISSED,
|
2369
2369
|
}
|
2370
|
-
|
2370
|
+
|
2371
2371
|
AI_AUTOMATION: Dict[str, str] = {
|
2372
2372
|
'auto_awesome': Icons.AUTO_AWESOME,
|
2373
2373
|
'auto_awesome_mosaic': Icons.AUTO_AWESOME_MOSAIC,
|
@@ -2390,7 +2390,7 @@ class IconCategories:
|
|
2390
2390
|
'hdr_auto_select': Icons.HDR_AUTO_SELECT,
|
2391
2391
|
'memory': Icons.MEMORY,
|
2392
2392
|
}
|
2393
|
-
|
2393
|
+
|
2394
2394
|
ACTIONS: Dict[str, str] = {
|
2395
2395
|
'add': Icons.ADD,
|
2396
2396
|
'add_a_photo': Icons.ADD_A_PHOTO,
|
@@ -2413,7 +2413,7 @@ class IconCategories:
|
|
2413
2413
|
'add_task': Icons.ADD_TASK,
|
2414
2414
|
'add_to_drive': Icons.ADD_TO_DRIVE,
|
2415
2415
|
}
|
2416
|
-
|
2416
|
+
|
2417
2417
|
STATUS: Dict[str, str] = {
|
2418
2418
|
'check': Icons.CHECK,
|
2419
2419
|
'check_box': Icons.CHECK_BOX,
|
@@ -2436,7 +2436,7 @@ class IconCategories:
|
|
2436
2436
|
'pending': Icons.PENDING,
|
2437
2437
|
'pending_actions': Icons.PENDING_ACTIONS,
|
2438
2438
|
}
|
2439
|
-
|
2439
|
+
|
2440
2440
|
MEDIA: Dict[str, str] = {
|
2441
2441
|
'assistant_photo': Icons.ASSISTANT_PHOTO,
|
2442
2442
|
'audiotrack': Icons.AUDIOTRACK,
|
@@ -2459,7 +2459,7 @@ class IconCategories:
|
|
2459
2459
|
'flip_camera_android': Icons.FLIP_CAMERA_ANDROID,
|
2460
2460
|
'flip_camera_ios': Icons.FLIP_CAMERA_IOS,
|
2461
2461
|
}
|
2462
|
-
|
2462
|
+
|
2463
2463
|
SETTINGS: Dict[str, str] = {
|
2464
2464
|
'admin_panel_settings': Icons.ADMIN_PANEL_SETTINGS,
|
2465
2465
|
'app_settings_alt': Icons.APP_SETTINGS_ALT,
|
@@ -2482,7 +2482,7 @@ class IconCategories:
|
|
2482
2482
|
'settings_input_hdmi': Icons.SETTINGS_INPUT_HDMI,
|
2483
2483
|
'settings_overscan': Icons.SETTINGS_OVERSCAN,
|
2484
2484
|
}
|
2485
|
-
|
2485
|
+
|
2486
2486
|
COMMERCE: Dict[str, str] = {
|
2487
2487
|
'attach_money': Icons.ATTACH_MONEY,
|
2488
2488
|
'local_convenience_store': Icons.LOCAL_CONVENIENCE_STORE,
|
@@ -2503,7 +2503,7 @@ class IconCategories:
|
|
2503
2503
|
'store_mall_directory': Icons.STORE_MALL_DIRECTORY,
|
2504
2504
|
'storefront': Icons.STOREFRONT,
|
2505
2505
|
}
|
2506
|
-
|
2506
|
+
|
2507
2507
|
TRAVEL: Dict[str, str] = {
|
2508
2508
|
'car_crash': Icons.CAR_CRASH,
|
2509
2509
|
'car_rental': Icons.CAR_RENTAL,
|
@@ -2526,7 +2526,7 @@ class IconCategories:
|
|
2526
2526
|
'directions_railway': Icons.DIRECTIONS_RAILWAY,
|
2527
2527
|
'directions_railway_filled': Icons.DIRECTIONS_RAILWAY_FILLED,
|
2528
2528
|
}
|
2529
|
-
|
2529
|
+
|
2530
2530
|
SOCIAL: Dict[str, str] = {
|
2531
2531
|
'18_up_rating': Icons._18_UP_RATING,
|
2532
2532
|
'6_ft_apart': Icons._6_FT_APART,
|
@@ -2549,7 +2549,7 @@ class IconCategories:
|
|
2549
2549
|
'compost': Icons.COMPOST,
|
2550
2550
|
'connect_without_contact': Icons.CONNECT_WITHOUT_CONTACT,
|
2551
2551
|
}
|
2552
|
-
|
2552
|
+
|
2553
2553
|
DEVICE: Dict[str, str] = {
|
2554
2554
|
'1x_mobiledata': Icons._1X_MOBILEDATA,
|
2555
2555
|
'30fps': Icons._30FPS,
|
@@ -2572,7 +2572,7 @@ class IconCategories:
|
|
2572
2572
|
'battery_0_bar': Icons.BATTERY_0_BAR,
|
2573
2573
|
'battery_1_bar': Icons.BATTERY_1_BAR,
|
2574
2574
|
}
|
2575
|
-
|
2575
|
+
|
2576
2576
|
EDITOR: Dict[str, str] = {
|
2577
2577
|
'add_chart': Icons.ADD_CHART,
|
2578
2578
|
'add_comment': Icons.ADD_COMMENT,
|
@@ -2595,7 +2595,7 @@ class IconCategories:
|
|
2595
2595
|
'bar_chart': Icons.BAR_CHART,
|
2596
2596
|
'border_all': Icons.BORDER_ALL,
|
2597
2597
|
}
|
2598
|
-
|
2598
|
+
|
2599
2599
|
MAPS: Dict[str, str] = {
|
2600
2600
|
'360': Icons._360,
|
2601
2601
|
'add_business': Icons.ADD_BUSINESS,
|
@@ -2618,7 +2618,7 @@ class IconCategories:
|
|
2618
2618
|
'bus_alert': Icons.BUS_ALERT,
|
2619
2619
|
'car_crash': Icons.CAR_CRASH,
|
2620
2620
|
}
|
2621
|
-
|
2621
|
+
|
2622
2622
|
NOTIFICATION: Dict[str, str] = {
|
2623
2623
|
'account_tree': Icons.ACCOUNT_TREE,
|
2624
2624
|
'adb': Icons.ADB,
|
@@ -2641,7 +2641,7 @@ class IconCategories:
|
|
2641
2641
|
'disc_full': Icons.DISC_FULL,
|
2642
2642
|
'do_disturb': Icons.DO_DISTURB,
|
2643
2643
|
}
|
2644
|
-
|
2644
|
+
|
2645
2645
|
CONTENT: Dict[str, str] = {
|
2646
2646
|
'30fps_select': Icons._30FPS_SELECT,
|
2647
2647
|
'60fps_select': Icons._60FPS_SELECT,
|
@@ -2664,7 +2664,7 @@ class IconCategories:
|
|
2664
2664
|
'content_copy': Icons.CONTENT_COPY,
|
2665
2665
|
'content_copy': Icons.CONTENT_COPY,
|
2666
2666
|
}
|
2667
|
-
|
2667
|
+
|
2668
2668
|
HARDWARE: Dict[str, str] = {
|
2669
2669
|
'adf_scanner': Icons.ADF_SCANNER,
|
2670
2670
|
'battery_0_bar': Icons.BATTERY_0_BAR,
|
@@ -2687,7 +2687,7 @@ class IconCategories:
|
|
2687
2687
|
'browser_updated': Icons.BROWSER_UPDATED,
|
2688
2688
|
'cast': Icons.CAST,
|
2689
2689
|
}
|
2690
|
-
|
2690
|
+
|
2691
2691
|
IMAGE: Dict[str, str] = {
|
2692
2692
|
'10mp': Icons._10MP,
|
2693
2693
|
'11mp': Icons._11MP,
|
@@ -2710,7 +2710,7 @@ class IconCategories:
|
|
2710
2710
|
'4mp': Icons._4MP,
|
2711
2711
|
'5mp': Icons._5MP,
|
2712
2712
|
}
|
2713
|
-
|
2713
|
+
|
2714
2714
|
AV: Dict[str, str] = {
|
2715
2715
|
'10k': Icons._10K,
|
2716
2716
|
'1k': Icons._1K,
|
@@ -2733,7 +2733,7 @@ class IconCategories:
|
|
2733
2733
|
'9k': Icons._9K,
|
2734
2734
|
'9k_plus': Icons._9K_PLUS,
|
2735
2735
|
}
|
2736
|
-
|
2736
|
+
|
2737
2737
|
PLACES: Dict[str, str] = {
|
2738
2738
|
'ac_unit': Icons.AC_UNIT,
|
2739
2739
|
'airport_shuttle': Icons.AIRPORT_SHUTTLE,
|
@@ -2756,7 +2756,7 @@ class IconCategories:
|
|
2756
2756
|
'checkroom': Icons.CHECKROOM,
|
2757
2757
|
'child_care': Icons.CHILD_CARE,
|
2758
2758
|
}
|
2759
|
-
|
2759
|
+
|
2760
2760
|
FILE: Dict[str, str] = {
|
2761
2761
|
'approval': Icons.APPROVAL,
|
2762
2762
|
'archive': Icons.ARCHIVE,
|
@@ -2779,7 +2779,7 @@ class IconCategories:
|
|
2779
2779
|
'download': Icons.DOWNLOAD,
|
2780
2780
|
'download_done': Icons.DOWNLOAD_DONE,
|
2781
2781
|
}
|
2782
|
-
|
2782
|
+
|
2783
2783
|
TOGGLE: Dict[str, str] = {
|
2784
2784
|
'3d_rotation': Icons._3D_ROTATION,
|
2785
2785
|
'airplanemode_off': Icons.AIRPLANEMODE_OFF,
|
@@ -2802,7 +2802,7 @@ class IconCategories:
|
|
2802
2802
|
'calendar_month': Icons.CALENDAR_MONTH,
|
2803
2803
|
'calendar_view_month': Icons.CALENDAR_VIEW_MONTH,
|
2804
2804
|
}
|
2805
|
-
|
2805
|
+
|
2806
2806
|
OTHER: Dict[str, str] = {
|
2807
2807
|
'10k': Icons._10K,
|
2808
2808
|
'10mp': Icons._10MP,
|
@@ -2825,7 +2825,7 @@ class IconCategories:
|
|
2825
2825
|
'22mp': Icons._22MP,
|
2826
2826
|
'23mp': Icons._23MP,
|
2827
2827
|
}
|
2828
|
-
|
2828
|
+
|
2829
2829
|
|
2830
2830
|
|
2831
2831
|
# Validation function for IDE
|
@@ -2846,6 +2846,6 @@ def validate_icon_constant(icon_name: str) -> bool:
|
|
2846
2846
|
# Export commonly used icons for direct import
|
2847
2847
|
__all__ = [
|
2848
2848
|
'Icons',
|
2849
|
-
'IconCategories',
|
2849
|
+
'IconCategories',
|
2850
2850
|
'validate_icon_constant',
|
2851
2851
|
]
|
@@ -6,13 +6,13 @@ This script automatically downloads the latest Material Icons from Google
|
|
6
6
|
and generates IDE-friendly constants for better autocompletion.
|
7
7
|
"""
|
8
8
|
|
9
|
-
import os
|
10
|
-
import sys
|
11
9
|
import json
|
12
|
-
import requests
|
13
|
-
from pathlib import Path
|
14
|
-
from typing import Dict, List, Set
|
15
10
|
import logging
|
11
|
+
import sys
|
12
|
+
from pathlib import Path
|
13
|
+
from typing import Dict, List
|
14
|
+
|
15
|
+
import requests
|
16
16
|
|
17
17
|
# Setup logging
|
18
18
|
logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s')
|
@@ -21,27 +21,27 @@ logger = logging.getLogger(__name__)
|
|
21
21
|
|
22
22
|
class MaterialIconsGenerator:
|
23
23
|
"""Generator for Material Icons constants."""
|
24
|
-
|
24
|
+
|
25
25
|
# URLs for different sources
|
26
26
|
SOURCES = {
|
27
27
|
'codepoints': 'https://raw.githubusercontent.com/google/material-design-icons/master/font/MaterialIcons-Regular.codepoints',
|
28
28
|
'metadata': 'https://fonts.google.com/metadata/icons',
|
29
29
|
'github_api': 'https://api.github.com/repos/google/material-design-icons/contents/symbols'
|
30
30
|
}
|
31
|
-
|
31
|
+
|
32
32
|
def __init__(self, output_dir: Path):
|
33
33
|
self.output_dir = Path(output_dir)
|
34
34
|
self.icons_data: Dict[str, str] = {}
|
35
35
|
self.categories: Dict[str, List[str]] = {}
|
36
|
-
|
36
|
+
|
37
37
|
def download_codepoints(self) -> Dict[str, str]:
|
38
38
|
"""Download Material Icons codepoints from GitHub."""
|
39
39
|
logger.info("š„ Downloading Material Icons codepoints...")
|
40
|
-
|
40
|
+
|
41
41
|
try:
|
42
42
|
response = requests.get(self.SOURCES['codepoints'], timeout=30)
|
43
43
|
response.raise_for_status()
|
44
|
-
|
44
|
+
|
45
45
|
icons = {}
|
46
46
|
for line in response.text.strip().split('\n'):
|
47
47
|
if line.strip() and not line.startswith('#'):
|
@@ -50,29 +50,29 @@ class MaterialIconsGenerator:
|
|
50
50
|
name = parts[0]
|
51
51
|
codepoint = parts[1]
|
52
52
|
icons[name] = codepoint
|
53
|
-
|
53
|
+
|
54
54
|
logger.info(f"ā
Downloaded {len(icons)} icons from codepoints")
|
55
55
|
return icons
|
56
|
-
|
56
|
+
|
57
57
|
except Exception as e:
|
58
58
|
logger.error(f"ā Failed to download codepoints: {e}")
|
59
59
|
return {}
|
60
|
-
|
60
|
+
|
61
61
|
def download_metadata(self) -> Dict[str, any]:
|
62
62
|
"""Download Material Icons metadata from Google Fonts."""
|
63
63
|
logger.info("š„ Downloading Material Icons metadata...")
|
64
|
-
|
64
|
+
|
65
65
|
try:
|
66
66
|
response = requests.get(self.SOURCES['metadata'], timeout=30)
|
67
67
|
response.raise_for_status()
|
68
|
-
|
68
|
+
|
69
69
|
# Remove the first line (it's not JSON)
|
70
70
|
content = response.text
|
71
71
|
if content.startswith(")]}'"):
|
72
72
|
content = content[4:]
|
73
|
-
|
73
|
+
|
74
74
|
metadata = json.loads(content)
|
75
|
-
|
75
|
+
|
76
76
|
# Extract icons from metadata
|
77
77
|
icons_metadata = {}
|
78
78
|
if 'icons' in metadata:
|
@@ -85,14 +85,14 @@ class MaterialIconsGenerator:
|
|
85
85
|
'version': icon.get('version', 1),
|
86
86
|
'popularity': icon.get('popularity', 0)
|
87
87
|
}
|
88
|
-
|
88
|
+
|
89
89
|
logger.info(f"ā
Downloaded metadata for {len(icons_metadata)} icons")
|
90
90
|
return icons_metadata
|
91
|
-
|
91
|
+
|
92
92
|
except Exception as e:
|
93
93
|
logger.warning(f"ā ļø Failed to download metadata: {e}")
|
94
94
|
return {}
|
95
|
-
|
95
|
+
|
96
96
|
def categorize_icons(self, metadata: Dict[str, any]) -> Dict[str, List[str]]:
|
97
97
|
"""Categorize icons based on metadata."""
|
98
98
|
categories = {
|
@@ -120,7 +120,7 @@ class MaterialIconsGenerator:
|
|
120
120
|
'file': [],
|
121
121
|
'toggle': [],
|
122
122
|
}
|
123
|
-
|
123
|
+
|
124
124
|
# Keywords for categorization
|
125
125
|
category_keywords = {
|
126
126
|
'navigation': ['dashboard', 'menu', 'home', 'apps', 'navigate', 'arrow', 'chevron', 'expand', 'more'],
|
@@ -147,7 +147,7 @@ class MaterialIconsGenerator:
|
|
147
147
|
'file': ['folder', 'file', 'upload', 'download', 'attach', 'archive'],
|
148
148
|
'toggle': ['toggle', 'switch', 'radio', 'checkbox', 'on', 'off'],
|
149
149
|
}
|
150
|
-
|
150
|
+
|
151
151
|
for icon_name in self.icons_data.keys():
|
152
152
|
# Use metadata categories if available
|
153
153
|
if icon_name in metadata and metadata[icon_name].get('categories'):
|
@@ -156,7 +156,7 @@ class MaterialIconsGenerator:
|
|
156
156
|
if cat_key in categories:
|
157
157
|
categories[cat_key].append(icon_name)
|
158
158
|
continue
|
159
|
-
|
159
|
+
|
160
160
|
# Fallback to keyword matching
|
161
161
|
categorized = False
|
162
162
|
for category, keywords in category_keywords.items():
|
@@ -164,29 +164,29 @@ class MaterialIconsGenerator:
|
|
164
164
|
categories[category].append(icon_name)
|
165
165
|
categorized = True
|
166
166
|
break
|
167
|
-
|
167
|
+
|
168
168
|
# Default category for uncategorized icons
|
169
169
|
if not categorized:
|
170
170
|
categories.setdefault('other', []).append(icon_name)
|
171
|
-
|
171
|
+
|
172
172
|
# Remove empty categories and sort icons
|
173
173
|
return {k: sorted(v) for k, v in categories.items() if v}
|
174
|
-
|
174
|
+
|
175
175
|
def generate_constants_file(self):
|
176
176
|
"""Generate the constants.py file with all icons."""
|
177
177
|
logger.info("š Generating constants.py...")
|
178
|
-
|
178
|
+
|
179
179
|
# Sort icons alphabetically
|
180
180
|
sorted_icons = sorted(self.icons_data.keys())
|
181
|
-
|
182
|
-
content = '''"""
|
181
|
+
|
182
|
+
content = f'''"""
|
183
183
|
Material Icons constants for IDE autocompletion.
|
184
184
|
|
185
185
|
This file is auto-generated by generate_icons.py script.
|
186
186
|
DO NOT EDIT MANUALLY - run the script to update.
|
187
187
|
|
188
188
|
Generated from Google Material Design Icons.
|
189
|
-
Total icons: {
|
189
|
+
Total icons: {len(sorted_icons)}
|
190
190
|
"""
|
191
191
|
|
192
192
|
from typing import Dict, Final
|
@@ -205,8 +205,8 @@ class Icons:
|
|
205
205
|
icon = Icons.PEOPLE
|
206
206
|
"""
|
207
207
|
|
208
|
-
'''
|
209
|
-
|
208
|
+
'''
|
209
|
+
|
210
210
|
# Generate icon constants
|
211
211
|
for icon_name in sorted_icons:
|
212
212
|
# Convert to valid Python identifier
|
@@ -215,7 +215,7 @@ class Icons:
|
|
215
215
|
if const_name[0].isdigit():
|
216
216
|
const_name = f'_{const_name}'
|
217
217
|
content += f' {const_name}: Final[str] = "{icon_name}"\n'
|
218
|
-
|
218
|
+
|
219
219
|
# Add common aliases
|
220
220
|
content += '''
|
221
221
|
# Common aliases for better IDE experience
|
@@ -232,14 +232,14 @@ class Icons:
|
|
232
232
|
|
233
233
|
|
234
234
|
'''
|
235
|
-
|
235
|
+
|
236
236
|
# Generate categories
|
237
237
|
content += '''# IDE-friendly icon categories for easy discovery
|
238
238
|
class IconCategories:
|
239
239
|
"""Categorized icon collections for easy discovery."""
|
240
240
|
|
241
241
|
'''
|
242
|
-
|
242
|
+
|
243
243
|
for category, icons in self.categories.items():
|
244
244
|
if len(icons) > 0:
|
245
245
|
category_name = category.upper()
|
@@ -251,7 +251,7 @@ class IconCategories:
|
|
251
251
|
const_name = f'_{const_name}'
|
252
252
|
content += f" '{icon}': Icons.{const_name},\n"
|
253
253
|
content += ' }\n \n'
|
254
|
-
|
254
|
+
|
255
255
|
# Add validation function
|
256
256
|
content += '''
|
257
257
|
|
@@ -277,18 +277,18 @@ __all__ = [
|
|
277
277
|
'validate_icon_constant',
|
278
278
|
]
|
279
279
|
'''
|
280
|
-
|
280
|
+
|
281
281
|
# Write to file
|
282
282
|
output_file = self.output_dir / 'constants.py'
|
283
283
|
with open(output_file, 'w', encoding='utf-8') as f:
|
284
284
|
f.write(content)
|
285
|
-
|
285
|
+
|
286
286
|
logger.info(f"ā
Generated {output_file} with {len(sorted_icons)} icons")
|
287
|
-
|
287
|
+
|
288
288
|
def generate_readme(self):
|
289
289
|
"""Generate README.md for the icons module."""
|
290
290
|
logger.info("š Generating README.md...")
|
291
|
-
|
291
|
+
|
292
292
|
content = f'''# Material Icons for Django CFG Unfold
|
293
293
|
|
294
294
|
This module provides Material Design Icons integration for Django CFG Unfold admin interface.
|
@@ -412,14 +412,14 @@ print(f"Did you mean: {{suggestions}}")
|
|
412
412
|
|
413
413
|
*This file is auto-generated. Last updated: {self._get_current_timestamp()}*
|
414
414
|
'''
|
415
|
-
|
415
|
+
|
416
416
|
# Write to file
|
417
417
|
output_file = self.output_dir / 'README.md'
|
418
418
|
with open(output_file, 'w', encoding='utf-8') as f:
|
419
419
|
f.write(content)
|
420
|
-
|
420
|
+
|
421
421
|
logger.info(f"ā
Generated {output_file}")
|
422
|
-
|
422
|
+
|
423
423
|
def _generate_categories_list(self) -> str:
|
424
424
|
"""Generate markdown list of categories."""
|
425
425
|
lines = []
|
@@ -428,37 +428,37 @@ print(f"Did you mean: {{suggestions}}")
|
|
428
428
|
example_icons = ', '.join(icons[:5])
|
429
429
|
if len(icons) > 5:
|
430
430
|
example_icons += f", ... (+{len(icons) - 5} more)"
|
431
|
-
|
431
|
+
|
432
432
|
lines.append(f"- **{category.title()}** ({icon_count} icons): {example_icons}")
|
433
|
-
|
433
|
+
|
434
434
|
return '\n'.join(lines)
|
435
|
-
|
435
|
+
|
436
436
|
def _get_current_timestamp(self) -> str:
|
437
437
|
"""Get current timestamp for documentation."""
|
438
438
|
from datetime import datetime
|
439
439
|
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
440
|
-
|
440
|
+
|
441
441
|
def run(self):
|
442
442
|
"""Run the complete icon generation process."""
|
443
443
|
logger.info("š Starting Material Icons generation...")
|
444
|
-
|
444
|
+
|
445
445
|
# Download icons data
|
446
446
|
self.icons_data = self.download_codepoints()
|
447
447
|
if not self.icons_data:
|
448
448
|
logger.error("ā Failed to download icons data")
|
449
449
|
return False
|
450
|
-
|
450
|
+
|
451
451
|
# Download metadata for categorization
|
452
452
|
metadata = self.download_metadata()
|
453
|
-
|
453
|
+
|
454
454
|
# Categorize icons
|
455
455
|
self.categories = self.categorize_icons(metadata)
|
456
456
|
logger.info(f"š Categorized icons into {len(self.categories)} categories")
|
457
|
-
|
457
|
+
|
458
458
|
# Generate files
|
459
459
|
self.generate_constants_file()
|
460
460
|
self.generate_readme()
|
461
|
-
|
461
|
+
|
462
462
|
logger.info("š Icon generation completed successfully!")
|
463
463
|
return True
|
464
464
|
|
@@ -467,10 +467,10 @@ def main():
|
|
467
467
|
"""Main entry point."""
|
468
468
|
# Get the directory where this script is located
|
469
469
|
script_dir = Path(__file__).parent
|
470
|
-
|
470
|
+
|
471
471
|
generator = MaterialIconsGenerator(script_dir)
|
472
472
|
success = generator.run()
|
473
|
-
|
473
|
+
|
474
474
|
if success:
|
475
475
|
print("\nā
Material Icons updated successfully!")
|
476
476
|
print("š Files generated:")
|
@@ -8,10 +8,12 @@ Usage:
|
|
8
8
|
python manage.py check_endpoints --json
|
9
9
|
"""
|
10
10
|
|
11
|
+
import json
|
12
|
+
|
11
13
|
from django.core.management.base import BaseCommand
|
12
14
|
from django.urls import reverse
|
15
|
+
|
13
16
|
from django_cfg.apps.api.endpoints.checker import check_all_endpoints
|
14
|
-
import json
|
15
17
|
|
16
18
|
|
17
19
|
class Command(BaseCommand):
|
@@ -158,10 +160,10 @@ class Command(BaseCommand):
|
|
158
160
|
self.stdout.write(self.style.WARNING(f' ā ļø {endpoint["reason"]}'))
|
159
161
|
|
160
162
|
if endpoint.get('required_auth'):
|
161
|
-
self.stdout.write(
|
163
|
+
self.stdout.write(' š Required JWT authentication')
|
162
164
|
|
163
165
|
if endpoint.get('rate_limited'):
|
164
|
-
self.stdout.write(
|
166
|
+
self.stdout.write(' ā±ļø Rate limited (429)')
|
165
167
|
|
166
168
|
self.stdout.write('')
|
167
169
|
|