django-cfg 1.4.21__py3-none-any.whl → 1.4.23__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 (793) hide show
  1. django_cfg/__init__.py +4 -4
  2. django_cfg/apps/accounts/__init__.py +1 -1
  3. django_cfg/apps/accounts/__models.py +30 -29
  4. django_cfg/apps/accounts/admin/__init__.py +14 -3
  5. django_cfg/apps/accounts/admin/activity_admin.py +19 -19
  6. django_cfg/apps/accounts/admin/filters.py +7 -6
  7. django_cfg/apps/accounts/admin/group_admin.py +10 -16
  8. django_cfg/apps/accounts/admin/inlines.py +21 -19
  9. django_cfg/apps/accounts/admin/otp_admin.py +12 -12
  10. django_cfg/apps/accounts/admin/registration_admin.py +24 -24
  11. django_cfg/apps/accounts/admin/resources.py +49 -48
  12. django_cfg/apps/accounts/admin/twilio_admin.py +37 -37
  13. django_cfg/apps/accounts/admin/user_admin.py +45 -41
  14. django_cfg/apps/accounts/management/commands/otp_test.py +11 -11
  15. django_cfg/apps/accounts/managers/__init__.py +1 -1
  16. django_cfg/apps/accounts/managers/user_manager.py +6 -7
  17. django_cfg/apps/accounts/migrations/0001_initial.py +3 -2
  18. django_cfg/apps/accounts/models/__init__.py +15 -16
  19. django_cfg/apps/accounts/models/activity.py +5 -5
  20. django_cfg/apps/accounts/models/integrations.py +15 -15
  21. django_cfg/apps/accounts/models/registration.py +3 -2
  22. django_cfg/apps/accounts/models/user.py +3 -2
  23. django_cfg/apps/accounts/serializers/__init__.py +10 -3
  24. django_cfg/apps/accounts/serializers/otp.py +5 -4
  25. django_cfg/apps/accounts/serializers/profile.py +4 -5
  26. django_cfg/apps/accounts/serializers/webhook.py +13 -13
  27. django_cfg/apps/accounts/services/activity_service.py +13 -12
  28. django_cfg/apps/accounts/services/otp_service.py +16 -14
  29. django_cfg/apps/accounts/signals.py +18 -16
  30. django_cfg/apps/accounts/urls.py +10 -5
  31. django_cfg/apps/accounts/utils/notifications.py +22 -22
  32. django_cfg/apps/accounts/views/__init__.py +1 -1
  33. django_cfg/apps/accounts/views/otp.py +15 -14
  34. django_cfg/apps/accounts/views/profile.py +14 -10
  35. django_cfg/apps/accounts/views/webhook.py +46 -48
  36. django_cfg/apps/agents/__init__.py +3 -3
  37. django_cfg/apps/agents/admin/__init__.py +1 -1
  38. django_cfg/apps/agents/admin/execution_admin.py +68 -72
  39. django_cfg/apps/agents/admin/registry_admin.py +50 -54
  40. django_cfg/apps/agents/admin/toolsets_admin.py +63 -67
  41. django_cfg/apps/agents/apps.py +3 -3
  42. django_cfg/apps/agents/core/__init__.py +4 -4
  43. django_cfg/apps/agents/core/dependencies.py +24 -23
  44. django_cfg/apps/agents/core/django_agent.py +41 -39
  45. django_cfg/apps/agents/core/exceptions.py +12 -12
  46. django_cfg/apps/agents/core/models.py +16 -15
  47. django_cfg/apps/agents/core/orchestrator.py +58 -58
  48. django_cfg/apps/agents/examples/simple_example.py +24 -19
  49. django_cfg/apps/agents/integration/__init__.py +1 -1
  50. django_cfg/apps/agents/integration/middleware.py +12 -11
  51. django_cfg/apps/agents/integration/registry.py +52 -49
  52. django_cfg/apps/agents/integration/signals.py +5 -5
  53. django_cfg/apps/agents/management/commands/create_agent.py +39 -38
  54. django_cfg/apps/agents/management/commands/orchestrator_status.py +40 -39
  55. django_cfg/apps/agents/managers/__init__.py +8 -3
  56. django_cfg/apps/agents/managers/execution.py +42 -41
  57. django_cfg/apps/agents/managers/registry.py +40 -39
  58. django_cfg/apps/agents/managers/toolsets.py +87 -86
  59. django_cfg/apps/agents/migrations/0001_initial.py +2 -1
  60. django_cfg/apps/agents/models/__init__.py +2 -2
  61. django_cfg/apps/agents/models/execution.py +43 -42
  62. django_cfg/apps/agents/models/registry.py +46 -45
  63. django_cfg/apps/agents/models/toolsets.py +63 -62
  64. django_cfg/apps/agents/patterns/__init__.py +5 -5
  65. django_cfg/apps/agents/patterns/content_agents.py +17 -16
  66. django_cfg/apps/agents/toolsets/__init__.py +3 -3
  67. django_cfg/apps/agents/toolsets/cache_toolset.py +56 -55
  68. django_cfg/apps/agents/toolsets/django_toolset.py +43 -42
  69. django_cfg/apps/agents/toolsets/file_toolset.py +64 -63
  70. django_cfg/apps/agents/toolsets/orm_toolset.py +75 -74
  71. django_cfg/apps/agents/urls.py +3 -2
  72. django_cfg/apps/api/commands/urls.py +1 -0
  73. django_cfg/apps/api/commands/views.py +23 -26
  74. django_cfg/apps/api/endpoints/checker.py +5 -4
  75. django_cfg/apps/api/endpoints/drf_views.py +2 -2
  76. django_cfg/apps/api/endpoints/tests.py +6 -5
  77. django_cfg/apps/api/endpoints/urls.py +2 -1
  78. django_cfg/apps/api/endpoints/views.py +1 -0
  79. django_cfg/apps/api/health/drf_views.py +6 -6
  80. django_cfg/apps/api/health/urls.py +2 -1
  81. django_cfg/apps/api/health/views.py +41 -41
  82. django_cfg/{modules/django_ipc_client → apps/ipc}/__init__.py +6 -6
  83. django_cfg/apps/ipc/apps.py +28 -0
  84. django_cfg/apps/ipc/serializers/__init__.py +19 -0
  85. django_cfg/apps/ipc/serializers/serializers.py +229 -0
  86. django_cfg/apps/ipc/services/__init__.py +7 -0
  87. django_cfg/apps/ipc/services/client/__init__.py +23 -0
  88. django_cfg/{modules/django_ipc_client → apps/ipc/services/client}/client.py +7 -6
  89. django_cfg/{modules/django_ipc_client → apps/ipc/services/client}/exceptions.py +1 -1
  90. django_cfg/{modules/django_ipc_client/dashboard → apps/ipc/services}/monitor.py +23 -5
  91. django_cfg/{modules/django_ipc_client/dashboard/static/django_ipc_dashboard/js/dashboard.js → apps/ipc/static/django_cfg_ipc/js/dashboard.mjs} +131 -63
  92. django_cfg/{modules/django_ipc_client/dashboard/templates/django_ipc_dashboard → apps/ipc/templates/django_cfg_ipc}/base.html +5 -10
  93. django_cfg/apps/ipc/templates/django_cfg_ipc/dashboard.html +202 -0
  94. django_cfg/apps/ipc/urls.py +21 -0
  95. django_cfg/apps/ipc/urls_admin.py +20 -0
  96. django_cfg/apps/ipc/views/__init__.py +8 -0
  97. django_cfg/apps/ipc/views/dashboard.py +15 -0
  98. django_cfg/apps/ipc/views/viewsets.py +245 -0
  99. django_cfg/apps/knowbase/admin/__init__.py +2 -2
  100. django_cfg/apps/knowbase/admin/actions/__init__.py +1 -1
  101. django_cfg/apps/knowbase/admin/actions/visibility_actions.py +2 -1
  102. django_cfg/apps/knowbase/admin/archive_admin.py +81 -84
  103. django_cfg/apps/knowbase/admin/chat_admin.py +70 -72
  104. django_cfg/apps/knowbase/admin/document_admin.py +10 -11
  105. django_cfg/apps/knowbase/admin/external_data_admin.py +69 -71
  106. django_cfg/apps/knowbase/admin/helpers/__init__.py +1 -1
  107. django_cfg/apps/knowbase/admin/helpers/configs.py +2 -2
  108. django_cfg/apps/knowbase/admin/helpers/statistics.py +1 -1
  109. django_cfg/apps/knowbase/apps.py +13 -13
  110. django_cfg/apps/knowbase/config/__init__.py +7 -6
  111. django_cfg/apps/knowbase/config/constance_fields.py +14 -12
  112. django_cfg/apps/knowbase/config/constance_settings.py +32 -31
  113. django_cfg/apps/knowbase/config/settings.py +28 -28
  114. django_cfg/apps/knowbase/examples/external_data_usage.py +35 -32
  115. django_cfg/apps/knowbase/management/commands/knowbase_stats.py +33 -32
  116. django_cfg/apps/knowbase/management/commands/setup_knowbase.py +11 -13
  117. django_cfg/apps/knowbase/managers/__init__.py +2 -2
  118. django_cfg/apps/knowbase/managers/archive.py +86 -85
  119. django_cfg/apps/knowbase/managers/base.py +5 -5
  120. django_cfg/apps/knowbase/managers/chat.py +29 -28
  121. django_cfg/apps/knowbase/managers/document.py +39 -39
  122. django_cfg/apps/knowbase/managers/external_data.py +74 -73
  123. django_cfg/apps/knowbase/migrations/0001_initial.py +2 -1
  124. django_cfg/apps/knowbase/migrations/0002_archiveitem_archiveitemchunk_documentarchive_and_more.py +2 -1
  125. django_cfg/apps/knowbase/mixins/__init__.py +4 -4
  126. django_cfg/apps/knowbase/mixins/config/__init__.py +1 -1
  127. django_cfg/apps/knowbase/mixins/config/meta_config.py +1 -1
  128. django_cfg/apps/knowbase/mixins/config.py +19 -18
  129. django_cfg/apps/knowbase/mixins/creator.py +7 -7
  130. django_cfg/apps/knowbase/mixins/examples/vehicle_model_example.py +29 -28
  131. django_cfg/apps/knowbase/mixins/external_data_mixin.py +6 -5
  132. django_cfg/apps/knowbase/mixins/generators/__init__.py +1 -1
  133. django_cfg/apps/knowbase/mixins/generators/content_generator.py +2 -2
  134. django_cfg/apps/knowbase/mixins/service.py +47 -45
  135. django_cfg/apps/knowbase/models/__init__.py +7 -7
  136. django_cfg/apps/knowbase/models/archive.py +72 -72
  137. django_cfg/apps/knowbase/models/base.py +12 -13
  138. django_cfg/apps/knowbase/models/chat.py +20 -19
  139. django_cfg/apps/knowbase/models/document.py +37 -35
  140. django_cfg/apps/knowbase/models/external_data.py +41 -42
  141. django_cfg/apps/knowbase/serializers/__init__.py +7 -7
  142. django_cfg/apps/knowbase/serializers/archive_serializers.py +50 -42
  143. django_cfg/apps/knowbase/serializers/chat_serializers.py +16 -15
  144. django_cfg/apps/knowbase/serializers/document_serializers.py +13 -12
  145. django_cfg/apps/knowbase/serializers/external_data_serializers.py +31 -31
  146. django_cfg/apps/knowbase/serializers/public_serializers.py +10 -9
  147. django_cfg/apps/knowbase/services/__init__.py +7 -7
  148. django_cfg/apps/knowbase/services/archive/__init__.py +7 -7
  149. django_cfg/apps/knowbase/services/archive/analyzers/__init__.py +1 -1
  150. django_cfg/apps/knowbase/services/archive/analyzers/tag_generator.py +1 -1
  151. django_cfg/apps/knowbase/services/archive/archive_service.py +109 -112
  152. django_cfg/apps/knowbase/services/archive/chunking/__init__.py +3 -3
  153. django_cfg/apps/knowbase/services/archive/chunking/base.py +1 -0
  154. django_cfg/apps/knowbase/services/archive/chunking/json_chunker.py +4 -3
  155. django_cfg/apps/knowbase/services/archive/chunking/markdown_chunker.py +5 -4
  156. django_cfg/apps/knowbase/services/archive/chunking/python_chunker.py +6 -5
  157. django_cfg/apps/knowbase/services/archive/chunking/text_chunker.py +4 -3
  158. django_cfg/apps/knowbase/services/archive/chunking_service.py +3 -7
  159. django_cfg/apps/knowbase/services/archive/context/__init__.py +1 -1
  160. django_cfg/apps/knowbase/services/archive/context/builders.py +2 -1
  161. django_cfg/apps/knowbase/services/archive/context/models.py +2 -1
  162. django_cfg/apps/knowbase/services/archive/exceptions.py +5 -5
  163. django_cfg/apps/knowbase/services/archive/extraction_service.py +111 -110
  164. django_cfg/apps/knowbase/services/archive/vectorization_service.py +80 -77
  165. django_cfg/apps/knowbase/services/base.py +11 -9
  166. django_cfg/apps/knowbase/services/chat_service.py +40 -39
  167. django_cfg/apps/knowbase/services/document_service.py +28 -27
  168. django_cfg/apps/knowbase/services/embedding/__init__.py +9 -9
  169. django_cfg/apps/knowbase/services/embedding/async_processor.py +38 -40
  170. django_cfg/apps/knowbase/services/embedding/batch_processor.py +45 -42
  171. django_cfg/apps/knowbase/services/embedding/batch_result.py +7 -6
  172. django_cfg/apps/knowbase/services/embedding/models.py +52 -51
  173. django_cfg/apps/knowbase/services/embedding/processors.py +24 -23
  174. django_cfg/apps/knowbase/services/embedding/utils.py +17 -17
  175. django_cfg/apps/knowbase/services/prompt_builder.py +24 -23
  176. django_cfg/apps/knowbase/services/search_service.py +52 -49
  177. django_cfg/apps/knowbase/signals/__init__.py +2 -5
  178. django_cfg/apps/knowbase/signals/archive_signals.py +35 -34
  179. django_cfg/apps/knowbase/signals/chat_signals.py +6 -5
  180. django_cfg/apps/knowbase/signals/document_signals.py +22 -22
  181. django_cfg/apps/knowbase/signals/external_data_signals.py +22 -22
  182. django_cfg/apps/knowbase/tasks/__init__.py +6 -7
  183. django_cfg/apps/knowbase/tasks/archive_tasks.py +41 -41
  184. django_cfg/apps/knowbase/tasks/document_processing.py +49 -44
  185. django_cfg/apps/knowbase/tasks/external_data_tasks.py +46 -44
  186. django_cfg/apps/knowbase/tasks/maintenance.py +26 -24
  187. django_cfg/apps/knowbase/urls.py +3 -2
  188. django_cfg/apps/knowbase/urls_admin.py +6 -3
  189. django_cfg/apps/knowbase/urls_system.py +4 -5
  190. django_cfg/apps/knowbase/utils/chunk_settings.py +22 -20
  191. django_cfg/apps/knowbase/utils/text_processing.py +76 -75
  192. django_cfg/apps/knowbase/utils/validation.py +9 -9
  193. django_cfg/apps/knowbase/views/__init__.py +5 -5
  194. django_cfg/apps/knowbase/views/archive_views.py +90 -87
  195. django_cfg/apps/knowbase/views/base.py +9 -12
  196. django_cfg/apps/knowbase/views/chat_views.py +32 -32
  197. django_cfg/apps/knowbase/views/document_views.py +27 -28
  198. django_cfg/apps/knowbase/views/public_views.py +19 -19
  199. django_cfg/apps/leads/admin/leads_admin.py +41 -45
  200. django_cfg/apps/leads/admin/resources.py +14 -14
  201. django_cfg/apps/leads/admin.py +7 -9
  202. django_cfg/apps/leads/apps.py +1 -1
  203. django_cfg/apps/leads/models.py +17 -17
  204. django_cfg/apps/leads/serializers.py +5 -4
  205. django_cfg/apps/leads/signals.py +7 -7
  206. django_cfg/apps/leads/tests.py +47 -47
  207. django_cfg/apps/leads/urls.py +2 -2
  208. django_cfg/apps/leads/views.py +11 -11
  209. django_cfg/apps/maintenance/__init__.py +3 -3
  210. django_cfg/apps/maintenance/admin/__init__.py +1 -1
  211. django_cfg/apps/maintenance/admin/api_key_admin.py +36 -36
  212. django_cfg/apps/maintenance/admin/log_admin.py +35 -37
  213. django_cfg/apps/maintenance/admin/scheduled_admin.py +47 -51
  214. django_cfg/apps/maintenance/admin/site_admin.py +49 -52
  215. django_cfg/apps/maintenance/apps.py +2 -2
  216. django_cfg/apps/maintenance/management/commands/maintenance.py +53 -52
  217. django_cfg/apps/maintenance/management/commands/process_scheduled_maintenance.py +44 -44
  218. django_cfg/apps/maintenance/management/commands/sync_cloudflare.py +32 -32
  219. django_cfg/apps/maintenance/managers/__init__.py +1 -1
  220. django_cfg/apps/maintenance/managers/cloudflare_site_manager.py +39 -38
  221. django_cfg/apps/maintenance/managers/maintenance_log_manager.py +32 -31
  222. django_cfg/apps/maintenance/migrations/0001_initial.py +1 -0
  223. django_cfg/apps/maintenance/models/__init__.py +2 -2
  224. django_cfg/apps/maintenance/models/cloudflare_api_key.py +15 -15
  225. django_cfg/apps/maintenance/models/cloudflare_site.py +24 -22
  226. django_cfg/apps/maintenance/models/maintenance_log.py +15 -14
  227. django_cfg/apps/maintenance/models/scheduled_maintenance.py +53 -52
  228. django_cfg/apps/maintenance/services/__init__.py +3 -3
  229. django_cfg/apps/maintenance/services/bulk_operations_service.py +68 -68
  230. django_cfg/apps/maintenance/services/maintenance_service.py +59 -58
  231. django_cfg/apps/maintenance/services/scheduled_maintenance_service.py +52 -52
  232. django_cfg/apps/maintenance/services/site_sync_service.py +64 -65
  233. django_cfg/apps/maintenance/utils/__init__.py +1 -1
  234. django_cfg/apps/maintenance/utils/retry_utils.py +17 -17
  235. django_cfg/apps/newsletter/admin/__init__.py +12 -16
  236. django_cfg/apps/newsletter/admin/newsletter_admin.py +90 -87
  237. django_cfg/apps/newsletter/admin/resources.py +29 -29
  238. django_cfg/apps/newsletter/admin.py +39 -32
  239. django_cfg/apps/newsletter/management/commands/test_newsletter.py +3 -3
  240. django_cfg/apps/newsletter/managers/__init__.py +1 -1
  241. django_cfg/apps/newsletter/migrations/0001_initial.py +2 -1
  242. django_cfg/apps/newsletter/models.py +34 -33
  243. django_cfg/apps/newsletter/serializers.py +13 -13
  244. django_cfg/apps/newsletter/services/email_service.py +42 -40
  245. django_cfg/apps/newsletter/signals.py +4 -3
  246. django_cfg/apps/newsletter/urls.py +7 -7
  247. django_cfg/apps/newsletter/views/__init__.py +14 -19
  248. django_cfg/apps/newsletter/views/campaigns.py +19 -19
  249. django_cfg/apps/newsletter/views/emails.py +20 -20
  250. django_cfg/apps/newsletter/views/newsletters.py +5 -5
  251. django_cfg/apps/newsletter/views/subscriptions.py +24 -24
  252. django_cfg/apps/newsletter/views/tracking.py +6 -5
  253. django_cfg/apps/payments/admin/__init__.py +6 -5
  254. django_cfg/apps/payments/admin/api_keys_admin.py +43 -45
  255. django_cfg/apps/payments/admin/balance_admin.py +41 -47
  256. django_cfg/apps/payments/admin/currencies_admin.py +60 -62
  257. django_cfg/apps/payments/admin/endpoint_groups_admin.py +14 -28
  258. django_cfg/apps/payments/admin/filters.py +59 -59
  259. django_cfg/apps/payments/admin/networks_admin.py +36 -50
  260. django_cfg/apps/payments/admin/payments_admin.py +47 -49
  261. django_cfg/apps/payments/admin/subscriptions_admin.py +30 -32
  262. django_cfg/apps/payments/admin/tariffs_admin.py +37 -42
  263. django_cfg/apps/payments/admin_interface/serializers/__init__.py +12 -13
  264. django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py +28 -27
  265. django_cfg/apps/payments/admin_interface/serializers/webhook_serializers.py +4 -5
  266. django_cfg/apps/payments/admin_interface/templates/payments/base.html +407 -3
  267. django_cfg/apps/payments/admin_interface/templates/payments/components/ngrok_status.html +13 -13
  268. django_cfg/apps/payments/admin_interface/templates/payments/payment_dashboard.html +5 -1
  269. django_cfg/apps/payments/admin_interface/templates/payments/payment_detail.html +105 -49
  270. django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +4 -1
  271. django_cfg/apps/payments/admin_interface/templates/payments/payment_list.html +16 -8
  272. django_cfg/apps/payments/admin_interface/templates/payments/webhook_dashboard.html +16 -8
  273. django_cfg/apps/payments/admin_interface/views/__init__.py +8 -9
  274. django_cfg/apps/payments/admin_interface/views/api/__init__.py +3 -3
  275. django_cfg/apps/payments/admin_interface/views/api/payments.py +52 -54
  276. django_cfg/apps/payments/admin_interface/views/api/stats.py +33 -30
  277. django_cfg/apps/payments/admin_interface/views/api/users.py +10 -11
  278. django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +46 -51
  279. django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +9 -9
  280. django_cfg/apps/payments/admin_interface/views/base.py +17 -19
  281. django_cfg/apps/payments/admin_interface/views/dashboard.py +10 -10
  282. django_cfg/apps/payments/admin_interface/views/forms.py +21 -20
  283. django_cfg/apps/payments/apps.py +7 -6
  284. django_cfg/apps/payments/config/__init__.py +4 -4
  285. django_cfg/apps/payments/config/django_cfg_integration.py +22 -21
  286. django_cfg/apps/payments/config/helpers.py +14 -12
  287. django_cfg/apps/payments/management/commands/cleanup_expired_data.py +85 -86
  288. django_cfg/apps/payments/management/commands/currency_stats.py +84 -87
  289. django_cfg/apps/payments/management/commands/manage_currencies.py +59 -58
  290. django_cfg/apps/payments/management/commands/manage_providers.py +103 -105
  291. django_cfg/apps/payments/management/commands/process_pending_payments.py +67 -70
  292. django_cfg/apps/payments/management/commands/test_providers.py +83 -84
  293. django_cfg/apps/payments/middleware/__init__.py +1 -1
  294. django_cfg/apps/payments/middleware/api_access.py +77 -78
  295. django_cfg/apps/payments/middleware/rate_limiting.py +72 -72
  296. django_cfg/apps/payments/middleware/usage_tracking.py +66 -64
  297. django_cfg/apps/payments/migrations/0001_initial.py +2 -1
  298. django_cfg/apps/payments/models/__init__.py +11 -12
  299. django_cfg/apps/payments/models/api_keys.py +29 -27
  300. django_cfg/apps/payments/models/balance.py +38 -38
  301. django_cfg/apps/payments/models/base.py +12 -11
  302. django_cfg/apps/payments/models/currencies.py +53 -52
  303. django_cfg/apps/payments/models/managers/__init__.py +13 -14
  304. django_cfg/apps/payments/models/managers/api_key_managers.py +55 -53
  305. django_cfg/apps/payments/models/managers/balance_managers.py +98 -97
  306. django_cfg/apps/payments/models/managers/currency_managers.py +70 -69
  307. django_cfg/apps/payments/models/managers/payment_managers.py +113 -111
  308. django_cfg/apps/payments/models/managers/subscription_managers.py +99 -97
  309. django_cfg/apps/payments/models/payments.py +167 -73
  310. django_cfg/apps/payments/models/subscriptions.py +56 -54
  311. django_cfg/apps/payments/models/tariffs.py +35 -34
  312. django_cfg/apps/payments/services/__init__.py +33 -36
  313. django_cfg/apps/payments/services/cache/__init__.py +7 -1
  314. django_cfg/apps/payments/services/cache_service/__init__.py +22 -20
  315. django_cfg/apps/payments/services/cache_service/api_key_cache.py +6 -5
  316. django_cfg/apps/payments/services/cache_service/interfaces.py +5 -5
  317. django_cfg/apps/payments/services/cache_service/keys.py +8 -8
  318. django_cfg/apps/payments/services/cache_service/rate_limit_cache.py +8 -7
  319. django_cfg/apps/payments/services/cache_service/simple_cache.py +17 -14
  320. django_cfg/apps/payments/services/core/__init__.py +3 -3
  321. django_cfg/apps/payments/services/core/balance_service.py +69 -65
  322. django_cfg/apps/payments/services/core/base.py +25 -22
  323. django_cfg/apps/payments/services/core/currency/__init__.py +1 -1
  324. django_cfg/apps/payments/services/core/currency/currency_converter.py +2 -0
  325. django_cfg/apps/payments/services/core/currency_service.py +68 -66
  326. django_cfg/apps/payments/services/core/operations/__init__.py +1 -1
  327. django_cfg/apps/payments/services/core/operations/payment_canceller.py +2 -1
  328. django_cfg/apps/payments/services/core/operations/payment_creator.py +2 -1
  329. django_cfg/apps/payments/services/core/operations/status_checker.py +2 -1
  330. django_cfg/apps/payments/services/core/payment_service.py +10 -7
  331. django_cfg/apps/payments/services/core/providers/provider_client.py +2 -2
  332. django_cfg/apps/payments/services/core/subscription_service.py +77 -74
  333. django_cfg/apps/payments/services/core/utils/data_converter.py +1 -0
  334. django_cfg/apps/payments/services/core/utils/statistics_calculator.py +1 -0
  335. django_cfg/apps/payments/services/core/webhook_service.py +67 -63
  336. django_cfg/apps/payments/services/integrations/__init__.py +3 -3
  337. django_cfg/apps/payments/services/integrations/ngrok_service.py +1 -0
  338. django_cfg/apps/payments/services/integrations/providers_config.py +3 -2
  339. django_cfg/apps/payments/services/providers/base.py +59 -57
  340. django_cfg/apps/payments/services/providers/models/__init__.py +7 -14
  341. django_cfg/apps/payments/services/providers/models/base.py +15 -15
  342. django_cfg/apps/payments/services/providers/models/providers.py +13 -12
  343. django_cfg/apps/payments/services/providers/models/universal.py +6 -5
  344. django_cfg/apps/payments/services/providers/nowpayments/__init__.py +4 -4
  345. django_cfg/apps/payments/services/providers/nowpayments/config.py +9 -8
  346. django_cfg/apps/payments/services/providers/nowpayments/models.py +15 -15
  347. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/__init__.py +2 -2
  348. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/patterns.py +26 -26
  349. django_cfg/apps/payments/services/providers/nowpayments/parsers/parser.py +3 -2
  350. django_cfg/apps/payments/services/providers/nowpayments/provider.py +95 -99
  351. django_cfg/apps/payments/services/providers/nowpayments/sync.py +41 -40
  352. django_cfg/apps/payments/services/providers/registry.py +65 -63
  353. django_cfg/apps/payments/services/providers/sync_service.py +50 -50
  354. django_cfg/apps/payments/services/types/__init__.py +21 -22
  355. django_cfg/apps/payments/services/types/data.py +14 -13
  356. django_cfg/apps/payments/services/types/requests.py +21 -22
  357. django_cfg/apps/payments/services/types/responses.py +16 -15
  358. django_cfg/apps/payments/services/types/webhooks.py +30 -30
  359. django_cfg/apps/payments/signals/__init__.py +4 -6
  360. django_cfg/apps/payments/signals/api_key_signals.py +33 -32
  361. django_cfg/apps/payments/signals/balance_signals.py +28 -26
  362. django_cfg/apps/payments/signals/payment_signals.py +29 -28
  363. django_cfg/apps/payments/signals/subscription_signals.py +39 -38
  364. django_cfg/apps/payments/static/payments/js/ngrok-status.js +12 -8
  365. django_cfg/apps/payments/static/payments/js/payment-detail.js +1 -1
  366. django_cfg/apps/payments/static/payments/js/payment-form.js +3 -3
  367. django_cfg/apps/payments/static/payments/js/payment-list.js +13 -6
  368. django_cfg/apps/payments/static/payments/js/webhook-dashboard-mjs.js +241 -0
  369. django_cfg/apps/payments/tasks/__init__.py +11 -12
  370. django_cfg/apps/payments/tasks/types.py +10 -9
  371. django_cfg/apps/payments/tasks/usage_tracking.py +44 -46
  372. django_cfg/apps/payments/templatetags/payment_tags.py +27 -27
  373. django_cfg/apps/payments/urls.py +31 -14
  374. django_cfg/apps/payments/urls_admin.py +10 -10
  375. django_cfg/apps/payments/views/api/__init__.py +32 -33
  376. django_cfg/apps/payments/views/api/api_keys.py +62 -62
  377. django_cfg/apps/payments/views/api/balances.py +63 -64
  378. django_cfg/apps/payments/views/api/base.py +52 -52
  379. django_cfg/apps/payments/views/api/currencies.py +75 -63
  380. django_cfg/apps/payments/views/api/payments.py +73 -74
  381. django_cfg/apps/payments/views/api/subscriptions.py +71 -72
  382. django_cfg/apps/payments/views/api/webhooks.py +85 -84
  383. django_cfg/apps/payments/views/overview/__init__.py +7 -7
  384. django_cfg/apps/payments/views/overview/serializers.py +13 -14
  385. django_cfg/apps/payments/views/overview/services.py +66 -67
  386. django_cfg/apps/payments/views/overview/urls.py +2 -1
  387. django_cfg/apps/payments/views/overview/views.py +31 -31
  388. django_cfg/apps/payments/views/serializers/__init__.py +35 -36
  389. django_cfg/apps/payments/views/serializers/api_keys.py +59 -57
  390. django_cfg/apps/payments/views/serializers/balances.py +34 -33
  391. django_cfg/apps/payments/views/serializers/currencies.py +36 -34
  392. django_cfg/apps/payments/views/serializers/payments.py +48 -47
  393. django_cfg/apps/payments/views/serializers/subscriptions.py +50 -45
  394. django_cfg/apps/payments/views/serializers/webhooks.py +17 -16
  395. django_cfg/apps/support/admin/__init__.py +3 -3
  396. django_cfg/apps/support/admin/resources.py +26 -26
  397. django_cfg/apps/support/admin/support_admin.py +44 -48
  398. django_cfg/apps/support/admin.py +16 -15
  399. django_cfg/apps/support/apps.py +1 -1
  400. django_cfg/apps/support/managers/message_manager.py +4 -4
  401. django_cfg/apps/support/managers/ticket_manager.py +13 -12
  402. django_cfg/apps/support/migrations/0001_initial.py +2 -1
  403. django_cfg/apps/support/models.py +3 -1
  404. django_cfg/apps/support/serializers.py +4 -2
  405. django_cfg/apps/support/signals.py +12 -10
  406. django_cfg/apps/support/urls.py +4 -3
  407. django_cfg/apps/support/utils/support_email_service.py +11 -9
  408. django_cfg/apps/support/views/__init__.py +3 -3
  409. django_cfg/apps/support/views/admin.py +9 -9
  410. django_cfg/apps/support/views/api.py +10 -9
  411. django_cfg/apps/support/views/chat.py +14 -14
  412. django_cfg/apps/tasks/admin/tasks_admin.py +65 -74
  413. django_cfg/apps/tasks/apps.py +2 -2
  414. django_cfg/apps/tasks/serializers.py +6 -6
  415. django_cfg/apps/tasks/static/tasks/js/dashboard/main.mjs +44 -20
  416. django_cfg/apps/tasks/static/tasks/js/dashboard/overview.mjs +7 -5
  417. django_cfg/apps/tasks/static/tasks/js/dashboard/queues.mjs +5 -3
  418. django_cfg/apps/tasks/static/tasks/js/dashboard/tasks.mjs +5 -3
  419. django_cfg/apps/tasks/static/tasks/js/dashboard/workers.mjs +5 -3
  420. django_cfg/apps/tasks/tasks/demo_tasks.py +12 -11
  421. django_cfg/apps/tasks/templates/tasks/components/tasks_mjs_integration.html +269 -0
  422. django_cfg/apps/tasks/templates/tasks/pages/dashboard-improved.html +168 -0
  423. django_cfg/apps/tasks/templates/tasks/pages/dashboard.html +21 -2
  424. django_cfg/apps/tasks/urls.py +3 -2
  425. django_cfg/apps/tasks/urls_admin.py +1 -0
  426. django_cfg/apps/tasks/utils/simulator.py +49 -52
  427. django_cfg/apps/tasks/views/api.py +75 -73
  428. django_cfg/apps/tasks/views/dashboard.py +5 -4
  429. django_cfg/apps/urls.py +20 -11
  430. django_cfg/apps.py +6 -5
  431. django_cfg/cli/commands/create_project.py +7 -6
  432. django_cfg/cli/commands/info.py +25 -25
  433. django_cfg/cli/utils.py +27 -27
  434. django_cfg/config.py +1 -1
  435. django_cfg/core/__init__.py +8 -8
  436. django_cfg/core/base/config_model.py +13 -12
  437. django_cfg/core/builders/apps_builder.py +2 -2
  438. django_cfg/core/builders/middleware_builder.py +1 -1
  439. django_cfg/core/builders/security_builder.py +1 -1
  440. django_cfg/core/config.py +2 -2
  441. django_cfg/core/environment/detector.py +27 -28
  442. django_cfg/core/exceptions.py +1 -1
  443. django_cfg/core/generation/core_generators/settings.py +1 -1
  444. django_cfg/core/generation/core_generators/static.py +11 -5
  445. django_cfg/core/generation/core_generators/templates.py +1 -1
  446. django_cfg/core/generation/data_generators/__init__.py +1 -1
  447. django_cfg/core/generation/data_generators/cache.py +1 -1
  448. django_cfg/core/generation/data_generators/database.py +1 -1
  449. django_cfg/core/generation/generation.py +1 -3
  450. django_cfg/core/generation/integration_generators/__init__.py +2 -2
  451. django_cfg/core/generation/integration_generators/api.py +12 -2
  452. django_cfg/core/generation/integration_generators/sessions.py +1 -1
  453. django_cfg/core/generation/integration_generators/tailwind.py +1 -1
  454. django_cfg/core/generation/integration_generators/tasks.py +1 -1
  455. django_cfg/core/generation/integration_generators/third_party.py +1 -1
  456. django_cfg/core/generation/orchestrator.py +1 -1
  457. django_cfg/core/generation/protocols.py +1 -1
  458. django_cfg/core/generation/utility_generators/__init__.py +1 -1
  459. django_cfg/core/generation/utility_generators/email.py +1 -1
  460. django_cfg/core/generation/utility_generators/i18n.py +1 -1
  461. django_cfg/core/generation/utility_generators/limits.py +1 -1
  462. django_cfg/core/generation/utility_generators/logging.py +1 -1
  463. django_cfg/core/generation/utility_generators/security.py +1 -1
  464. django_cfg/core/generation/utils/helpers.py +1 -1
  465. django_cfg/core/integration/__init__.py +5 -5
  466. django_cfg/core/integration/commands_collector.py +38 -39
  467. django_cfg/core/integration/display/__init__.py +2 -2
  468. django_cfg/core/integration/display/base.py +30 -30
  469. django_cfg/core/integration/display/ngrok.py +35 -36
  470. django_cfg/core/integration/display/startup.py +149 -139
  471. django_cfg/core/integration/url_integration.py +10 -10
  472. django_cfg/core/integration/version_checker.py +20 -19
  473. django_cfg/core/services/config_service.py +4 -4
  474. django_cfg/core/state/__init__.py +1 -1
  475. django_cfg/core/state/registry.py +1 -1
  476. django_cfg/core/types/__init__.py +8 -1
  477. django_cfg/core/validation.py +36 -39
  478. django_cfg/management/commands/check_endpoints.py +3 -1
  479. django_cfg/management/commands/check_settings.py +3 -1
  480. django_cfg/management/commands/clear_constance.py +3 -1
  481. django_cfg/management/commands/create_token.py +3 -1
  482. django_cfg/management/commands/generate_clients.py +3 -1
  483. django_cfg/management/commands/migrate_all.py +3 -1
  484. django_cfg/management/commands/rundramatiq.py +3 -1
  485. django_cfg/management/commands/rundramatiq_simulator.py +3 -1
  486. django_cfg/management/commands/runserver_ngrok.py +3 -1
  487. django_cfg/management/commands/show_config.py +3 -1
  488. django_cfg/management/commands/superuser.py +3 -1
  489. django_cfg/management/commands/task_clear.py +3 -1
  490. django_cfg/management/commands/task_status.py +3 -1
  491. django_cfg/management/commands/test_email.py +3 -1
  492. django_cfg/management/commands/test_telegram.py +3 -1
  493. django_cfg/management/commands/test_twilio.py +3 -1
  494. django_cfg/management/commands/validate_openapi.py +3 -1
  495. django_cfg/middleware/pagination.py +8 -8
  496. django_cfg/middleware/public_endpoints.py +24 -23
  497. django_cfg/middleware/user_activity.py +27 -25
  498. django_cfg/models/__init__.py +19 -20
  499. django_cfg/models/api/__init__.py +4 -4
  500. django_cfg/models/api/config.py +23 -21
  501. django_cfg/models/api/cors.py +17 -16
  502. django_cfg/models/api/drf/__init__.py +1 -1
  503. django_cfg/models/api/drf/config.py +2 -1
  504. django_cfg/models/api/drf/redoc.py +2 -1
  505. django_cfg/models/api/drf/spectacular.py +4 -2
  506. django_cfg/models/api/drf/swagger.py +2 -1
  507. django_cfg/models/api/jwt.py +37 -36
  508. django_cfg/models/api/keys.py +13 -12
  509. django_cfg/models/api/limits.py +31 -30
  510. django_cfg/models/base/config.py +40 -41
  511. django_cfg/models/base/module.py +8 -8
  512. django_cfg/models/django/__init__.py +1 -1
  513. django_cfg/models/django/constance.py +8 -7
  514. django_cfg/models/django/environment.py +5 -3
  515. django_cfg/models/django/openapi.py +6 -16
  516. django_cfg/models/django/revolution_legacy.py +17 -16
  517. django_cfg/models/infrastructure/__init__.py +1 -1
  518. django_cfg/models/infrastructure/cache.py +46 -45
  519. django_cfg/models/infrastructure/database/config.py +4 -6
  520. django_cfg/models/infrastructure/database/converters.py +1 -1
  521. django_cfg/models/infrastructure/database/parsers.py +1 -1
  522. django_cfg/models/infrastructure/database/validators.py +1 -1
  523. django_cfg/models/infrastructure/logging.py +59 -57
  524. django_cfg/models/infrastructure/security.py +26 -24
  525. django_cfg/models/ngrok/auth.py +2 -1
  526. django_cfg/models/ngrok/config.py +3 -2
  527. django_cfg/models/ngrok/tunnel.py +2 -1
  528. django_cfg/models/payments/__init__.py +1 -1
  529. django_cfg/models/payments/api_keys.py +3 -1
  530. django_cfg/models/payments/config.py +4 -1
  531. django_cfg/models/payments/providers/base.py +2 -1
  532. django_cfg/models/payments/providers/nowpayments.py +3 -1
  533. django_cfg/models/services/__init__.py +1 -1
  534. django_cfg/models/services/base.py +2 -1
  535. django_cfg/models/services/email.py +28 -26
  536. django_cfg/models/services/telegram.py +2 -1
  537. django_cfg/models/tasks/__init__.py +2 -2
  538. django_cfg/models/tasks/backends.py +4 -3
  539. django_cfg/models/tasks/config.py +6 -4
  540. django_cfg/models/tasks/utils.py +3 -3
  541. django_cfg/modules/base.py +18 -17
  542. django_cfg/modules/django_admin/__init__.py +14 -15
  543. django_cfg/modules/django_admin/decorators/__init__.py +1 -1
  544. django_cfg/modules/django_admin/decorators/actions.py +8 -7
  545. django_cfg/modules/django_admin/decorators/display.py +9 -7
  546. django_cfg/modules/django_admin/icons/__init__.py +1 -1
  547. django_cfg/modules/django_admin/icons/constants.py +27 -27
  548. django_cfg/modules/django_admin/icons/generate_icons.py +54 -54
  549. django_cfg/modules/django_admin/management/commands/check_endpoints.py +5 -3
  550. django_cfg/modules/django_admin/management/commands/check_settings.py +40 -44
  551. django_cfg/modules/django_admin/management/commands/clear_constance.py +29 -30
  552. django_cfg/modules/django_admin/management/commands/create_token.py +42 -42
  553. django_cfg/modules/django_admin/management/commands/list_urls.py +37 -38
  554. django_cfg/modules/django_admin/management/commands/migrate_all.py +13 -15
  555. django_cfg/modules/django_admin/management/commands/migrator.py +17 -17
  556. django_cfg/modules/django_admin/management/commands/script.py +58 -60
  557. django_cfg/modules/django_admin/management/commands/show_config.py +32 -30
  558. django_cfg/modules/django_admin/management/commands/show_urls.py +46 -44
  559. django_cfg/modules/django_admin/management/commands/superuser.py +47 -48
  560. django_cfg/modules/django_admin/management/commands/tree.py +50 -54
  561. django_cfg/modules/django_admin/mixins/display_mixin.py +16 -15
  562. django_cfg/modules/django_admin/mixins/optimization_mixin.py +9 -8
  563. django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +25 -24
  564. django_cfg/modules/django_admin/models/__init__.py +4 -4
  565. django_cfg/modules/django_admin/models/action_models.py +3 -1
  566. django_cfg/modules/django_admin/models/badge_models.py +4 -2
  567. django_cfg/modules/django_admin/models/base.py +3 -3
  568. django_cfg/modules/django_admin/models/display_models.py +1 -0
  569. django_cfg/modules/django_admin/utils/badges.py +27 -26
  570. django_cfg/modules/django_admin/utils/displays.py +49 -49
  571. django_cfg/modules/django_client/apps.py +21 -3
  572. django_cfg/modules/django_client/core/__init__.py +9 -10
  573. django_cfg/modules/django_client/core/archive/manager.py +2 -2
  574. django_cfg/modules/django_client/core/cli/main.py +1 -3
  575. django_cfg/modules/django_client/core/config/config.py +3 -1
  576. django_cfg/modules/django_client/core/config/group.py +1 -0
  577. django_cfg/modules/django_client/core/config/service.py +2 -1
  578. django_cfg/modules/django_client/core/generator/__init__.py +1 -1
  579. django_cfg/modules/django_client/core/generator/base.py +2 -2
  580. django_cfg/modules/django_client/core/generator/python/async_client_gen.py +1 -1
  581. django_cfg/modules/django_client/core/generator/python/files_generator.py +1 -1
  582. django_cfg/modules/django_client/core/generator/python/generator.py +4 -4
  583. django_cfg/modules/django_client/core/generator/python/models_generator.py +1 -1
  584. django_cfg/modules/django_client/core/generator/python/operations_generator.py +2 -2
  585. django_cfg/modules/django_client/core/generator/python/sync_client_gen.py +1 -1
  586. django_cfg/modules/django_client/core/generator/typescript/client_generator.py +3 -1
  587. django_cfg/modules/django_client/core/generator/typescript/fetchers_generator.py +14 -13
  588. django_cfg/modules/django_client/core/generator/typescript/files_generator.py +1 -0
  589. django_cfg/modules/django_client/core/generator/typescript/generator.py +6 -6
  590. django_cfg/modules/django_client/core/generator/typescript/hooks_generator.py +12 -10
  591. django_cfg/modules/django_client/core/generator/typescript/models_generator.py +2 -1
  592. django_cfg/modules/django_client/core/generator/typescript/naming.py +2 -3
  593. django_cfg/modules/django_client/core/generator/typescript/operations_generator.py +12 -10
  594. django_cfg/modules/django_client/core/generator/typescript/schemas_generator.py +3 -2
  595. django_cfg/modules/django_client/core/generator/typescript/templates/client/client.ts.jinja +14 -6
  596. django_cfg/modules/django_client/core/generator/typescript/templates/main_index.ts.jinja +4 -10
  597. django_cfg/modules/django_client/core/groups/__init__.py +1 -1
  598. django_cfg/modules/django_client/core/groups/detector.py +2 -1
  599. django_cfg/modules/django_client/core/groups/manager.py +2 -1
  600. django_cfg/modules/django_client/core/ir/schema.py +1 -1
  601. django_cfg/modules/django_client/core/parser/base.py +0 -2
  602. django_cfg/modules/django_client/core/parser/models/schema.py +1 -1
  603. django_cfg/modules/django_client/core/validation/__init__.py +1 -1
  604. django_cfg/modules/django_client/core/validation/fixer.py +1 -2
  605. django_cfg/modules/django_client/core/validation/reporter.py +2 -2
  606. django_cfg/modules/django_client/core/validation/safety.py +1 -1
  607. django_cfg/modules/django_client/management/commands/generate_client.py +14 -11
  608. django_cfg/modules/django_client/management/commands/validate_openapi.py +4 -6
  609. django_cfg/modules/django_client/spectacular/__init__.py +1 -1
  610. django_cfg/modules/django_client/spectacular/async_detection.py +3 -2
  611. django_cfg/modules/django_client/spectacular/enum_naming.py +1 -1
  612. django_cfg/modules/django_client/spectacular/schema.py +5 -5
  613. django_cfg/modules/django_client/system/__init__.py +24 -0
  614. django_cfg/modules/django_client/system/base_generator.py +123 -0
  615. django_cfg/modules/django_client/system/generate_mjs_clients.py +174 -0
  616. django_cfg/modules/django_client/system/mjs_generator.py +219 -0
  617. django_cfg/modules/django_client/system/schema_parser.py +195 -0
  618. django_cfg/modules/django_client/system/templates/api_client.js.j2 +87 -0
  619. django_cfg/modules/django_client/system/templates/app_index.js.j2 +13 -0
  620. django_cfg/modules/django_client/system/templates/base_client.js.j2 +166 -0
  621. django_cfg/modules/django_client/system/templates/main_index.js.j2 +80 -0
  622. django_cfg/modules/django_client/system/templates/types.js.j2 +24 -0
  623. django_cfg/modules/django_client/urls.py +3 -2
  624. django_cfg/modules/django_currency/__init__.py +17 -18
  625. django_cfg/modules/django_currency/clients/__init__.py +2 -2
  626. django_cfg/modules/django_currency/clients/coinpaprika_client.py +48 -48
  627. django_cfg/modules/django_currency/clients/hybrid_client.py +76 -75
  628. django_cfg/modules/django_currency/core/__init__.py +7 -13
  629. django_cfg/modules/django_currency/core/converter.py +25 -24
  630. django_cfg/modules/django_currency/core/models.py +9 -8
  631. django_cfg/modules/django_currency/database/__init__.py +4 -4
  632. django_cfg/modules/django_currency/database/database_loader.py +65 -66
  633. django_cfg/modules/django_currency/examples/example_database_usage.py +29 -28
  634. django_cfg/modules/django_currency/utils/cache.py +10 -11
  635. django_cfg/modules/django_dashboard/__init__.py +4 -5
  636. django_cfg/modules/django_dashboard/components.py +11 -7
  637. django_cfg/modules/django_dashboard/debug.py +1 -3
  638. django_cfg/modules/django_dashboard/management/commands/debug_dashboard.py +3 -3
  639. django_cfg/modules/django_dashboard/sections/base.py +2 -1
  640. django_cfg/modules/django_dashboard/sections/commands.py +3 -2
  641. django_cfg/modules/django_dashboard/sections/documentation.py +8 -6
  642. django_cfg/modules/django_dashboard/sections/overview.py +13 -9
  643. django_cfg/modules/django_dashboard/sections/stats.py +2 -2
  644. django_cfg/modules/django_dashboard/sections/system.py +2 -1
  645. django_cfg/modules/django_drf_theme/templatetags/tailwind_tags.py +12 -4
  646. django_cfg/modules/django_email/management/commands/test_email.py +8 -7
  647. django_cfg/modules/django_email/service.py +5 -4
  648. django_cfg/modules/django_health/service.py +46 -44
  649. django_cfg/modules/django_import_export/__init__.py +7 -3
  650. django_cfg/modules/django_llm/__init__.py +3 -2
  651. django_cfg/modules/django_llm/example.py +58 -56
  652. django_cfg/modules/django_llm/llm/__init__.py +1 -1
  653. django_cfg/modules/django_llm/llm/cache.py +21 -20
  654. django_cfg/modules/django_llm/llm/client.py +9 -9
  655. django_cfg/modules/django_llm/llm/costs.py +14 -14
  656. django_cfg/modules/django_llm/llm/embeddings/__init__.py +1 -1
  657. django_cfg/modules/django_llm/llm/embeddings/mock_embedder.py +1 -2
  658. django_cfg/modules/django_llm/llm/embeddings/openai_embedder.py +1 -2
  659. django_cfg/modules/django_llm/llm/extractor.py +8 -8
  660. django_cfg/modules/django_llm/llm/models.py +5 -5
  661. django_cfg/modules/django_llm/llm/models_api/models_query.py +2 -2
  662. django_cfg/modules/django_llm/llm/models_cache.py +91 -92
  663. django_cfg/modules/django_llm/llm/providers/config_builder.py +1 -1
  664. django_cfg/modules/django_llm/llm/providers/provider_manager.py +2 -1
  665. django_cfg/modules/django_llm/llm/requests/cache_manager.py +1 -1
  666. django_cfg/modules/django_llm/llm/requests/chat_handler.py +2 -2
  667. django_cfg/modules/django_llm/llm/requests/embedding_handler.py +1 -1
  668. django_cfg/modules/django_llm/llm/responses/response_builder.py +2 -2
  669. django_cfg/modules/django_llm/llm/stats/stats_manager.py +1 -1
  670. django_cfg/modules/django_llm/llm/tokenizer.py +10 -9
  671. django_cfg/modules/django_llm/translator/__init__.py +1 -1
  672. django_cfg/modules/django_llm/translator/cache.py +36 -35
  673. django_cfg/modules/django_llm/translator/detectors/__init__.py +1 -1
  674. django_cfg/modules/django_llm/translator/detectors/script_detector.py +0 -1
  675. django_cfg/modules/django_llm/translator/stats/stats_tracker.py +1 -1
  676. django_cfg/modules/django_llm/translator/translator.py +5 -4
  677. django_cfg/modules/django_llm/translator/translators/__init__.py +1 -1
  678. django_cfg/modules/django_llm/translator/translators/json_translator.py +1 -1
  679. django_cfg/modules/django_llm/translator/utils/__init__.py +1 -1
  680. django_cfg/modules/django_llm/translator/utils/prompt_builder.py +0 -1
  681. django_cfg/modules/django_logging/__init__.py +1 -1
  682. django_cfg/modules/django_logging/django_logger.py +33 -34
  683. django_cfg/modules/django_logging/logger.py +3 -7
  684. django_cfg/modules/django_ngrok/__init__.py +7 -7
  685. django_cfg/modules/django_ngrok/management/commands/runserver_ngrok.py +33 -30
  686. django_cfg/modules/django_ngrok/service.py +33 -32
  687. django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +4 -36
  688. django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +1 -1
  689. django_cfg/modules/django_tasks/__init__.py +5 -5
  690. django_cfg/modules/django_tasks/dramatiq_setup.py +1 -1
  691. django_cfg/modules/django_tasks/factory.py +1 -1
  692. django_cfg/modules/django_tasks/management/commands/rundramatiq.py +39 -40
  693. django_cfg/modules/django_tasks/management/commands/rundramatiq_simulator.py +79 -80
  694. django_cfg/modules/django_tasks/management/commands/task_clear.py +34 -34
  695. django_cfg/modules/django_tasks/management/commands/task_status.py +34 -34
  696. django_cfg/modules/django_tasks/service.py +4 -3
  697. django_cfg/modules/django_tasks/settings.py +1 -1
  698. django_cfg/modules/django_telegram/__init__.py +4 -4
  699. django_cfg/modules/django_telegram/management/commands/test_telegram.py +4 -5
  700. django_cfg/modules/django_telegram/service.py +4 -3
  701. django_cfg/modules/django_telegram/utils.py +1 -1
  702. django_cfg/modules/django_twilio/__init__.py +15 -16
  703. django_cfg/modules/django_twilio/_imports.py +1 -1
  704. django_cfg/modules/django_twilio/base.py +9 -5
  705. django_cfg/modules/django_twilio/email_otp.py +4 -3
  706. django_cfg/modules/django_twilio/exceptions.py +36 -36
  707. django_cfg/modules/django_twilio/management/commands/test_twilio.py +6 -7
  708. django_cfg/modules/django_twilio/models.py +54 -53
  709. django_cfg/modules/django_twilio/sendgrid_service.py +70 -72
  710. django_cfg/modules/django_twilio/simple_service.py +42 -41
  711. django_cfg/modules/django_twilio/sms.py +1 -0
  712. django_cfg/modules/django_twilio/twilio_service.py +79 -83
  713. django_cfg/modules/django_twilio/unified.py +6 -5
  714. django_cfg/modules/django_twilio/utils.py +2 -3
  715. django_cfg/modules/django_twilio/whatsapp.py +3 -2
  716. django_cfg/modules/django_unfold/__init__.py +7 -6
  717. django_cfg/modules/django_unfold/callbacks/actions.py +6 -5
  718. django_cfg/modules/django_unfold/callbacks/apizones.py +122 -0
  719. django_cfg/modules/django_unfold/callbacks/base.py +9 -8
  720. django_cfg/modules/django_unfold/callbacks/charts.py +36 -37
  721. django_cfg/modules/django_unfold/callbacks/commands.py +2 -2
  722. django_cfg/modules/django_unfold/callbacks/main.py +27 -27
  723. django_cfg/modules/django_unfold/callbacks/statistics.py +12 -12
  724. django_cfg/modules/django_unfold/callbacks/system.py +5 -5
  725. django_cfg/modules/django_unfold/callbacks/users.py +4 -4
  726. django_cfg/modules/django_unfold/dashboard.py +29 -29
  727. django_cfg/modules/django_unfold/models/__init__.py +23 -8
  728. django_cfg/modules/django_unfold/models/config.py +84 -81
  729. django_cfg/modules/django_unfold/models/dashboard.py +20 -19
  730. django_cfg/modules/django_unfold/models/dropdown.py +6 -4
  731. django_cfg/modules/django_unfold/models/navigation.py +6 -4
  732. django_cfg/modules/django_unfold/models/tabs.py +4 -3
  733. django_cfg/modules/django_unfold/models.py +2 -3
  734. django_cfg/modules/django_unfold/system_monitor.py +27 -25
  735. django_cfg/modules/django_unfold/tailwind.py +12 -14
  736. django_cfg/modules/django_unfold/utils.py +7 -6
  737. django_cfg/pyproject.toml +1 -1
  738. django_cfg/registry/__init__.py +3 -3
  739. django_cfg/registry/core.py +8 -8
  740. django_cfg/registry/modules.py +2 -2
  741. django_cfg/registry/services.py +2 -2
  742. django_cfg/registry/third_party.py +3 -3
  743. django_cfg/routing/__init__.py +3 -3
  744. django_cfg/routing/callbacks.py +27 -26
  745. django_cfg/routing/routers.py +2 -2
  746. django_cfg/static/js/api/accounts/client.mjs +69 -0
  747. django_cfg/static/js/api/accounts/index.mjs +13 -0
  748. django_cfg/static/js/api/base.mjs +166 -0
  749. django_cfg/static/js/api/index.mjs +100 -0
  750. django_cfg/static/js/api/ipc/client.mjs +74 -0
  751. django_cfg/static/js/api/ipc/index.mjs +13 -0
  752. django_cfg/static/js/api/leads/client.mjs +71 -0
  753. django_cfg/static/js/api/leads/index.mjs +13 -0
  754. django_cfg/static/js/api/newsletter/client.mjs +109 -0
  755. django_cfg/static/js/api/newsletter/index.mjs +13 -0
  756. django_cfg/static/js/api/payments/client.mjs +1264 -0
  757. django_cfg/static/js/api/payments/index.mjs +13 -0
  758. django_cfg/static/js/api/support/client.mjs +84 -0
  759. django_cfg/static/js/api/support/index.mjs +13 -0
  760. django_cfg/static/js/api/tasks/client.mjs +74 -0
  761. django_cfg/static/js/api/tasks/index.mjs +13 -0
  762. django_cfg/static/js/api/types.mjs +729 -0
  763. django_cfg/static/js/api-loader.mjs +169 -0
  764. django_cfg/templates/admin/snippets/zones/zones_table.html +4 -3
  765. django_cfg/templatetags/django_cfg.py +4 -4
  766. django_cfg/utils/path_resolution.py +49 -50
  767. django_cfg/utils/smart_defaults.py +27 -29
  768. django_cfg/utils/version_check.py +14 -14
  769. {django_cfg-1.4.21.dist-info → django_cfg-1.4.23.dist-info}/METADATA +1 -1
  770. django_cfg-1.4.23.dist-info/RECORD +1137 -0
  771. django_cfg/apps/payments/static/payments/js/api-client.js +0 -408
  772. django_cfg/modules/django_ipc_client/dashboard/README.md +0 -517
  773. django_cfg/modules/django_ipc_client/dashboard/UNFOLD_INTEGRATION.md +0 -439
  774. django_cfg/modules/django_ipc_client/dashboard/__init__.py +0 -11
  775. django_cfg/modules/django_ipc_client/dashboard/apps.py +0 -22
  776. django_cfg/modules/django_ipc_client/dashboard/templates/django_ipc_dashboard/dashboard.html +0 -200
  777. django_cfg/modules/django_ipc_client/dashboard/urls.py +0 -22
  778. django_cfg/modules/django_ipc_client/dashboard/urls_admin.py +0 -9
  779. django_cfg/modules/django_ipc_client/dashboard/views.py +0 -251
  780. django_cfg/modules/django_rpc_old/POETRY.md +0 -344
  781. django_cfg/modules/django_rpc_old/README.md +0 -397
  782. django_cfg/modules/django_rpc_old/TESTING.md +0 -358
  783. django_cfg/modules/django_rpc_old/__init__.py +0 -39
  784. django_cfg/modules/django_rpc_old/client.py +0 -531
  785. django_cfg/modules/django_rpc_old/config.py +0 -279
  786. django_cfg/modules/django_rpc_old/exceptions.py +0 -172
  787. django_cfg/modules/django_unfold/callbacks/revolution.py +0 -81
  788. django_cfg-1.4.21.dist-info/RECORD +0 -1111
  789. /django_cfg/{modules/django_ipc_client → apps/ipc}/README.md +0 -0
  790. /django_cfg/{modules/django_ipc_client → apps/ipc/services/client}/config.py +0 -0
  791. {django_cfg-1.4.21.dist-info → django_cfg-1.4.23.dist-info}/WHEEL +0 -0
  792. {django_cfg-1.4.21.dist-info → django_cfg-1.4.23.dist-info}/entry_points.txt +0 -0
  793. {django_cfg-1.4.21.dist-info → django_cfg-1.4.23.dist-info}/licenses/LICENSE +0 -0
