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,511 @@
|
|
1
|
+
"""
|
2
|
+
Parsing patterns for NowPayments currency recognition.
|
3
|
+
|
4
|
+
Contains precise patterns, fallback patterns, and provider code patterns
|
5
|
+
for extracting base currency codes from various data sources.
|
6
|
+
"""
|
7
|
+
|
8
|
+
# Precise patterns from real NowPayments API data
|
9
|
+
PRECISE_PATTERNS = {
|
10
|
+
# Stablecoins - most common
|
11
|
+
'tether usd': 'USDT',
|
12
|
+
'tether (': 'USDT', # "Tether (Arbitrum One)"
|
13
|
+
'tether ': 'USDT', # "Tether USD (Algorand)"
|
14
|
+
'usd coin': 'USDC', # "USD Coin (Ethereum)"
|
15
|
+
'usd coin bridged': 'USDC', # "USD Coin Bridged (Polygon)"
|
16
|
+
'trueusd': 'TUSD', # "TrueUSD (Tron)"
|
17
|
+
'binance usd': 'BUSD', # "Binance USD (Polygon)"
|
18
|
+
'paxos standard': 'PAX', # "Paxos Standard"
|
19
|
+
'gemini dollar': 'GUSD', # "Gemini Dollar"
|
20
|
+
|
21
|
+
# Major cryptocurrencies
|
22
|
+
'bitcoin': 'BTC',
|
23
|
+
'ethereum': 'ETH',
|
24
|
+
'cardano': 'ADA',
|
25
|
+
'dogecoin': 'DOGE',
|
26
|
+
'litecoin': 'LTC',
|
27
|
+
'bitcoin cash': 'BCH',
|
28
|
+
'ripple': 'XRP',
|
29
|
+
'polkadot': 'DOT',
|
30
|
+
'avalanche': 'AVAX',
|
31
|
+
'chainlink': 'LINK',
|
32
|
+
'uniswap': 'UNI',
|
33
|
+
'ethereum classic': 'ETC',
|
34
|
+
'stellar': 'XLM',
|
35
|
+
'monero': 'XMR',
|
36
|
+
'zcash': 'ZEC',
|
37
|
+
'dash': 'DASH',
|
38
|
+
'tezos': 'XTZ',
|
39
|
+
'cosmos': 'ATOM',
|
40
|
+
'algorand': 'ALGO',
|
41
|
+
'eos': 'EOS',
|
42
|
+
'tron': 'TRX',
|
43
|
+
'vechain': 'VET',
|
44
|
+
'theta network': 'THETA',
|
45
|
+
'filecoin': 'FIL',
|
46
|
+
'internet computer': 'ICP',
|
47
|
+
'hedera': 'HBAR',
|
48
|
+
'multiversx': 'EGLD',
|
49
|
+
'elrond': 'EGLD',
|
50
|
+
'flow': 'FLOW',
|
51
|
+
'near protocol': 'NEAR',
|
52
|
+
'solana': 'SOL',
|
53
|
+
'fantom': 'FTM',
|
54
|
+
'harmony': 'ONE',
|
55
|
+
'zilliqa': 'ZIL',
|
56
|
+
'ontology': 'ONT',
|
57
|
+
'icon': 'ICX',
|
58
|
+
'qtum': 'QTUM',
|
59
|
+
'waves': 'WAVES',
|
60
|
+
'lisk': 'LSK',
|
61
|
+
'nano': 'NANO',
|
62
|
+
'digibyte': 'DGB',
|
63
|
+
'ravencoin': 'RVN',
|
64
|
+
'siacoin': 'SC',
|
65
|
+
'decred': 'DCR',
|
66
|
+
'horizen': 'ZEN',
|
67
|
+
'komodo': 'KMD',
|
68
|
+
'stratis': 'STRAT',
|
69
|
+
'ark': 'ARK',
|
70
|
+
'nxt': 'NXT',
|
71
|
+
'bitshares': 'BTS',
|
72
|
+
'steem': 'STEEM',
|
73
|
+
|
74
|
+
# Exchange tokens
|
75
|
+
'binance coin': 'BNB',
|
76
|
+
'bnb': 'BNB',
|
77
|
+
'kucoin shares': 'KCS',
|
78
|
+
'huobi token': 'HT',
|
79
|
+
'okb': 'OKB',
|
80
|
+
'crypto.com coin': 'CRO',
|
81
|
+
'ftx token': 'FTT',
|
82
|
+
'binance usd': 'BUSD',
|
83
|
+
|
84
|
+
# Layer 1/2 tokens
|
85
|
+
'polygon': 'MATIC',
|
86
|
+
'matic network': 'MATIC',
|
87
|
+
'avalanche': 'AVAX',
|
88
|
+
'solana': 'SOL',
|
89
|
+
'chainlink': 'LINK',
|
90
|
+
'uniswap': 'UNI',
|
91
|
+
'aave': 'AAVE',
|
92
|
+
'compound': 'COMP',
|
93
|
+
'maker': 'MKR',
|
94
|
+
'synthetix': 'SNX',
|
95
|
+
'yearn.finance': 'YFI',
|
96
|
+
'sushiswap': 'SUSHI',
|
97
|
+
'curve dao token': 'CRV',
|
98
|
+
'balancer': 'BAL',
|
99
|
+
'ren': 'REN',
|
100
|
+
'kyber network': 'KNC',
|
101
|
+
'0x': 'ZRX',
|
102
|
+
'basic attention token': 'BAT',
|
103
|
+
'enjin coin': 'ENJ',
|
104
|
+
'decentraland': 'MANA',
|
105
|
+
'the sandbox': 'SAND',
|
106
|
+
'axie infinity': 'AXS',
|
107
|
+
|
108
|
+
# Other stablecoins
|
109
|
+
'dai stablecoin': 'DAI',
|
110
|
+
'frax': 'FRAX',
|
111
|
+
'liquity usd': 'LUSD',
|
112
|
+
'susd': 'SUSD',
|
113
|
+
'neutrino usd': 'USDN',
|
114
|
+
'reserve rights': 'RSR',
|
115
|
+
'ampleforth': 'AMPL',
|
116
|
+
'tribe': 'TRIBE',
|
117
|
+
'fei usd': 'FEI',
|
118
|
+
|
119
|
+
# Meme coins
|
120
|
+
'shiba inu': 'SHIB',
|
121
|
+
'dogecoin': 'DOGE',
|
122
|
+
'safemoon': 'SAFEMOON',
|
123
|
+
'floki inu': 'FLOKI',
|
124
|
+
'baby doge coin': 'BABYDOGE',
|
125
|
+
|
126
|
+
# Gaming tokens
|
127
|
+
'axie infinity': 'AXS',
|
128
|
+
'smooth love potion': 'SLP',
|
129
|
+
'the sandbox': 'SAND',
|
130
|
+
'decentraland': 'MANA',
|
131
|
+
'enjin coin': 'ENJ',
|
132
|
+
'gala': 'GALA',
|
133
|
+
'illuvium': 'ILV',
|
134
|
+
'star atlas': 'ATLAS',
|
135
|
+
'yield guild games': 'YGG',
|
136
|
+
|
137
|
+
# NFT tokens
|
138
|
+
'opensea': 'OS',
|
139
|
+
'looks rare': 'LOOKS',
|
140
|
+
'x2y2': 'X2Y2',
|
141
|
+
|
142
|
+
# Privacy coins
|
143
|
+
'monero': 'XMR',
|
144
|
+
'zcash': 'ZEC',
|
145
|
+
'dash': 'DASH',
|
146
|
+
'verge': 'XVG',
|
147
|
+
'beam': 'BEAM',
|
148
|
+
'grin': 'GRIN',
|
149
|
+
|
150
|
+
# Oracle tokens
|
151
|
+
'chainlink': 'LINK',
|
152
|
+
'band protocol': 'BAND',
|
153
|
+
'api3': 'API3',
|
154
|
+
'tellor': 'TRB',
|
155
|
+
|
156
|
+
# Storage tokens
|
157
|
+
'filecoin': 'FIL',
|
158
|
+
'storj': 'STORJ',
|
159
|
+
'siacoin': 'SC',
|
160
|
+
'arweave': 'AR',
|
161
|
+
|
162
|
+
# Cross-chain tokens
|
163
|
+
'thorchain': 'RUNE',
|
164
|
+
'cosmos': 'ATOM',
|
165
|
+
'polkadot': 'DOT',
|
166
|
+
'kusama': 'KSM',
|
167
|
+
'ren': 'REN',
|
168
|
+
'anyswap': 'ANY',
|
169
|
+
|
170
|
+
# Yield farming tokens
|
171
|
+
'yearn.finance': 'YFI',
|
172
|
+
'harvest finance': 'FARM',
|
173
|
+
'pickle finance': 'PICKLE',
|
174
|
+
'cream finance': 'CREAM',
|
175
|
+
'alpha finance lab': 'ALPHA',
|
176
|
+
|
177
|
+
# Lending tokens
|
178
|
+
'aave': 'AAVE',
|
179
|
+
'compound': 'COMP',
|
180
|
+
'maker': 'MKR',
|
181
|
+
'venus': 'XVS',
|
182
|
+
'justlend': 'JST',
|
183
|
+
|
184
|
+
# Insurance tokens
|
185
|
+
'nexus mutual': 'NXM',
|
186
|
+
'cover protocol': 'COVER',
|
187
|
+
'nsure network': 'NSURE',
|
188
|
+
|
189
|
+
# Prediction market tokens
|
190
|
+
'augur': 'REP',
|
191
|
+
'gnosis': 'GNO',
|
192
|
+
'polymarket': 'POLY',
|
193
|
+
|
194
|
+
# Social tokens
|
195
|
+
'rally': 'RLY',
|
196
|
+
'whale': 'WHALE',
|
197
|
+
'friends with benefits': 'FWB',
|
198
|
+
|
199
|
+
# Fan tokens
|
200
|
+
'chiliz': 'CHZ',
|
201
|
+
'socios.com': 'CHZ',
|
202
|
+
|
203
|
+
# Metaverse tokens
|
204
|
+
'decentraland': 'MANA',
|
205
|
+
'the sandbox': 'SAND',
|
206
|
+
'enjin coin': 'ENJ',
|
207
|
+
'bloktopia': 'BLOK',
|
208
|
+
'star atlas': 'ATLAS',
|
209
|
+
'illuvium': 'ILV',
|
210
|
+
'gala': 'GALA',
|
211
|
+
'axie infinity': 'AXS',
|
212
|
+
'smooth love potion': 'SLP',
|
213
|
+
'yield guild games': 'YGG',
|
214
|
+
'merit circle': 'MC',
|
215
|
+
'ultra': 'UOS',
|
216
|
+
'wax': 'WAXP',
|
217
|
+
'alien worlds': 'TLM',
|
218
|
+
'my neighbor alice': 'ALICE',
|
219
|
+
'radio caca': 'RACA',
|
220
|
+
'derace': 'DERC',
|
221
|
+
'vulcan forged': 'PYR',
|
222
|
+
'mobox': 'MBOX',
|
223
|
+
'cryptoblades': 'SKILL',
|
224
|
+
'thetan arena': 'THG',
|
225
|
+
'gods unchained': 'GODS',
|
226
|
+
'immutable x': 'IMX',
|
227
|
+
'ecomi': 'OMI',
|
228
|
+
'veve': 'VVV',
|
229
|
+
'efinity token': 'EFI',
|
230
|
+
'chromia': 'CHR',
|
231
|
+
'phantasma': 'SOUL',
|
232
|
+
'wax': 'WAXP',
|
233
|
+
'enjin coin': 'ENJ',
|
234
|
+
'flow': 'FLOW',
|
235
|
+
'dapper labs': 'FLOW',
|
236
|
+
'nba top shot': 'FLOW',
|
237
|
+
'cryptokitties': 'ETH',
|
238
|
+
'cryptopunks': 'ETH',
|
239
|
+
'bored ape yacht club': 'ETH',
|
240
|
+
'mutant ape yacht club': 'ETH',
|
241
|
+
'cool cats': 'ETH',
|
242
|
+
'world of women': 'ETH',
|
243
|
+
'pudgy penguins': 'ETH',
|
244
|
+
'azuki': 'ETH',
|
245
|
+
'clone x': 'ETH',
|
246
|
+
'moonbirds': 'ETH',
|
247
|
+
'otherdeeds for otherside': 'ETH',
|
248
|
+
'yuga labs': 'ETH',
|
249
|
+
}
|
250
|
+
|
251
|
+
# Fallback patterns for edge cases
|
252
|
+
FALLBACK_PATTERNS = {
|
253
|
+
'usdt': 'USDT',
|
254
|
+
'usdc': 'USDC',
|
255
|
+
'tusd': 'TUSD',
|
256
|
+
'busd': 'BUSD',
|
257
|
+
'dai': 'DAI',
|
258
|
+
'frax': 'FRAX',
|
259
|
+
'btc': 'BTC',
|
260
|
+
'eth ': 'ETH',
|
261
|
+
'ada': 'ADA',
|
262
|
+
'doge': 'DOGE',
|
263
|
+
'matic': 'MATIC',
|
264
|
+
'avax': 'AVAX',
|
265
|
+
'sol': 'SOL',
|
266
|
+
'dot': 'DOT',
|
267
|
+
'atom': 'ATOM',
|
268
|
+
'near': 'NEAR',
|
269
|
+
'algo': 'ALGO',
|
270
|
+
'xtz': 'XTZ',
|
271
|
+
'eos': 'EOS',
|
272
|
+
'trx': 'TRX',
|
273
|
+
'xlm': 'XLM',
|
274
|
+
'xrp': 'XRP',
|
275
|
+
'ltc': 'LTC',
|
276
|
+
'bch': 'BCH',
|
277
|
+
'etc': 'ETC',
|
278
|
+
'xmr': 'XMR',
|
279
|
+
'zec': 'ZEC',
|
280
|
+
'dash': 'DASH',
|
281
|
+
'bnb': 'BNB',
|
282
|
+
'link': 'LINK',
|
283
|
+
'uni': 'UNI',
|
284
|
+
'aave': 'AAVE',
|
285
|
+
'comp': 'COMP',
|
286
|
+
'mkr': 'MKR',
|
287
|
+
'snx': 'SNX',
|
288
|
+
'yfi': 'YFI',
|
289
|
+
'sushi': 'SUSHI',
|
290
|
+
'crv': 'CRV',
|
291
|
+
'bal': 'BAL',
|
292
|
+
'ren': 'REN',
|
293
|
+
'knc': 'KNC',
|
294
|
+
'zrx': 'ZRX',
|
295
|
+
'bat': 'BAT',
|
296
|
+
'enj': 'ENJ',
|
297
|
+
'mana': 'MANA',
|
298
|
+
'sand': 'SAND',
|
299
|
+
'axs': 'AXS',
|
300
|
+
'ftm': 'FTM',
|
301
|
+
'one': 'ONE',
|
302
|
+
'zil': 'ZIL',
|
303
|
+
'ont': 'ONT',
|
304
|
+
'icx': 'ICX',
|
305
|
+
'qtum': 'QTUM',
|
306
|
+
'waves': 'WAVES',
|
307
|
+
'lsk': 'LSK',
|
308
|
+
'nano': 'NANO',
|
309
|
+
'dgb': 'DGB',
|
310
|
+
'rvn': 'RVN',
|
311
|
+
'sc': 'SC',
|
312
|
+
'dcr': 'DCR',
|
313
|
+
'zen': 'ZEN',
|
314
|
+
'kmd': 'KMD',
|
315
|
+
'strat': 'STRAT',
|
316
|
+
'ark': 'ARK',
|
317
|
+
'nxt': 'NXT',
|
318
|
+
'bts': 'BTS',
|
319
|
+
'steem': 'STEEM',
|
320
|
+
'vet': 'VET',
|
321
|
+
'theta': 'THETA',
|
322
|
+
'fil': 'FIL',
|
323
|
+
'icp': 'ICP',
|
324
|
+
'hbar': 'HBAR',
|
325
|
+
'egld': 'EGLD',
|
326
|
+
'flow': 'FLOW',
|
327
|
+
'iota': 'IOTA',
|
328
|
+
'shib': 'SHIB',
|
329
|
+
'floki': 'FLOKI',
|
330
|
+
'safemoon': 'SAFEMOON',
|
331
|
+
'babydoge': 'BABYDOGE',
|
332
|
+
'slp': 'SLP',
|
333
|
+
'gala': 'GALA',
|
334
|
+
'ilv': 'ILV',
|
335
|
+
'atlas': 'ATLAS',
|
336
|
+
'ygg': 'YGG',
|
337
|
+
'rune': 'RUNE',
|
338
|
+
'ksm': 'KSM',
|
339
|
+
'any': 'ANY',
|
340
|
+
'farm': 'FARM',
|
341
|
+
'pickle': 'PICKLE',
|
342
|
+
'cream': 'CREAM',
|
343
|
+
'alpha': 'ALPHA',
|
344
|
+
'xvs': 'XVS',
|
345
|
+
'jst': 'JST',
|
346
|
+
'nxm': 'NXM',
|
347
|
+
'cover': 'COVER',
|
348
|
+
'nsure': 'NSURE',
|
349
|
+
'rep': 'REP',
|
350
|
+
'gno': 'GNO',
|
351
|
+
'poly': 'POLY',
|
352
|
+
'rly': 'RLY',
|
353
|
+
'whale': 'WHALE',
|
354
|
+
'fwb': 'FWB',
|
355
|
+
'chz': 'CHZ',
|
356
|
+
'blok': 'BLOK',
|
357
|
+
'mc': 'MC',
|
358
|
+
'uos': 'UOS',
|
359
|
+
'waxp': 'WAXP',
|
360
|
+
'tlm': 'TLM',
|
361
|
+
'alice': 'ALICE',
|
362
|
+
'raca': 'RACA',
|
363
|
+
'derc': 'DERC',
|
364
|
+
'pyr': 'PYR',
|
365
|
+
'mbox': 'MBOX',
|
366
|
+
'skill': 'SKILL',
|
367
|
+
'thg': 'THG',
|
368
|
+
'gods': 'GODS',
|
369
|
+
'imx': 'IMX',
|
370
|
+
'omi': 'OMI',
|
371
|
+
'vvv': 'VVV',
|
372
|
+
'efi': 'EFI',
|
373
|
+
'chr': 'CHR',
|
374
|
+
'soul': 'SOUL',
|
375
|
+
}
|
376
|
+
|
377
|
+
# Provider code exact matches
|
378
|
+
PROVIDER_CODE_PATTERNS = {
|
379
|
+
# Stablecoins with network suffixes
|
380
|
+
'USDTERC20': 'USDT',
|
381
|
+
'USDTTRC20': 'USDT',
|
382
|
+
'USDTBSC': 'USDT',
|
383
|
+
'USDTMATIC': 'USDT',
|
384
|
+
'USDTARB': 'USDT',
|
385
|
+
'USDTALGO': 'USDT',
|
386
|
+
'USDTARC20': 'USDT', # Avalanche
|
387
|
+
'USDTOP': 'USDT', # Optimism
|
388
|
+
'USDTSOL': 'USDT', # Solana
|
389
|
+
'USDTTON': 'USDT', # TON
|
390
|
+
'USDTNEAR': 'USDT', # NEAR
|
391
|
+
'USDTEOS': 'USDT', # EOS
|
392
|
+
'USDTDOT': 'USDT', # Polkadot
|
393
|
+
'USDTCELO': 'USDT', # Celo
|
394
|
+
'USDTKAVA': 'USDT', # Kava
|
395
|
+
'USDTXTZ': 'USDT', # Tezos
|
396
|
+
|
397
|
+
# USDC variants
|
398
|
+
'USDCERC20': 'USDC',
|
399
|
+
'USDCBSC': 'USDC',
|
400
|
+
'USDCMATIC': 'USDC',
|
401
|
+
'USDCARB': 'USDC',
|
402
|
+
'USDCALGO': 'USDC',
|
403
|
+
'USDCARC20': 'USDC', # Avalanche
|
404
|
+
'USDCOP': 'USDC', # Optimism
|
405
|
+
'USDCSOL': 'USDC', # Solana
|
406
|
+
'USDCBASE': 'USDC', # Base
|
407
|
+
'USDCKCC': 'USDC', # KCC
|
408
|
+
'USDCXLM': 'USDC', # Stellar
|
409
|
+
|
410
|
+
# ETH variants
|
411
|
+
'ETHBSC': 'ETH',
|
412
|
+
'ETHARB': 'ETH',
|
413
|
+
'ETHBASE': 'ETH',
|
414
|
+
'ETHLNA': 'ETH', # Linea
|
415
|
+
|
416
|
+
# Other common patterns
|
417
|
+
'BTCBSC': 'BTC', # Wrapped BTC
|
418
|
+
'WBTC': 'BTC', # Wrapped Bitcoin
|
419
|
+
'WETH': 'ETH', # Wrapped Ethereum
|
420
|
+
|
421
|
+
# Network-specific tokens with suffixes
|
422
|
+
'BNBBSC': 'BNB',
|
423
|
+
'MATICMATIC': 'MATIC',
|
424
|
+
'AVAXARC20': 'AVAX',
|
425
|
+
'SOLANASOL': 'SOL',
|
426
|
+
|
427
|
+
# Additional patterns from NowPayments
|
428
|
+
'1INCHBSC': '1INCH',
|
429
|
+
'1INCHERC20': '1INCH',
|
430
|
+
'AAVEERC20': 'AAVE',
|
431
|
+
'AAVEBSC': 'AAVE',
|
432
|
+
'ADABSC': 'ADA',
|
433
|
+
'ALGOERC20': 'ALGO',
|
434
|
+
'APEERC20': 'APE',
|
435
|
+
'APEBSC': 'APE',
|
436
|
+
'ATOMCOSMOS': 'ATOM',
|
437
|
+
'AVAXBSC': 'AVAX',
|
438
|
+
'AXSERC20': 'AXS',
|
439
|
+
'AXSBSC': 'AXS',
|
440
|
+
'BATERC20': 'BAT',
|
441
|
+
'BATBSC': 'BAT',
|
442
|
+
'BCHBSC': 'BCH',
|
443
|
+
'BNBERC20': 'BNB',
|
444
|
+
'BUSDBSC': 'BUSD',
|
445
|
+
'BUSDERC20': 'BUSD',
|
446
|
+
'CAKEBSC': 'CAKE',
|
447
|
+
'COMPBSC': 'COMP',
|
448
|
+
'COMPERC20': 'COMP',
|
449
|
+
'CRVERC20': 'CRV',
|
450
|
+
'CRVBSC': 'CRV',
|
451
|
+
'DAIBSC': 'DAI',
|
452
|
+
'DAIERC20': 'DAI',
|
453
|
+
'DOGEERC20': 'DOGE',
|
454
|
+
'DOGEBSC': 'DOGE',
|
455
|
+
'DOTBSC': 'DOT',
|
456
|
+
'DOTERC20': 'DOT',
|
457
|
+
'ENJERC20': 'ENJ',
|
458
|
+
'ENJBSC': 'ENJ',
|
459
|
+
'ETCBSC': 'ETC',
|
460
|
+
'ETCERC20': 'ETC',
|
461
|
+
'FILBSC': 'FIL',
|
462
|
+
'FILERC20': 'FIL',
|
463
|
+
'FTMBSC': 'FTM',
|
464
|
+
'FTMERC20': 'FTM',
|
465
|
+
'GALAERC20': 'GALA',
|
466
|
+
'GALABSC': 'GALA',
|
467
|
+
'GRTERC20': 'GRT',
|
468
|
+
'GRTBSC': 'GRT',
|
469
|
+
'ICPERC20': 'ICP',
|
470
|
+
'ICPBSC': 'ICP',
|
471
|
+
'LINKERC20': 'LINK',
|
472
|
+
'LINKBSC': 'LINK',
|
473
|
+
'LTCBSC': 'LTC',
|
474
|
+
'LTCERC20': 'LTC',
|
475
|
+
'MANAERC20': 'MANA',
|
476
|
+
'MANABSC': 'MANA',
|
477
|
+
'MKRBSC': 'MKR',
|
478
|
+
'MKRERC20': 'MKR',
|
479
|
+
'NEARERC20': 'NEAR',
|
480
|
+
'NEARBSC': 'NEAR',
|
481
|
+
'ONEERC20': 'ONE',
|
482
|
+
'ONEBSC': 'ONE',
|
483
|
+
'SANDERC20': 'SAND',
|
484
|
+
'SANDBSC': 'SAND',
|
485
|
+
'SHIBERC20': 'SHIB',
|
486
|
+
'SHIBBSC': 'SHIB',
|
487
|
+
'SNXERC20': 'SNX',
|
488
|
+
'SNXBSC': 'SNX',
|
489
|
+
'SOLERC20': 'SOL',
|
490
|
+
'SOLBSC': 'SOL',
|
491
|
+
'SUSHIERC20': 'SUSHI',
|
492
|
+
'SUSHIBSC': 'SUSHI',
|
493
|
+
'TRXBSC': 'TRX',
|
494
|
+
'TRXERC20': 'TRX',
|
495
|
+
'TUSDTRC20': 'TUSD',
|
496
|
+
'TUSDBSC': 'TUSD',
|
497
|
+
'TUSDERC20': 'TUSD',
|
498
|
+
'UNIERC20': 'UNI',
|
499
|
+
'UNIBSC': 'UNI',
|
500
|
+
'VETBSC': 'VET',
|
501
|
+
'VETERC20': 'VET',
|
502
|
+
'XLMBSC': 'XLM',
|
503
|
+
'XLMERC20': 'XLM',
|
504
|
+
'XRPBSC': 'XRP',
|
505
|
+
'XRPERC20': 'XRP',
|
506
|
+
'XTZXTZ': 'XTZ',
|
507
|
+
'YFIIERC20': 'YFI',
|
508
|
+
'YFIIBSC': 'YFI',
|
509
|
+
'ZRXERC20': 'ZRX',
|
510
|
+
'ZRXBSC': 'ZRX',
|
511
|
+
}
|
@@ -0,0 +1,168 @@
|
|
1
|
+
"""
|
2
|
+
NowPayments currency parser.
|
3
|
+
|
4
|
+
Handles parsing and normalization of NowPayments currency data using
|
5
|
+
pattern matching and data-driven approach.
|
6
|
+
"""
|
7
|
+
|
8
|
+
from typing import Optional
|
9
|
+
from django_cfg.modules.django_logging import get_logger
|
10
|
+
|
11
|
+
from .data import (
|
12
|
+
CURRENCY_NAMES,
|
13
|
+
NETWORK_NAMES,
|
14
|
+
PRECISE_PATTERNS,
|
15
|
+
FALLBACK_PATTERNS,
|
16
|
+
PROVIDER_CODE_PATTERNS,
|
17
|
+
NETWORK_SUFFIXES,
|
18
|
+
)
|
19
|
+
|
20
|
+
logger = get_logger("nowpayments_parsers")
|
21
|
+
|
22
|
+
|
23
|
+
class NowPaymentsCurrencyParser:
|
24
|
+
"""Parser for NowPayments currency data."""
|
25
|
+
|
26
|
+
def __init__(self):
|
27
|
+
"""Initialize currency parser with data from data module."""
|
28
|
+
self.precise_patterns = PRECISE_PATTERNS
|
29
|
+
self.fallback_patterns = FALLBACK_PATTERNS
|
30
|
+
self.provider_code_patterns = PROVIDER_CODE_PATTERNS
|
31
|
+
self.network_suffixes = NETWORK_SUFFIXES
|
32
|
+
|
33
|
+
def parse_currency_code(
|
34
|
+
self,
|
35
|
+
provider_code: str,
|
36
|
+
currency_name: str,
|
37
|
+
network_code: Optional[str] = None,
|
38
|
+
ticker: str = ''
|
39
|
+
) -> tuple[str, Optional[str]]:
|
40
|
+
"""
|
41
|
+
Smart parsing using API data, prioritizing ticker field.
|
42
|
+
|
43
|
+
Uses ticker as primary source for base currency, then falls back to name parsing.
|
44
|
+
|
45
|
+
Args:
|
46
|
+
provider_code: Provider's currency code (e.g., "USDTERC20")
|
47
|
+
currency_name: Human-readable currency name (e.g., "Tether USD")
|
48
|
+
network_code: Network code (e.g., "eth")
|
49
|
+
ticker: Ticker symbol (e.g., "usdt")
|
50
|
+
|
51
|
+
Returns:
|
52
|
+
Tuple of (base_currency, network_code) or (None, None) if should skip
|
53
|
+
|
54
|
+
Examples:
|
55
|
+
>>> parser.parse_currency_code("1INCHBSC", "1Inch Network (BSC)", "bsc", "1inch")
|
56
|
+
("1INCH", "bsc")
|
57
|
+
>>> parser.parse_currency_code("USDTERC20", "Tether USD (ERC-20)", "eth", "usdt")
|
58
|
+
("USDT", "eth")
|
59
|
+
>>> parser.parse_currency_code("BTC", "Bitcoin", "btc", "btc")
|
60
|
+
("BTC", "btc")
|
61
|
+
"""
|
62
|
+
# Skip currencies with empty network - they are duplicates
|
63
|
+
if network_code is not None and network_code.strip() == "":
|
64
|
+
return None, None
|
65
|
+
|
66
|
+
# Priority 1: Use ticker if available and meaningful
|
67
|
+
if ticker and len(ticker.strip()) > 0:
|
68
|
+
base_currency = ticker.upper().strip()
|
69
|
+
return base_currency, network_code
|
70
|
+
|
71
|
+
# Priority 2: Extract from provider code patterns
|
72
|
+
base_currency = self.extract_base_currency_from_provider_code(provider_code)
|
73
|
+
if base_currency != provider_code:
|
74
|
+
return base_currency, network_code
|
75
|
+
|
76
|
+
# Priority 3: Extract from name using patterns
|
77
|
+
base_currency = self.extract_base_currency_from_name(currency_name, provider_code)
|
78
|
+
return base_currency, network_code
|
79
|
+
|
80
|
+
def extract_base_currency_from_name(self, currency_name: str, fallback_code: str) -> str:
|
81
|
+
"""
|
82
|
+
Extract base currency from human-readable name using real API patterns.
|
83
|
+
|
84
|
+
Args:
|
85
|
+
currency_name: Human-readable currency name
|
86
|
+
fallback_code: Code to use if no pattern matches
|
87
|
+
|
88
|
+
Returns:
|
89
|
+
Base currency code (e.g., "USDT", "BTC")
|
90
|
+
"""
|
91
|
+
if not currency_name:
|
92
|
+
return fallback_code
|
93
|
+
|
94
|
+
name_lower = currency_name.lower()
|
95
|
+
|
96
|
+
# Check precise patterns first (most reliable)
|
97
|
+
for pattern, base in self.precise_patterns.items():
|
98
|
+
if pattern in name_lower:
|
99
|
+
return base
|
100
|
+
|
101
|
+
# Fallback patterns for edge cases
|
102
|
+
for pattern, base in self.fallback_patterns.items():
|
103
|
+
if pattern in name_lower:
|
104
|
+
return base
|
105
|
+
|
106
|
+
# Last resort: use the provider code as-is
|
107
|
+
return fallback_code
|
108
|
+
|
109
|
+
def extract_base_currency_from_provider_code(self, provider_code: str) -> str:
|
110
|
+
"""
|
111
|
+
Extract base currency from NowPayments provider code patterns.
|
112
|
+
|
113
|
+
Args:
|
114
|
+
provider_code: Provider's currency code (e.g., "USDTERC20")
|
115
|
+
|
116
|
+
Returns:
|
117
|
+
Base currency code (e.g., "USDT")
|
118
|
+
"""
|
119
|
+
if not provider_code:
|
120
|
+
return provider_code
|
121
|
+
|
122
|
+
code_upper = provider_code.upper()
|
123
|
+
|
124
|
+
# Check exact matches first
|
125
|
+
if code_upper in self.provider_code_patterns:
|
126
|
+
return self.provider_code_patterns[code_upper]
|
127
|
+
|
128
|
+
# Pattern matching for common suffixes
|
129
|
+
for suffix in self.network_suffixes:
|
130
|
+
if code_upper.endswith(suffix):
|
131
|
+
base_part = code_upper[:-len(suffix)]
|
132
|
+
if len(base_part) >= 2: # Ensure we have a meaningful base
|
133
|
+
return base_part
|
134
|
+
|
135
|
+
# Return original if no pattern matches
|
136
|
+
return provider_code
|
137
|
+
|
138
|
+
def generate_currency_name(
|
139
|
+
self,
|
140
|
+
base_currency_code: str,
|
141
|
+
network_code: Optional[str],
|
142
|
+
original_name: str
|
143
|
+
) -> str:
|
144
|
+
"""
|
145
|
+
Generate proper currency name based on base currency and network.
|
146
|
+
|
147
|
+
Args:
|
148
|
+
base_currency_code: Base currency code (e.g., "USDT")
|
149
|
+
network_code: Network code (e.g., "eth")
|
150
|
+
original_name: Original name as fallback
|
151
|
+
|
152
|
+
Returns:
|
153
|
+
Formatted currency name (e.g., "Tether USD (Ethereum)")
|
154
|
+
|
155
|
+
Examples:
|
156
|
+
>>> parser.generate_currency_name("USDT", "eth", "Tether USD")
|
157
|
+
"Tether USD (Ethereum)"
|
158
|
+
>>> parser.generate_currency_name("BTC", "btc", "Bitcoin")
|
159
|
+
"Bitcoin"
|
160
|
+
"""
|
161
|
+
base_name = CURRENCY_NAMES.get(base_currency_code, original_name)
|
162
|
+
|
163
|
+
if not network_code or network_code == base_currency_code.lower():
|
164
|
+
# Native currency on its own network
|
165
|
+
return base_name
|
166
|
+
|
167
|
+
network_name = NETWORK_NAMES.get(network_code.lower(), network_code.title())
|
168
|
+
return f"{base_name} ({network_name})"
|
@@ -11,7 +11,7 @@ from typing import Optional, List, Dict, Any
|
|
11
11
|
from decimal import Decimal
|
12
12
|
from datetime import datetime
|
13
13
|
|
14
|
-
from django_cfg.modules.
|
14
|
+
from django_cfg.modules.django_logging import get_logger
|
15
15
|
from ..base import BaseProvider
|
16
16
|
from ..models import PaymentRequest
|
17
17
|
from ...types import ProviderResponse, ServiceOperationResult
|
@@ -8,7 +8,7 @@ from typing import Optional, Tuple, List
|
|
8
8
|
from django.db import transaction
|
9
9
|
from django.utils import timezone
|
10
10
|
|
11
|
-
from django_cfg.modules.
|
11
|
+
from django_cfg.modules.django_logging import get_logger
|
12
12
|
from django_cfg.apps.payments.models import Currency, Network, ProviderCurrency
|
13
13
|
from ..models import UniversalCurrency, CurrencySyncResult
|
14
14
|
from .config import NowPaymentsConfig as Config
|