django-cfg 1.3.13__py3-none-any.whl → 1.4.0__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 +1 -1
- django_cfg/apps/accounts/admin/user_admin.py +39 -16
- django_cfg/apps/accounts/serializers/profile.py +1 -1
- django_cfg/apps/accounts/services/otp_service.py +18 -11
- django_cfg/apps/accounts/signals.py +15 -24
- django_cfg/apps/accounts/utils/notifications.py +217 -358
- django_cfg/apps/accounts/views/otp.py +2 -2
- django_cfg/apps/accounts/views/webhook.py +1 -1
- django_cfg/apps/agents/core/django_agent.py +1 -1
- django_cfg/apps/api/commands/views.py +66 -83
- django_cfg/apps/api/health/drf_views.py +269 -0
- django_cfg/apps/api/health/serializers.py +45 -0
- django_cfg/apps/api/health/urls.py +6 -1
- django_cfg/apps/knowbase/admin/actions/__init__.py +13 -0
- django_cfg/apps/knowbase/admin/actions/visibility_actions.py +56 -0
- django_cfg/apps/knowbase/admin/document_admin.py +136 -270
- django_cfg/apps/knowbase/admin/helpers/__init__.py +17 -0
- django_cfg/apps/knowbase/admin/helpers/configs.py +72 -0
- django_cfg/apps/knowbase/admin/helpers/display_helpers.py +156 -0
- django_cfg/apps/knowbase/admin/helpers/statistics.py +108 -0
- django_cfg/apps/knowbase/config/constance_fields.py +1 -1
- django_cfg/apps/knowbase/config/settings.py +2 -2
- django_cfg/apps/knowbase/mixins/__init__.py +19 -2
- django_cfg/apps/knowbase/mixins/config/__init__.py +14 -0
- django_cfg/apps/knowbase/mixins/config/defaults.py +75 -0
- django_cfg/apps/knowbase/mixins/config/meta_config.py +120 -0
- django_cfg/apps/knowbase/mixins/creator.py +10 -10
- django_cfg/apps/knowbase/mixins/external_data_mixin.py +105 -403
- django_cfg/apps/knowbase/mixins/generators/__init__.py +16 -0
- django_cfg/apps/knowbase/mixins/generators/content_generator.py +218 -0
- django_cfg/apps/knowbase/mixins/generators/field_analyzer.py +76 -0
- django_cfg/apps/knowbase/mixins/generators/metadata_generator.py +124 -0
- django_cfg/apps/knowbase/mixins/service.py +2 -2
- django_cfg/apps/knowbase/services/archive/__init__.py +1 -0
- django_cfg/apps/knowbase/services/archive/analyzers/__init__.py +17 -0
- django_cfg/apps/knowbase/services/archive/analyzers/complexity_analyzer.py +33 -0
- django_cfg/apps/knowbase/services/archive/analyzers/purpose_detector.py +36 -0
- django_cfg/apps/knowbase/services/archive/analyzers/quality_analyzer.py +39 -0
- django_cfg/apps/knowbase/services/archive/analyzers/tag_generator.py +103 -0
- django_cfg/apps/knowbase/services/archive/chunking/__init__.py +19 -0
- django_cfg/apps/knowbase/services/archive/chunking/base.py +81 -0
- django_cfg/apps/knowbase/services/archive/chunking/json_chunker.py +62 -0
- django_cfg/apps/knowbase/services/archive/chunking/markdown_chunker.py +107 -0
- django_cfg/apps/knowbase/services/archive/chunking/python_chunker.py +248 -0
- django_cfg/apps/knowbase/services/archive/chunking/text_chunker.py +70 -0
- django_cfg/apps/knowbase/services/archive/chunking_service.py +110 -729
- django_cfg/apps/knowbase/services/archive/context/__init__.py +14 -0
- django_cfg/apps/knowbase/services/archive/context/builders.py +220 -0
- django_cfg/apps/knowbase/services/archive/context/models.py +38 -0
- django_cfg/apps/knowbase/services/embedding/models.py +18 -14
- django_cfg/apps/knowbase/services/embedding/processors.py +6 -3
- django_cfg/apps/knowbase/tasks/document_processing.py +11 -3
- django_cfg/apps/leads/tests.py +1 -1
- django_cfg/apps/payments/admin/api_keys_admin.py +1 -1
- django_cfg/apps/payments/admin/balance_admin.py +1 -1
- django_cfg/apps/payments/admin/currencies_admin.py +1 -1
- django_cfg/apps/payments/admin/payments_admin.py +1 -1
- django_cfg/apps/payments/admin/subscriptions_admin.py +1 -1
- django_cfg/apps/payments/admin_interface/templates/payments/base.html +59 -126
- django_cfg/apps/payments/admin_interface/views/api/payments.py +1 -1
- django_cfg/apps/payments/admin_interface/views/api/stats.py +1 -1
- django_cfg/apps/payments/admin_interface/views/api/users.py +1 -1
- django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +1 -1
- django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +1 -1
- django_cfg/apps/payments/admin_interface/views/base.py +29 -2
- django_cfg/apps/payments/apps.py +1 -1
- django_cfg/apps/payments/config/django_cfg_integration.py +2 -2
- django_cfg/apps/payments/config/helpers.py +3 -2
- django_cfg/apps/payments/management/commands/cleanup_expired_data.py +1 -1
- django_cfg/apps/payments/management/commands/currency_stats.py +1 -1
- django_cfg/apps/payments/management/commands/manage_currencies.py +1 -1
- django_cfg/apps/payments/management/commands/manage_providers.py +1 -1
- django_cfg/apps/payments/management/commands/process_pending_payments.py +1 -1
- django_cfg/apps/payments/management/commands/test_providers.py +1 -1
- django_cfg/apps/payments/middleware/api_access.py +1 -1
- django_cfg/apps/payments/middleware/rate_limiting.py +1 -1
- django_cfg/apps/payments/middleware/usage_tracking.py +1 -1
- django_cfg/apps/payments/models/balance.py +2 -2
- django_cfg/apps/payments/models/managers/api_key_managers.py +1 -1
- django_cfg/apps/payments/models/managers/balance_managers.py +1 -1
- django_cfg/apps/payments/models/managers/currency_managers.py +1 -1
- django_cfg/apps/payments/models/managers/payment_managers.py +1 -1
- django_cfg/apps/payments/models/managers/subscription_managers.py +1 -1
- django_cfg/apps/payments/models/payments.py +2 -2
- django_cfg/apps/payments/services/cache_service/__init__.py +1 -1
- django_cfg/apps/payments/services/cache_service/simple_cache.py +10 -5
- django_cfg/apps/payments/services/core/base.py +1 -1
- django_cfg/apps/payments/services/core/currency/__init__.py +13 -0
- django_cfg/apps/payments/services/core/currency/currency_converter.py +57 -0
- django_cfg/apps/payments/services/core/currency/currency_validator.py +61 -0
- django_cfg/apps/payments/services/core/operations/__init__.py +15 -0
- django_cfg/apps/payments/services/core/operations/payment_canceller.py +100 -0
- django_cfg/apps/payments/services/core/operations/payment_creator.py +196 -0
- django_cfg/apps/payments/services/core/operations/status_checker.py +100 -0
- django_cfg/apps/payments/services/core/payment_service.py +124 -612
- django_cfg/apps/payments/services/core/providers/__init__.py +13 -0
- django_cfg/apps/payments/services/core/providers/provider_client.py +132 -0
- django_cfg/apps/payments/services/core/providers/status_mapper.py +89 -0
- django_cfg/apps/payments/services/core/utils/__init__.py +13 -0
- django_cfg/apps/payments/services/core/utils/data_converter.py +48 -0
- django_cfg/apps/payments/services/core/utils/statistics_calculator.py +69 -0
- django_cfg/apps/payments/services/providers/base.py +1 -1
- django_cfg/apps/payments/services/providers/nowpayments/__init__.py +3 -3
- django_cfg/apps/payments/services/providers/nowpayments/parsers/__init__.py +9 -0
- django_cfg/apps/payments/services/providers/nowpayments/parsers/data/__init__.py +23 -0
- django_cfg/apps/payments/services/providers/nowpayments/parsers/data/constants.py +23 -0
- django_cfg/apps/payments/services/providers/nowpayments/parsers/data/currency_names.py +244 -0
- django_cfg/apps/payments/services/providers/nowpayments/parsers/data/patterns.py +511 -0
- django_cfg/apps/payments/services/providers/nowpayments/parsers/parser.py +168 -0
- django_cfg/apps/payments/services/providers/nowpayments/provider.py +1 -1
- django_cfg/apps/payments/services/providers/nowpayments/sync.py +1 -1
- django_cfg/apps/payments/services/providers/registry.py +1 -1
- django_cfg/apps/payments/services/providers/sync_service.py +1 -1
- django_cfg/apps/payments/signals/__init__.py +1 -1
- django_cfg/apps/payments/signals/api_key_signals.py +1 -1
- django_cfg/apps/payments/signals/balance_signals.py +1 -1
- django_cfg/apps/payments/signals/payment_signals.py +1 -1
- django_cfg/apps/payments/signals/subscription_signals.py +1 -1
- django_cfg/apps/payments/views/api/api_keys.py +1 -1
- django_cfg/apps/payments/views/api/balances.py +1 -1
- django_cfg/apps/payments/views/api/base.py +1 -1
- django_cfg/apps/payments/views/api/currencies.py +1 -1
- django_cfg/apps/payments/views/api/payments.py +1 -1
- django_cfg/apps/payments/views/api/subscriptions.py +1 -1
- django_cfg/apps/payments/views/api/webhooks.py +1 -1
- django_cfg/apps/payments/views/serializers/api_keys.py +1 -1
- django_cfg/apps/payments/views/serializers/balances.py +1 -1
- django_cfg/apps/payments/views/serializers/currencies.py +1 -1
- django_cfg/apps/payments/views/serializers/payments.py +1 -1
- django_cfg/apps/payments/views/serializers/subscriptions.py +1 -1
- django_cfg/apps/payments/views/serializers/webhooks.py +1 -1
- django_cfg/apps/support/admin/support_admin.py +21 -13
- django_cfg/apps/support/templates/support/chat/access_denied.html +21 -27
- django_cfg/apps/support/templates/support/chat/ticket_chat.html +183 -254
- django_cfg/apps/support/utils/support_email_service.py +1 -1
- django_cfg/apps/tasks/templates/tasks/layout/base.html +20 -115
- django_cfg/apps/tasks/utils/simulator.py +1 -1
- django_cfg/apps/tasks/views/dashboard.py +33 -3
- django_cfg/apps/urls.py +5 -1
- django_cfg/cli/README.md +57 -471
- django_cfg/cli/commands/create_project.py +140 -529
- django_cfg/cli/main.py +13 -10
- django_cfg/core/__init__.py +63 -6
- django_cfg/core/base/__init__.py +5 -0
- django_cfg/core/base/config_model.py +652 -0
- django_cfg/core/builders/__init__.py +11 -0
- django_cfg/core/builders/apps_builder.py +258 -0
- django_cfg/core/builders/middleware_builder.py +115 -0
- django_cfg/core/builders/security_builder.py +96 -0
- django_cfg/core/config.py +20 -892
- django_cfg/core/constants.py +69 -0
- django_cfg/core/environment/__init__.py +9 -0
- django_cfg/core/exceptions.py +45 -298
- django_cfg/core/generation/__init__.py +51 -0
- django_cfg/core/generation/core_generators/__init__.py +0 -0
- django_cfg/core/generation/core_generators/settings.py +90 -0
- django_cfg/core/generation/core_generators/static.py +82 -0
- django_cfg/core/generation/core_generators/templates.py +141 -0
- django_cfg/core/generation/data_generators/__init__.py +15 -0
- django_cfg/core/generation/data_generators/cache.py +132 -0
- django_cfg/core/generation/data_generators/database.py +117 -0
- django_cfg/core/generation/generation.py +92 -0
- django_cfg/core/generation/integration_generators/__init__.py +21 -0
- django_cfg/core/generation/integration_generators/api.py +237 -0
- django_cfg/core/generation/integration_generators/sessions.py +65 -0
- django_cfg/core/generation/integration_generators/tailwind.py +54 -0
- django_cfg/core/generation/integration_generators/tasks.py +92 -0
- django_cfg/core/generation/integration_generators/third_party.py +144 -0
- django_cfg/core/generation/orchestrator.py +285 -0
- django_cfg/core/generation/protocols.py +30 -0
- django_cfg/core/generation/security_generators/__init__.py +0 -0
- django_cfg/core/generation/utility_generators/__init__.py +24 -0
- django_cfg/core/generation/utility_generators/email.py +58 -0
- django_cfg/core/generation/utility_generators/i18n.py +66 -0
- django_cfg/core/generation/utility_generators/limits.py +58 -0
- django_cfg/core/generation/utility_generators/logging.py +66 -0
- django_cfg/core/generation/utility_generators/security.py +101 -0
- django_cfg/core/generation/utils/__init__.py +0 -0
- django_cfg/core/generation/utils/helpers.py +32 -0
- django_cfg/core/integration/__init__.py +18 -25
- django_cfg/core/integration/display/startup.py +146 -133
- django_cfg/core/integration/url_integration.py +13 -2
- django_cfg/core/services/__init__.py +5 -0
- django_cfg/core/services/config_service.py +121 -0
- django_cfg/core/state/__init__.py +9 -0
- django_cfg/core/state/registry.py +84 -0
- django_cfg/core/types/__init__.py +15 -0
- django_cfg/core/types/aliases.py +15 -0
- django_cfg/core/types/enums.py +49 -0
- django_cfg/dashboard/DEBUG_README.md +105 -0
- django_cfg/dashboard/REFACTORING_SUMMARY.md +237 -0
- django_cfg/dashboard/__init__.py +24 -0
- django_cfg/dashboard/components.py +308 -0
- django_cfg/dashboard/debug.py +176 -0
- django_cfg/dashboard/management/__init__.py +0 -0
- django_cfg/dashboard/management/commands/__init__.py +0 -0
- django_cfg/dashboard/management/commands/debug_dashboard.py +109 -0
- django_cfg/dashboard/sections/__init__.py +1 -0
- django_cfg/dashboard/sections/base.py +128 -0
- django_cfg/dashboard/sections/commands.py +32 -0
- django_cfg/dashboard/sections/overview.py +394 -0
- django_cfg/dashboard/sections/stats.py +48 -0
- django_cfg/dashboard/sections/system.py +73 -0
- django_cfg/management/commands/check_settings.py +6 -2
- django_cfg/management/commands/clear_constance.py +6 -1
- django_cfg/management/commands/create_token.py +5 -4
- django_cfg/management/commands/generate.py +5 -0
- django_cfg/management/commands/list_urls.py +7 -2
- django_cfg/management/commands/migrate_all.py +6 -2
- django_cfg/management/commands/migrator.py +6 -1
- django_cfg/management/commands/rundramatiq.py +6 -1
- django_cfg/management/commands/rundramatiq_simulator.py +11 -4
- django_cfg/management/commands/runserver_ngrok.py +9 -7
- django_cfg/management/commands/script.py +25 -21
- django_cfg/management/commands/show_config.py +6 -1
- django_cfg/management/commands/show_urls.py +8 -3
- django_cfg/management/commands/superuser.py +5 -4
- django_cfg/management/commands/task_clear.py +8 -3
- django_cfg/management/commands/task_status.py +8 -3
- django_cfg/management/commands/test_email.py +6 -1
- django_cfg/management/commands/test_telegram.py +6 -1
- django_cfg/management/commands/test_twilio.py +6 -1
- django_cfg/management/commands/tree.py +7 -4
- django_cfg/models/__init__.py +88 -3
- django_cfg/models/api/__init__.py +27 -0
- django_cfg/models/{api.py → api/config.py} +1 -1
- django_cfg/models/api/drf/__init__.py +21 -0
- django_cfg/models/api/drf/config.py +101 -0
- django_cfg/models/api/drf/redoc.py +31 -0
- django_cfg/models/api/drf/spectacular.py +129 -0
- django_cfg/models/api/drf/swagger.py +59 -0
- django_cfg/models/{api_keys.py → api/keys.py} +16 -6
- django_cfg/models/{limits.py → api/limits.py} +0 -1
- django_cfg/models/base/__init__.py +14 -0
- django_cfg/models/django/__init__.py +16 -0
- django_cfg/models/{constance.py → django/constance.py} +1 -1
- django_cfg/models/{environment.py → django/environment.py} +1 -1
- django_cfg/models/infrastructure/__init__.py +17 -0
- django_cfg/models/{cache.py → infrastructure/cache.py} +3 -2
- django_cfg/models/infrastructure/database/__init__.py +22 -0
- django_cfg/models/infrastructure/database/config.py +265 -0
- django_cfg/models/infrastructure/database/converters.py +91 -0
- django_cfg/models/infrastructure/database/parsers.py +96 -0
- django_cfg/models/infrastructure/database/routing.py +85 -0
- django_cfg/models/infrastructure/database/validators.py +170 -0
- django_cfg/models/{logging.py → infrastructure/logging.py} +1 -1
- django_cfg/models/{security.py → infrastructure/security.py} +2 -2
- django_cfg/models/ngrok/__init__.py +11 -0
- django_cfg/models/ngrok/auth.py +37 -0
- django_cfg/models/ngrok/config.py +77 -0
- django_cfg/models/ngrok/tunnel.py +35 -0
- django_cfg/models/payments/__init__.py +20 -0
- django_cfg/models/payments/api_keys.py +57 -0
- django_cfg/models/{payments.py → payments/config.py} +56 -154
- django_cfg/models/payments/providers/__init__.py +15 -0
- django_cfg/models/payments/providers/base.py +25 -0
- django_cfg/models/payments/providers/nowpayments.py +48 -0
- django_cfg/models/services/__init__.py +18 -0
- django_cfg/models/services/base.py +65 -0
- django_cfg/models/{email.py → services/email.py} +1 -1
- django_cfg/models/services/telegram.py +172 -0
- django_cfg/models/tasks/__init__.py +51 -0
- django_cfg/models/tasks/backends.py +250 -0
- django_cfg/models/tasks/config.py +314 -0
- django_cfg/models/tasks/utils.py +174 -0
- django_cfg/modules/base.py +18 -3
- django_cfg/modules/django_admin/decorators/actions.py +1 -1
- django_cfg/modules/django_admin/decorators/display.py +1 -1
- django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +1 -1
- django_cfg/modules/django_cfg_rpc_client/README.md +346 -0
- django_cfg/modules/django_cfg_rpc_client/__init__.py +51 -0
- django_cfg/modules/django_cfg_rpc_client/client.py +540 -0
- django_cfg/modules/django_cfg_rpc_client/config.py +207 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/README.md +517 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/UNFOLD_INTEGRATION.md +439 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/__init__.py +11 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/apps.py +22 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/monitor.py +435 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/static/django_cfg_rpc_dashboard/js/dashboard.js +373 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/templates/django_cfg_rpc_dashboard/base.html +76 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/templates/django_cfg_rpc_dashboard/dashboard.html +200 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/urls.py +22 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/urls_admin.py +9 -0
- django_cfg/modules/django_cfg_rpc_client/dashboard/views.py +251 -0
- django_cfg/modules/django_cfg_rpc_client/exceptions.py +201 -0
- django_cfg/modules/django_drf_theme/CHANGELOG.md +210 -0
- django_cfg/modules/django_drf_theme/EXAMPLE.md +465 -0
- django_cfg/modules/django_drf_theme/IMPLEMENTATION.md +232 -0
- django_cfg/modules/django_drf_theme/README.md +207 -0
- django_cfg/modules/django_drf_theme/TAILWIND_CDN_GUIDE.md +274 -0
- django_cfg/modules/django_drf_theme/__init__.py +23 -0
- django_cfg/modules/django_drf_theme/apps.py +15 -0
- django_cfg/modules/django_drf_theme/renderers.py +58 -0
- django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/api.html +375 -0
- django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/base.html +938 -0
- django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/filter_form.html +132 -0
- django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/raw_data_form.html +123 -0
- django_cfg/modules/django_drf_theme/templatetags/__init__.py +1 -0
- django_cfg/modules/django_drf_theme/templatetags/tailwind_tags.py +57 -0
- django_cfg/modules/django_email/__init__.py +14 -0
- django_cfg/modules/{django_email.py → django_email/service.py} +78 -113
- django_cfg/modules/django_email/utils.py +40 -0
- django_cfg/modules/django_health/__init__.py +9 -0
- django_cfg/modules/{django_health.py → django_health/service.py} +23 -21
- django_cfg/modules/django_llm/llm/client.py +155 -550
- django_cfg/modules/django_llm/llm/embeddings/__init__.py +13 -0
- django_cfg/modules/django_llm/llm/embeddings/mock_embedder.py +106 -0
- django_cfg/modules/django_llm/llm/embeddings/openai_embedder.py +79 -0
- django_cfg/modules/django_llm/llm/models_api/__init__.py +9 -0
- django_cfg/modules/django_llm/llm/models_api/models_query.py +163 -0
- django_cfg/modules/django_llm/llm/providers/__init__.py +15 -0
- django_cfg/modules/django_llm/llm/providers/config_builder.py +103 -0
- django_cfg/modules/django_llm/llm/providers/provider_manager.py +148 -0
- django_cfg/modules/django_llm/llm/providers/provider_selector.py +60 -0
- django_cfg/modules/django_llm/llm/requests/__init__.py +15 -0
- django_cfg/modules/django_llm/llm/requests/cache_manager.py +170 -0
- django_cfg/modules/django_llm/llm/requests/chat_handler.py +199 -0
- django_cfg/modules/django_llm/llm/requests/embedding_handler.py +113 -0
- django_cfg/modules/django_llm/llm/responses/__init__.py +9 -0
- django_cfg/modules/django_llm/llm/responses/response_builder.py +131 -0
- django_cfg/modules/django_llm/llm/stats/__init__.py +9 -0
- django_cfg/modules/django_llm/llm/stats/stats_manager.py +107 -0
- django_cfg/modules/django_llm/translator/detectors/__init__.py +13 -0
- django_cfg/modules/django_llm/translator/detectors/language_detector.py +90 -0
- django_cfg/modules/django_llm/translator/detectors/script_detector.py +153 -0
- django_cfg/modules/django_llm/translator/stats/__init__.py +11 -0
- django_cfg/modules/django_llm/translator/stats/stats_tracker.py +85 -0
- django_cfg/modules/django_llm/translator/translator.py +150 -603
- django_cfg/modules/django_llm/translator/translators/__init__.py +15 -0
- django_cfg/modules/django_llm/translator/translators/json_translator.py +316 -0
- django_cfg/modules/django_llm/translator/translators/text_translator.py +139 -0
- django_cfg/modules/django_llm/translator/utils/__init__.py +13 -0
- django_cfg/modules/django_llm/translator/utils/prompt_builder.py +110 -0
- django_cfg/modules/django_llm/translator/utils/text_utils.py +114 -0
- django_cfg/modules/django_logging/FIXES_SUMMARY.md +276 -0
- django_cfg/modules/django_logging/LOGGING_GUIDE.md +504 -0
- django_cfg/modules/django_logging/__init__.py +14 -0
- django_cfg/modules/{django_logger.py → django_logging/django_logger.py} +13 -13
- django_cfg/modules/{logger.py → django_logging/logger.py} +14 -4
- django_cfg/modules/django_ngrok/__init__.py +39 -0
- django_cfg/modules/{django_ngrok.py → django_ngrok/service.py} +14 -42
- django_cfg/modules/django_rpc_old/POETRY.md +344 -0
- django_cfg/modules/django_rpc_old/README.md +397 -0
- django_cfg/modules/django_rpc_old/TESTING.md +358 -0
- django_cfg/modules/django_rpc_old/__init__.py +39 -0
- django_cfg/modules/django_rpc_old/client.py +531 -0
- django_cfg/modules/django_rpc_old/config.py +279 -0
- django_cfg/modules/django_rpc_old/exceptions.py +172 -0
- django_cfg/modules/django_tailwind/README.md +478 -0
- django_cfg/modules/django_tailwind/__init__.py +7 -0
- django_cfg/modules/django_tailwind/apps.py +10 -0
- django_cfg/modules/django_tailwind/templates/django_tailwind/app.html +5 -0
- django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +117 -0
- django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +124 -0
- django_cfg/modules/django_tailwind/templates/django_tailwind/components/theme_toggle.html +54 -0
- django_cfg/modules/django_tailwind/templates/django_tailwind/components/user_menu.html +116 -0
- django_cfg/modules/django_tailwind/templates/django_tailwind/simple.html +46 -0
- django_cfg/modules/django_tailwind/templatetags/__init__.py +1 -0
- django_cfg/modules/django_tailwind/templatetags/tailwind_info.py +185 -0
- django_cfg/modules/django_tasks/__init__.py +29 -0
- django_cfg/modules/django_tasks/factory.py +127 -0
- django_cfg/modules/{django_tasks.py → django_tasks/service.py} +45 -274
- django_cfg/modules/django_tasks/settings.py +107 -0
- django_cfg/modules/django_telegram/__init__.py +29 -0
- django_cfg/modules/{django_telegram.py → django_telegram/service.py} +45 -113
- django_cfg/modules/django_telegram/utils.py +62 -0
- django_cfg/modules/django_twilio/__init__.py +54 -107
- django_cfg/modules/django_twilio/_imports.py +30 -0
- django_cfg/modules/django_twilio/base.py +192 -0
- django_cfg/modules/django_twilio/email_otp.py +227 -0
- django_cfg/modules/django_twilio/sendgrid_service.py +1 -1
- django_cfg/modules/django_twilio/simple_service.py +1 -2
- django_cfg/modules/django_twilio/sms.py +94 -0
- django_cfg/modules/django_twilio/twilio_service.py +2 -3
- django_cfg/modules/django_twilio/unified.py +310 -0
- django_cfg/modules/django_twilio/utils.py +190 -0
- django_cfg/modules/django_twilio/whatsapp.py +137 -0
- django_cfg/modules/django_unfold/callbacks/base.py +198 -7
- django_cfg/modules/django_unfold/callbacks/main.py +102 -10
- django_cfg/modules/django_unfold/dashboard.py +65 -43
- django_cfg/modules/django_unfold/models/config.py +13 -12
- django_cfg/modules/django_unfold/models/navigation.py +8 -3
- django_cfg/modules/django_unfold/models/tabs.py +2 -2
- django_cfg/modules/django_unfold/templates/unfold/helpers/app_list.html +102 -0
- django_cfg/registry/core.py +24 -26
- django_cfg/registry/modules.py +5 -2
- django_cfg/registry/services.py +20 -3
- django_cfg/registry/third_party.py +8 -8
- django_cfg/static/admin/css/dashboard.css +260 -0
- django_cfg/static/admin/js/commands.js +171 -0
- django_cfg/static/admin/js/dashboard.js +126 -0
- django_cfg/templates/admin/components/management_commands.js +375 -0
- django_cfg/templates/admin/components/progress_bar.html +18 -23
- django_cfg/templates/admin/index.html +48 -20
- django_cfg/templates/admin/index_new.html +106 -0
- django_cfg/templates/admin/layouts/base_dashboard.html +60 -0
- django_cfg/templates/admin/layouts/dashboard_with_tabs.html +1 -20
- django_cfg/templates/admin/sections/commands_section.html +626 -0
- django_cfg/templates/admin/sections/overview_section.html +112 -0
- django_cfg/templates/admin/sections/stats_section.html +35 -0
- django_cfg/templates/admin/sections/system_section.html +99 -0
- django_cfg/templates/admin/snippets/components/CHARTS_GUIDE.md +322 -0
- django_cfg/templates/admin/snippets/components/activity_tracker.html +85 -47
- django_cfg/templates/admin/snippets/components/charts_section.html +154 -64
- django_cfg/templates/admin/snippets/components/django_commands.html +3 -3
- django_cfg/templates/admin/snippets/components/recent_activity_improved.html +25 -0
- django_cfg/templates/admin/snippets/components/recent_users_table.html +1 -1
- django_cfg/templates/admin/snippets/components/system_metrics.html +179 -93
- django_cfg/templates/admin/snippets/zones/zones_table.html +2 -2
- django_cfg/templatetags/django_cfg.py +7 -1
- django_cfg/utils/smart_defaults.py +4 -4
- django_cfg-1.4.0.dist-info/METADATA +920 -0
- {django_cfg-1.3.13.dist-info → django_cfg-1.4.0.dist-info}/RECORD +424 -195
- django_cfg/apps/accounts/utils/auth_email_service.py +0 -84
- django_cfg/apps/payments/services/providers/nowpayments/parsers.py +0 -879
- django_cfg/core/generation.py +0 -621
- django_cfg/management/commands/validate_config.py +0 -189
- django_cfg/models/database.py +0 -480
- django_cfg/models/drf.py +0 -272
- django_cfg/models/ngrok.py +0 -122
- django_cfg/models/services.py +0 -440
- django_cfg/models/tasks.py +0 -550
- django_cfg/modules/django_twilio/service.py +0 -942
- django_cfg/template_archive/django_sample.zip +0 -0
- django_cfg/templates/rest_framework/api.html +0 -12
- django_cfg/utils/toolkit.py +0 -703
- django_cfg-1.3.13.dist-info/METADATA +0 -1029
- /django_cfg/apps/accounts/management/commands/{test_otp.py → otp_test.py} +0 -0
- /django_cfg/core/{environment.py → environment/detector.py} +0 -0
- /django_cfg/models/{cors.py → api/cors.py} +0 -0
- /django_cfg/models/{jwt.py → api/jwt.py} +0 -0
- /django_cfg/models/{base.py → base/config.py} +0 -0
- /django_cfg/models/{cfg.py → base/module.py} +0 -0
- /django_cfg/models/{revolution.py → django/revolution.py} +0 -0
- /django_cfg/modules/{dramatiq_setup.py → django_tasks/dramatiq_setup.py} +0 -0
- {django_cfg-1.3.13.dist-info → django_cfg-1.4.0.dist-info}/WHEEL +0 -0
- {django_cfg-1.3.13.dist-info → django_cfg-1.4.0.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.3.13.dist-info → django_cfg-1.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,346 @@
|
|
1
|
+
# Django-CFG RPC Client 📡
|
2
|
+
|
3
|
+
Lightweight synchronous RPC client for Django applications to communicate with **django-cfg-rpc** WebSocket servers via Redis.
|
4
|
+
|
5
|
+
**NEW**: ✨ Built-in RPC Dashboard for real-time monitoring! See [Dashboard README](./dashboard/README.md)
|
6
|
+
|
7
|
+
## 🎯 Key Features
|
8
|
+
|
9
|
+
- ✅ **100% Synchronous** - No async/await in Django, works with WSGI
|
10
|
+
- ✅ **Type-Safe** - Full Pydantic 2 support when django-cfg-rpc installed
|
11
|
+
- ✅ **Optional Dependency** - Works without django-cfg-rpc (dict-based fallback)
|
12
|
+
- ✅ **Redis IPC** - Reliable communication via Streams + Lists
|
13
|
+
- ✅ **Connection Pooling** - Automatic Redis connection management
|
14
|
+
- ✅ **Singleton Pattern** - Single client instance across Django app
|
15
|
+
|
16
|
+
---
|
17
|
+
|
18
|
+
## 📦 Installation
|
19
|
+
|
20
|
+
### Option 1: With django-cfg-rpc (Recommended)
|
21
|
+
|
22
|
+
```bash
|
23
|
+
pip install django-cfg django-cfg-rpc
|
24
|
+
```
|
25
|
+
|
26
|
+
### Option 2: Standalone (Basic)
|
27
|
+
|
28
|
+
```bash
|
29
|
+
pip install django-cfg redis
|
30
|
+
```
|
31
|
+
|
32
|
+
---
|
33
|
+
|
34
|
+
## ⚙️ Configuration
|
35
|
+
|
36
|
+
### Django Settings (via django-cfg)
|
37
|
+
|
38
|
+
```python
|
39
|
+
# config.py
|
40
|
+
from django_cfg import DjangoConfig
|
41
|
+
from django_cfg.modules.django_cfg_rpc_client.config import DjangoCfgRPCConfig
|
42
|
+
|
43
|
+
class MyProjectConfig(DjangoConfig):
|
44
|
+
project_name = "My Project"
|
45
|
+
|
46
|
+
# RPC Client Configuration
|
47
|
+
django_cfg_rpc = DjangoCfgRPCConfig(
|
48
|
+
enabled=True,
|
49
|
+
redis_url="redis://localhost:6379/2",
|
50
|
+
rpc_timeout=30,
|
51
|
+
)
|
52
|
+
|
53
|
+
config = MyProjectConfig()
|
54
|
+
|
55
|
+
# settings.py
|
56
|
+
from config import config
|
57
|
+
|
58
|
+
# Settings are automatically generated by django-cfg orchestrator
|
59
|
+
# DJANGO_CFG_RPC settings will be available in Django settings
|
60
|
+
globals().update(config.get_all_settings())
|
61
|
+
```
|
62
|
+
|
63
|
+
**✨ Automatic Integration:**
|
64
|
+
- ✅ `DJANGO_CFG_RPC` settings are auto-generated
|
65
|
+
- ✅ Dashboard app auto-added to `INSTALLED_APPS`
|
66
|
+
- ✅ Dashboard URLs auto-registered at `/admin/rpc/`
|
67
|
+
- ✅ RPC tracked in `DJANGO_CFG_INTEGRATIONS` list
|
68
|
+
|
69
|
+
### Environment Variables
|
70
|
+
|
71
|
+
```bash
|
72
|
+
DJANGO_CFG_RPC__ENABLED=true
|
73
|
+
DJANGO_CFG_RPC__REDIS_URL=redis://localhost:6379/2
|
74
|
+
DJANGO_CFG_RPC__RPC_TIMEOUT=30
|
75
|
+
```
|
76
|
+
|
77
|
+
---
|
78
|
+
|
79
|
+
## 🚀 Usage
|
80
|
+
|
81
|
+
### With django-cfg-rpc Models (Type-Safe)
|
82
|
+
|
83
|
+
```python
|
84
|
+
# views.py
|
85
|
+
from django_cfg.modules.django_cfg_rpc_client import get_rpc_client
|
86
|
+
from django_cfg_rpc.models import NotificationRequest, NotificationResponse
|
87
|
+
|
88
|
+
rpc = get_rpc_client()
|
89
|
+
|
90
|
+
def notify_user(request, user_id):
|
91
|
+
"""Send notification to user via WebSocket."""
|
92
|
+
|
93
|
+
result: NotificationResponse = rpc.call(
|
94
|
+
method="send_notification",
|
95
|
+
params=NotificationRequest(
|
96
|
+
user_id=user_id,
|
97
|
+
type="order_update",
|
98
|
+
title="Order Confirmed",
|
99
|
+
message="Your order #12345 has been confirmed",
|
100
|
+
priority="high",
|
101
|
+
),
|
102
|
+
result_model=NotificationResponse,
|
103
|
+
timeout=10,
|
104
|
+
)
|
105
|
+
|
106
|
+
return JsonResponse({
|
107
|
+
"delivered": result.delivered,
|
108
|
+
"connections": result.connections,
|
109
|
+
})
|
110
|
+
```
|
111
|
+
|
112
|
+
### Without django-cfg-rpc (Dict-Based)
|
113
|
+
|
114
|
+
```python
|
115
|
+
from django_cfg.modules.django_cfg_rpc_client import get_rpc_client
|
116
|
+
|
117
|
+
rpc = get_rpc_client()
|
118
|
+
|
119
|
+
def notify_user(request, user_id):
|
120
|
+
"""Send notification using dict params."""
|
121
|
+
|
122
|
+
result = rpc.call_dict(
|
123
|
+
method="send_notification",
|
124
|
+
params={
|
125
|
+
"user_id": user_id,
|
126
|
+
"type": "order_update",
|
127
|
+
"title": "Order Confirmed",
|
128
|
+
"message": "Your order #12345 has been confirmed",
|
129
|
+
},
|
130
|
+
timeout=10,
|
131
|
+
)
|
132
|
+
|
133
|
+
return JsonResponse({
|
134
|
+
"delivered": result.get("delivered", False),
|
135
|
+
})
|
136
|
+
```
|
137
|
+
|
138
|
+
### Fire-and-Forget (No Response Wait)
|
139
|
+
|
140
|
+
```python
|
141
|
+
# For operations where you don't need the result
|
142
|
+
rpc.fire_and_forget(
|
143
|
+
method="log_event",
|
144
|
+
params={"event": "user_login", "user_id": "123"}
|
145
|
+
)
|
146
|
+
```
|
147
|
+
|
148
|
+
---
|
149
|
+
|
150
|
+
## 🔧 API Reference
|
151
|
+
|
152
|
+
### `get_rpc_client(force_new=False)`
|
153
|
+
|
154
|
+
Get singleton RPC client instance.
|
155
|
+
|
156
|
+
**Args:**
|
157
|
+
- `force_new` (bool): Force create new instance (for testing)
|
158
|
+
|
159
|
+
**Returns:**
|
160
|
+
- `DjangoCfgRPCClient` instance
|
161
|
+
|
162
|
+
---
|
163
|
+
|
164
|
+
### `DjangoCfgRPCClient.call(method, params, result_model=None, timeout=None)`
|
165
|
+
|
166
|
+
Make synchronous RPC call.
|
167
|
+
|
168
|
+
**Args:**
|
169
|
+
- `method` (str): RPC method name
|
170
|
+
- `params` (BaseModel | dict): Parameters (Pydantic model or dict)
|
171
|
+
- `result_model` (Type[BaseModel], optional): Expected result model class
|
172
|
+
- `timeout` (int, optional): Timeout override in seconds
|
173
|
+
|
174
|
+
**Returns:**
|
175
|
+
- Pydantic model instance (if `result_model` provided) or dict
|
176
|
+
|
177
|
+
**Raises:**
|
178
|
+
- `RPCTimeoutError`: If timeout exceeded
|
179
|
+
- `RPCRemoteError`: If remote execution failed
|
180
|
+
|
181
|
+
---
|
182
|
+
|
183
|
+
### `DjangoCfgRPCClient.call_dict(method, params, timeout=None)`
|
184
|
+
|
185
|
+
Make RPC call with dict params (no Pydantic).
|
186
|
+
|
187
|
+
**Args:**
|
188
|
+
- `method` (str): RPC method name
|
189
|
+
- `params` (dict): Dictionary with parameters
|
190
|
+
- `timeout` (int, optional): Timeout override in seconds
|
191
|
+
|
192
|
+
**Returns:**
|
193
|
+
- Dictionary with result
|
194
|
+
|
195
|
+
---
|
196
|
+
|
197
|
+
### `DjangoCfgRPCClient.fire_and_forget(method, params)`
|
198
|
+
|
199
|
+
Send RPC request without waiting for response.
|
200
|
+
|
201
|
+
**Args:**
|
202
|
+
- `method` (str): RPC method name
|
203
|
+
- `params` (BaseModel | dict): Parameters
|
204
|
+
|
205
|
+
**Returns:**
|
206
|
+
- str: Message ID from Redis Stream
|
207
|
+
|
208
|
+
---
|
209
|
+
|
210
|
+
### `DjangoCfgRPCClient.health_check(timeout=5)`
|
211
|
+
|
212
|
+
Check if RPC system is healthy.
|
213
|
+
|
214
|
+
**Args:**
|
215
|
+
- `timeout` (int): Health check timeout in seconds
|
216
|
+
|
217
|
+
**Returns:**
|
218
|
+
- bool: True if healthy, False otherwise
|
219
|
+
|
220
|
+
---
|
221
|
+
|
222
|
+
## ⚠️ Error Handling
|
223
|
+
|
224
|
+
### Timeout Handling
|
225
|
+
|
226
|
+
```python
|
227
|
+
from django_cfg.modules.django_cfg_rpc_client import get_rpc_client, RPCTimeoutError
|
228
|
+
|
229
|
+
rpc = get_rpc_client()
|
230
|
+
|
231
|
+
try:
|
232
|
+
result = rpc.call(method="slow_operation", params={...}, timeout=5)
|
233
|
+
except RPCTimeoutError as e:
|
234
|
+
logger.warning(f"RPC timeout: {e.method} after {e.timeout_seconds}s")
|
235
|
+
# Handle timeout (retry, fallback, etc.)
|
236
|
+
```
|
237
|
+
|
238
|
+
### Remote Error Handling
|
239
|
+
|
240
|
+
```python
|
241
|
+
from django_cfg.modules.django_cfg_rpc_client import RPCRemoteError
|
242
|
+
|
243
|
+
try:
|
244
|
+
result = rpc.call(method="...", params={...})
|
245
|
+
except RPCRemoteError as e:
|
246
|
+
logger.error(f"Remote error [{e.error.code}]: {e.error.message}")
|
247
|
+
|
248
|
+
if e.is_retryable:
|
249
|
+
# Retry after delay
|
250
|
+
import time
|
251
|
+
time.sleep(e.retry_after or 5)
|
252
|
+
result = rpc.call(...) # Retry
|
253
|
+
else:
|
254
|
+
# Non-retryable error
|
255
|
+
raise
|
256
|
+
```
|
257
|
+
|
258
|
+
---
|
259
|
+
|
260
|
+
## 🏗️ Architecture
|
261
|
+
|
262
|
+
```
|
263
|
+
┌─────────────────────────────────────────────┐
|
264
|
+
│ Django Application (WSGI/Sync) │
|
265
|
+
│ ┌───────────────────────────────────────┐ │
|
266
|
+
│ │ django_cfg_rpc_client │ │
|
267
|
+
│ │ - DjangoCfgRPCClient (sync) │ │
|
268
|
+
│ │ - Redis Streams (requests) │ │
|
269
|
+
│ │ - Redis Lists (responses) │ │
|
270
|
+
│ └───────────────────────────────────────┘ │
|
271
|
+
└───────────────┬─────────────────────────────┘
|
272
|
+
│
|
273
|
+
│ Redis IPC
|
274
|
+
│ (stream:requests → list:response:{cid})
|
275
|
+
▼
|
276
|
+
┌─────────────────────────────────────────────┐
|
277
|
+
│ django-cfg-rpc Server (Async) │
|
278
|
+
│ - WebSocket Server │
|
279
|
+
│ - Connection Manager │
|
280
|
+
│ - RPC Handlers │
|
281
|
+
│ - Pydantic 2 Models │
|
282
|
+
└─────────────────────────────────────────────┘
|
283
|
+
```
|
284
|
+
|
285
|
+
---
|
286
|
+
|
287
|
+
## 🔗 Related
|
288
|
+
|
289
|
+
- **django-cfg-rpc** - WebSocket RPC server package
|
290
|
+
- **Old Module** - `django_rpc_old` (deprecated, kept for reference)
|
291
|
+
|
292
|
+
---
|
293
|
+
|
294
|
+
## 📝 Migration from django_rpc_old
|
295
|
+
|
296
|
+
```python
|
297
|
+
# Old (deprecated)
|
298
|
+
from django_cfg.modules.django_rpc import get_rpc_client
|
299
|
+
|
300
|
+
# New (current)
|
301
|
+
from django_cfg.modules.django_cfg_rpc_client import get_rpc_client
|
302
|
+
```
|
303
|
+
|
304
|
+
API remains mostly compatible. Main changes:
|
305
|
+
- Configuration key: `WEBSOCKET_RPC` → `DJANGO_CFG_RPC`
|
306
|
+
- Models now live in `django-cfg-rpc` package (optional dependency)
|
307
|
+
- Better error handling with specific exception types
|
308
|
+
|
309
|
+
---
|
310
|
+
|
311
|
+
**Status:** ✅ Production Ready
|
312
|
+
**Django-CFG Version:** 2.0+
|
313
|
+
**Python Version:** 3.10+
|
314
|
+
|
315
|
+
|
316
|
+
---
|
317
|
+
|
318
|
+
## 📊 RPC Dashboard (NEW!)
|
319
|
+
|
320
|
+
### Quick Start
|
321
|
+
|
322
|
+
Add dashboard to your Django URLs:
|
323
|
+
|
324
|
+
```python
|
325
|
+
# urls.py
|
326
|
+
from django.urls import path, include
|
327
|
+
|
328
|
+
urlpatterns = [
|
329
|
+
# ... other URLs
|
330
|
+
path('admin/rpc/', include('django_cfg.modules.django_cfg_rpc_client.dashboard.urls')),
|
331
|
+
]
|
332
|
+
```
|
333
|
+
|
334
|
+
Access at: **http://localhost:8000/admin/rpc/** (requires staff login)
|
335
|
+
|
336
|
+
### Features
|
337
|
+
|
338
|
+
- ✅ **Real-time monitoring** - Updates every 5 seconds
|
339
|
+
- ✅ **Request tracking** - View recent RPC calls
|
340
|
+
- ✅ **Notification stats** - Track sent notifications
|
341
|
+
- ✅ **Method analytics** - See which methods are called
|
342
|
+
- ✅ **Health checks** - Monitor Redis and streams
|
343
|
+
- ✅ **Beautiful UI** - Tailwind CSS dark mode
|
344
|
+
|
345
|
+
See [Dashboard README](./dashboard/README.md) for full documentation.
|
346
|
+
|
@@ -0,0 +1,51 @@
|
|
1
|
+
"""
|
2
|
+
Django-CFG RPC Client Module.
|
3
|
+
|
4
|
+
Lightweight synchronous RPC client for Django applications to communicate
|
5
|
+
with django-cfg-rpc WebSocket servers via Redis.
|
6
|
+
|
7
|
+
Key Features:
|
8
|
+
- ✅ 100% synchronous (no async/await in Django)
|
9
|
+
- ✅ Type-safe with Pydantic 2 models from django-cfg-rpc
|
10
|
+
- ✅ Automatic connection pooling
|
11
|
+
- ✅ Optional dependency on django-cfg-rpc
|
12
|
+
- ✅ Graceful fallback if django-cfg-rpc not installed
|
13
|
+
|
14
|
+
Example:
|
15
|
+
>>> from django_cfg.modules.django_cfg_rpc_client import get_rpc_client
|
16
|
+
>>> from django_cfg_rpc.models import NotificationRequest, NotificationResponse
|
17
|
+
>>>
|
18
|
+
>>> rpc = get_rpc_client()
|
19
|
+
>>> result: NotificationResponse = rpc.call(
|
20
|
+
... method="send_notification",
|
21
|
+
... params=NotificationRequest(
|
22
|
+
... user_id="123",
|
23
|
+
... type="order_update",
|
24
|
+
... title="Order Confirmed",
|
25
|
+
... message="Your order has been confirmed"
|
26
|
+
... ),
|
27
|
+
... result_model=NotificationResponse
|
28
|
+
... )
|
29
|
+
"""
|
30
|
+
|
31
|
+
from .client import DjangoCfgRPCClient, get_rpc_client
|
32
|
+
from .config import DjangoCfgRPCConfig
|
33
|
+
from .exceptions import (
|
34
|
+
RPCTimeoutError,
|
35
|
+
RPCRemoteError,
|
36
|
+
RPCConnectionError,
|
37
|
+
RPCConfigurationError,
|
38
|
+
)
|
39
|
+
|
40
|
+
__all__ = [
|
41
|
+
# Client
|
42
|
+
"DjangoCfgRPCClient",
|
43
|
+
"get_rpc_client",
|
44
|
+
# Configuration
|
45
|
+
"DjangoCfgRPCConfig",
|
46
|
+
# Exceptions
|
47
|
+
"RPCTimeoutError",
|
48
|
+
"RPCRemoteError",
|
49
|
+
"RPCConnectionError",
|
50
|
+
"RPCConfigurationError",
|
51
|
+
]
|