@@ -5,32 +5,27 @@ DRF ViewSets for webhook management in admin interface.
5
5
  Requires admin permissions.
6
6
  """
7
7
 
8
- from rest_framework import viewsets, status
8
+ from datetime import timedelta
9
+
10
+ from django.utils import timezone
9
11
  from rest_framework.decorators import action
12
+ from rest_framework.filters import OrderingFilter, SearchFilter
10
13
  from rest_framework.response import Response
11
- from rest_framework.generics import ListAPIView
12
- from django_filters.rest_framework import DjangoFilterBackend
13
- from rest_framework.filters import SearchFilter, OrderingFilter
14
- from django.utils import timezone
15
- from django.db import models
16
- from datetime import datetime, timedelta
17
14
 
18
- from django_cfg.apps.payments.admin_interface.views.base import AdminBaseViewSet, AdminReadOnlyViewSet
19
15
  from django_cfg.apps.payments.admin_interface.serializers import (
20
- WebhookEventSerializer,
16
+ WebhookActionResultSerializer,
21
17
  WebhookEventListSerializer,
22
18
  WebhookStatsSerializer,
23
- WebhookActionSerializer,
24
- WebhookActionResultSerializer,
25
19
  )
20
+ from django_cfg.apps.payments.admin_interface.views.base import AdminReadOnlyViewSet
26
21
  from django_cfg.apps.payments.models import UniversalPayment
27
- from django_cfg.modules.django_logging import get_logger
22
+ from django_cfg.apps.payments.services.core.webhook_service import WebhookService
28
23
  from django_cfg.apps.payments.services.integrations.ngrok_service import (
29
- get_all_webhook_urls,
30
- get_api_base_url,
31
- is_ngrok_available
24
+ get_all_webhook_urls,
25
+ get_api_base_url,
26
+ is_ngrok_available,
32
27
  )
33
- from django_cfg.apps.payments.services.core.webhook_service import WebhookService
28
+ from django_cfg.modules.django_logging import get_logger
34
29
 
35
30
  logger = get_logger("admin_webhook_api")
36
31
 
@@ -42,37 +37,37 @@ class AdminWebhookViewSet(AdminReadOnlyViewSet):
42
37
  Read-only view for webhook configurations and provider info.
43
38
  Requires admin permissions.
44
39
  """
