django-cfg 1.4.21__py3-none-any.whl → 1.4.24__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 +36 -7
  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.24.dist-info}/METADATA +1 -1
  770. django_cfg-1.4.24.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.24.dist-info}/WHEEL +0 -0
  792. {django_cfg-1.4.21.dist-info → django_cfg-1.4.24.dist-info}/entry_points.txt +0 -0
  793. {django_cfg-1.4.21.dist-info → django_cfg-1.4.24.dist-info}/licenses/LICENSE +0 -0
@@ -3,15 +3,15 @@ Create Token Command for Django Config Toolkit
3
3
  Generate API tokens and authentication tokens.
4
4
  """
5
5
 
6
- import os
7
6
  import secrets
8
7
  import string
8
+ from datetime import datetime, timedelta
9
9
  from pathlib import Path
10
- from django.core.management.base import BaseCommand
11
- from django.contrib.auth import get_user_model
12
- from django.conf import settings
10
+
13
11
  import questionary
14
- from datetime import datetime, timedelta
12
+ from django.contrib.auth import get_user_model
13
+ from django.core.management.base import BaseCommand
14
+
15
15
  from django_cfg.modules.django_logging import get_logger
16
16
 
17
17
  User = get_user_model()
@@ -98,26 +98,26 @@ class Command(BaseCommand):
98
98
  def create_api_token(self):
99
99
  """Create API token"""
100
100
  self.stdout.write(self.style.SUCCESS('šŸ”‘ Creating API Token...'))
101
-
101
+
102
102
  # Get token details
103
103
  token_name = questionary.text('Token name:').ask()
104
104
  if not token_name:
105
105
  self.stdout.write(self.style.ERROR('āŒ Token name is required'))
106
106
  return
107
-
107
+
108
108
  token_length = questionary.select(
109
109
  'Token length:',
110
110
  choices=['32', '64', '128', '256']
111
111
  ).ask()
112
-
112
+
113
113
  expires = questionary.select(
114
114
  'Token expiration:',
115
115
  choices=['Never', '30 days', '90 days', '1 year']
116
116
  ).ask()
117
-
117
+
118
118
  # Generate token
119
119
  token = self.generate_token(int(token_length))
120
-
120
+
121
121
  # Calculate expiration
122
122
  expiration_date = None
123
123
  if expires != 'Never':
@@ -127,10 +127,10 @@ class Command(BaseCommand):
127
127
  '1 year': 365
128
128
  }
129
129
  expiration_date = datetime.now() + timedelta(days=days_map[expires])
130
-
130
+
131
131
  # Save token (in a real app, you'd save to database)
132
132
  self.save_token_to_file('api_token', token, token_name, expiration_date)
133
-
133
+
134
134
  self.stdout.write(self.style.SUCCESS(f'āœ… API Token created: {token}'))
135
135
  self.stdout.write(f'šŸ“ Name: {token_name}')
136
136
  if expiration_date:
@@ -139,86 +139,86 @@ class Command(BaseCommand):
139
139
  def create_auth_token(self):
140
140
  """Create authentication token"""
141
141
  self.stdout.write(self.style.SUCCESS('šŸ” Creating Auth Token...'))
142
-
142
+
143
143
  # Get token details
144
144
  token_name = questionary.text('Token name:').ask()
145
145
  if not token_name:
146
146
  self.stdout.write(self.style.ERROR('āŒ Token name is required'))
147
147
  return
148
-
148
+
149
149
  token_length = questionary.select(
150
150
  'Token length:',
151
151
  choices=['32', '64', '128']
152
152
  ).ask()
153
-
153
+
154
154
  # Generate token
155
155
  token = self.generate_token(int(token_length))
156
-
156
+
157
157
  # Save token
158
158
  self.save_token_to_file('auth_token', token, token_name)
159
-
159
+
160
160
  self.stdout.write(self.style.SUCCESS(f'āœ… Auth Token created: {token}'))
161
161
  self.stdout.write(f'šŸ“ Name: {token_name}')
162
162
 
163
163
  def create_secret_key(self):
164
164
  """Create secret key"""
165
165
  self.stdout.write(self.style.SUCCESS('šŸ”’ Creating Secret Key...'))
166
-
166
+
167
167
  # Get key details
168
168
  key_name = questionary.text('Secret key name:').ask()
169
169
  if not key_name:
170
170
  self.stdout.write(self.style.ERROR('āŒ Key name is required'))
171
171
  return
172
-
172
+
173
173
  key_length = questionary.select(
174
174
  'Key length:',
175
175
  choices=['32', '64', '128', '256']
176
176
  ).ask()
177
-
177
+
178
178
  # Generate secret key
179
179
  secret_key = self.generate_secret_key(int(key_length))
180
-
180
+
181
181
  # Save key
182
182
  self.save_token_to_file('secret_key', secret_key, key_name)
183
-
183
+
184
184
  self.stdout.write(self.style.SUCCESS(f'āœ… Secret Key created: {secret_key}'))
185
185
  self.stdout.write(f'šŸ“ Name: {key_name}')
186
186
 
187
187
  def create_token_for_user_interactive(self):
188
188
  """Create token for user interactively"""
189
189
  self.stdout.write(self.style.SUCCESS('šŸ‘¤ Creating Token for User...'))
190
-
190
+
191
191
  # Get user
192
192
  username = questionary.text('Username:').ask()
193
193
  if not username:
194
194
  self.stdout.write(self.style.ERROR('āŒ Username is required'))
195
195
  return
196
-
196
+
197
197
  # Check if user exists
198
198
  try:
199
199
  user = User.objects.get(username=username)
200
200
  except User.DoesNotExist:
201
201
  self.stdout.write(self.style.ERROR(f'āŒ User {username} does not exist'))
202
202
  return
203
-
203
+
204
204
  # Get token type
205
205
  token_type = questionary.select(
206
206
  'Token type:',
207
207
  choices=['API Token', 'Auth Token', 'Secret Key']
208
208
  ).ask()
209
-
209
+
210
210
  # Get token length
211
211
  token_length = questionary.select(
212
212
  'Token length:',
213
213
  choices=['32', '64', '128']
214
214
  ).ask()
215
-
215
+
216
216
  # Get expiration
217
217
  expires = questionary.select(
218
218
  'Token expiration:',
219
219
  choices=['Never', '30 days', '90 days', '1 year']
220
220
  ).ask()
221
-
221
+
222
222
  # Create token
223
223
  self.create_token_for_user(
224
224
  username=username,
@@ -238,22 +238,22 @@ class Command(BaseCommand):
238
238
  except User.DoesNotExist:
239
239
  self.stdout.write(self.style.ERROR(f'āŒ User {username} does not exist'))
240
240
  return
241
-
241
+
242
242
  # Generate token
243
243
  if token_type == 'secret_key':
244
244
  token = self.generate_secret_key(length)
245
245
  else:
246
246
  token = self.generate_token(length)
247
-
247
+
248
248
  # Calculate expiration
249
249
  expiration_date = None
250
250
  if expires_days:
251
251
  expiration_date = datetime.now() + timedelta(days=expires_days)
252
-
252
+
253
253
  # Save token
254
254
  token_name = f"{username}_{token_type}_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
255
255
  self.save_token_to_file(token_type, token, token_name, expiration_date, user)
256
-
256
+
257
257
  self.stdout.write(self.style.SUCCESS(f'āœ… {token_type.title()} created for {username}'))
258
258
  self.stdout.write(f'šŸ”‘ Token: {token}')
259
259
  self.stdout.write(f'šŸ“ Name: {token_name}')
@@ -263,13 +263,13 @@ class Command(BaseCommand):
263
263
  def generate_django_secret_key(self):
264
264
  """Generate Django secret key"""
265
265
  self.stdout.write(self.style.SUCCESS('šŸ” Generating Django Secret Key...'))
266
-
266
+
267
267
  # Generate Django-compatible secret key
268
268
  secret_key = self.generate_django_secret()
269
-
269
+
270
270
  # Save to file
271
271
  self.save_token_to_file('django_secret', secret_key, 'django_secret_key')
272
-
272
+
273
273
  self.stdout.write(self.style.SUCCESS(f'āœ… Django Secret Key generated: {secret_key}'))
274
274
  self.stdout.write('šŸ’” Add this to your .env file as SECRET_KEY=...')
275
275
 
@@ -294,12 +294,12 @@ class Command(BaseCommand):
294
294
  # Create tokens directory
295
295
  tokens_dir = Path('tokens')
296
296
  tokens_dir.mkdir(exist_ok=True)
297
-
297
+
298
298
  # Create token file
299
299
  timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
300
300
  filename = f"{token_type}_{name}_{timestamp}.txt"
301
301
  filepath = tokens_dir / filename
302
-
302
+
303
303
  with open(filepath, 'w') as f:
304
304
  f.write(f"Token Type: {token_type}\n")
305
305
  f.write(f"Name: {name}\n")
@@ -309,20 +309,20 @@ class Command(BaseCommand):
309
309
  f.write(f"Expires: {expiration_date.strftime('%Y-%m-%d %H:%M:%S')}\n")
310
310
  if user:
311
311
  f.write(f"User: {user.username} ({user.email})\n")
312
- f.write(f"\n# Add to your configuration:\n")
312
+ f.write("\n# Add to your configuration:\n")
313
313
  f.write(f"# {token_type.upper()}_KEY={token}\n")
314
-
314
+
315
315
  self.stdout.write(f'šŸ’¾ Token saved to: {filepath}')
316
-
316
+
317
317
  # Also save to .env format
318
318
  env_filename = f"{token_type}_{name}_{timestamp}.env"
319
319
  env_filepath = tokens_dir / env_filename
320
-
320
+
321
321
  with open(env_filepath, 'w') as f:
322
322
  f.write(f"# {token_type.title()} - {name}\n")
323
323
  f.write(f"# Created: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
324
324
  if expiration_date:
325
325
  f.write(f"# Expires: {expiration_date.strftime('%Y-%m-%d %H:%M:%S')}\n")
326
326
  f.write(f"{token_type.upper()}_KEY={token}\n")
327
-
327
+
328
328
  self.stdout.write(f'šŸ’¾ Environment file saved to: {env_filepath}')
@@ -6,21 +6,20 @@ Useful for development and webhook configuration.
6
6
  """
