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.
Files changed (439) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/accounts/admin/inlines.py +11 -5
  3. django_cfg/apps/accounts/admin/user_admin.py +39 -16
  4. django_cfg/apps/accounts/serializers/profile.py +1 -1
  5. django_cfg/apps/accounts/services/otp_service.py +18 -11
  6. django_cfg/apps/accounts/signals.py +15 -24
  7. django_cfg/apps/accounts/utils/notifications.py +217 -358
  8. django_cfg/apps/accounts/views/otp.py +2 -2
  9. django_cfg/apps/accounts/views/webhook.py +1 -1
  10. django_cfg/apps/agents/core/django_agent.py +1 -1
  11. django_cfg/apps/api/commands/views.py +66 -83
  12. django_cfg/apps/api/health/drf_views.py +269 -0
  13. django_cfg/apps/api/health/serializers.py +45 -0
  14. django_cfg/apps/api/health/urls.py +6 -1
  15. django_cfg/apps/knowbase/admin/actions/__init__.py +13 -0
  16. django_cfg/apps/knowbase/admin/actions/visibility_actions.py +56 -0
  17. django_cfg/apps/knowbase/admin/document_admin.py +136 -270
  18. django_cfg/apps/knowbase/admin/helpers/__init__.py +17 -0
  19. django_cfg/apps/knowbase/admin/helpers/configs.py +72 -0
  20. django_cfg/apps/knowbase/admin/helpers/display_helpers.py +156 -0
  21. django_cfg/apps/knowbase/admin/helpers/statistics.py +108 -0
  22. django_cfg/apps/knowbase/config/constance_fields.py +1 -1
  23. django_cfg/apps/knowbase/config/settings.py +2 -2
  24. django_cfg/apps/knowbase/mixins/__init__.py +19 -2
  25. django_cfg/apps/knowbase/mixins/config/__init__.py +14 -0
  26. django_cfg/apps/knowbase/mixins/config/defaults.py +75 -0
  27. django_cfg/apps/knowbase/mixins/config/meta_config.py +120 -0
  28. django_cfg/apps/knowbase/mixins/creator.py +10 -10
  29. django_cfg/apps/knowbase/mixins/external_data_mixin.py +105 -403
  30. django_cfg/apps/knowbase/mixins/generators/__init__.py +16 -0
  31. django_cfg/apps/knowbase/mixins/generators/content_generator.py +218 -0
  32. django_cfg/apps/knowbase/mixins/generators/field_analyzer.py +76 -0
  33. django_cfg/apps/knowbase/mixins/generators/metadata_generator.py +124 -0
  34. django_cfg/apps/knowbase/mixins/service.py +2 -2
  35. django_cfg/apps/knowbase/services/archive/__init__.py +1 -0
  36. django_cfg/apps/knowbase/services/archive/analyzers/__init__.py +17 -0
  37. django_cfg/apps/knowbase/services/archive/analyzers/complexity_analyzer.py +33 -0
  38. django_cfg/apps/knowbase/services/archive/analyzers/purpose_detector.py +36 -0
  39. django_cfg/apps/knowbase/services/archive/analyzers/quality_analyzer.py +39 -0
  40. django_cfg/apps/knowbase/services/archive/analyzers/tag_generator.py +103 -0
  41. django_cfg/apps/knowbase/services/archive/chunking/__init__.py +19 -0
  42. django_cfg/apps/knowbase/services/archive/chunking/base.py +81 -0
  43. django_cfg/apps/knowbase/services/archive/chunking/json_chunker.py +62 -0
  44. django_cfg/apps/knowbase/services/archive/chunking/markdown_chunker.py +107 -0
  45. django_cfg/apps/knowbase/services/archive/chunking/python_chunker.py +248 -0
  46. django_cfg/apps/knowbase/services/archive/chunking/text_chunker.py +70 -0
  47. django_cfg/apps/knowbase/services/archive/chunking_service.py +110 -729
  48. django_cfg/apps/knowbase/services/archive/context/__init__.py +14 -0
  49. django_cfg/apps/knowbase/services/archive/context/builders.py +220 -0
  50. django_cfg/apps/knowbase/services/archive/context/models.py +38 -0
  51. django_cfg/apps/knowbase/services/embedding/models.py +18 -14
  52. django_cfg/apps/knowbase/services/embedding/processors.py +6 -3
  53. django_cfg/apps/knowbase/tasks/document_processing.py +11 -3
  54. django_cfg/apps/leads/tests.py +1 -1
  55. django_cfg/apps/payments/admin/api_keys_admin.py +1 -1
  56. django_cfg/apps/payments/admin/balance_admin.py +1 -1
  57. django_cfg/apps/payments/admin/currencies_admin.py +1 -1
  58. django_cfg/apps/payments/admin/payments_admin.py +1 -1
  59. django_cfg/apps/payments/admin/subscriptions_admin.py +1 -1
  60. django_cfg/apps/payments/admin_interface/templates/payments/base.html +59 -126
  61. django_cfg/apps/payments/admin_interface/views/api/payments.py +1 -1
  62. django_cfg/apps/payments/admin_interface/views/api/stats.py +1 -1
  63. django_cfg/apps/payments/admin_interface/views/api/users.py +1 -1
  64. django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +1 -1
  65. django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +1 -1
  66. django_cfg/apps/payments/admin_interface/views/base.py +29 -2
  67. django_cfg/apps/payments/apps.py +1 -1
  68. django_cfg/apps/payments/config/django_cfg_integration.py +2 -2
  69. django_cfg/apps/payments/config/helpers.py +3 -2
  70. django_cfg/apps/payments/management/commands/cleanup_expired_data.py +1 -1
  71. django_cfg/apps/payments/management/commands/currency_stats.py +1 -1
  72. django_cfg/apps/payments/management/commands/manage_currencies.py +1 -1
  73. django_cfg/apps/payments/management/commands/manage_providers.py +1 -1
  74. django_cfg/apps/payments/management/commands/process_pending_payments.py +1 -1
  75. django_cfg/apps/payments/management/commands/test_providers.py +1 -1
  76. django_cfg/apps/payments/middleware/api_access.py +1 -1
  77. django_cfg/apps/payments/middleware/rate_limiting.py +1 -1
  78. django_cfg/apps/payments/middleware/usage_tracking.py +1 -1
  79. django_cfg/apps/payments/models/balance.py +2 -2
  80. django_cfg/apps/payments/models/managers/api_key_managers.py +1 -1
  81. django_cfg/apps/payments/models/managers/balance_managers.py +1 -1
  82. django_cfg/apps/payments/models/managers/currency_managers.py +1 -1
  83. django_cfg/apps/payments/models/managers/payment_managers.py +1 -1
  84. django_cfg/apps/payments/models/managers/subscription_managers.py +1 -1
  85. django_cfg/apps/payments/models/payments.py +2 -2
  86. django_cfg/apps/payments/services/cache_service/__init__.py +1 -1
  87. django_cfg/apps/payments/services/cache_service/simple_cache.py +10 -5
  88. django_cfg/apps/payments/services/core/base.py +1 -1
  89. django_cfg/apps/payments/services/core/currency/__init__.py +13 -0
  90. django_cfg/apps/payments/services/core/currency/currency_converter.py +57 -0
  91. django_cfg/apps/payments/services/core/currency/currency_validator.py +61 -0
  92. django_cfg/apps/payments/services/core/operations/__init__.py +15 -0
  93. django_cfg/apps/payments/services/core/operations/payment_canceller.py +100 -0
  94. django_cfg/apps/payments/services/core/operations/payment_creator.py +196 -0
  95. django_cfg/apps/payments/services/core/operations/status_checker.py +100 -0
  96. django_cfg/apps/payments/services/core/payment_service.py +124 -612
  97. django_cfg/apps/payments/services/core/providers/__init__.py +13 -0
  98. django_cfg/apps/payments/services/core/providers/provider_client.py +132 -0
  99. django_cfg/apps/payments/services/core/providers/status_mapper.py +89 -0
  100. django_cfg/apps/payments/services/core/utils/__init__.py +13 -0
  101. django_cfg/apps/payments/services/core/utils/data_converter.py +48 -0
  102. django_cfg/apps/payments/services/core/utils/statistics_calculator.py +69 -0
  103. django_cfg/apps/payments/services/providers/base.py +1 -1
  104. django_cfg/apps/payments/services/providers/nowpayments/__init__.py +3 -3
  105. django_cfg/apps/payments/services/providers/nowpayments/parsers/__init__.py +9 -0
  106. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/__init__.py +23 -0
  107. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/constants.py +23 -0
  108. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/currency_names.py +244 -0
  109. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/patterns.py +511 -0
  110. django_cfg/apps/payments/services/providers/nowpayments/parsers/parser.py +168 -0
  111. django_cfg/apps/payments/services/providers/nowpayments/provider.py +1 -1
  112. django_cfg/apps/payments/services/providers/nowpayments/sync.py +1 -1
  113. django_cfg/apps/payments/services/providers/registry.py +1 -1
  114. django_cfg/apps/payments/services/providers/sync_service.py +1 -1
  115. django_cfg/apps/payments/signals/__init__.py +1 -1
  116. django_cfg/apps/payments/signals/api_key_signals.py +1 -1
  117. django_cfg/apps/payments/signals/balance_signals.py +1 -1
  118. django_cfg/apps/payments/signals/payment_signals.py +1 -1
  119. django_cfg/apps/payments/signals/subscription_signals.py +1 -1
  120. django_cfg/apps/payments/views/api/api_keys.py +1 -1
  121. django_cfg/apps/payments/views/api/balances.py +1 -1
  122. django_cfg/apps/payments/views/api/base.py +1 -1
  123. django_cfg/apps/payments/views/api/currencies.py +1 -1
  124. django_cfg/apps/payments/views/api/payments.py +1 -1
  125. django_cfg/apps/payments/views/api/subscriptions.py +1 -1
  126. django_cfg/apps/payments/views/api/webhooks.py +1 -1
  127. django_cfg/apps/payments/views/serializers/api_keys.py +1 -1
  128. django_cfg/apps/payments/views/serializers/balances.py +1 -1
  129. django_cfg/apps/payments/views/serializers/currencies.py +1 -1
  130. django_cfg/apps/payments/views/serializers/payments.py +1 -1
  131. django_cfg/apps/payments/views/serializers/subscriptions.py +1 -1
  132. django_cfg/apps/payments/views/serializers/webhooks.py +1 -1
  133. django_cfg/apps/support/admin/support_admin.py +21 -13
  134. django_cfg/apps/support/templates/support/chat/access_denied.html +21 -27
  135. django_cfg/apps/support/templates/support/chat/ticket_chat.html +183 -254
  136. django_cfg/apps/support/utils/support_email_service.py +1 -1
  137. django_cfg/apps/tasks/templates/tasks/layout/base.html +20 -115
  138. django_cfg/apps/tasks/utils/simulator.py +1 -1
  139. django_cfg/apps/tasks/views/dashboard.py +33 -3
  140. django_cfg/apps/urls.py +5 -1
  141. django_cfg/cli/README.md +57 -471
  142. django_cfg/cli/commands/create_project.py +140 -529
  143. django_cfg/cli/main.py +13 -10
  144. django_cfg/core/__init__.py +63 -6
  145. django_cfg/core/base/__init__.py +5 -0
  146. django_cfg/core/base/config_model.py +652 -0
  147. django_cfg/core/builders/__init__.py +11 -0
  148. django_cfg/core/builders/apps_builder.py +258 -0
  149. django_cfg/core/builders/middleware_builder.py +115 -0
  150. django_cfg/core/builders/security_builder.py +96 -0
  151. django_cfg/core/config.py +20 -892
  152. django_cfg/core/constants.py +69 -0
  153. django_cfg/core/environment/__init__.py +9 -0
  154. django_cfg/core/exceptions.py +45 -298
  155. django_cfg/core/generation/__init__.py +51 -0
  156. django_cfg/core/generation/core_generators/__init__.py +0 -0
  157. django_cfg/core/generation/core_generators/settings.py +90 -0
  158. django_cfg/core/generation/core_generators/static.py +82 -0
  159. django_cfg/core/generation/core_generators/templates.py +141 -0
  160. django_cfg/core/generation/data_generators/__init__.py +15 -0
  161. django_cfg/core/generation/data_generators/cache.py +132 -0
  162. django_cfg/core/generation/data_generators/database.py +117 -0
  163. django_cfg/core/generation/generation.py +92 -0
  164. django_cfg/core/generation/integration_generators/__init__.py +21 -0
  165. django_cfg/core/generation/integration_generators/api.py +237 -0
  166. django_cfg/core/generation/integration_generators/sessions.py +65 -0
  167. django_cfg/core/generation/integration_generators/tailwind.py +54 -0
  168. django_cfg/core/generation/integration_generators/tasks.py +92 -0
  169. django_cfg/core/generation/integration_generators/third_party.py +144 -0
  170. django_cfg/core/generation/orchestrator.py +285 -0
  171. django_cfg/core/generation/protocols.py +30 -0
  172. django_cfg/core/generation/security_generators/__init__.py +0 -0
  173. django_cfg/core/generation/utility_generators/__init__.py +24 -0
  174. django_cfg/core/generation/utility_generators/email.py +58 -0
  175. django_cfg/core/generation/utility_generators/i18n.py +66 -0
  176. django_cfg/core/generation/utility_generators/limits.py +58 -0
  177. django_cfg/core/generation/utility_generators/logging.py +66 -0
  178. django_cfg/core/generation/utility_generators/security.py +101 -0
  179. django_cfg/core/generation/utils/__init__.py +0 -0
  180. django_cfg/core/generation/utils/helpers.py +32 -0
  181. django_cfg/core/integration/__init__.py +18 -25
  182. django_cfg/core/integration/display/startup.py +146 -133
  183. django_cfg/core/integration/url_integration.py +13 -2
  184. django_cfg/core/services/__init__.py +5 -0
  185. django_cfg/core/services/config_service.py +121 -0
  186. django_cfg/core/state/__init__.py +9 -0
  187. django_cfg/core/state/registry.py +84 -0
  188. django_cfg/core/types/__init__.py +15 -0
  189. django_cfg/core/types/aliases.py +15 -0
  190. django_cfg/core/types/enums.py +49 -0
  191. django_cfg/dashboard/DEBUG_README.md +105 -0
  192. django_cfg/dashboard/REFACTORING_SUMMARY.md +237 -0
  193. django_cfg/dashboard/__init__.py +24 -0
  194. django_cfg/dashboard/components.py +308 -0
  195. django_cfg/dashboard/debug.py +176 -0
  196. django_cfg/dashboard/management/__init__.py +0 -0
  197. django_cfg/dashboard/management/commands/__init__.py +0 -0
  198. django_cfg/dashboard/management/commands/debug_dashboard.py +109 -0
  199. django_cfg/dashboard/sections/__init__.py +1 -0
  200. django_cfg/dashboard/sections/base.py +128 -0
  201. django_cfg/dashboard/sections/commands.py +32 -0
  202. django_cfg/dashboard/sections/overview.py +394 -0
  203. django_cfg/dashboard/sections/stats.py +48 -0
  204. django_cfg/dashboard/sections/system.py +73 -0
  205. django_cfg/management/commands/check_settings.py +6 -2
  206. django_cfg/management/commands/clear_constance.py +6 -1
  207. django_cfg/management/commands/create_token.py +5 -4
  208. django_cfg/management/commands/generate.py +5 -0
  209. django_cfg/management/commands/list_urls.py +7 -2
  210. django_cfg/management/commands/migrate_all.py +6 -2
  211. django_cfg/management/commands/migrator.py +6 -1
  212. django_cfg/management/commands/rundramatiq.py +6 -1
  213. django_cfg/management/commands/rundramatiq_simulator.py +11 -4
  214. django_cfg/management/commands/runserver_ngrok.py +9 -7
  215. django_cfg/management/commands/script.py +25 -21
  216. django_cfg/management/commands/show_config.py +6 -1
  217. django_cfg/management/commands/show_urls.py +8 -3
  218. django_cfg/management/commands/superuser.py +5 -4
  219. django_cfg/management/commands/task_clear.py +8 -3
  220. django_cfg/management/commands/task_status.py +8 -3
  221. django_cfg/management/commands/test_email.py +6 -1
  222. django_cfg/management/commands/test_telegram.py +6 -1
  223. django_cfg/management/commands/test_twilio.py +6 -1
  224. django_cfg/management/commands/tree.py +7 -4
  225. django_cfg/models/__init__.py +88 -3
  226. django_cfg/models/api/__init__.py +27 -0
  227. django_cfg/models/{api.py → api/config.py} +1 -1
  228. django_cfg/models/api/drf/__init__.py +21 -0
  229. django_cfg/models/api/drf/config.py +101 -0
  230. django_cfg/models/api/drf/redoc.py +31 -0
  231. django_cfg/models/api/drf/spectacular.py +129 -0
  232. django_cfg/models/api/drf/swagger.py +59 -0
  233. django_cfg/models/{api_keys.py → api/keys.py} +16 -6
  234. django_cfg/models/{limits.py → api/limits.py} +0 -1
  235. django_cfg/models/base/__init__.py +14 -0
  236. django_cfg/models/django/__init__.py +16 -0
  237. django_cfg/models/{constance.py → django/constance.py} +1 -1
  238. django_cfg/models/{environment.py → django/environment.py} +1 -1
  239. django_cfg/models/infrastructure/__init__.py +17 -0
  240. django_cfg/models/{cache.py → infrastructure/cache.py} +3 -2
  241. django_cfg/models/infrastructure/database/__init__.py +22 -0
  242. django_cfg/models/infrastructure/database/config.py +265 -0
  243. django_cfg/models/infrastructure/database/converters.py +91 -0
  244. django_cfg/models/infrastructure/database/parsers.py +96 -0
  245. django_cfg/models/infrastructure/database/routing.py +85 -0
  246. django_cfg/models/infrastructure/database/validators.py +170 -0
  247. django_cfg/models/{logging.py → infrastructure/logging.py} +1 -1
  248. django_cfg/models/{security.py → infrastructure/security.py} +2 -2
  249. django_cfg/models/ngrok/__init__.py +11 -0
  250. django_cfg/models/ngrok/auth.py +37 -0
  251. django_cfg/models/ngrok/config.py +77 -0
  252. django_cfg/models/ngrok/tunnel.py +35 -0
  253. django_cfg/models/payments/__init__.py +20 -0
  254. django_cfg/models/payments/api_keys.py +57 -0
  255. django_cfg/models/{payments.py → payments/config.py} +56 -154
  256. django_cfg/models/payments/providers/__init__.py +15 -0
  257. django_cfg/models/payments/providers/base.py +25 -0
  258. django_cfg/models/payments/providers/nowpayments.py +48 -0
  259. django_cfg/models/services/__init__.py +18 -0
  260. django_cfg/models/services/base.py +65 -0
  261. django_cfg/models/{email.py → services/email.py} +1 -1
  262. django_cfg/models/services/telegram.py +172 -0
  263. django_cfg/models/tasks/__init__.py +51 -0
  264. django_cfg/models/tasks/backends.py +250 -0
  265. django_cfg/models/tasks/config.py +314 -0
  266. django_cfg/models/tasks/utils.py +174 -0
  267. django_cfg/modules/base.py +18 -3
  268. django_cfg/modules/django_admin/decorators/actions.py +1 -1
  269. django_cfg/modules/django_admin/decorators/display.py +1 -1
  270. django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +1 -1
  271. django_cfg/modules/django_cfg_rpc_client/README.md +346 -0
  272. django_cfg/modules/django_cfg_rpc_client/__init__.py +51 -0
  273. django_cfg/modules/django_cfg_rpc_client/client.py +540 -0
  274. django_cfg/modules/django_cfg_rpc_client/config.py +207 -0
  275. django_cfg/modules/django_cfg_rpc_client/dashboard/README.md +517 -0
  276. django_cfg/modules/django_cfg_rpc_client/dashboard/UNFOLD_INTEGRATION.md +439 -0
  277. django_cfg/modules/django_cfg_rpc_client/dashboard/__init__.py +11 -0
  278. django_cfg/modules/django_cfg_rpc_client/dashboard/apps.py +22 -0
  279. django_cfg/modules/django_cfg_rpc_client/dashboard/monitor.py +435 -0
  280. django_cfg/modules/django_cfg_rpc_client/dashboard/static/django_cfg_rpc_dashboard/js/dashboard.js +373 -0
  281. django_cfg/modules/django_cfg_rpc_client/dashboard/templates/django_cfg_rpc_dashboard/base.html +76 -0
  282. django_cfg/modules/django_cfg_rpc_client/dashboard/templates/django_cfg_rpc_dashboard/dashboard.html +200 -0
  283. django_cfg/modules/django_cfg_rpc_client/dashboard/urls.py +22 -0
  284. django_cfg/modules/django_cfg_rpc_client/dashboard/urls_admin.py +9 -0
  285. django_cfg/modules/django_cfg_rpc_client/dashboard/views.py +251 -0
  286. django_cfg/modules/django_cfg_rpc_client/exceptions.py +201 -0
  287. django_cfg/modules/django_drf_theme/CHANGELOG.md +210 -0
  288. django_cfg/modules/django_drf_theme/EXAMPLE.md +465 -0
  289. django_cfg/modules/django_drf_theme/IMPLEMENTATION.md +232 -0
  290. django_cfg/modules/django_drf_theme/README.md +207 -0
  291. django_cfg/modules/django_drf_theme/TAILWIND_CDN_GUIDE.md +274 -0
  292. django_cfg/modules/django_drf_theme/__init__.py +23 -0
  293. django_cfg/modules/django_drf_theme/apps.py +15 -0
  294. django_cfg/modules/django_drf_theme/renderers.py +58 -0
  295. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/api.html +375 -0
  296. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/base.html +938 -0
  297. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/filter_form.html +132 -0
  298. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/raw_data_form.html +123 -0
  299. django_cfg/modules/django_drf_theme/templatetags/__init__.py +1 -0
  300. django_cfg/modules/django_drf_theme/templatetags/tailwind_tags.py +57 -0
  301. django_cfg/modules/django_email/__init__.py +14 -0
  302. django_cfg/modules/{django_email.py → django_email/service.py} +78 -113
  303. django_cfg/modules/django_email/utils.py +40 -0
  304. django_cfg/modules/django_health/__init__.py +9 -0
  305. django_cfg/modules/{django_health.py → django_health/service.py} +23 -21
  306. django_cfg/modules/django_llm/llm/client.py +155 -550
  307. django_cfg/modules/django_llm/llm/embeddings/__init__.py +13 -0
  308. django_cfg/modules/django_llm/llm/embeddings/mock_embedder.py +106 -0
  309. django_cfg/modules/django_llm/llm/embeddings/openai_embedder.py +79 -0
  310. django_cfg/modules/django_llm/llm/models_api/__init__.py +9 -0
  311. django_cfg/modules/django_llm/llm/models_api/models_query.py +163 -0
  312. django_cfg/modules/django_llm/llm/providers/__init__.py +15 -0
  313. django_cfg/modules/django_llm/llm/providers/config_builder.py +103 -0
  314. django_cfg/modules/django_llm/llm/providers/provider_manager.py +148 -0
  315. django_cfg/modules/django_llm/llm/providers/provider_selector.py +60 -0
  316. django_cfg/modules/django_llm/llm/requests/__init__.py +15 -0
  317. django_cfg/modules/django_llm/llm/requests/cache_manager.py +170 -0
  318. django_cfg/modules/django_llm/llm/requests/chat_handler.py +199 -0
  319. django_cfg/modules/django_llm/llm/requests/embedding_handler.py +113 -0
  320. django_cfg/modules/django_llm/llm/responses/__init__.py +9 -0
  321. django_cfg/modules/django_llm/llm/responses/response_builder.py +131 -0
  322. django_cfg/modules/django_llm/llm/stats/__init__.py +9 -0
  323. django_cfg/modules/django_llm/llm/stats/stats_manager.py +107 -0
  324. django_cfg/modules/django_llm/translator/detectors/__init__.py +13 -0
  325. django_cfg/modules/django_llm/translator/detectors/language_detector.py +90 -0
  326. django_cfg/modules/django_llm/translator/detectors/script_detector.py +153 -0
  327. django_cfg/modules/django_llm/translator/stats/__init__.py +11 -0
  328. django_cfg/modules/django_llm/translator/stats/stats_tracker.py +85 -0
  329. django_cfg/modules/django_llm/translator/translator.py +150 -603
  330. django_cfg/modules/django_llm/translator/translators/__init__.py +15 -0
  331. django_cfg/modules/django_llm/translator/translators/json_translator.py +316 -0
  332. django_cfg/modules/django_llm/translator/translators/text_translator.py +139 -0
  333. django_cfg/modules/django_llm/translator/utils/__init__.py +13 -0
  334. django_cfg/modules/django_llm/translator/utils/prompt_builder.py +110 -0
  335. django_cfg/modules/django_llm/translator/utils/text_utils.py +114 -0
  336. django_cfg/modules/django_logging/FIXES_SUMMARY.md +276 -0
  337. django_cfg/modules/django_logging/LOGGING_GUIDE.md +504 -0
  338. django_cfg/modules/django_logging/__init__.py +14 -0
  339. django_cfg/modules/{django_logger.py → django_logging/django_logger.py} +13 -13
  340. django_cfg/modules/{logger.py → django_logging/logger.py} +14 -4
  341. django_cfg/modules/django_ngrok/__init__.py +39 -0
  342. django_cfg/modules/{django_ngrok.py → django_ngrok/service.py} +14 -42
  343. django_cfg/modules/django_rpc_old/POETRY.md +344 -0
  344. django_cfg/modules/django_rpc_old/README.md +397 -0
  345. django_cfg/modules/django_rpc_old/TESTING.md +358 -0
  346. django_cfg/modules/django_rpc_old/__init__.py +39 -0
  347. django_cfg/modules/django_rpc_old/client.py +531 -0
  348. django_cfg/modules/django_rpc_old/config.py +279 -0
  349. django_cfg/modules/django_rpc_old/exceptions.py +172 -0
  350. django_cfg/modules/django_tailwind/README.md +478 -0
  351. django_cfg/modules/django_tailwind/__init__.py +7 -0
  352. django_cfg/modules/django_tailwind/apps.py +10 -0
  353. django_cfg/modules/django_tailwind/templates/django_tailwind/app.html +5 -0
  354. django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +117 -0
  355. django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +124 -0
  356. django_cfg/modules/django_tailwind/templates/django_tailwind/components/theme_toggle.html +54 -0
  357. django_cfg/modules/django_tailwind/templates/django_tailwind/components/user_menu.html +116 -0
  358. django_cfg/modules/django_tailwind/templates/django_tailwind/simple.html +46 -0
  359. django_cfg/modules/django_tailwind/templatetags/__init__.py +1 -0
  360. django_cfg/modules/django_tailwind/templatetags/tailwind_info.py +185 -0
  361. django_cfg/modules/django_tasks/__init__.py +29 -0
  362. django_cfg/modules/django_tasks/factory.py +127 -0
  363. django_cfg/modules/{django_tasks.py → django_tasks/service.py} +45 -274
  364. django_cfg/modules/django_tasks/settings.py +107 -0
  365. django_cfg/modules/django_telegram/__init__.py +29 -0
  366. django_cfg/modules/{django_telegram.py → django_telegram/service.py} +45 -113
  367. django_cfg/modules/django_telegram/utils.py +62 -0
  368. django_cfg/modules/django_twilio/__init__.py +54 -107
  369. django_cfg/modules/django_twilio/_imports.py +30 -0
  370. django_cfg/modules/django_twilio/base.py +192 -0
  371. django_cfg/modules/django_twilio/email_otp.py +227 -0
  372. django_cfg/modules/django_twilio/sendgrid_service.py +1 -1
  373. django_cfg/modules/django_twilio/simple_service.py +1 -2
  374. django_cfg/modules/django_twilio/sms.py +94 -0
  375. django_cfg/modules/django_twilio/twilio_service.py +2 -3
  376. django_cfg/modules/django_twilio/unified.py +310 -0
  377. django_cfg/modules/django_twilio/utils.py +190 -0
  378. django_cfg/modules/django_twilio/whatsapp.py +137 -0
  379. django_cfg/modules/django_unfold/callbacks/base.py +198 -7
  380. django_cfg/modules/django_unfold/callbacks/main.py +102 -10
  381. django_cfg/modules/django_unfold/dashboard.py +65 -43
  382. django_cfg/modules/django_unfold/models/config.py +13 -12
  383. django_cfg/modules/django_unfold/models/navigation.py +8 -3
  384. django_cfg/modules/django_unfold/models/tabs.py +2 -2
  385. django_cfg/modules/django_unfold/templates/unfold/helpers/app_list.html +102 -0
  386. django_cfg/registry/core.py +24 -26
  387. django_cfg/registry/modules.py +5 -2
  388. django_cfg/registry/services.py +20 -3
  389. django_cfg/registry/third_party.py +8 -8
  390. django_cfg/static/admin/css/dashboard.css +260 -0
  391. django_cfg/static/admin/js/commands.js +171 -0
  392. django_cfg/static/admin/js/dashboard.js +126 -0
  393. django_cfg/templates/admin/components/management_commands.js +375 -0
  394. django_cfg/templates/admin/components/progress_bar.html +18 -23
  395. django_cfg/templates/admin/index.html +48 -20
  396. django_cfg/templates/admin/index_new.html +106 -0
  397. django_cfg/templates/admin/layouts/base_dashboard.html +60 -0
  398. django_cfg/templates/admin/layouts/dashboard_with_tabs.html +1 -20
  399. django_cfg/templates/admin/sections/commands_section.html +626 -0
  400. django_cfg/templates/admin/sections/overview_section.html +112 -0
  401. django_cfg/templates/admin/sections/stats_section.html +35 -0
  402. django_cfg/templates/admin/sections/system_section.html +99 -0
  403. django_cfg/templates/admin/snippets/components/CHARTS_GUIDE.md +322 -0
  404. django_cfg/templates/admin/snippets/components/activity_tracker.html +85 -47
  405. django_cfg/templates/admin/snippets/components/charts_section.html +154 -64
  406. django_cfg/templates/admin/snippets/components/django_commands.html +3 -3
  407. django_cfg/templates/admin/snippets/components/recent_activity_improved.html +25 -0
  408. django_cfg/templates/admin/snippets/components/recent_users_table.html +1 -1
  409. django_cfg/templates/admin/snippets/components/system_metrics.html +179 -93
  410. django_cfg/templates/admin/snippets/zones/zones_table.html +2 -2
  411. django_cfg/templatetags/django_cfg.py +7 -1
  412. django_cfg/utils/smart_defaults.py +4 -4
  413. django_cfg-1.4.0.dist-info/METADATA +920 -0
  414. {django_cfg-1.3.11.dist-info → django_cfg-1.4.0.dist-info}/RECORD +425 -196
  415. django_cfg/apps/accounts/utils/auth_email_service.py +0 -84
  416. django_cfg/apps/payments/services/providers/nowpayments/parsers.py +0 -879
  417. django_cfg/core/generation.py +0 -621
  418. django_cfg/management/commands/validate_config.py +0 -189
  419. django_cfg/models/database.py +0 -480
  420. django_cfg/models/drf.py +0 -272
  421. django_cfg/models/ngrok.py +0 -122
  422. django_cfg/models/services.py +0 -440
  423. django_cfg/models/tasks.py +0 -550
  424. django_cfg/modules/django_twilio/service.py +0 -942
  425. django_cfg/template_archive/django_sample.zip +0 -0
  426. django_cfg/templates/rest_framework/api.html +0 -12
  427. django_cfg/utils/toolkit.py +0 -703
  428. django_cfg-1.3.11.dist-info/METADATA +0 -1029
  429. /django_cfg/apps/accounts/management/commands/{test_otp.py → otp_test.py} +0 -0
  430. /django_cfg/core/{environment.py → environment/detector.py} +0 -0
  431. /django_cfg/models/{cors.py → api/cors.py} +0 -0
  432. /django_cfg/models/{jwt.py → api/jwt.py} +0 -0
  433. /django_cfg/models/{base.py → base/config.py} +0 -0
  434. /django_cfg/models/{cfg.py → base/module.py} +0 -0
  435. /django_cfg/models/{revolution.py → django/revolution.py} +0 -0
  436. /django_cfg/modules/{dramatiq_setup.py → django_tasks/dramatiq_setup.py} +0 -0
  437. {django_cfg-1.3.11.dist-info → django_cfg-1.4.0.dist-info}/WHEEL +0 -0
  438. {django_cfg-1.3.11.dist-info → django_cfg-1.4.0.dist-info}/entry_points.txt +0 -0
  439. {django_cfg-1.3.11.dist-info → django_cfg-1.4.0.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
+ ]