45
-
40
+
46
41
  # No model - this is for webhook configuration data
47
42
  serializer_class = WebhookStatsSerializer
48
-
43
+
49
44
  def __init__(self, **kwargs):
50
45
  """Initialize with ngrok service."""
51
46
  super().__init__(**kwargs)
52
-
47
+
53
48
  self.get_webhook_urls = get_all_webhook_urls
54
49
  self.get_base_url = get_api_base_url
55
50
  self.is_ngrok_active = is_ngrok_available
56
-
51
+
57
52
  def list(self, request):
58
53
  """List webhook providers and configurations with real ngrok URLs."""
59
54
  # Get real webhook URLs
60
55
  webhook_urls = self.get_webhook_urls()
61
56
  base_url = self.get_base_url()
62
57
  ngrok_active = self.is_ngrok_active()
63
-
58
+
64
59
  # Get real provider data based on actual payments
65
60
  active_providers = UniversalPayment.objects.values('provider').distinct()
66
-
61
+
67
62
  providers_data = []
68
63
  for provider_data in active_providers:
69
64
  provider_name = provider_data['provider']
70
65
  provider_payments = UniversalPayment.objects.filter(provider=provider_name)
71
-
66
+
72
67
  # Calculate real statistics
73
68
  total_payments = provider_payments.count()