7
7
 
8
8
  import re
9
+
10
+ from django.conf import settings
9
11
  from django.core.management.base import BaseCommand
10
12
  from django.urls import get_resolver
11
- from django.conf import settings
12
- from django_cfg.modules.django_logging import get_logger
13
-
13
+ from rich.align import Align
14
14
 
15
15
  # Rich imports for beautiful output
16
16
  from rich.console import Console
17
17
  from rich.panel import Panel
18
- from rich.text import Text
19
18
  from rich.table import Table
20
- from rich.align import Align
19
+ from rich.text import Text
21
20
 
22
21
  from django_cfg.core.state import get_current_config
23
-
22
+ from django_cfg.modules.django_logging import get_logger
24
23
 
25
24
  logger = get_logger('list_urls')
26
25
 
@@ -33,7 +32,7 @@ class Command(BaseCommand):
33
32
  is_destructive = False
34
33
 
35
34
  help = "Display all available URLs with Rich formatting"
36
-
35
+
37
36
  def __init__(self, *args, **kwargs):
38
37
  super().__init__(*args, **kwargs)
39
38
  self.console = Console()
@@ -81,10 +80,10 @@ class Command(BaseCommand):
81
80
  # Filter URLs
82
81
  if filter_str:
83
82
  urls = [url for url in urls if filter_str.lower() in url['pattern'].lower()]
