django-cfg 1.3.13__py3-none-any.whl → 1.4.3__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.
Files changed (446) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/accounts/admin/user_admin.py +39 -16
  3. django_cfg/apps/accounts/serializers/profile.py +1 -1
  4. django_cfg/apps/accounts/services/otp_service.py +18 -11
  5. django_cfg/apps/accounts/signals.py +15 -24
  6. django_cfg/apps/accounts/utils/notifications.py +217 -358
  7. django_cfg/apps/accounts/views/otp.py +2 -2
  8. django_cfg/apps/accounts/views/webhook.py +1 -1
  9. django_cfg/apps/agents/core/django_agent.py +1 -1
  10. django_cfg/apps/agents/examples/__init__.py +3 -0
  11. django_cfg/apps/agents/examples/simple_example.py +161 -0
  12. django_cfg/apps/api/commands/views.py +66 -83
  13. django_cfg/apps/api/health/drf_views.py +269 -0
  14. django_cfg/apps/api/health/serializers.py +45 -0
  15. django_cfg/apps/api/health/urls.py +6 -1
  16. django_cfg/apps/knowbase/admin/actions/__init__.py +13 -0
  17. django_cfg/apps/knowbase/admin/actions/visibility_actions.py +56 -0
  18. django_cfg/apps/knowbase/admin/document_admin.py +136 -270
  19. django_cfg/apps/knowbase/admin/helpers/__init__.py +17 -0
  20. django_cfg/apps/knowbase/admin/helpers/configs.py +72 -0
  21. django_cfg/apps/knowbase/admin/helpers/display_helpers.py +156 -0
  22. django_cfg/apps/knowbase/admin/helpers/statistics.py +108 -0
  23. django_cfg/apps/knowbase/config/constance_fields.py +1 -1
  24. django_cfg/apps/knowbase/config/settings.py +2 -2
  25. django_cfg/apps/knowbase/examples/__init__.py +3 -0
  26. django_cfg/apps/knowbase/examples/external_data_usage.py +191 -0
  27. django_cfg/apps/knowbase/mixins/__init__.py +19 -2
  28. django_cfg/apps/knowbase/mixins/config/__init__.py +14 -0
  29. django_cfg/apps/knowbase/mixins/config/defaults.py +75 -0
  30. django_cfg/apps/knowbase/mixins/config/meta_config.py +120 -0
  31. django_cfg/apps/knowbase/mixins/creator.py +10 -10
  32. django_cfg/apps/knowbase/mixins/examples/vehicle_model_example.py +199 -0
  33. django_cfg/apps/knowbase/mixins/external_data_mixin.py +105 -403
  34. django_cfg/apps/knowbase/mixins/generators/__init__.py +16 -0
  35. django_cfg/apps/knowbase/mixins/generators/content_generator.py +218 -0
  36. django_cfg/apps/knowbase/mixins/generators/field_analyzer.py +76 -0
  37. django_cfg/apps/knowbase/mixins/generators/metadata_generator.py +124 -0
  38. django_cfg/apps/knowbase/mixins/service.py +2 -2
  39. django_cfg/apps/knowbase/services/archive/__init__.py +1 -0
  40. django_cfg/apps/knowbase/services/archive/analyzers/__init__.py +17 -0
  41. django_cfg/apps/knowbase/services/archive/analyzers/complexity_analyzer.py +33 -0
  42. django_cfg/apps/knowbase/services/archive/analyzers/purpose_detector.py +36 -0
  43. django_cfg/apps/knowbase/services/archive/analyzers/quality_analyzer.py +39 -0
  44. django_cfg/apps/knowbase/services/archive/analyzers/tag_generator.py +103 -0
  45. django_cfg/apps/knowbase/services/archive/chunking/__init__.py +19 -0
  46. django_cfg/apps/knowbase/services/archive/chunking/base.py +81 -0
  47. django_cfg/apps/knowbase/services/archive/chunking/json_chunker.py +62 -0
  48. django_cfg/apps/knowbase/services/archive/chunking/markdown_chunker.py +107 -0
  49. django_cfg/apps/knowbase/services/archive/chunking/python_chunker.py +248 -0
  50. django_cfg/apps/knowbase/services/archive/chunking/text_chunker.py +70 -0
  51. django_cfg/apps/knowbase/services/archive/chunking_service.py +110 -729
  52. django_cfg/apps/knowbase/services/archive/context/__init__.py +14 -0
  53. django_cfg/apps/knowbase/services/archive/context/builders.py +220 -0
  54. django_cfg/apps/knowbase/services/archive/context/models.py +38 -0
  55. django_cfg/apps/knowbase/services/embedding/models.py +18 -14
  56. django_cfg/apps/knowbase/services/embedding/processors.py +6 -3
  57. django_cfg/apps/knowbase/tasks/document_processing.py +11 -3
  58. django_cfg/apps/leads/tests.py +1 -1
  59. django_cfg/apps/payments/admin/api_keys_admin.py +1 -1
  60. django_cfg/apps/payments/admin/balance_admin.py +1 -1
  61. django_cfg/apps/payments/admin/currencies_admin.py +1 -1
  62. django_cfg/apps/payments/admin/payments_admin.py +1 -1
  63. django_cfg/apps/payments/admin/subscriptions_admin.py +1 -1
  64. django_cfg/apps/payments/admin_interface/templates/payments/base.html +59 -126
  65. django_cfg/apps/payments/admin_interface/views/api/payments.py +1 -1
  66. django_cfg/apps/payments/admin_interface/views/api/stats.py +1 -1
  67. django_cfg/apps/payments/admin_interface/views/api/users.py +1 -1
  68. django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +1 -1
  69. django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +1 -1
  70. django_cfg/apps/payments/admin_interface/views/base.py +29 -2
  71. django_cfg/apps/payments/apps.py +1 -1
  72. django_cfg/apps/payments/config/django_cfg_integration.py +2 -2
  73. django_cfg/apps/payments/config/helpers.py +3 -2
  74. django_cfg/apps/payments/management/commands/cleanup_expired_data.py +1 -1
  75. django_cfg/apps/payments/management/commands/currency_stats.py +1 -1
  76. django_cfg/apps/payments/management/commands/manage_currencies.py +1 -1
  77. django_cfg/apps/payments/management/commands/manage_providers.py +1 -1
  78. django_cfg/apps/payments/management/commands/process_pending_payments.py +1 -1
  79. django_cfg/apps/payments/management/commands/test_providers.py +1 -1
  80. django_cfg/apps/payments/middleware/api_access.py +1 -1
  81. django_cfg/apps/payments/middleware/rate_limiting.py +1 -1
  82. django_cfg/apps/payments/middleware/usage_tracking.py +1 -1
  83. django_cfg/apps/payments/models/balance.py +2 -2
  84. django_cfg/apps/payments/models/managers/api_key_managers.py +1 -1
  85. django_cfg/apps/payments/models/managers/balance_managers.py +1 -1
  86. django_cfg/apps/payments/models/managers/currency_managers.py +1 -1
  87. django_cfg/apps/payments/models/managers/payment_managers.py +1 -1
  88. django_cfg/apps/payments/models/managers/subscription_managers.py +1 -1
  89. django_cfg/apps/payments/models/payments.py +2 -2
  90. django_cfg/apps/payments/services/cache_service/__init__.py +1 -1
  91. django_cfg/apps/payments/services/cache_service/simple_cache.py +10 -5
  92. django_cfg/apps/payments/services/core/base.py +1 -1
  93. django_cfg/apps/payments/services/core/currency/__init__.py +13 -0
  94. django_cfg/apps/payments/services/core/currency/currency_converter.py +57 -0
  95. django_cfg/apps/payments/services/core/currency/currency_validator.py +61 -0
  96. django_cfg/apps/payments/services/core/operations/__init__.py +15 -0
  97. django_cfg/apps/payments/services/core/operations/payment_canceller.py +100 -0
  98. django_cfg/apps/payments/services/core/operations/payment_creator.py +196 -0
  99. django_cfg/apps/payments/services/core/operations/status_checker.py +100 -0
  100. django_cfg/apps/payments/services/core/payment_service.py +124 -612
  101. django_cfg/apps/payments/services/core/providers/__init__.py +13 -0
  102. django_cfg/apps/payments/services/core/providers/provider_client.py +132 -0
  103. django_cfg/apps/payments/services/core/providers/status_mapper.py +89 -0
  104. django_cfg/apps/payments/services/core/utils/__init__.py +13 -0
  105. django_cfg/apps/payments/services/core/utils/data_converter.py +48 -0
  106. django_cfg/apps/payments/services/core/utils/statistics_calculator.py +69 -0
  107. django_cfg/apps/payments/services/providers/base.py +1 -1
  108. django_cfg/apps/payments/services/providers/nowpayments/__init__.py +3 -3
  109. django_cfg/apps/payments/services/providers/nowpayments/parsers/__init__.py +9 -0
  110. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/__init__.py +23 -0
  111. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/constants.py +23 -0
  112. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/currency_names.py +244 -0
  113. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/patterns.py +511 -0
  114. django_cfg/apps/payments/services/providers/nowpayments/parsers/parser.py +168 -0
  115. django_cfg/apps/payments/services/providers/nowpayments/provider.py +1 -1
  116. django_cfg/apps/payments/services/providers/nowpayments/sync.py +1 -1
  117. django_cfg/apps/payments/services/providers/registry.py +1 -1
  118. django_cfg/apps/payments/services/providers/sync_service.py +1 -1
  119. django_cfg/apps/payments/signals/__init__.py +1 -1
  120. django_cfg/apps/payments/signals/api_key_signals.py +1 -1
  121. django_cfg/apps/payments/signals/balance_signals.py +1 -1
  122. django_cfg/apps/payments/signals/payment_signals.py +1 -1
  123. django_cfg/apps/payments/signals/subscription_signals.py +1 -1
  124. django_cfg/apps/payments/views/api/api_keys.py +1 -1
  125. django_cfg/apps/payments/views/api/balances.py +1 -1
  126. django_cfg/apps/payments/views/api/base.py +1 -1
  127. django_cfg/apps/payments/views/api/currencies.py +1 -1
  128. django_cfg/apps/payments/views/api/payments.py +1 -1
  129. django_cfg/apps/payments/views/api/subscriptions.py +1 -1
  130. django_cfg/apps/payments/views/api/webhooks.py +1 -1
  131. django_cfg/apps/payments/views/serializers/api_keys.py +1 -1
  132. django_cfg/apps/payments/views/serializers/balances.py +1 -1
  133. django_cfg/apps/payments/views/serializers/currencies.py +1 -1
  134. django_cfg/apps/payments/views/serializers/payments.py +1 -1
  135. django_cfg/apps/payments/views/serializers/subscriptions.py +1 -1
  136. django_cfg/apps/payments/views/serializers/webhooks.py +1 -1
  137. django_cfg/apps/support/admin/support_admin.py +21 -13
  138. django_cfg/apps/support/templates/support/chat/access_denied.html +21 -27
  139. django_cfg/apps/support/templates/support/chat/ticket_chat.html +183 -254
  140. django_cfg/apps/support/utils/support_email_service.py +1 -1
  141. django_cfg/apps/tasks/templates/tasks/layout/base.html +20 -115
  142. django_cfg/apps/tasks/utils/simulator.py +1 -1
  143. django_cfg/apps/tasks/views/dashboard.py +33 -3
  144. django_cfg/apps/urls.py +5 -1
  145. django_cfg/cli/README.md +57 -471
  146. django_cfg/cli/commands/create_project.py +140 -529
  147. django_cfg/cli/main.py +13 -10
  148. django_cfg/core/__init__.py +63 -6
  149. django_cfg/core/base/__init__.py +5 -0
  150. django_cfg/core/base/config_model.py +652 -0
  151. django_cfg/core/builders/__init__.py +11 -0
  152. django_cfg/core/builders/apps_builder.py +258 -0
  153. django_cfg/core/builders/middleware_builder.py +115 -0
  154. django_cfg/core/builders/security_builder.py +96 -0
  155. django_cfg/core/config.py +20 -892
  156. django_cfg/core/constants.py +69 -0
  157. django_cfg/core/environment/__init__.py +9 -0
  158. django_cfg/core/exceptions.py +45 -298
  159. django_cfg/core/generation/__init__.py +51 -0
  160. django_cfg/core/generation/core_generators/__init__.py +0 -0
  161. django_cfg/core/generation/core_generators/settings.py +90 -0
  162. django_cfg/core/generation/core_generators/static.py +82 -0
  163. django_cfg/core/generation/core_generators/templates.py +141 -0
  164. django_cfg/core/generation/data_generators/__init__.py +15 -0
  165. django_cfg/core/generation/data_generators/cache.py +132 -0
  166. django_cfg/core/generation/data_generators/database.py +117 -0
  167. django_cfg/core/generation/generation.py +92 -0
  168. django_cfg/core/generation/integration_generators/__init__.py +21 -0
  169. django_cfg/core/generation/integration_generators/api.py +237 -0
  170. django_cfg/core/generation/integration_generators/sessions.py +65 -0
  171. django_cfg/core/generation/integration_generators/tailwind.py +54 -0
  172. django_cfg/core/generation/integration_generators/tasks.py +92 -0
  173. django_cfg/core/generation/integration_generators/third_party.py +144 -0
  174. django_cfg/core/generation/orchestrator.py +285 -0
  175. django_cfg/core/generation/protocols.py +30 -0
  176. django_cfg/core/generation/security_generators/__init__.py +0 -0
  177. django_cfg/core/generation/utility_generators/__init__.py +24 -0
  178. django_cfg/core/generation/utility_generators/email.py +58 -0
  179. django_cfg/core/generation/utility_generators/i18n.py +66 -0
  180. django_cfg/core/generation/utility_generators/limits.py +58 -0
  181. django_cfg/core/generation/utility_generators/logging.py +66 -0
  182. django_cfg/core/generation/utility_generators/security.py +101 -0
  183. django_cfg/core/generation/utils/__init__.py +0 -0
  184. django_cfg/core/generation/utils/helpers.py +32 -0
  185. django_cfg/core/integration/__init__.py +18 -25
  186. django_cfg/core/integration/display/startup.py +146 -133
  187. django_cfg/core/integration/url_integration.py +13 -2
  188. django_cfg/core/services/__init__.py +5 -0
  189. django_cfg/core/services/config_service.py +121 -0
  190. django_cfg/core/state/__init__.py +9 -0
  191. django_cfg/core/state/registry.py +84 -0
  192. django_cfg/core/types/__init__.py +15 -0
  193. django_cfg/core/types/aliases.py +15 -0
  194. django_cfg/core/types/enums.py +49 -0
  195. django_cfg/dashboard/DEBUG_README.md +105 -0
  196. django_cfg/dashboard/REFACTORING_SUMMARY.md +237 -0
  197. django_cfg/dashboard/__init__.py +24 -0
  198. django_cfg/dashboard/components.py +308 -0
  199. django_cfg/dashboard/debug.py +176 -0
  200. django_cfg/dashboard/management/__init__.py +0 -0
  201. django_cfg/dashboard/management/commands/__init__.py +0 -0
  202. django_cfg/dashboard/management/commands/debug_dashboard.py +109 -0
  203. django_cfg/dashboard/sections/__init__.py +1 -0
  204. django_cfg/dashboard/sections/base.py +128 -0
  205. django_cfg/dashboard/sections/commands.py +32 -0
  206. django_cfg/dashboard/sections/overview.py +394 -0
  207. django_cfg/dashboard/sections/stats.py +48 -0
  208. django_cfg/dashboard/sections/system.py +73 -0
  209. django_cfg/management/commands/check_settings.py +6 -2
  210. django_cfg/management/commands/clear_constance.py +6 -1
  211. django_cfg/management/commands/create_token.py +5 -4
  212. django_cfg/management/commands/generate.py +5 -0
  213. django_cfg/management/commands/list_urls.py +7 -2
  214. django_cfg/management/commands/migrate_all.py +6 -2
  215. django_cfg/management/commands/migrator.py +6 -1
  216. django_cfg/management/commands/rundramatiq.py +6 -1
  217. django_cfg/management/commands/rundramatiq_simulator.py +11 -4
  218. django_cfg/management/commands/runserver_ngrok.py +9 -7
  219. django_cfg/management/commands/script.py +25 -21
  220. django_cfg/management/commands/show_config.py +6 -1
  221. django_cfg/management/commands/show_urls.py +8 -3
  222. django_cfg/management/commands/superuser.py +5 -4
  223. django_cfg/management/commands/task_clear.py +8 -3
  224. django_cfg/management/commands/task_status.py +8 -3
  225. django_cfg/management/commands/test_email.py +6 -1
  226. django_cfg/management/commands/test_telegram.py +6 -1
  227. django_cfg/management/commands/test_twilio.py +6 -1
  228. django_cfg/management/commands/tree.py +7 -4
  229. django_cfg/models/__init__.py +88 -3
  230. django_cfg/models/api/__init__.py +27 -0
  231. django_cfg/models/{api.py → api/config.py} +1 -1
  232. django_cfg/models/api/drf/__init__.py +21 -0
  233. django_cfg/models/api/drf/config.py +101 -0
  234. django_cfg/models/api/drf/redoc.py +31 -0
  235. django_cfg/models/api/drf/spectacular.py +129 -0
  236. django_cfg/models/api/drf/swagger.py +59 -0
  237. django_cfg/models/{api_keys.py → api/keys.py} +16 -6
  238. django_cfg/models/{limits.py → api/limits.py} +0 -1
  239. django_cfg/models/base/__init__.py +14 -0
  240. django_cfg/models/django/__init__.py +16 -0
  241. django_cfg/models/{constance.py → django/constance.py} +1 -1
  242. django_cfg/models/{environment.py → django/environment.py} +1 -1
  243. django_cfg/models/infrastructure/__init__.py +17 -0
  244. django_cfg/models/{cache.py → infrastructure/cache.py} +3 -2
  245. django_cfg/models/infrastructure/database/__init__.py +22 -0
  246. django_cfg/models/infrastructure/database/config.py +265 -0
  247. django_cfg/models/infrastructure/database/converters.py +91 -0
  248. django_cfg/models/infrastructure/database/parsers.py +96 -0
  249. django_cfg/models/infrastructure/database/routing.py +85 -0
  250. django_cfg/models/infrastructure/database/validators.py +170 -0
  251. django_cfg/models/{logging.py → infrastructure/logging.py} +1 -1
  252. django_cfg/models/{security.py → infrastructure/security.py} +2 -2
  253. django_cfg/models/ngrok/__init__.py +11 -0
  254. django_cfg/models/ngrok/auth.py +37 -0
  255. django_cfg/models/ngrok/config.py +77 -0
  256. django_cfg/models/ngrok/tunnel.py +35 -0
  257. django_cfg/models/payments/__init__.py +20 -0
  258. django_cfg/models/payments/api_keys.py +57 -0
  259. django_cfg/models/{payments.py → payments/config.py} +56 -154
  260. django_cfg/models/payments/providers/__init__.py +15 -0
  261. django_cfg/models/payments/providers/base.py +25 -0
  262. django_cfg/models/payments/providers/nowpayments.py +48 -0
  263. django_cfg/models/services/__init__.py +18 -0
  264. django_cfg/models/services/base.py +65 -0
  265. django_cfg/models/{email.py → services/email.py} +1 -1
  266. django_cfg/models/services/telegram.py +172 -0
  267. django_cfg/models/tasks/__init__.py +51 -0
  268. django_cfg/models/tasks/backends.py +250 -0
  269. django_cfg/models/tasks/config.py +314 -0
  270. django_cfg/models/tasks/utils.py +174 -0
  271. django_cfg/modules/base.py +18 -3
  272. django_cfg/modules/django_admin/decorators/actions.py +1 -1
  273. django_cfg/modules/django_admin/decorators/display.py +1 -1
  274. django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +1 -1
  275. django_cfg/modules/django_currency/examples/__init__.py +3 -0
  276. django_cfg/modules/django_currency/examples/example_database_usage.py +144 -0
  277. django_cfg/modules/django_drf_theme/CHANGELOG.md +210 -0
  278. django_cfg/modules/django_drf_theme/EXAMPLE.md +465 -0
  279. django_cfg/modules/django_drf_theme/IMPLEMENTATION.md +232 -0
  280. django_cfg/modules/django_drf_theme/README.md +207 -0
  281. django_cfg/modules/django_drf_theme/TAILWIND_CDN_GUIDE.md +274 -0
  282. django_cfg/modules/django_drf_theme/__init__.py +23 -0
  283. django_cfg/modules/django_drf_theme/apps.py +15 -0
  284. django_cfg/modules/django_drf_theme/renderers.py +58 -0
  285. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/api.html +375 -0
  286. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/base.html +938 -0
  287. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/filter_form.html +132 -0
  288. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/raw_data_form.html +123 -0
  289. django_cfg/modules/django_drf_theme/templatetags/__init__.py +1 -0
  290. django_cfg/modules/django_drf_theme/templatetags/tailwind_tags.py +57 -0
  291. django_cfg/modules/django_email/__init__.py +14 -0
  292. django_cfg/modules/{django_email.py → django_email/service.py} +78 -113
  293. django_cfg/modules/django_email/utils.py +40 -0
  294. django_cfg/modules/django_health/__init__.py +9 -0
  295. django_cfg/modules/{django_health.py → django_health/service.py} +23 -21
  296. django_cfg/modules/django_ipc_client/README.md +346 -0
  297. django_cfg/modules/django_ipc_client/__init__.py +51 -0
  298. django_cfg/modules/django_ipc_client/client.py +540 -0
  299. django_cfg/modules/django_ipc_client/config.py +207 -0
  300. django_cfg/modules/django_ipc_client/dashboard/README.md +517 -0
  301. django_cfg/modules/django_ipc_client/dashboard/UNFOLD_INTEGRATION.md +439 -0
  302. django_cfg/modules/django_ipc_client/dashboard/__init__.py +11 -0
  303. django_cfg/modules/django_ipc_client/dashboard/apps.py +22 -0
  304. django_cfg/modules/django_ipc_client/dashboard/monitor.py +435 -0
  305. django_cfg/modules/django_ipc_client/dashboard/static/django_ipc_dashboard/js/dashboard.js +373 -0
  306. django_cfg/modules/django_ipc_client/dashboard/templates/django_ipc_dashboard/base.html +76 -0
  307. django_cfg/modules/django_ipc_client/dashboard/templates/django_ipc_dashboard/dashboard.html +200 -0
  308. django_cfg/modules/django_ipc_client/dashboard/urls.py +22 -0
  309. django_cfg/modules/django_ipc_client/dashboard/urls_admin.py +9 -0
  310. django_cfg/modules/django_ipc_client/dashboard/views.py +251 -0
  311. django_cfg/modules/django_ipc_client/exceptions.py +201 -0
  312. django_cfg/modules/django_llm/llm/client.py +155 -550
  313. django_cfg/modules/django_llm/llm/embeddings/__init__.py +13 -0
  314. django_cfg/modules/django_llm/llm/embeddings/mock_embedder.py +106 -0
  315. django_cfg/modules/django_llm/llm/embeddings/openai_embedder.py +79 -0
  316. django_cfg/modules/django_llm/llm/models_api/__init__.py +9 -0
  317. django_cfg/modules/django_llm/llm/models_api/models_query.py +163 -0
  318. django_cfg/modules/django_llm/llm/providers/__init__.py +15 -0
  319. django_cfg/modules/django_llm/llm/providers/config_builder.py +103 -0
  320. django_cfg/modules/django_llm/llm/providers/provider_manager.py +148 -0
  321. django_cfg/modules/django_llm/llm/providers/provider_selector.py +60 -0
  322. django_cfg/modules/django_llm/llm/requests/__init__.py +15 -0
  323. django_cfg/modules/django_llm/llm/requests/cache_manager.py +170 -0
  324. django_cfg/modules/django_llm/llm/requests/chat_handler.py +199 -0
  325. django_cfg/modules/django_llm/llm/requests/embedding_handler.py +113 -0
  326. django_cfg/modules/django_llm/llm/responses/__init__.py +9 -0
  327. django_cfg/modules/django_llm/llm/responses/response_builder.py +131 -0
  328. django_cfg/modules/django_llm/llm/stats/__init__.py +9 -0
  329. django_cfg/modules/django_llm/llm/stats/stats_manager.py +107 -0
  330. django_cfg/modules/django_llm/translator/detectors/__init__.py +13 -0
  331. django_cfg/modules/django_llm/translator/detectors/language_detector.py +90 -0
  332. django_cfg/modules/django_llm/translator/detectors/script_detector.py +153 -0
  333. django_cfg/modules/django_llm/translator/stats/__init__.py +11 -0
  334. django_cfg/modules/django_llm/translator/stats/stats_tracker.py +85 -0
  335. django_cfg/modules/django_llm/translator/translator.py +150 -603
  336. django_cfg/modules/django_llm/translator/translators/__init__.py +15 -0
  337. django_cfg/modules/django_llm/translator/translators/json_translator.py +316 -0
  338. django_cfg/modules/django_llm/translator/translators/text_translator.py +139 -0
  339. django_cfg/modules/django_llm/translator/utils/__init__.py +13 -0
  340. django_cfg/modules/django_llm/translator/utils/prompt_builder.py +110 -0
  341. django_cfg/modules/django_llm/translator/utils/text_utils.py +114 -0
  342. django_cfg/modules/django_logging/FIXES_SUMMARY.md +276 -0
  343. django_cfg/modules/django_logging/LOGGING_GUIDE.md +504 -0
  344. django_cfg/modules/django_logging/__init__.py +14 -0
  345. django_cfg/modules/{django_logger.py → django_logging/django_logger.py} +13 -13
  346. django_cfg/modules/{logger.py → django_logging/logger.py} +14 -4
  347. django_cfg/modules/django_ngrok/__init__.py +39 -0
  348. django_cfg/modules/{django_ngrok.py → django_ngrok/service.py} +14 -42
  349. django_cfg/modules/django_rpc_old/POETRY.md +344 -0
  350. django_cfg/modules/django_rpc_old/README.md +397 -0
  351. django_cfg/modules/django_rpc_old/TESTING.md +358 -0
  352. django_cfg/modules/django_rpc_old/__init__.py +39 -0
  353. django_cfg/modules/django_rpc_old/client.py +531 -0
  354. django_cfg/modules/django_rpc_old/config.py +279 -0
  355. django_cfg/modules/django_rpc_old/exceptions.py +172 -0
  356. django_cfg/modules/django_tailwind/README.md +478 -0
  357. django_cfg/modules/django_tailwind/__init__.py +7 -0
  358. django_cfg/modules/django_tailwind/apps.py +10 -0
  359. django_cfg/modules/django_tailwind/templates/django_tailwind/app.html +5 -0
  360. django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +117 -0
  361. django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +124 -0
  362. django_cfg/modules/django_tailwind/templates/django_tailwind/components/theme_toggle.html +54 -0
  363. django_cfg/modules/django_tailwind/templates/django_tailwind/components/user_menu.html +116 -0
  364. django_cfg/modules/django_tailwind/templates/django_tailwind/simple.html +46 -0
  365. django_cfg/modules/django_tailwind/templatetags/__init__.py +1 -0
  366. django_cfg/modules/django_tailwind/templatetags/tailwind_info.py +185 -0
  367. django_cfg/modules/django_tasks/__init__.py +29 -0
  368. django_cfg/modules/django_tasks/factory.py +127 -0
  369. django_cfg/modules/{django_tasks.py → django_tasks/service.py} +45 -274
  370. django_cfg/modules/django_tasks/settings.py +107 -0
  371. django_cfg/modules/django_telegram/__init__.py +29 -0
  372. django_cfg/modules/{django_telegram.py → django_telegram/service.py} +45 -113
  373. django_cfg/modules/django_telegram/utils.py +62 -0
  374. django_cfg/modules/django_twilio/__init__.py +54 -107
  375. django_cfg/modules/django_twilio/_imports.py +30 -0
  376. django_cfg/modules/django_twilio/base.py +192 -0
  377. django_cfg/modules/django_twilio/email_otp.py +227 -0
  378. django_cfg/modules/django_twilio/sendgrid_service.py +1 -1
  379. django_cfg/modules/django_twilio/simple_service.py +1 -2
  380. django_cfg/modules/django_twilio/sms.py +94 -0
  381. django_cfg/modules/django_twilio/twilio_service.py +2 -3
  382. django_cfg/modules/django_twilio/unified.py +310 -0
  383. django_cfg/modules/django_twilio/utils.py +190 -0
  384. django_cfg/modules/django_twilio/whatsapp.py +137 -0
  385. django_cfg/modules/django_unfold/callbacks/base.py +198 -7
  386. django_cfg/modules/django_unfold/callbacks/main.py +102 -10
  387. django_cfg/modules/django_unfold/dashboard.py +65 -43
  388. django_cfg/modules/django_unfold/models/config.py +13 -12
  389. django_cfg/modules/django_unfold/models/navigation.py +8 -3
  390. django_cfg/modules/django_unfold/models/tabs.py +2 -2
  391. django_cfg/modules/django_unfold/templates/unfold/helpers/app_list.html +102 -0
  392. django_cfg/registry/core.py +24 -26
  393. django_cfg/registry/modules.py +5 -2
  394. django_cfg/registry/services.py +20 -3
  395. django_cfg/registry/third_party.py +8 -8
  396. django_cfg/static/admin/css/dashboard.css +260 -0
  397. django_cfg/static/admin/js/commands.js +171 -0
  398. django_cfg/static/admin/js/dashboard.js +126 -0
  399. django_cfg/templates/admin/components/management_commands.js +375 -0
  400. django_cfg/templates/admin/components/progress_bar.html +18 -23
  401. django_cfg/templates/admin/examples/component_class_example.html +156 -0
  402. django_cfg/templates/admin/index.html +48 -20
  403. django_cfg/templates/admin/index_new.html +106 -0
  404. django_cfg/templates/admin/layouts/base_dashboard.html +60 -0
  405. django_cfg/templates/admin/layouts/dashboard_with_tabs.html +1 -20
  406. django_cfg/templates/admin/sections/commands_section.html +626 -0
  407. django_cfg/templates/admin/sections/overview_section.html +112 -0
  408. django_cfg/templates/admin/sections/stats_section.html +35 -0
  409. django_cfg/templates/admin/sections/system_section.html +99 -0
  410. django_cfg/templates/admin/snippets/components/CHARTS_GUIDE.md +322 -0
  411. django_cfg/templates/admin/snippets/components/activity_tracker.html +85 -47
  412. django_cfg/templates/admin/snippets/components/charts_section.html +154 -64
  413. django_cfg/templates/admin/snippets/components/django_commands.html +3 -3
  414. django_cfg/templates/admin/snippets/components/recent_activity_improved.html +25 -0
  415. django_cfg/templates/admin/snippets/components/recent_users_table.html +1 -1
  416. django_cfg/templates/admin/snippets/components/system_metrics.html +179 -93
  417. django_cfg/templates/admin/snippets/zones/zones_table.html +2 -2
  418. django_cfg/templatetags/django_cfg.py +7 -1
  419. django_cfg/utils/smart_defaults.py +4 -4
  420. django_cfg-1.4.3.dist-info/METADATA +533 -0
  421. {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/RECORD +432 -195
  422. django_cfg/apps/accounts/utils/auth_email_service.py +0 -84
  423. django_cfg/apps/payments/services/providers/nowpayments/parsers.py +0 -879
  424. django_cfg/core/generation.py +0 -621
  425. django_cfg/management/commands/validate_config.py +0 -189
  426. django_cfg/models/database.py +0 -480
  427. django_cfg/models/drf.py +0 -272
  428. django_cfg/models/ngrok.py +0 -122
  429. django_cfg/models/services.py +0 -440
  430. django_cfg/models/tasks.py +0 -550
  431. django_cfg/modules/django_twilio/service.py +0 -942
  432. django_cfg/template_archive/django_sample.zip +0 -0
  433. django_cfg/templates/rest_framework/api.html +0 -12
  434. django_cfg/utils/toolkit.py +0 -703
  435. django_cfg-1.3.13.dist-info/METADATA +0 -1029
  436. /django_cfg/apps/accounts/management/commands/{test_otp.py → otp_test.py} +0 -0
  437. /django_cfg/core/{environment.py → environment/detector.py} +0 -0
  438. /django_cfg/models/{cors.py → api/cors.py} +0 -0
  439. /django_cfg/models/{jwt.py → api/jwt.py} +0 -0
  440. /django_cfg/models/{base.py → base/config.py} +0 -0
  441. /django_cfg/models/{cfg.py → base/module.py} +0 -0
  442. /django_cfg/models/{revolution.py → django/revolution.py} +0 -0
  443. /django_cfg/modules/{dramatiq_setup.py → django_tasks/dramatiq_setup.py} +0 -0
  444. {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/WHEEL +0 -0
  445. {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/entry_points.txt +0 -0
  446. {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,13 @@
1
+ """
2
+ Provider integration for payment service.
3
+
4
+ Handles communication with payment providers and status mapping.
5
+ """
6
+
7
+ from .provider_client import ProviderClient
8
+ from .status_mapper import StatusMapper
9
+
10
+ __all__ = [
11
+ 'ProviderClient',
12
+ 'StatusMapper',
13
+ ]
@@ -0,0 +1,132 @@
1
+ """
2
+ Provider communication.
3
+
4
+ Handles interactions with payment providers including status checks.
5
+ """
6
+
7
+ from typing import TYPE_CHECKING
8
+ from django.db import transaction
9
+ from django.utils import timezone
10
+
11
+ from ...types import ServiceOperationResult
12
+ from ....models.managers.payment_managers import PaymentStatusUpdateFields
13
+ from .status_mapper import StatusMapper
14
+
15
+ if TYPE_CHECKING:
16
+ from ....models import UniversalPayment
17
+
18
+
19
+ class ProviderClient:
20
+ """Handle provider interactions."""
21
+
22
+ def __init__(self, provider_registry, base_service):
23
+ """
24
+ Initialize provider client.
25
+
26
+ Args:
27
+ provider_registry: Provider registry instance
28
+ base_service: Base service for logging and result creation
29
+ """
30
+ self.provider_registry = provider_registry
31
+ self.base_service = base_service
32
+ self.logger = base_service.logger
33
+
34
+ def check_status(self, payment: 'UniversalPayment') -> ServiceOperationResult:
35
+ """
36
+ Check payment status with provider and update if changed.
37
+
38
+ Args:
39
+ payment: Payment object to check
40
+
41
+ Returns:
42
+ ServiceOperationResult: Result with status_changed flag
43
+ """
44
+ try:
45
+ self.logger.debug("Checking provider status", extra={
46
+ 'payment_id': str(payment.id),
47
+ 'current_status': payment.status,
48
+ 'provider': payment.provider
49
+ })
50
+
51
+ # Get provider instance
52
+ provider = self.provider_registry.get_provider(payment.provider)
53
+
54
+ if not provider:
55
+ return self.base_service._create_error_result(
56
+ f"Provider {payment.provider} not found",
57
+ "provider_not_found"
58
+ )
59
+
60
+ # Get status from provider
61
+ provider_response = provider.get_payment_status(payment.provider_payment_id)
62
+
63
+ if not provider_response.success:
64
+ self.logger.warning("Provider status check failed", extra={
65
+ 'payment_id': str(payment.id),
66
+ 'provider': payment.provider,
67
+ 'error': provider_response.error_message
68
+ })
69
+ return self.base_service._create_error_result(
70
+ f"Provider status check failed: {provider_response.error_message}",
71
+ "provider_check_failed"
72
+ )
73
+
74
+ # Map provider status to universal status
75
+ from ....models import UniversalPayment
76
+ provider_status = provider_response.data.get('status', '').lower()
77
+ new_status = StatusMapper.map_status_to_enum(
78
+ provider_status,
79
+ UniversalPayment.PaymentStatus
80
+ )
81
+
82
+ if not new_status:
83
+ new_status = payment.status
84
+
85
+ status_changed = new_status != payment.status
86
+
87
+ # Update payment if status changed
88
+ if status_changed:
89
+ with transaction.atomic():
90
+ # Prepare extra fields from provider response
91
+ provider_data = provider_response.data
92
+
93
+ extra_fields = PaymentStatusUpdateFields(
94
+ transaction_hash=provider_data.get('transaction_hash'),
95
+ confirmations_count=provider_data.get('confirmations_count')
96
+ )
97
+
98
+ # Use manager method for consistent status updates
99
+ success = UniversalPayment.objects.update_payment_status(
100
+ payment, new_status, extra_fields
101
+ )
102
+
103
+ if not success:
104
+ return self.base_service._create_error_result(
105
+ "Failed to update payment status",
106
+ "status_update_failed"
107
+ )
108
+
109
+ self.logger.info("Payment status updated", extra={
110
+ 'payment_id': str(payment.id),
111
+ 'old_status': payment.status,
112
+ 'new_status': new_status,
113
+ 'provider_status': provider_status
114
+ })
115
+
116
+ return self.base_service._create_success_result(
117
+ "Provider status checked",
118
+ {
119
+ 'status_changed': status_changed,
120
+ 'old_status': payment.status if not status_changed else None,
121
+ 'new_status': new_status,
122
+ 'provider_status': provider_status,
123
+ 'provider_response': provider_response.data
124
+ }
125
+ )
126
+
127
+ except Exception as e:
128
+ self.logger.error("Error checking provider status", extra={
129
+ 'payment_id': str(payment.id),
130
+ 'error': str(e)
131
+ })
132
+ return self.base_service._handle_exception("_check_provider_status", e)
@@ -0,0 +1,89 @@
1
+ """
2
+ Provider status mapping.
3
+
4
+ Maps provider-specific statuses to universal payment statuses.
5
+ """
6
+
7
+ from typing import Optional
8
+
9
+
10
+ class StatusMapper:
11
+ """Map provider statuses to universal statuses."""
12
+
13
+ # Universal status mapping for NowPayments
14
+ NOWPAYMENTS_STATUS_MAP = {
15
+ 'waiting': 'pending',
16
+ 'confirming': 'confirming',
17
+ 'confirmed': 'confirmed',
18
+ 'finished': 'completed',
19
+ 'failed': 'failed',
20
+ 'refunded': 'refunded',
21
+ 'expired': 'expired'
22
+ }
23
+
24
+ # For compatibility with UniversalPayment.PaymentStatus enum
25
+ ENUM_STATUS_MAP = {
26
+ 'waiting': 'PENDING',
27
+ 'confirming': 'PENDING',
28
+ 'confirmed': 'COMPLETED',
29
+ 'sending': 'PENDING',
30
+ 'partially_paid': 'PENDING',
31
+ 'finished': 'COMPLETED',
32
+ 'failed': 'FAILED',
33
+ 'refunded': 'FAILED',
34
+ 'expired': 'EXPIRED',
35
+ }
36
+
37
+ @classmethod
38
+ def map_status(
39
+ cls,
40
+ provider_status: str,
41
+ provider: str
42
+ ) -> Optional[str]:
43
+ """
44
+ Map provider status to universal status.
45
+
46
+ Args:
47
+ provider_status: Status from provider
48
+ provider: Provider name (e.g., 'nowpayments')
49
+
50
+ Returns:
51
+ Universal status string or None if mapping not found
52
+ """
53
+ if not provider_status:
54
+ return None
55
+
56
+ provider_status_lower = provider_status.lower()
57
+
58
+ if provider == 'nowpayments':
59
+ return cls.NOWPAYMENTS_STATUS_MAP.get(provider_status_lower)
60
+
61
+ # Default: return lowercased status
62
+ return provider_status_lower
63
+
64
+ @classmethod
65
+ def map_status_to_enum(
66
+ cls,
67
+ provider_status: str,
68
+ payment_status_enum
69
+ ):
70
+ """
71
+ Map provider status to PaymentStatus enum value.
72
+
73
+ Args:
74
+ provider_status: Status from provider
75
+ payment_status_enum: UniversalPayment.PaymentStatus enum class
76
+
77
+ Returns:
78
+ Enum value or None
79
+ """
80
+ if not provider_status:
81
+ return None
82
+
83
+ provider_status_lower = provider_status.lower()
84
+ enum_key = cls.ENUM_STATUS_MAP.get(provider_status_lower)
85
+
86
+ if enum_key:
87
+ return getattr(payment_status_enum, enum_key, None)
88
+
89
+ return None
@@ -0,0 +1,13 @@
1
+ """
2
+ Utility modules for payment service.
3
+
4
+ Provides data conversion and statistics calculation.
5
+ """
6
+
7
+ from .data_converter import DataConverter
8
+ from .statistics_calculator import StatisticsCalculator
9
+
10
+ __all__ = [
11
+ 'DataConverter',
12
+ 'StatisticsCalculator',
13
+ ]
@@ -0,0 +1,48 @@
1
+ """
2
+ Data conversion utilities.
3
+
4
+ Converts between Django models and Pydantic data models.
5
+ """
6
+
7
+ from typing import TYPE_CHECKING
8
+ from ...types import PaymentData
9
+
10
+ if TYPE_CHECKING:
11
+ from ....models import UniversalPayment
12
+
13
+
14
+ class DataConverter:
15
+ """Convert between data formats."""
16
+
17
+ @staticmethod
18
+ def payment_to_data(payment: 'UniversalPayment') -> PaymentData:
19
+ """
20
+ Convert Django UniversalPayment to PaymentData.
21
+
22
+ Args:
23
+ payment: UniversalPayment model instance
24
+
25
+ Returns:
26
+ PaymentData: Pydantic model with payment data
27
+ """
28
+ return PaymentData(
29
+ id=str(payment.id),
30
+ user_id=payment.user_id,
31
+ amount_usd=float(payment.amount_usd),
32
+ crypto_amount=payment.pay_amount,
33
+ currency_code=payment.currency.code,
34
+ provider=payment.provider,
35
+ status=payment.status,
36
+ provider_payment_id=payment.provider_payment_id,
37
+ payment_url=payment.payment_url,
38
+ qr_code_url=getattr(payment, 'qr_code_url', None),
39
+ wallet_address=payment.pay_address,
40
+ callback_url=payment.callback_url,
41
+ cancel_url=payment.cancel_url,
42
+ description=payment.description,
43
+ metadata={},
44
+ created_at=payment.created_at,
45
+ updated_at=payment.updated_at,
46
+ expires_at=payment.expires_at,
47
+ completed_at=getattr(payment, 'completed_at', None)
48
+ )
@@ -0,0 +1,69 @@
1
+ """
2
+ Payment statistics calculator.
3
+
4
+ Calculates various payment statistics and metrics.
5
+ """
6
+
7
+ from datetime import timedelta
8
+ from django.db import models
9
+ from django.utils import timezone
10
+
11
+ from ....models import UniversalPayment
12
+ from ...types import ServiceOperationResult
13
+
14
+
15
+ class StatisticsCalculator:
16
+ """Calculate payment statistics."""
17
+
18
+ def __init__(self, base_service):
19
+ """
20
+ Initialize calculator.
21
+
22
+ Args:
23
+ base_service: Base service for error/success result creation
24
+ """
25
+ self.base_service = base_service
26
+
27
+ def get_payment_stats(self, days: int = 30) -> ServiceOperationResult:
28
+ """
29
+ Get payment statistics for period.
30
+
31
+ Args:
32
+ days: Number of days to analyze
33
+
34
+ Returns:
35
+ ServiceOperationResult with statistics data
36
+ """
37
+ try:
38
+ since = timezone.now() - timedelta(days=days)
39
+
40
+ stats = UniversalPayment.objects.filter(
41
+ created_at__gte=since
42
+ ).aggregate(
43
+ total_payments=models.Count('id'),
44
+ total_amount_usd=models.Sum('amount_usd'),
45
+ completed_payments=models.Count(
46
+ 'id',
47
+ filter=models.Q(status=UniversalPayment.PaymentStatus.COMPLETED)
48
+ ),
49
+ failed_payments=models.Count(
50
+ 'id',
51
+ filter=models.Q(status=UniversalPayment.PaymentStatus.FAILED)
52
+ )
53
+ )
54
+
55
+ # Calculate success rate
56
+ total = stats['total_payments'] or 0
57
+ completed = stats['completed_payments'] or 0
58
+ success_rate = (completed / total * 100) if total > 0 else 0
59
+
60
+ stats['success_rate'] = round(success_rate, 2)
61
+ stats['period_days'] = days
62
+
63
+ return self.base_service._create_success_result(
64
+ f"Payment statistics for {days} days",
65
+ stats
66
+ )
67
+
68
+ except Exception as e:
69
+ return self.base_service._handle_exception("get_payment_stats", e)
@@ -9,7 +9,7 @@ from typing import Dict, Any, Optional
9
9
  from decimal import Decimal
10
10
  import requests
11
11
  from django.utils import timezone
12
- from django_cfg.modules.django_logger import get_logger
12
+ from django_cfg.modules.django_logging import get_logger
13
13
  from ..types import ProviderResponse, ServiceOperationResult
14
14
  from .models import ProviderConfig, PaymentRequest, WithdrawalRequest
15
15
 
@@ -15,17 +15,17 @@ from .models import (
15
15
  NowPaymentsStatusResponse
16
16
  )
17
17
  from .sync import NowPaymentsCurrencySync
18
- from .config import NowPaymentsConfig as Config
18
+ from .config import NowPaymentsConfig
19
19
 
20
20
  __all__ = [
21
21
  'NowPaymentsProvider',
22
22
  'NowPaymentsProviderConfig',
23
- 'NowPaymentsCurrency',
23
+ 'NowPaymentsCurrency',
24
24
  'NowPaymentsFullCurrenciesResponse',
25
25
  'NowPaymentsPaymentRequest',
26
26
  'NowPaymentsPaymentResponse',
27
27
  'NowPaymentsWebhook',
28
28
  'NowPaymentsStatusResponse',
29
29
  'NowPaymentsCurrencySync',
30
- 'Config'
30
+ 'NowPaymentsConfig'
31
31
  ]
@@ -0,0 +1,9 @@
1
+ """
2
+ NowPayments parsers.
3
+
4
+ Currency parsing and normalization for NowPayments provider.
5
+ """
6
+
7
+ from .parser import NowPaymentsCurrencyParser
8
+
9
+ __all__ = ['NowPaymentsCurrencyParser']
@@ -0,0 +1,23 @@
1
+ """
2
+ Data for NowPayments parsers.
3
+
4
+ All currency names, patterns, and constants for parsing NowPayments API data.
5
+ """
6
+
7
+ from .currency_names import CURRENCY_NAMES, NETWORK_NAMES
8
+ from .patterns import PRECISE_PATTERNS, FALLBACK_PATTERNS, PROVIDER_CODE_PATTERNS
9
+ from .constants import NETWORK_SUFFIXES
10
+
11
+ __all__ = [
12
+ # Currency and network names
13
+ 'CURRENCY_NAMES',
14
+ 'NETWORK_NAMES',
15
+
16
+ # Parsing patterns
17
+ 'PRECISE_PATTERNS',
18
+ 'FALLBACK_PATTERNS',
19
+ 'PROVIDER_CODE_PATTERNS',
20
+
21
+ # Constants
22
+ 'NETWORK_SUFFIXES',
23
+ ]
@@ -0,0 +1,23 @@
1
+ """
2
+ Constants for NowPayments parsers.
3
+
4
+ Network suffixes and other constant values used for pattern matching.
5
+ """
6
+
7
+ # Common network suffixes for pattern matching
8
+ NETWORK_SUFFIXES = [
9
+ 'ERC20', 'TRC20', 'BSC', 'MATIC', 'ARB', 'ALGO', 'ARC20',
10
+ 'OP', 'SOL', 'TON', 'NEAR', 'EOS', 'DOT', 'CELO', 'KAVA',
11
+ 'XTZ', 'BASE', 'KCC', 'XLM', 'LNA', 'AVAX', 'FTM', 'ONE',
12
+ 'HARMONY', 'MOONBEAM', 'MOONRIVER', 'GNOSIS', 'AURORA',
13
+ 'CRONOS', 'EVMOS', 'MILKOMEDA', 'SYSCOIN', 'METIS', 'BOBA',
14
+ 'FUSE', 'TELOS', 'HECO', 'OKEX', 'XDAI', 'COSMOS', 'OSMOSIS',
15
+ 'TERRA', 'KUSAMA', 'POLKADOT', 'CARDANO', 'STELLAR', 'RIPPLE',
16
+ 'BITCOIN', 'LITECOIN', 'BITCOINCASH', 'DOGECOIN', 'ZCASH',
17
+ 'MONERO', 'DASH', 'TEZOS', 'IOTA', 'NEO', 'WAVES', 'LISK',
18
+ 'NANO', 'DIGIBYTE', 'RAVENCOIN', 'SIACOIN', 'DECRED',
19
+ 'HORIZEN', 'KOMODO', 'STRATIS', 'ARK', 'NXT', 'BITSHARES',
20
+ 'STEEM', 'VECHAIN', 'THETA', 'FILECOIN', 'INTERNETCOMPUTER',
21
+ 'HEDERA', 'ELROND', 'FLOW', 'ZILLIQA', 'ONTOLOGY', 'ICON',
22
+ 'QTUM', 'ETHEREUMCLASSIC', 'BITCOINSV'
23
+ ]