74
69
  last_payment = provider_payments.order_by('-created_at').first()
75
-
70
+
76
71
  provider_info = {
77
72
  'name': provider_name,
78
73
  'display_name': provider_name.title(),
@@ -85,7 +80,7 @@ class AdminWebhookViewSet(AdminReadOnlyViewSet):
85
80
  'base_url': base_url
86
81
  }
87
82
  providers_data.append(provider_info)
88
-
83
+
89
84
  # Add ngrok status to response
90
85
  response_data = {
91
86
  'providers': providers_data,
@@ -95,10 +90,10 @@ class AdminWebhookViewSet(AdminReadOnlyViewSet):
95
90
  'webhook_urls': webhook_urls
96
91
  }
97
92
  }
98
-
93
+
99
94
  serializer = self.get_serializer(response_data)
100
95
  return Response(serializer.data)
101
-
96
+
102
97
  @action(detail=False, methods=['get'])
103
98
  def stats(self, request):
104
99
  """Get webhook statistics."""
@@ -107,7 +102,7 @@ class AdminWebhookViewSet(AdminReadOnlyViewSet):
107
102
  recent_payments = UniversalPayment.objects.filter(
108
103
  created_at__gte=timezone.now() - timedelta(days=7)
109
104
  ).count()
110
-
105
+
111
106
  # Mock webhook stats based on real payment data
