django-cfg 1.3.11__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/inlines.py +11 -5
- 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.11.dist-info → django_cfg-1.4.0.dist-info}/RECORD +425 -196
- 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.11.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.11.dist-info → django_cfg-1.4.0.dist-info}/WHEEL +0 -0
- {django_cfg-1.3.11.dist-info → django_cfg-1.4.0.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.3.11.dist-info → django_cfg-1.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,14 @@
|
|
1
|
+
"""
|
2
|
+
Context building for chunks.
|
3
|
+
|
4
|
+
Models and builders for chunk context metadata.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from .models import ChunkContextMetadata, ChunkData
|
8
|
+
from .builders import ChunkContextBuilder
|
9
|
+
|
10
|
+
__all__ = [
|
11
|
+
'ChunkContextMetadata',
|
12
|
+
'ChunkData',
|
13
|
+
'ChunkContextBuilder',
|
14
|
+
]
|
@@ -0,0 +1,220 @@
|
|
1
|
+
"""
|
2
|
+
Context metadata builders for chunks.
|
3
|
+
|
4
|
+
Builds rich context metadata for different types of content chunks.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from typing import Dict, Any, Optional, List
|
8
|
+
from ....models.archive import ArchiveItem
|
9
|
+
|
10
|
+
|
11
|
+
class ChunkContextBuilder:
|
12
|
+
"""Build context metadata for different chunk types."""
|
13
|
+
|
14
|
+
@staticmethod
|
15
|
+
def build_code_context(
|
16
|
+
item: ArchiveItem,
|
17
|
+
chunk_index: int,
|
18
|
+
content: str,
|
19
|
+
start_line: int,
|
20
|
+
end_line: int,
|
21
|
+
code_info: Dict[str, Any]
|
22
|
+
) -> Dict[str, Any]:
|
23
|
+
"""
|
24
|
+
Build context metadata for code chunk.
|
25
|
+
|
26
|
+
Args:
|
27
|
+
item: Archive item being chunked
|
28
|
+
chunk_index: Index of this chunk
|
29
|
+
content: Chunk content
|
30
|
+
start_line: Starting line number
|
31
|
+
end_line: Ending line number
|
32
|
+
code_info: Code analysis info (element_name, type, etc.)
|
33
|
+
|
34
|
+
Returns:
|
35
|
+
Context metadata dictionary
|
36
|
+
"""
|
37
|
+
from ..analyzers import TagGenerator
|
38
|
+
|
39
|
+
return {
|
40
|
+
'archive_info': {
|
41
|
+
'id': str(item.archive.id),
|
42
|
+
'title': item.archive.title,
|
43
|
+
'description': item.archive.description,
|
44
|
+
},
|
45
|
+
'item_info': {
|
46
|
+
'id': str(item.id),
|
47
|
+
'relative_path': item.relative_path,
|
48
|
+
'item_name': item.item_name,
|
49
|
+
'content_type': item.content_type,
|
50
|
+
'language': item.language,
|
51
|
+
},
|
52
|
+
'position_info': {
|
53
|
+
'chunk_index': chunk_index,
|
54
|
+
'start_line': start_line + 1,
|
55
|
+
'end_line': end_line,
|
56
|
+
'total_lines': len(item.raw_content.split('\n')),
|
57
|
+
},
|
58
|
+
'structure_info': {
|
59
|
+
'element_name': code_info.get('element_name'),
|
60
|
+
'element_type': code_info.get('element_type'),
|
61
|
+
'is_async': code_info.get('is_async', False),
|
62
|
+
'has_docstring': bool(code_info.get('docstring')),
|
63
|
+
},
|
64
|
+
'semantic_info': {
|
65
|
+
'chunk_type': 'code',
|
66
|
+
'content_purpose': code_info.get('purpose', 'implementation'),
|
67
|
+
'complexity_score': code_info.get('complexity_score', 0.0),
|
68
|
+
'technical_tags': TagGenerator.generate_code_tags(content, code_info),
|
69
|
+
},
|
70
|
+
'processing_info': {
|
71
|
+
'extraction_method': 'ast_parser',
|
72
|
+
'chunking_strategy': 'logical_units',
|
73
|
+
'quality_score': code_info.get('quality_score', 0.5),
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
@staticmethod
|
78
|
+
def build_document_context(
|
79
|
+
item: ArchiveItem,
|
80
|
+
chunk_index: int,
|
81
|
+
content: str,
|
82
|
+
section_info: Dict[str, Any]
|
83
|
+
) -> Dict[str, Any]:
|
84
|
+
"""
|
85
|
+
Build context metadata for document chunk.
|
86
|
+
|
87
|
+
Args:
|
88
|
+
item: Archive item being chunked
|
89
|
+
chunk_index: Index of this chunk
|
90
|
+
content: Chunk content
|
91
|
+
section_info: Section info (title, level, etc.)
|
92
|
+
|
93
|
+
Returns:
|
94
|
+
Context metadata dictionary
|
95
|
+
"""
|
96
|
+
from ..analyzers import TagGenerator
|
97
|
+
|
98
|
+
return {
|
99
|
+
'archive_info': {
|
100
|
+
'id': str(item.archive.id),
|
101
|
+
'title': item.archive.title,
|
102
|
+
},
|
103
|
+
'item_info': {
|
104
|
+
'id': str(item.id),
|
105
|
+
'relative_path': item.relative_path,
|
106
|
+
'content_type': item.content_type,
|
107
|
+
'language': item.language,
|
108
|
+
},
|
109
|
+
'position_info': {
|
110
|
+
'chunk_index': chunk_index,
|
111
|
+
},
|
112
|
+
'structure_info': {
|
113
|
+
'section_title': section_info.get('title'),
|
114
|
+
'section_level': section_info.get('level', 0),
|
115
|
+
},
|
116
|
+
'semantic_info': {
|
117
|
+
'chunk_type': 'heading' if section_info.get('title') else 'text',
|
118
|
+
'content_purpose': 'documentation',
|
119
|
+
'topic_tags': TagGenerator.generate_document_tags(content),
|
120
|
+
},
|
121
|
+
'processing_info': {
|
122
|
+
'extraction_method': 'markdown_parser',
|
123
|
+
'chunking_strategy': 'heading_based',
|
124
|
+
}
|
125
|
+
}
|
126
|
+
|
127
|
+
@staticmethod
|
128
|
+
def build_data_context(
|
129
|
+
item: ArchiveItem,
|
130
|
+
chunk_index: int,
|
131
|
+
content: str,
|
132
|
+
data_type: str,
|
133
|
+
key_name: Optional[str] = None
|
134
|
+
) -> Dict[str, Any]:
|
135
|
+
"""
|
136
|
+
Build context metadata for data chunk.
|
137
|
+
|
138
|
+
Args:
|
139
|
+
item: Archive item being chunked
|
140
|
+
chunk_index: Index of this chunk
|
141
|
+
content: Chunk content
|
142
|
+
data_type: Type of data (e.g., 'json_object')
|
143
|
+
key_name: Optional key name for object property
|
144
|
+
|
145
|
+
Returns:
|
146
|
+
Context metadata dictionary
|
147
|
+
"""
|
148
|
+
return {
|
149
|
+
'archive_info': {
|
150
|
+
'id': str(item.archive.id),
|
151
|
+
'title': item.archive.title,
|
152
|
+
},
|
153
|
+
'item_info': {
|
154
|
+
'id': str(item.id),
|
155
|
+
'relative_path': item.relative_path,
|
156
|
+
'content_type': item.content_type,
|
157
|
+
},
|
158
|
+
'position_info': {
|
159
|
+
'chunk_index': chunk_index,
|
160
|
+
},
|
161
|
+
'structure_info': {
|
162
|
+
'data_key': key_name,
|
163
|
+
'data_type': data_type,
|
164
|
+
},
|
165
|
+
'semantic_info': {
|
166
|
+
'chunk_type': 'metadata',
|
167
|
+
'content_purpose': 'data_definition',
|
168
|
+
},
|
169
|
+
'processing_info': {
|
170
|
+
'extraction_method': 'json_parser',
|
171
|
+
'chunking_strategy': 'object_properties',
|
172
|
+
}
|
173
|
+
}
|
174
|
+
|
175
|
+
@staticmethod
|
176
|
+
def build_generic_context(
|
177
|
+
item: ArchiveItem,
|
178
|
+
chunk_index: int,
|
179
|
+
content: str,
|
180
|
+
start_pos: int,
|
181
|
+
end_pos: int
|
182
|
+
) -> Dict[str, Any]:
|
183
|
+
"""
|
184
|
+
Build context metadata for generic text chunk.
|
185
|
+
|
186
|
+
Args:
|
187
|
+
item: Archive item being chunked
|
188
|
+
chunk_index: Index of this chunk
|
189
|
+
content: Chunk content
|
190
|
+
start_pos: Starting character position
|
191
|
+
end_pos: Ending character position
|
192
|
+
|
193
|
+
Returns:
|
194
|
+
Context metadata dictionary
|
195
|
+
"""
|
196
|
+
return {
|
197
|
+
'archive_info': {
|
198
|
+
'id': str(item.archive.id),
|
199
|
+
'title': item.archive.title,
|
200
|
+
},
|
201
|
+
'item_info': {
|
202
|
+
'id': str(item.id),
|
203
|
+
'relative_path': item.relative_path,
|
204
|
+
'content_type': item.content_type,
|
205
|
+
},
|
206
|
+
'position_info': {
|
207
|
+
'chunk_index': chunk_index,
|
208
|
+
'start_char': start_pos,
|
209
|
+
'end_char': end_pos,
|
210
|
+
'relative_position': start_pos / len(item.raw_content) if item.raw_content else 0.0,
|
211
|
+
},
|
212
|
+
'semantic_info': {
|
213
|
+
'chunk_type': 'text',
|
214
|
+
'content_purpose': 'content',
|
215
|
+
},
|
216
|
+
'processing_info': {
|
217
|
+
'extraction_method': 'text_splitting',
|
218
|
+
'chunking_strategy': 'fixed_size_overlap',
|
219
|
+
}
|
220
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
"""
|
2
|
+
Pydantic models for chunking context metadata.
|
3
|
+
|
4
|
+
Data structures for chunk data and context metadata.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from pydantic import BaseModel
|
8
|
+
from typing import Dict, Any
|
9
|
+
|
10
|
+
|
11
|
+
class ChunkContextMetadata(BaseModel):
|
12
|
+
"""Rich context metadata for chunks."""
|
13
|
+
|
14
|
+
# Parent hierarchy
|
15
|
+
archive_info: Dict[str, Any]
|
16
|
+
item_info: Dict[str, Any]
|
17
|
+
|
18
|
+
# Position and structure
|
19
|
+
position_info: Dict[str, Any]
|
20
|
+
structure_info: Dict[str, Any]
|
21
|
+
|
22
|
+
# Semantic context
|
23
|
+
semantic_info: Dict[str, Any]
|
24
|
+
|
25
|
+
# Relational context (optional)
|
26
|
+
relationship_info: Dict[str, Any] = {}
|
27
|
+
|
28
|
+
# Processing provenance
|
29
|
+
processing_info: Dict[str, Any]
|
30
|
+
|
31
|
+
|
32
|
+
class ChunkData(BaseModel):
|
33
|
+
"""Data structure for created chunk."""
|
34
|
+
|
35
|
+
content: str
|
36
|
+
chunk_index: int
|
37
|
+
chunk_type: str
|
38
|
+
context_metadata: Dict[str, Any]
|
@@ -6,7 +6,7 @@ the embedding processing pipeline using Pydantic for type safety.
|
|
6
6
|
"""
|
7
7
|
|
8
8
|
from typing import List, Dict, Any, Optional
|
9
|
-
from pydantic import BaseModel, Field,
|
9
|
+
from pydantic import BaseModel, Field, field_validator, ValidationInfo
|
10
10
|
from enum import Enum
|
11
11
|
|
12
12
|
|
@@ -35,7 +35,8 @@ class ChunkData(BaseModel):
|
|
35
35
|
description="Type of parent content"
|
36
36
|
)
|
37
37
|
|
38
|
-
@
|
38
|
+
@field_validator('content')
|
39
|
+
@classmethod
|
39
40
|
def content_must_not_be_empty(cls, v):
|
40
41
|
if not v or not v.strip():
|
41
42
|
raise ValueError('Content cannot be empty')
|
@@ -76,7 +77,8 @@ class EmbeddingResult(BaseModel):
|
|
76
77
|
description="Time taken to process this chunk in seconds"
|
77
78
|
)
|
78
79
|
|
79
|
-
@
|
80
|
+
@field_validator('embedding')
|
81
|
+
@classmethod
|
80
82
|
def validate_embedding_dimension(cls, v):
|
81
83
|
if v is not None and len(v) > 0 and len(v) not in [1536, 3072]: # Common OpenAI embedding dimensions
|
82
84
|
# Warning, not error - allow different dimensions
|
@@ -153,22 +155,24 @@ class BatchProcessingResult(BaseModel):
|
|
153
155
|
return 0.0
|
154
156
|
return self.total_tokens / self.successful_chunks
|
155
157
|
|
156
|
-
@
|
157
|
-
|
158
|
-
|
159
|
-
|
158
|
+
@field_validator('successful_chunks', 'failed_chunks')
|
159
|
+
@classmethod
|
160
|
+
def validate_chunk_counts(cls, v, info: ValidationInfo):
|
161
|
+
if info.data and 'total_chunks' in info.data:
|
162
|
+
total = info.data['total_chunks']
|
160
163
|
if v > total:
|
161
164
|
raise ValueError(f'Chunk count cannot exceed total chunks ({total})')
|
162
165
|
return v
|
163
|
-
|
164
|
-
@
|
165
|
-
|
166
|
-
|
167
|
-
|
166
|
+
|
167
|
+
@field_validator('failed_chunks')
|
168
|
+
@classmethod
|
169
|
+
def validate_total_consistency(cls, v, info: ValidationInfo):
|
170
|
+
if info.data and 'total_chunks' in info.data and 'successful_chunks' in info.data:
|
171
|
+
expected_failed = info.data['total_chunks'] - info.data['successful_chunks']
|
168
172
|
if v != expected_failed:
|
169
173
|
raise ValueError(
|
170
|
-
f'Failed chunks ({v}) + successful chunks ({
|
171
|
-
f'must equal total chunks ({
|
174
|
+
f'Failed chunks ({v}) + successful chunks ({info.data["successful_chunks"]}) '
|
175
|
+
f'must equal total chunks ({info.data["total_chunks"]})'
|
172
176
|
)
|
173
177
|
return v
|
174
178
|
|
@@ -86,14 +86,17 @@ class ArchiveChunkProcessor:
|
|
86
86
|
if len(enhanced_content) > max_length:
|
87
87
|
if context_parts:
|
88
88
|
context_prefix_len = len(context_prefix) + 2 # +2 for \n\n
|
89
|
-
|
89
|
+
# Account for "..." suffix (3 chars)
|
90
|
+
available_content_len = max_length - context_prefix_len - 3
|
90
91
|
if available_content_len > 100: # Ensure we have meaningful content
|
91
92
|
truncated_content = content[:available_content_len] + "..."
|
92
93
|
enhanced_content = f"{context_prefix}\n\n{truncated_content}"
|
93
94
|
else:
|
94
|
-
|
95
|
+
# Subtract 3 for "..." suffix
|
96
|
+
enhanced_content = content[:max_length - 3] + "..."
|
95
97
|
else:
|
96
|
-
|
98
|
+
# Subtract 3 for "..." suffix
|
99
|
+
enhanced_content = content[:max_length - 3] + "..."
|
97
100
|
|
98
101
|
return enhanced_content.strip()
|
99
102
|
|
@@ -127,14 +127,22 @@ def process_document_async(
|
|
127
127
|
|
128
128
|
# Step 5: Update document status
|
129
129
|
processing_time = time.time() - start_time
|
130
|
-
|
130
|
+
|
131
|
+
# Check if embedding generation failed
|
132
|
+
if embedding_result.successful_chunks == 0 and embedding_result.total_chunks > 0:
|
133
|
+
# All embeddings failed
|
134
|
+
document.processing_status = ProcessingStatus.FAILED
|
135
|
+
document.processing_error = "; ".join(embedding_result.errors) if embedding_result.errors else "All embeddings failed to generate"
|
136
|
+
else:
|
137
|
+
document.processing_status = ProcessingStatus.COMPLETED
|
138
|
+
|
131
139
|
document.processing_completed_at = timezone.now()
|
132
140
|
document.chunks_count = embedding_result.total_chunks
|
133
141
|
document.total_tokens = total_tokens
|
134
142
|
document.total_cost_usd = total_cost
|
135
143
|
document.save(update_fields=[
|
136
|
-
'processing_status', 'processing_completed_at', '
|
137
|
-
'total_tokens', 'total_cost_usd'
|
144
|
+
'processing_status', 'processing_completed_at', 'processing_error',
|
145
|
+
'chunks_count', 'total_tokens', 'total_cost_usd'
|
138
146
|
])
|
139
147
|
|
140
148
|
return {
|
django_cfg/apps/leads/tests.py
CHANGED
@@ -112,7 +112,7 @@ class LeadAPITest(APITestCase):
|
|
112
112
|
|
113
113
|
def setUp(self):
|
114
114
|
"""Set up test data."""
|
115
|
-
self.url = reverse('
|
115
|
+
self.url = reverse('cfg_leads:lead-submit')
|
116
116
|
self.valid_data = {
|
117
117
|
'name': 'John Doe',
|
118
118
|
'email': 'john@example.com',
|
@@ -23,7 +23,7 @@ from django_cfg.modules.django_admin import (
|
|
23
23
|
ActionVariant
|
24
24
|
)
|
25
25
|
from django_cfg.modules.django_admin.utils.badges import StatusBadge
|
26
|
-
from django_cfg.modules.
|
26
|
+
from django_cfg.modules.django_logging import get_logger
|
27
27
|
|
28
28
|
from ..models import APIKey
|
29
29
|
|
@@ -24,7 +24,7 @@ from django_cfg.modules.django_admin import (
|
|
24
24
|
action,
|
25
25
|
ActionVariant
|
26
26
|
)
|
27
|
-
from django_cfg.modules.
|
27
|
+
from django_cfg.modules.django_logging import get_logger
|
28
28
|
|
29
29
|
from ..models import UserBalance, Transaction
|
30
30
|
from .filters import BalanceRangeFilter, RecentActivityFilter
|
@@ -25,7 +25,7 @@ from django_cfg.modules.django_admin import (
|
|
25
25
|
action
|
26
26
|
)
|
27
27
|
from django_cfg.modules.django_admin.utils.badges import StatusBadge
|
28
|
-
from django_cfg.modules.
|
28
|
+
from django_cfg.modules.django_logging import get_logger
|
29
29
|
from ..models import Currency
|
30
30
|
from .filters import CurrencyTypeFilter, CurrencyProviderFilter, CurrencyRateStatusFilter
|
31
31
|
|
@@ -24,7 +24,7 @@ from django_cfg.modules.django_admin import (
|
|
24
24
|
ActionVariant
|
25
25
|
)
|
26
26
|
from django_cfg.modules.django_admin.utils.badges import StatusBadge
|
27
|
-
from django_cfg.modules.
|
27
|
+
from django_cfg.modules.django_logging import get_logger
|
28
28
|
|
29
29
|
from ..models import UniversalPayment
|
30
30
|
|
@@ -20,7 +20,7 @@ from django_cfg.modules.django_admin import (
|
|
20
20
|
action
|
21
21
|
)
|
22
22
|
from django_cfg.modules.django_admin.utils.badges import StatusBadge
|
23
|
-
from django_cfg.modules.
|
23
|
+
from django_cfg.modules.django_logging import get_logger
|
24
24
|
from ..models import Subscription
|
25
25
|
|
26
26
|
logger = get_logger("subscriptions_admin")
|
@@ -1,127 +1,60 @@
|
|
1
|
+
{% extends 'django_tailwind/app.html' %}
|
1
2
|
{% load static %}
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
<
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
</
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
}
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
Payments
|
61
|
-
</a>
|
62
|
-
<a href="{% url 'cfg_payments_admin:webhook-dashboard' %}"
|
63
|
-
class="text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white px-3 py-2 rounded-md text-sm font-medium">
|
64
|
-
Webhooks
|
65
|
-
</a>
|
66
|
-
|
67
|
-
<!-- Dark Mode Toggle -->
|
68
|
-
<button @click="darkMode = !darkMode"
|
69
|
-
class="p-2 text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white transition-colors">
|
70
|
-
<span x-show="!darkMode" x-cloak class="material-icons-outlined">dark_mode</span>
|
71
|
-
<span x-show="darkMode" x-cloak class="material-icons-outlined">light_mode</span>
|
72
|
-
</button>
|
73
|
-
</div>
|
74
|
-
</div>
|
75
|
-
</div>
|
76
|
-
</nav>
|
77
|
-
|
78
|
-
<!-- Main Content -->
|
79
|
-
<main class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8">
|
80
|
-
<!-- Page Header -->
|
81
|
-
{% block header %}
|
82
|
-
<div class="mb-8">
|
83
|
-
<h2 class="text-2xl font-bold text-gray-900 dark:text-white">
|
84
|
-
{% block page_title %}Dashboard{% endblock %}
|
85
|
-
</h2>
|
86
|
-
{% block page_subtitle %}
|
87
|
-
<p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
|
88
|
-
Manage payments and webhooks
|
89
|
-
</p>
|
90
|
-
{% endblock %}
|
91
|
-
</div>
|
92
|
-
{% endblock %}
|
93
|
-
|
94
|
-
<!-- Messages -->
|
95
|
-
{% if messages %}
|
96
|
-
<div class="mb-6 space-y-2">
|
97
|
-
{% for message in messages %}
|
98
|
-
<div class="rounded-md p-4 {% if message.tags == 'error' %}bg-red-50 text-red-800 border border-red-200 dark:bg-red-900/20 dark:text-red-400 dark:border-red-800{% elif message.tags == 'warning' %}bg-yellow-50 text-yellow-800 border border-yellow-200 dark:bg-yellow-900/20 dark:text-yellow-400 dark:border-yellow-800{% elif message.tags == 'success' %}bg-green-50 text-green-800 border border-green-200 dark:bg-green-900/20 dark:text-green-400 dark:border-green-800{% else %}bg-blue-50 text-blue-800 border border-blue-200 dark:bg-blue-900/20 dark:text-blue-400 dark:border-blue-800{% endif %}">
|
99
|
-
{{ message }}
|
100
|
-
</div>
|
101
|
-
{% endfor %}
|
102
|
-
</div>
|
103
|
-
{% endif %}
|
104
|
-
|
105
|
-
<!-- Page Content -->
|
106
|
-
{% block content %}{% endblock %}
|
107
|
-
</main>
|
108
|
-
|
109
|
-
<!-- Footer -->
|
110
|
-
<footer class="bg-white dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700 mt-12">
|
111
|
-
<div class="max-w-7xl mx-auto py-4 px-4 sm:px-6 lg:px-8">
|
112
|
-
<div class="text-center text-sm text-gray-600 dark:text-gray-400">
|
113
|
-
Payment Admin - Django CFG
|
114
|
-
</div>
|
115
|
-
</div>
|
116
|
-
</footer>
|
117
|
-
|
118
|
-
<!-- Global Dialogs -->
|
119
|
-
{% include 'payments/components/ngrok_help_dialog.html' %}
|
120
|
-
|
121
|
-
<!-- Payment System JS Components -->
|
122
|
-
<script src="{% static 'payments/js/api-client.js' %}"></script>
|
123
|
-
<script src="{% static 'payments/js/ngrok-status.js' %}"></script>
|
124
|
-
|
125
|
-
{% block extra_js %}{% endblock %}
|
126
|
-
</body>
|
127
|
-
</html>
|
3
|
+
|
4
|
+
{% block title %}{% block page_title_text %}Dashboard{% endblock %} - Payment Admin - Django CFG{% endblock %}
|
5
|
+
|
6
|
+
{# Navbar configuration #}
|
7
|
+
{% block header %}
|
8
|
+
{% with navbar_items=payment_nav_items %}
|
9
|
+
{% include 'django_tailwind/components/navbar.html' with title="Payment Admin" icon='<span class="material-icons-outlined text-blue-600">payment</span>' nav_items=navbar_items %}
|
10
|
+
{% endwith %}
|
11
|
+
{% endblock %}
|
12
|
+
|
13
|
+
{% block extra_head %}
|
14
|
+
{{ block.super }}
|
15
|
+
<!-- Material Icons -->
|
16
|
+
<link href="https://fonts.googleapis.com/icon?family=Material+Icons+Outlined" rel="stylesheet">
|
17
|
+
{% endblock %}
|
18
|
+
|
19
|
+
{% block alpine_data_extra %}, showNgrokHelp: false{% endblock %}
|
20
|
+
|
21
|
+
{% block content %}
|
22
|
+
<!-- Page Header -->
|
23
|
+
<div class="mb-8">
|
24
|
+
<h2 class="text-2xl font-bold text-gray-900 dark:text-white">
|
25
|
+
{% block page_title %}Dashboard{% endblock %}
|
26
|
+
</h2>
|
27
|
+
{% block page_subtitle %}
|
28
|
+
<p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
|
29
|
+
Manage payments and webhooks
|
30
|
+
</p>
|
31
|
+
{% endblock %}
|
32
|
+
</div>
|
33
|
+
|
34
|
+
<!-- Messages -->
|
35
|
+
{% if messages %}
|
36
|
+
<div class="mb-6 space-y-2">
|
37
|
+
{% for message in messages %}
|
38
|
+
<div class="rounded-md p-4 {% if message.tags == 'error' %}bg-red-50 text-red-800 border border-red-200 dark:bg-red-900/20 dark:text-red-400 dark:border-red-800{% elif message.tags == 'warning' %}bg-yellow-50 text-yellow-800 border border-yellow-200 dark:bg-yellow-900/20 dark:text-yellow-400 dark:border-yellow-800{% elif message.tags == 'success' %}bg-green-50 text-green-800 border border-green-200 dark:bg-green-900/20 dark:text-green-400 dark:border-green-800{% else %}bg-blue-50 text-blue-800 border border-blue-200 dark:bg-blue-900/20 dark:text-blue-400 dark:border-blue-800{% endif %}">
|
39
|
+
{{ message }}
|
40
|
+
</div>
|
41
|
+
{% endfor %}
|
42
|
+
</div>
|
43
|
+
{% endif %}
|
44
|
+
|
45
|
+
<!-- Page Content -->
|
46
|
+
{% block page_content %}{% endblock %}
|
47
|
+
{% endblock %}
|
48
|
+
|
49
|
+
{% block body %}
|
50
|
+
{{ block.super }}
|
51
|
+
|
52
|
+
<!-- Global Dialogs -->
|
53
|
+
{% include 'payments/components/ngrok_help_dialog.html' %}
|
54
|
+
{% endblock %}
|
55
|
+
|
56
|
+
{% block extra_js %}
|
57
|
+
<!-- Payment System JS Components -->
|
58
|
+
<script src="{% static 'payments/js/api-client.js' %}"></script>
|
59
|
+
<script src="{% static 'payments/js/ngrok-status.js' %}"></script>
|
60
|
+
{% endblock %}
|
@@ -23,7 +23,7 @@ from django_cfg.apps.payments.admin_interface.serializers import (
|
|
23
23
|
AdminPaymentUpdateSerializer,
|
24
24
|
AdminPaymentStatsSerializer,
|
25
25
|
)
|
26
|
-
from django_cfg.modules.
|
26
|
+
from django_cfg.modules.django_logging import get_logger
|
27
27
|
|
28
28
|
logger = get_logger("admin_payment_api")
|
29
29
|
|
@@ -12,7 +12,7 @@ from django.utils import timezone
|
|
12
12
|
from datetime import timedelta
|
13
13
|
|
14
14
|
|
15
|
-
from django_cfg.modules.
|
15
|
+
from django_cfg.modules.django_logging import get_logger
|
16
16
|
from django_cfg.apps.payments.models import UniversalPayment
|
17
17
|
from ..base import AdminReadOnlyViewSet
|
18
18
|
from django_cfg.apps.payments.admin_interface.serializers import AdminPaymentStatsSerializer, WebhookStatsSerializer
|