84
-
83
+
85
84
  if webhook_only:
86
85
  urls = [url for url in urls if 'webhook' in url['pattern'].lower() or 'hook' in url['pattern'].lower()]
87
-
86
+
88
87
  if api_only:
89
88
  urls = [url for url in urls if '/api/' in url['pattern'] or url['pattern'].startswith('api/')]
90
89
 
@@ -99,14 +98,14 @@ class Command(BaseCommand):
99
98
  """Show beautiful header with Rich."""
100
99
  title = Text("Django URLs Overview", style="bold cyan")
101
100
  subtitle = Text("All available URLs in your project", style="dim")
102
-
101
+
103
102
  header_content = Align.center(
104
103
  Text.assemble(
105
104
  title, "\n",
106
105
  subtitle
107
106
  )
108
107
  )
109
-
108
+
110
109
  self.console.print()
111
110
  self.console.print(Panel(
112
111
  header_content,
@@ -127,7 +126,7 @@ class Command(BaseCommand):
127
126
  """Extract all URLs from Django URL configuration."""
128
127
  urls = []
129
128
  resolver = get_resolver()
130
-
129
+
131
130
  def extract_urls(url_patterns, prefix=''):
132
131
  for pattern in url_patterns:
133
132
  if hasattr(pattern, 'url_patterns'):
@@ -137,15 +136,15 @@ class Command(BaseCommand):
137
136
  else:
138
137
  # This is a regular URL pattern
139
138
  full_pattern = prefix + str(pattern.pattern)
140
-
139
+
141
140
  # Clean up the pattern
142
141
  clean_pattern = re.sub(r'\^|\$', '', full_pattern)
143
142
  clean_pattern = re.sub(r'\\/', '/', clean_pattern)
144
-
143
+
145
144
  # Get view info
146
145
  view_name = getattr(pattern, 'name', None)
147
146
  view_func = getattr(pattern, 'callback', None)
148
-
147
+
149
148
  if view_func:
150
149
  if hasattr(view_func, 'view_class'):
151
150
  # Class-based view
@@ -161,14 +160,14 @@ class Command(BaseCommand):
161
160
  else:
162
161
  view_info = 'Unknown'
163
162
  module = 'unknown'
164
-
163
+
165
164
  urls.append({
166
165
  'pattern': clean_pattern,
167
166
  'name': view_name,
168
167
  'view': view_info,
169
168
  'module': module
170
169
  })
171
-
170
+
172
171
  extract_urls(resolver.url_patterns)
173
172
  return urls
174
173
 
@@ -183,7 +182,7 @@ class Command(BaseCommand):
183
182
  table.add_column("URL Pattern", style="cyan", width=40)
184
183
  table.add_column("Name", style="white", width=20)
185
184
  table.add_column("View", style="green", width=25)
186
-
185
+
187
186
  if with_ngrok:
188
187
  table.add_column("Ngrok URL", style="magenta", width=40)
189
188
 
@@ -196,20 +195,20 @@ class Command(BaseCommand):
196
195
  pattern = url['pattern']
197
196
  name = url['name'] or '—'
198
197
  view = url['view']
199
-
198
+
200
199
  # Truncate long view names
201
200
  if len(view) > 23:
202
201
  view = view[:20] + "..."
203
-
202
+
204
203
  row = [pattern, name, view]
205
-
204
+
206
205
  if with_ngrok:
207
206
  if ngrok_url:
208
207
  full_ngrok_url = f"{ngrok_url.rstrip('/')}/{pattern.lstrip('/')}"
209
208
  row.append(full_ngrok_url)
210
209
  else:
211
210
  row.append("—")
212
-
211
+
213
212
  table.add_row(*row)
214
213
 
215
214
  if len(urls) > 50:
@@ -221,47 +220,47 @@ class Command(BaseCommand):
221
220
  info_table = Table(show_header=False, box=None)
222
221
  info_table.add_column("Info", style="cyan")
223
222
  info_table.add_column("Value", style="white")
224
-
223
+
225
224
  info_table.add_row("🌐 Base URL:", base_url)
226
225
  if with_ngrok and ngrok_url:
227
226
  info_table.add_row("šŸ”— Ngrok URL:", ngrok_url)
228
-
227
+
229
228
  self.console.print()
230
229
  self.console.print(info_table)
231
230
 
232
231
  def show_webhook_info(self):
233
232
  """Show webhook-specific information using reverse."""
234
233
  self.console.print()
235
-
234
+
236
235
  webhook_table = Table(title="šŸ”” Webhook Configuration", show_header=True, header_style="bold yellow")
237
236
  webhook_table.add_column("Service", style="white", width=25)
238
237
  webhook_table.add_column("Local URL", style="cyan", width=60)
239
238
  webhook_table.add_column("Ngrok URL", style="magenta", width=60)
240
-
239
+
241
240
  base_url = self.get_base_url()
242
241
  ngrok_url = self.get_ngrok_url()
243
-
242
+
244
243
  # Get webhook URLs using reverse
245
244
  try:
246
245
  from django.urls import reverse
247
-
246
+
248
247
  # Common webhook endpoints with their URL names
249
248
  webhooks = [
250
249
  ("Twilio Message Status", "cfg_accounts:webhook-message-status"),
251
250
  ("Twilio Verification", "cfg_accounts:webhook-verification-status"),
252
251
  ]
253
-
252
+
254
253
  for service, url_name in webhooks:
255
254
  try:
256
255
  # Get the reversed URL path
257
256
  url_path = reverse(url_name)
258
-
257
+
259
258
  # Build full URLs
260
259
  local_full = f"{base_url.rstrip('/')}{url_path}"
261
260
  ngrok_full = f"{ngrok_url.rstrip('/')}{url_path}" if ngrok_url else "—"
262
-
261
+
263
262
  webhook_table.add_row(service, local_full, ngrok_full)
264
-
263
+
265
264
  except Exception as e:
266
265
  # Fallback if reverse fails
267
266
  self.console.print(f"[yellow]āš ļø Could not reverse URL for {service}: {e}[/yellow]")
@@ -269,28 +268,28 @@ class Command(BaseCommand):
269
268
  local_full = f"{base_url.rstrip('/')}{fallback_path}"
270
269
  ngrok_full = f"{ngrok_url.rstrip('/')}{fallback_path}" if ngrok_url else "—"
271
270
  webhook_table.add_row(service, local_full, ngrok_full)
272
-
271
+
273
272
  except ImportError:
274
273
  # Fallback if Django is not available
275
274
  webhooks = [
276
275
  ("Twilio Message Status", "/api/accounts/webhook/message-status/"),
277
276
  ("Twilio Verification", "/api/accounts/webhook/verification-status/"),
278
277
  ]
279
-
278
+
280
279
  for service, endpoint in webhooks:
281
280
  local_full = f"{base_url.rstrip('/')}{endpoint}"
282
281
  ngrok_full = f"{ngrok_url.rstrip('/')}{endpoint}" if ngrok_url else "—"
283
282
  webhook_table.add_row(service, local_full, ngrok_full)
284
-
283
+
285
284
  self.console.print(webhook_table)
286
-
285
+
287
286
  # Show tips
288
287
  tips = [
289
288
  "šŸ’” Use ngrok URLs for webhook configuration in production services",
290
289
  "šŸ”’ Always validate webhook signatures in production",
291
290
  "šŸ“ Test webhooks using the test_twilio management command",
292
291
  ]
293
-
292
+
294
293
  for tip in tips:
295
294
  self.console.print(f"[dim]{tip}[/dim]")
296
295
 
@@ -310,4 +309,4 @@ class Command(BaseCommand):
310
309
  """Get ngrok URL if available."""
311
310
  if self.config:
312
311
  return self.config.get_ngrok_url()
313
- return None
312
+ return None
@@ -3,14 +3,12 @@ Simple Migration Command for Django Config Toolkit
3
3
  Migrate all databases based on django-cfg configuration.
4
4
  """
5
5
 
6
- from django.core.management.base import BaseCommand
7
- from django.core.management import call_command
8
6
  from django.apps import apps
9
- from django_cfg.modules.django_logging import get_logger
10
-
7
+ from django.core.management import call_command
8
+ from django.core.management.base import BaseCommand
11
9
 
12
10
  from django_cfg.core.state import get_current_config
13
-
11
+ from django_cfg.modules.django_logging import get_logger
14
12
 
15
13
  logger = get_logger('migrate_all')
16
14
 
@@ -24,8 +22,8 @@ class Command(BaseCommand):
24
22
 
25
23
  def add_arguments(self, parser):
26
24
  parser.add_argument(
27
- "--dry-run",
28
- action="store_true",
25
+ "--dry-run",
26
+ action="store_true",
29
27
  help="Show what would be migrated without executing"
30
28
  )
31
29
  parser.add_argument(
@@ -39,10 +37,10 @@ class Command(BaseCommand):
39
37
  logger.info("Starting migrate_all command")
40
38
  dry_run = options.get("dry_run", False)
41
39
  skip_makemigrations = options.get("skip_makemigrations", False)
42
-
40
+
43
41
  if dry_run:
44
42
  self.stdout.write(self.style.WARNING("šŸ” DRY RUN - No changes will be made"))
45
-
43
+
46
44
  self.stdout.write(self.style.SUCCESS("šŸš€ Migrating all databases..."))
47
45
 
48
46
  # Step 1: Create migrations if needed
@@ -66,7 +64,7 @@ class Command(BaseCommand):
66
64
  # Step 3: Migrate each database
67
65
  for db_name, db_config in config.databases.items():
68
66
  self.stdout.write(f"\nšŸ”„ Migrating database: {db_name}")
69
-
67
+
70
68
  if hasattr(db_config, 'apps') and db_config.apps:
71
69
  # Migrate specific apps for this database
72
70
  for app_path in db_config.apps:
@@ -84,7 +82,7 @@ class Command(BaseCommand):
84
82
  self.stdout.write(f" Would run: migrate {app_label} --database={db_name}")
85
83
  else:
86
84
  # Migrate all apps for this database (usually default)
87
- self.stdout.write(f" šŸ“¦ Migrating all apps...")
85
+ self.stdout.write(" šŸ“¦ Migrating all apps...")
88
86
  if not dry_run:
89
87
  try:
90
88
  call_command("migrate", database=db_name, verbosity=1)
@@ -96,7 +94,7 @@ class Command(BaseCommand):
96
94
  self.stdout.write(f" Would run: migrate --database={db_name}")
97
95
 
98
96
  # Step 4: Migrate constance if needed
99
- self.stdout.write(f"\nšŸ”§ Migrating constance...")
97
+ self.stdout.write("\nšŸ”§ Migrating constance...")
100
98
  if not dry_run:
101
99
  try:
102
100
  call_command("migrate", "constance", database="default", verbosity=1)
@@ -118,7 +116,7 @@ class Command(BaseCommand):
118
116
  return app_config.label
119
117
  except LookupError:
120
118
  pass
121
-
119
+
122
120
  # Fallback: extract last part of the path as potential app_label
123
121
  potential_label = app_path.split('.')[-1]
124
122
  try:
@@ -126,8 +124,8 @@ class Command(BaseCommand):
126
124
  return app_config.label
127
125
  except LookupError:
128
126
  pass
129
-
127
+
130
128
  return app_path
131
-
129
+
132
130
  except Exception:
133
131
  return app_path
@@ -3,16 +3,16 @@ Smart Migration Command for Django Config Toolkit
3
3
  Simple and reliable migration for all databases.
4
4
  """
5
5
 
6
- import os
7
6
  from pathlib import Path
8
- from django.core.management.base import BaseCommand
9
- from django.core.management import call_command
7
+
8
+ import questionary
10
9
  from django.apps import apps
10
+ from django.conf import settings
11
+ from django.core.management import call_command
12
+ from django.core.management.base import BaseCommand
11
13
  from django.db import connections
12
14
  from django.db.migrations.recorder import MigrationRecorder
13
- from django.conf import settings
14
- import questionary
15
- from datetime import datetime
15
+
16
16
  from django_cfg.core.config import DEFAULT_APPS
17
17
  from django_cfg.modules.django_logging import get_logger
18
18
 
@@ -104,7 +104,7 @@ class Command(BaseCommand):
104
104
 
105
105
  # Run full migration
106
106
  self.run_full_migration()
107
-
107
+
108
108
  # Always migrate constance (required for django-cfg)
109
109
  self.migrate_constance_if_needed()
110
110
 
@@ -115,7 +115,7 @@ class Command(BaseCommand):
115
115
  try:
116
116
  # First try global makemigrations
117
117
  call_command("makemigrations", verbosity=1)
118
-
118
+
119
119
  # Then try for each app that has models but no migrations
120
120
  all_apps = self.get_all_installed_apps()
121
121
  for app in all_apps:
@@ -125,7 +125,7 @@ class Command(BaseCommand):
125
125
  call_command("makemigrations", app, verbosity=1)
126
126
  except Exception as e:
127
127
  self.stdout.write(self.style.WARNING(f" āš ļø Could not create migrations for {app}: {e}"))
128
-
128
+
129
129
  self.stdout.write(self.style.SUCCESS("āœ… Migrations created"))
130
130
  except Exception as e:
131
131
  self.stdout.write(self.style.WARNING(f"āš ļø Warning creating migrations: {e}"))
@@ -177,7 +177,7 @@ class Command(BaseCommand):
177
177
  # Check if constance is in INSTALLED_APPS
178
178
  if 'constance' in settings.INSTALLED_APPS:
179
179
  self.stdout.write(self.style.SUCCESS("šŸ”§ Migrating constance (django-cfg requirement)..."))
180
-
180
+
181
181
  # Try to migrate constance on default database
182
182
  try:
183
183
  call_command("migrate", "constance", database="default", verbosity=1)
@@ -186,7 +186,7 @@ class Command(BaseCommand):
186
186
  self._raise_system_exit(f"Constance migration failed: {e}")
187
187
  else:
188
188
  self.stdout.write(self.style.WARNING("āš ļø Constance not found in INSTALLED_APPS"))
189
-
189
+
190
190
  except Exception as e:
191
191
  self._raise_system_exit(f"Could not migrate constance: {e}")
192
192
 
@@ -225,7 +225,7 @@ class Command(BaseCommand):
225
225
  try:
226
226
  with connections[db_name].cursor() as cursor:
227
227
  cursor.execute("SELECT 1")
228
- self.stdout.write(f" āœ… Connection: OK")
228
+ self.stdout.write(" āœ… Connection: OK")
229
229
  except Exception as e:
230
230
  self.stdout.write(f" āŒ Connection: FAILED - {e}")
231
231
 
@@ -234,7 +234,7 @@ class Command(BaseCommand):
234
234
  if apps:
235
235
  self.stdout.write(f' šŸ“¦ Apps: {", ".join(apps)}')
236
236
  else:
237
- self.stdout.write(f" šŸ“¦ Apps: None configured")
237
+ self.stdout.write(" šŸ“¦ Apps: None configured")
238
238
 
239
239
  def show_config_info(self):
240
240
  """Show Django configuration information"""
@@ -256,18 +256,18 @@ class Command(BaseCommand):
256
256
 
257
257
  # Multiple databases
258
258
  if len(databases) > 1:
259
- self.stdout.write(f"šŸ“Š Multiple Databases: Yes")
259
+ self.stdout.write("šŸ“Š Multiple Databases: Yes")
260
260
 
261
261
  # Show routing rules
262
262
  routing_rules = getattr(settings, "DATABASE_ROUTING_RULES", {})
263
263
  if routing_rules:
264
- self.stdout.write(f" šŸ”€ Routing Rules:")
264
+ self.stdout.write(" šŸ”€ Routing Rules:")
265
265
  for app, db in routing_rules.items():
266
266
  self.stdout.write(f" - {app} → {db}")
267
267
  else:
268
- self.stdout.write(f" šŸ”€ Routing Rules: None configured")
268
+ self.stdout.write(" šŸ”€ Routing Rules: None configured")
269
269
  else:
270
- self.stdout.write(f"šŸ“Š Multiple Databases: No")
270
+ self.stdout.write("šŸ“Š Multiple Databases: No")
271
271
 
272
272
  # Other settings
273
273
  self.stdout.write(f'šŸ”‘ Secret Key: {"*" * 20}...')