112
107
  stats_data = {
113
108
  'total': total_payments * 2, # Assume 2 events per payment on average
@@ -139,7 +134,7 @@ class AdminWebhookViewSet(AdminReadOnlyViewSet):
139
134
  'avg_response_time': 150.5, # milliseconds
140
135
  'max_response_time': 2500, # milliseconds
141
136
  }
142
-
137
+
143
138
  serializer = self.get_serializer(stats_data)
144
139
  return Response(serializer.data)
145
140
 
@@ -151,7 +146,7 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
151
146
  Provides listing, filtering, and actions for webhook events.
152
147
  Requires admin permissions.
153
148
  """
154
-
149
+
155
150
  # No model - using mock data for now
156
151
  serializer_class = WebhookEventListSerializer
157
152
  filter_backends = [SearchFilter, OrderingFilter]
@@ -159,38 +154,38 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
159
154
  search_fields = ['event_type', 'webhook_url']
160
155
  ordering_fields = ['timestamp', 'event_type', 'status']
161
156
  ordering = ['-timestamp']
162
-
157
+
163
158
  def __init__(self, **kwargs):
164
159
  """Initialize with webhook and ngrok services."""
165
160
  super().__init__(**kwargs)
166
-
161
+
167
162
  self.webhook_service = WebhookService()
168
163
  self.get_webhook_urls = get_all_webhook_urls
169
164
  self.get_base_url = get_api_base_url
170
165
  self.is_ngrok_active = is_ngrok_available
171
-
166
+
172
167
  def get_queryset(self):
173
168
  """Get webhook events queryset."""
174
169
  # For now, return empty queryset since we're using mock data
175
170
  # In real implementation, this would return WebhookEvent.objects.all()
176
171
  return UniversalPayment.objects.none()
177
-
172
+
178
173
  def list(self, request, webhook_pk=None):
179
174
  """List webhook events with filtering and pagination."""
180
175
  # Get filter parameters
181
176
  event_type = request.GET.get('event_type')
182
177
  status_filter = request.GET.get('status')
183
178
  provider = request.GET.get('provider')
184
-
179
+
185
180
  # Get real payment data to generate realistic mock events
186
181
  payments = UniversalPayment.objects.all()[:50] # Limit for performance
187
-
182
+
188
183
  # Generate mock webhook events based on real payments
189
184
  events = []
190
185
  for i, payment in enumerate(payments):
191
186
  # Create multiple events per payment
192
187
  event_types = ['payment.created', 'payment.completed'] if payment.status == 'completed' else ['payment.created']
193
-
188
+
194
189
  for event_type_name in event_types:
195
190
  # Create payload for the event
196
191
  payload = {
@@ -200,7 +195,7 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
200
195
  'status': payment.status,
201
196
  'timestamp': payment.created_at.isoformat()
202
197
  }
203
-
198
+
204
199
  event = {
205
200
  'id': int(str(hash(f"{payment.id}_{event_type_name}_{i}"))[:8], 16),
206
201
  'provider': payment.provider,
@@ -215,7 +210,7 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
215
210
  'response_status_code': 200 if i % 5 != 0 else 500,
216
211
  'webhook_url': self.get_webhook_urls().get(payment.provider, f"{self.get_base_url()}/api/webhooks/{payment.provider}/"),
217
212
  }
218
-
213
+
219
214
  # Apply filters
220
215
  if event_type and event['event_type'] != event_type:
221
216
  continue
@@ -223,20 +218,20 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
223
218
  continue
224
219
  if provider and event['provider'] != provider:
225
220
  continue
226
-
221
+
227
222
  events.append(event)
228
-
223
+
229
224
  # Sort by timestamp descending (only if events exist)
230
225
  if events:
231
226
  events.sort(key=lambda x: x.get('timestamp', timezone.now()), reverse=True)
232
-
227
+
233
228
  # Pagination
234
229
  page_size = 20
235
230
  page = int(request.GET.get('page', 1))
236
231
  start = (page - 1) * page_size
237
232
  end = start + page_size
238
233
  paginated_events = events[start:end]
239
-
234
+
240
235
  response_data = {
241
236
  'events': paginated_events,
242
237
  'total': len(events),
@@ -250,10 +245,10 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
250
245
  'webhook_urls': self.get_webhook_urls()
251
246
  }
252
247
  }
253
-
248
+
254
249
  serializer = self.get_serializer(response_data)
255
250
  return Response(serializer.data)
256
-
251
+
257
252
  @action(detail=True, methods=['post'])
258
253
  def retry(self, request, pk=None):
259
254
  """Retry a failed webhook event."""
@@ -265,11 +260,11 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
265
260
  'retry_count': 2,
266
261
  'next_retry': timezone.now() + timedelta(minutes=5)
267
262
  }
268
-
263
+
269
264
  serializer = WebhookActionResultSerializer(result_data)
270
265
  logger.info(f"Webhook event {pk} retry initiated by admin {request.user.id}")
271
266
  return Response(serializer.data)
272
-
267
+
273
268
  @action(detail=False, methods=['post'])
274
269
  def clear_all(self, request):
275
270
  """Clear all webhook events."""
@@ -279,11 +274,11 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
279
274
  'message': 'All webhook events cleared',
280
275
  'cleared_count': 150, # Mock count
281
276
  }
282
-
277
+
283
278
  serializer = WebhookActionResultSerializer(result_data)
284
279
  logger.info(f"All webhook events cleared by admin {request.user.id}")
285
280
  return Response(serializer.data)
286
-
281
+
287
282
  @action(detail=False, methods=['post'])
288
283
  def retry_failed(self, request):
289
284
  """Retry all failed webhook events."""
@@ -291,13 +286,13 @@ class AdminWebhookEventViewSet(AdminReadOnlyViewSet):
291
286
  # In real implementation:
292
287
  # failed_events = WebhookEvent.objects.filter(status='failed')
293
288
  # results = [retry_webhook_event(event) for event in failed_events]
294
-
289
+
295
290
  result_data = {
296
291
  'success': True,
297
292
  'message': 'All failed webhook events retry initiated',
298
293
  'processed_count': 0, # Mock count
299
294
  }
300
-
295
+
301
296
  serializer = WebhookActionResultSerializer(result_data)
302
297
  logger.info(f"All failed webhook events retry initiated by admin {request.user.id}")
303
298
  return Response(serializer.data)
@@ -5,11 +5,11 @@ DRF ViewSets for public webhook functionality.
5
5
  No authentication required.
6
6
  """
7
7
 
8
- from rest_framework import viewsets, status
8
+ from django.utils import timezone
9
+ from rest_framework import status, viewsets
9
10
  from rest_framework.decorators import action
10
- from rest_framework.response import Response
11
11
  from rest_framework.permissions import AllowAny
12
- from django.utils import timezone
12
+ from rest_framework.response import Response
13
13
 
14
14
  from django_cfg.apps.payments.admin_interface.serializers import WebhookStatsSerializer
15
15
  from django_cfg.modules.django_logging import get_logger
@@ -24,10 +24,10 @@ class WebhookTestViewSet(viewsets.ViewSet):
24
24
  Allows testing webhook endpoints without admin permissions.
25
25
  Perfect for development and integration testing.
26
26
  """
27
-
27
+
28
28
  permission_classes = [AllowAny] # Explicitly allow any user
29
29
  serializer_class = WebhookStatsSerializer # For schema generation
30
-
30
+
31
31
  @action(detail=False, methods=['post'])
32
32
  def test(self, request):
33
33
  """
@@ -38,18 +38,18 @@ class WebhookTestViewSet(viewsets.ViewSet):
38
38
  """
39
39
  webhook_url = request.data.get('webhook_url')
40
40
  event_type = request.data.get('event_type')
41
-
41
+
42
42
  if not webhook_url or not event_type:
43
43
  return Response({
44
44
  'success': False,
45
45
  'error': 'webhook_url and event_type are required'
46
46
  }, status=status.HTTP_400_BAD_REQUEST)
47
-
47
+
48
48
  # TODO: In real implementation, send actual HTTP request to webhook_url
49
49
  # For now, return mock success response
50
-
50
+
51
51
  logger.info(f"Test webhook sent to {webhook_url} with event type {event_type}")
52
-
52
+
53
53
  return Response({
54
54
  'success': True,
55
55
  'message': f'Test webhook sent to {webhook_url} with event type {event_type}',
@@ -4,17 +4,15 @@ Base ViewSet classes for Admin Interface API.
4
4
  Common functionality for all admin interface ViewSets.
5
5
  """
6
6
 
7
- from rest_framework import viewsets, permissions, status
8
- from rest_framework.decorators import action
9
- from rest_framework.response import Response
10
- from rest_framework.permissions import IsAdminUser
11
- from django_filters.rest_framework import DjangoFilterBackend
12
- from rest_framework.filters import SearchFilter, OrderingFilter
13
- from django.contrib.admin.views.decorators import staff_member_required
14
- from django.utils.decorators import method_decorator
15
- from django.utils import timezone
16
7
  from datetime import timedelta
17
8
 
9
+ from django.utils import timezone
10
+ from django_filters.rest_framework import DjangoFilterBackend
11
+ from rest_framework import viewsets
12
+ from rest_framework.decorators import action
13
+ from rest_framework.filters import OrderingFilter, SearchFilter
14
+ from rest_framework.permissions import IsAdminUser
15
+ from rest_framework.response import Response
18
16
 
19
17
  from django_cfg.modules.django_logging import get_logger
20
18
 
@@ -27,14 +25,14 @@ class AdminBaseViewSet(viewsets.ModelViewSet):
27
25
 
28
26
  Provides standard CRUD operations with admin-only access.
29
27
  """
30
-
28
+
31
29
  permission_classes = [IsAdminUser]
32
30
  filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
33
31
  ordering = ['-created_at']
34
-
32
+
35
33
  # Serializer classes mapping for different actions
36
34
  serializer_classes = {}
37
-
35
+
38
36
  def get_queryset(self):
39
37
  """
40
38
  Optimized queryset for admin interface.
@@ -42,20 +40,20 @@ class AdminBaseViewSet(viewsets.ModelViewSet):
42
40
  Override in subclasses to add specific optimizations.
43
41
  """
44
42
  queryset = super().get_queryset()
45
-
43
+
46
44
  # Add common optimizations for admin
47
45
  if hasattr(self.queryset.model, 'user'):
48
46
  queryset = queryset.select_related('user')
49
-
47
+
50
48
  return queryset
51
-
49
+
52
50
  def get_serializer_class(self):
53
51
  """
54
52
  Dynamic serializer selection based on action.
55
53
  """
56
54
  serializer_classes = getattr(self, 'serializer_classes', {})
57
55
  return serializer_classes.get(self.action, self.serializer_class)
58
-
56
+
59
57
  def get_serializer_context(self):
60
58
  """Enhanced context for admin serializers."""
61
59
  context = super().get_serializer_context()
@@ -64,7 +62,7 @@ class AdminBaseViewSet(viewsets.ModelViewSet):
64
62
  'admin_user': self.request.user,
65
63
  })
66
64
  return context
67
-
65
+
68
66
  @action(detail=False, methods=['get'])
69
67
  def stats(self, request):
70
68
  """Get statistics for this resource."""
@@ -84,11 +82,11 @@ class AdminReadOnlyViewSet(viewsets.ReadOnlyModelViewSet):
84
82
 
85
83
  For resources that should only be viewed, not modified.
86
84
  """
87
-
85
+
88
86
  permission_classes = [IsAdminUser]
89
87
  filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
90
88
  ordering = ['-created_at']
91
-
89
+
92
90
  def get_serializer_context(self):
93
91
  """Enhanced context for admin serializers."""
94
92
  context = super().get_serializer_context()
@@ -4,10 +4,10 @@ Admin Dashboard Template Views.
4
4
  Django template views for admin dashboard interface.
5
5
  """
6
6
 
7
- from django.views.generic import TemplateView
8
- from django.contrib.auth.mixins import LoginRequiredMixin
9
7
  from django.contrib.admin.views.decorators import staff_member_required
8
+ from django.contrib.auth.mixins import LoginRequiredMixin
10
9
  from django.utils.decorators import method_decorator
10
+ from django.views.generic import TemplateView
11
11
 
12
12
  from .base import AdminTemplateViewMixin
13
13
 
@@ -19,20 +19,20 @@ class PaymentDashboardView(AdminTemplateViewMixin, LoginRequiredMixin, TemplateV
19
19
 
20
20
  Displays overview of payments, webhooks, and system statistics.
21
21
  """
22
-
22
+
23
23
  template_name = 'payments/payment_dashboard.html'
24
-
24
+
25
25
  def get_context_data(self, **kwargs):
26
26
  """Add dashboard context data."""
27
27
  context = super().get_context_data(**kwargs)
28
-
28
+
29
29
  context.update({
30
30
  'page_title': 'Payment Dashboard',
31
31
  'page_subtitle': 'Overview of payment system activity',
32
32
  'show_stats': True,
33
33
  'auto_refresh': True,
34
34
  })
35
-
35
+
36
36
  return context
37
37
 
38
38
 
@@ -43,18 +43,18 @@ class WebhookDashboardView(AdminTemplateViewMixin, LoginRequiredMixin, TemplateV
43
43
 
44
44
  Displays webhook events, provider status, and ngrok configuration.
45
45
  """
46
-
46
+
47
47
  template_name = 'payments/webhook_dashboard.html'
48
-
48
+
49
49
  def get_context_data(self, **kwargs):
50
50
  """Add webhook dashboard context data."""
51
51
  context = super().get_context_data(**kwargs)
52
-
52
+
53
53
  context.update({
54
54
  'page_title': 'Webhook Dashboard',
55
55
  'page_subtitle': 'Monitor and test webhook endpoints',
56
56
  'show_ngrok_status': True,
57
57
  'auto_refresh': True,
58
58
  })
59
-
59
+
60
60
  return context
@@ -4,15 +4,15 @@ Admin Form Template Views.
4
4
  Django template views for payment forms and detail pages.
5
5
  """
6
6
 
7
- from django.views.generic import TemplateView, DetailView
8
- from django.contrib.auth.mixins import LoginRequiredMixin
9
7
  from django.contrib.admin.views.decorators import staff_member_required
8
+ from django.contrib.auth.mixins import LoginRequiredMixin
10
9
  from django.utils.decorators import method_decorator
11
- from django.shortcuts import get_object_or_404
10
+ from django.views.generic import DetailView, TemplateView
12
11
 
13
- from .base import AdminTemplateViewMixin
14
12
  from django_cfg.apps.payments.models import UniversalPayment
15
13
 
14
+ from .base import AdminTemplateViewMixin
15
+
16
16
 
17
17
  @method_decorator(staff_member_required, name='dispatch')
18
18
  class PaymentFormView(AdminTemplateViewMixin, LoginRequiredMixin, TemplateView):
@@ -21,19 +21,19 @@ class PaymentFormView(AdminTemplateViewMixin, LoginRequiredMixin, TemplateView):
21
21
 
22
22
  Displays form for creating new payments with provider selection.
23
23
  """
24
-
24
+
25
25
  template_name = 'payments/payment_form.html'
26
-
26
+
27
27
  def get_context_data(self, **kwargs):
28
28
  """Add form context data."""
29
29
  context = super().get_context_data(**kwargs)
30
-
30
+
31
31
  context.update({
32
32
  'page_title': 'Create Payment',
33
33
  'page_subtitle': 'Process a payment through the universal payment system',
34
34
  'form_mode': 'create',
35
35
  })
36
-
36
+
37
37
  return context
38
38
 
39
39
 
@@ -44,33 +44,34 @@ class PaymentDetailView(AdminTemplateViewMixin, LoginRequiredMixin, DetailView):
44
44
 
45
45
  Displays detailed information about a specific payment.
46
46
  """
47
-
47
+
48
48
  model = UniversalPayment
49
49
  template_name = 'payments/payment_detail.html'
50
50
  context_object_name = 'payment'
51
-
51
+
52
52
  def get_queryset(self):
53
53
  """Optimized queryset with related objects."""
54
54
  return UniversalPayment.objects.select_related('user', 'currency', 'network')
55
-
55
+
56
56
  def get_context_data(self, **kwargs):
57
57
  """Add detail context data."""
58
58
  context = super().get_context_data(**kwargs)
59
-
59
+
60
60
  payment = self.get_object()
61
-
61
+
62
62
  # Force refresh from database to get latest data
63
63
  payment.refresh_from_db()
64
-
64
+
65
65
  context.update({
66
66
  'payment': payment,
67
67
  'page_title': f'Payment {payment.internal_payment_id or payment.id}',
68
- 'page_subtitle': f'Payment details and transaction history',
68
+ 'page_subtitle': 'Payment details and transaction history',
69
69
  'show_actions': True,
70
70
  'can_cancel': payment.status in ['pending', 'confirming'],
71
71
  'can_refund': payment.status == 'completed',
72
+ 'payment_status_url': payment.get_payment_status_url(),
72
73
  })
73
-
74
+
74
75
  return context
75
76
 
76
77
 
@@ -81,18 +82,18 @@ class PaymentListView(AdminTemplateViewMixin, LoginRequiredMixin, TemplateView):
81
82
 
82
83
  Displays paginated list of payments with filtering options.
83
84
  """
84
-
85
+
85
86
  template_name = 'payments/payment_list.html'
86
-
87
+
87
88
  def get_context_data(self, **kwargs):
88
89
  """Add list context data."""
89
90
  context = super().get_context_data(**kwargs)
90
-
91
+
91
92
  context.update({
92
93
  'page_title': 'Payment List',
93
94
  'page_subtitle': 'Manage and monitor all payments',
94
95
  'show_filters': True,
95
96
  'show_bulk_actions': True,
96
97
  })
97
-
98
+
98
99
  return context
@@ -5,6 +5,7 @@ Simplified payment system focused on NowPayments with extensible architecture.
5
5
  """
6
6
 
7
7
  from django.apps import AppConfig
8
+
8
9
  from django_cfg.modules.django_logging import get_logger
9
10
 
10
11
  logger = get_logger("payments")
@@ -12,22 +13,22 @@ logger = get_logger("payments")
12
13
 
13
14
  class PaymentsConfig(AppConfig):
14
15
  """Payment system app configuration."""
15
-
16
+
16
17
  default_auto_field = 'django.db.models.BigAutoField'
17
18
  name = 'django_cfg.apps.payments'
18
19
  verbose_name = 'Universal Payment System v2.0'
19
-
20
+
20
21
  def ready(self):
21
22
  """Initialize payment system when Django starts."""
22
23
  logger.info("Initializing Universal Payment System v2.0")
23
-
24
+
24
25
  # Import signals to register them
25
26
  try:
26
27
  from . import signals # noqa: F401
27
28
  logger.info("Payment signals registered successfully")
28
29
  except ImportError as e:
29
30
  logger.warning(f"Failed to import payment signals: {e}")
30
-
31
+
31
32
  # Initialize provider registry
32
33
  try:
33
34
  from .services.providers.registry import get_provider_registry
@@ -35,7 +36,7 @@ class PaymentsConfig(AppConfig):
35
36
  logger.info(f"Provider registry initialized with {len(registry.get_available_providers())} providers")
36
37
  except Exception as e:
37
38
  logger.error(f"Failed to initialize provider registry: {e}")
38
-
39
+
39
40
  # Initialize cache services
40
41
  try:
41
42
  from .services.cache import get_cache_service
@@ -43,5 +44,5 @@ class PaymentsConfig(AppConfig):
43
44
  logger.info("Cache service initialized successfully")
44
45
  except Exception as e:
45
46
  logger.warning(f"Cache service initialization failed: {e}")
46
-
47
+
47
48
  logger.info("Universal Payment System v2.0 ready")
@@ -10,17 +10,17 @@ Provides unified configuration through BaseCfgAutoModule:
10
10
  from .django_cfg_integration import (
11
11
  PaymentsConfigManager,
12
12
  PaymentsConfigMixin,
13
+ get_config_summary,
13
14
  get_payments_config,
14
- is_payments_enabled,
15
15
  is_payments_configured,
16
- get_config_summary,
16
+ is_payments_enabled,
17
17
  reset_payments_config_cache,
18
18
  )
19
19
 
20
20
  # Configuration helpers
21
21
  from .helpers import (
22
- MiddlewareConfigHelper,
23
22
  CacheConfigHelper,
23
+ MiddlewareConfigHelper,
24
24
  RedisConfigHelper,
25
25
  )
26
26
 
@@ -33,7 +33,7 @@ __all__ = [
33
33
  'is_payments_configured',
34
34
  'get_config_summary',
35
35
  'reset_payments_config_cache',
36
-
36
+
37
37
  # Configuration helpers
38
38
  'MiddlewareConfigHelper',
39
39
  'CacheConfigHelper',