django-cfg 1.4.20__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 (794) 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/migrations/0003_alter_documentarchive_archive_type.py +29 -0
  126. django_cfg/apps/knowbase/mixins/__init__.py +4 -4
  127. django_cfg/apps/knowbase/mixins/config/__init__.py +1 -1
  128. django_cfg/apps/knowbase/mixins/config/meta_config.py +1 -1
  129. django_cfg/apps/knowbase/mixins/config.py +19 -18
  130. django_cfg/apps/knowbase/mixins/creator.py +7 -7
  131. django_cfg/apps/knowbase/mixins/examples/vehicle_model_example.py +29 -28
  132. django_cfg/apps/knowbase/mixins/external_data_mixin.py +6 -5
  133. django_cfg/apps/knowbase/mixins/generators/__init__.py +1 -1
  134. django_cfg/apps/knowbase/mixins/generators/content_generator.py +2 -2
  135. django_cfg/apps/knowbase/mixins/service.py +47 -45
  136. django_cfg/apps/knowbase/models/__init__.py +7 -7
  137. django_cfg/apps/knowbase/models/archive.py +72 -72
  138. django_cfg/apps/knowbase/models/base.py +12 -13
  139. django_cfg/apps/knowbase/models/chat.py +20 -19
  140. django_cfg/apps/knowbase/models/document.py +37 -35
  141. django_cfg/apps/knowbase/models/external_data.py +41 -42
  142. django_cfg/apps/knowbase/serializers/__init__.py +7 -7
  143. django_cfg/apps/knowbase/serializers/archive_serializers.py +50 -42
  144. django_cfg/apps/knowbase/serializers/chat_serializers.py +16 -15
  145. django_cfg/apps/knowbase/serializers/document_serializers.py +13 -12
  146. django_cfg/apps/knowbase/serializers/external_data_serializers.py +31 -31
  147. django_cfg/apps/knowbase/serializers/public_serializers.py +10 -9
  148. django_cfg/apps/knowbase/services/__init__.py +7 -7
  149. django_cfg/apps/knowbase/services/archive/__init__.py +7 -7
  150. django_cfg/apps/knowbase/services/archive/analyzers/__init__.py +1 -1
  151. django_cfg/apps/knowbase/services/archive/analyzers/tag_generator.py +1 -1
  152. django_cfg/apps/knowbase/services/archive/archive_service.py +109 -112
  153. django_cfg/apps/knowbase/services/archive/chunking/__init__.py +3 -3
  154. django_cfg/apps/knowbase/services/archive/chunking/base.py +1 -0
  155. django_cfg/apps/knowbase/services/archive/chunking/json_chunker.py +4 -3
  156. django_cfg/apps/knowbase/services/archive/chunking/markdown_chunker.py +5 -4
  157. django_cfg/apps/knowbase/services/archive/chunking/python_chunker.py +6 -5
  158. django_cfg/apps/knowbase/services/archive/chunking/text_chunker.py +4 -3
  159. django_cfg/apps/knowbase/services/archive/chunking_service.py +3 -7
  160. django_cfg/apps/knowbase/services/archive/context/__init__.py +1 -1
  161. django_cfg/apps/knowbase/services/archive/context/builders.py +2 -1
  162. django_cfg/apps/knowbase/services/archive/context/models.py +2 -1
  163. django_cfg/apps/knowbase/services/archive/exceptions.py +5 -5
  164. django_cfg/apps/knowbase/services/archive/extraction_service.py +111 -110
  165. django_cfg/apps/knowbase/services/archive/vectorization_service.py +80 -77
  166. django_cfg/apps/knowbase/services/base.py +11 -9
  167. django_cfg/apps/knowbase/services/chat_service.py +40 -39
  168. django_cfg/apps/knowbase/services/document_service.py +28 -27
  169. django_cfg/apps/knowbase/services/embedding/__init__.py +9 -9
  170. django_cfg/apps/knowbase/services/embedding/async_processor.py +38 -40
  171. django_cfg/apps/knowbase/services/embedding/batch_processor.py +45 -42
  172. django_cfg/apps/knowbase/services/embedding/batch_result.py +7 -6
  173. django_cfg/apps/knowbase/services/embedding/models.py +52 -51
  174. django_cfg/apps/knowbase/services/embedding/processors.py +24 -23
  175. django_cfg/apps/knowbase/services/embedding/utils.py +17 -17
  176. django_cfg/apps/knowbase/services/prompt_builder.py +24 -23
  177. django_cfg/apps/knowbase/services/search_service.py +52 -49
  178. django_cfg/apps/knowbase/signals/__init__.py +2 -5
  179. django_cfg/apps/knowbase/signals/archive_signals.py +35 -34
  180. django_cfg/apps/knowbase/signals/chat_signals.py +6 -5
  181. django_cfg/apps/knowbase/signals/document_signals.py +22 -22
  182. django_cfg/apps/knowbase/signals/external_data_signals.py +22 -22
  183. django_cfg/apps/knowbase/tasks/__init__.py +6 -7
  184. django_cfg/apps/knowbase/tasks/archive_tasks.py +41 -41
  185. django_cfg/apps/knowbase/tasks/document_processing.py +49 -44
  186. django_cfg/apps/knowbase/tasks/external_data_tasks.py +46 -44
  187. django_cfg/apps/knowbase/tasks/maintenance.py +26 -24
  188. django_cfg/apps/knowbase/urls.py +3 -2
  189. django_cfg/apps/knowbase/urls_admin.py +6 -3
  190. django_cfg/apps/knowbase/urls_system.py +4 -5
  191. django_cfg/apps/knowbase/utils/chunk_settings.py +22 -20
  192. django_cfg/apps/knowbase/utils/text_processing.py +76 -75
  193. django_cfg/apps/knowbase/utils/validation.py +9 -9
  194. django_cfg/apps/knowbase/views/__init__.py +5 -5
  195. django_cfg/apps/knowbase/views/archive_views.py +90 -87
  196. django_cfg/apps/knowbase/views/base.py +9 -12
  197. django_cfg/apps/knowbase/views/chat_views.py +35 -32
  198. django_cfg/apps/knowbase/views/document_views.py +27 -28
  199. django_cfg/apps/knowbase/views/public_views.py +19 -19
  200. django_cfg/apps/leads/admin/leads_admin.py +41 -45
  201. django_cfg/apps/leads/admin/resources.py +14 -14
  202. django_cfg/apps/leads/admin.py +7 -9
  203. django_cfg/apps/leads/apps.py +1 -1
  204. django_cfg/apps/leads/models.py +17 -17
  205. django_cfg/apps/leads/serializers.py +5 -4
  206. django_cfg/apps/leads/signals.py +7 -7
  207. django_cfg/apps/leads/tests.py +47 -47
  208. django_cfg/apps/leads/urls.py +2 -2
  209. django_cfg/apps/leads/views.py +11 -11
  210. django_cfg/apps/maintenance/__init__.py +3 -3
  211. django_cfg/apps/maintenance/admin/__init__.py +1 -1
  212. django_cfg/apps/maintenance/admin/api_key_admin.py +36 -36
  213. django_cfg/apps/maintenance/admin/log_admin.py +35 -37
  214. django_cfg/apps/maintenance/admin/scheduled_admin.py +47 -51
  215. django_cfg/apps/maintenance/admin/site_admin.py +49 -52
  216. django_cfg/apps/maintenance/apps.py +2 -2
  217. django_cfg/apps/maintenance/management/commands/maintenance.py +53 -52
  218. django_cfg/apps/maintenance/management/commands/process_scheduled_maintenance.py +44 -44
  219. django_cfg/apps/maintenance/management/commands/sync_cloudflare.py +32 -32
  220. django_cfg/apps/maintenance/managers/__init__.py +1 -1
  221. django_cfg/apps/maintenance/managers/cloudflare_site_manager.py +39 -38
  222. django_cfg/apps/maintenance/managers/maintenance_log_manager.py +32 -31
  223. django_cfg/apps/maintenance/migrations/0001_initial.py +1 -0
  224. django_cfg/apps/maintenance/models/__init__.py +2 -2
  225. django_cfg/apps/maintenance/models/cloudflare_api_key.py +15 -15
  226. django_cfg/apps/maintenance/models/cloudflare_site.py +24 -22
  227. django_cfg/apps/maintenance/models/maintenance_log.py +15 -14
  228. django_cfg/apps/maintenance/models/scheduled_maintenance.py +53 -52
  229. django_cfg/apps/maintenance/services/__init__.py +3 -3
  230. django_cfg/apps/maintenance/services/bulk_operations_service.py +68 -68
  231. django_cfg/apps/maintenance/services/maintenance_service.py +59 -58
  232. django_cfg/apps/maintenance/services/scheduled_maintenance_service.py +52 -52
  233. django_cfg/apps/maintenance/services/site_sync_service.py +64 -65
  234. django_cfg/apps/maintenance/utils/__init__.py +1 -1
  235. django_cfg/apps/maintenance/utils/retry_utils.py +17 -17
  236. django_cfg/apps/newsletter/admin/__init__.py +12 -16
  237. django_cfg/apps/newsletter/admin/newsletter_admin.py +90 -87
  238. django_cfg/apps/newsletter/admin/resources.py +29 -29
  239. django_cfg/apps/newsletter/admin.py +39 -32
  240. django_cfg/apps/newsletter/management/commands/test_newsletter.py +3 -3
  241. django_cfg/apps/newsletter/managers/__init__.py +1 -1
  242. django_cfg/apps/newsletter/migrations/0001_initial.py +2 -1
  243. django_cfg/apps/newsletter/models.py +34 -33
  244. django_cfg/apps/newsletter/serializers.py +13 -13
  245. django_cfg/apps/newsletter/services/email_service.py +42 -40
  246. django_cfg/apps/newsletter/signals.py +4 -3
  247. django_cfg/apps/newsletter/urls.py +7 -7
  248. django_cfg/apps/newsletter/views/__init__.py +14 -19
  249. django_cfg/apps/newsletter/views/campaigns.py +19 -19
  250. django_cfg/apps/newsletter/views/emails.py +20 -20
  251. django_cfg/apps/newsletter/views/newsletters.py +5 -5
  252. django_cfg/apps/newsletter/views/subscriptions.py +24 -24
  253. django_cfg/apps/newsletter/views/tracking.py +6 -5
  254. django_cfg/apps/payments/admin/__init__.py +6 -5
  255. django_cfg/apps/payments/admin/api_keys_admin.py +43 -45
  256. django_cfg/apps/payments/admin/balance_admin.py +41 -47
  257. django_cfg/apps/payments/admin/currencies_admin.py +60 -62
  258. django_cfg/apps/payments/admin/endpoint_groups_admin.py +14 -28
  259. django_cfg/apps/payments/admin/filters.py +59 -59
  260. django_cfg/apps/payments/admin/networks_admin.py +36 -50
  261. django_cfg/apps/payments/admin/payments_admin.py +47 -49
  262. django_cfg/apps/payments/admin/subscriptions_admin.py +30 -32
  263. django_cfg/apps/payments/admin/tariffs_admin.py +37 -42
  264. django_cfg/apps/payments/admin_interface/serializers/__init__.py +12 -13
  265. django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py +28 -27
  266. django_cfg/apps/payments/admin_interface/serializers/webhook_serializers.py +4 -5
  267. django_cfg/apps/payments/admin_interface/templates/payments/base.html +407 -3
  268. django_cfg/apps/payments/admin_interface/templates/payments/components/ngrok_status.html +13 -13
  269. django_cfg/apps/payments/admin_interface/templates/payments/payment_dashboard.html +5 -1
  270. django_cfg/apps/payments/admin_interface/templates/payments/payment_detail.html +105 -49
  271. django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +4 -1
  272. django_cfg/apps/payments/admin_interface/templates/payments/payment_list.html +16 -8
  273. django_cfg/apps/payments/admin_interface/templates/payments/webhook_dashboard.html +16 -8
  274. django_cfg/apps/payments/admin_interface/views/__init__.py +8 -9
  275. django_cfg/apps/payments/admin_interface/views/api/__init__.py +3 -3
  276. django_cfg/apps/payments/admin_interface/views/api/payments.py +52 -54
  277. django_cfg/apps/payments/admin_interface/views/api/stats.py +33 -30
  278. django_cfg/apps/payments/admin_interface/views/api/users.py +10 -11
  279. django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +46 -51
  280. django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +9 -9
  281. django_cfg/apps/payments/admin_interface/views/base.py +17 -19
  282. django_cfg/apps/payments/admin_interface/views/dashboard.py +10 -10
  283. django_cfg/apps/payments/admin_interface/views/forms.py +21 -20
  284. django_cfg/apps/payments/apps.py +7 -6
  285. django_cfg/apps/payments/config/__init__.py +4 -4
  286. django_cfg/apps/payments/config/django_cfg_integration.py +22 -21
  287. django_cfg/apps/payments/config/helpers.py +14 -12
  288. django_cfg/apps/payments/management/commands/cleanup_expired_data.py +85 -86
  289. django_cfg/apps/payments/management/commands/currency_stats.py +84 -87
  290. django_cfg/apps/payments/management/commands/manage_currencies.py +59 -58
  291. django_cfg/apps/payments/management/commands/manage_providers.py +103 -105
  292. django_cfg/apps/payments/management/commands/process_pending_payments.py +67 -70
  293. django_cfg/apps/payments/management/commands/test_providers.py +83 -84
  294. django_cfg/apps/payments/middleware/__init__.py +1 -1
  295. django_cfg/apps/payments/middleware/api_access.py +77 -78
  296. django_cfg/apps/payments/middleware/rate_limiting.py +72 -72
  297. django_cfg/apps/payments/middleware/usage_tracking.py +66 -64
  298. django_cfg/apps/payments/migrations/0001_initial.py +2 -1
  299. django_cfg/apps/payments/models/__init__.py +11 -12
  300. django_cfg/apps/payments/models/api_keys.py +29 -27
  301. django_cfg/apps/payments/models/balance.py +38 -38
  302. django_cfg/apps/payments/models/base.py +12 -11
  303. django_cfg/apps/payments/models/currencies.py +53 -52
  304. django_cfg/apps/payments/models/managers/__init__.py +13 -14
  305. django_cfg/apps/payments/models/managers/api_key_managers.py +55 -53
  306. django_cfg/apps/payments/models/managers/balance_managers.py +98 -97
  307. django_cfg/apps/payments/models/managers/currency_managers.py +70 -69
  308. django_cfg/apps/payments/models/managers/payment_managers.py +113 -111
  309. django_cfg/apps/payments/models/managers/subscription_managers.py +99 -97
  310. django_cfg/apps/payments/models/payments.py +167 -73
  311. django_cfg/apps/payments/models/subscriptions.py +56 -54
  312. django_cfg/apps/payments/models/tariffs.py +35 -34
  313. django_cfg/apps/payments/services/__init__.py +33 -36
  314. django_cfg/apps/payments/services/cache/__init__.py +7 -1
  315. django_cfg/apps/payments/services/cache_service/__init__.py +22 -20
  316. django_cfg/apps/payments/services/cache_service/api_key_cache.py +6 -5
  317. django_cfg/apps/payments/services/cache_service/interfaces.py +5 -5
  318. django_cfg/apps/payments/services/cache_service/keys.py +8 -8
  319. django_cfg/apps/payments/services/cache_service/rate_limit_cache.py +8 -7
  320. django_cfg/apps/payments/services/cache_service/simple_cache.py +17 -14
  321. django_cfg/apps/payments/services/core/__init__.py +3 -3
  322. django_cfg/apps/payments/services/core/balance_service.py +69 -65
  323. django_cfg/apps/payments/services/core/base.py +25 -22
  324. django_cfg/apps/payments/services/core/currency/__init__.py +1 -1
  325. django_cfg/apps/payments/services/core/currency/currency_converter.py +2 -0
  326. django_cfg/apps/payments/services/core/currency_service.py +68 -66
  327. django_cfg/apps/payments/services/core/operations/__init__.py +1 -1
  328. django_cfg/apps/payments/services/core/operations/payment_canceller.py +2 -1
  329. django_cfg/apps/payments/services/core/operations/payment_creator.py +2 -1
  330. django_cfg/apps/payments/services/core/operations/status_checker.py +2 -1
  331. django_cfg/apps/payments/services/core/payment_service.py +10 -7
  332. django_cfg/apps/payments/services/core/providers/provider_client.py +2 -2
  333. django_cfg/apps/payments/services/core/subscription_service.py +77 -74
  334. django_cfg/apps/payments/services/core/utils/data_converter.py +1 -0
  335. django_cfg/apps/payments/services/core/utils/statistics_calculator.py +1 -0
  336. django_cfg/apps/payments/services/core/webhook_service.py +67 -63
  337. django_cfg/apps/payments/services/integrations/__init__.py +3 -3
  338. django_cfg/apps/payments/services/integrations/ngrok_service.py +1 -0
  339. django_cfg/apps/payments/services/integrations/providers_config.py +3 -2
  340. django_cfg/apps/payments/services/providers/base.py +59 -57
  341. django_cfg/apps/payments/services/providers/models/__init__.py +7 -14
  342. django_cfg/apps/payments/services/providers/models/base.py +15 -15
  343. django_cfg/apps/payments/services/providers/models/providers.py +13 -12
  344. django_cfg/apps/payments/services/providers/models/universal.py +6 -5
  345. django_cfg/apps/payments/services/providers/nowpayments/__init__.py +4 -4
  346. django_cfg/apps/payments/services/providers/nowpayments/config.py +9 -8
  347. django_cfg/apps/payments/services/providers/nowpayments/models.py +15 -15
  348. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/__init__.py +2 -2
  349. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/patterns.py +26 -26
  350. django_cfg/apps/payments/services/providers/nowpayments/parsers/parser.py +3 -2
  351. django_cfg/apps/payments/services/providers/nowpayments/provider.py +95 -99
  352. django_cfg/apps/payments/services/providers/nowpayments/sync.py +41 -40
  353. django_cfg/apps/payments/services/providers/registry.py +65 -63
  354. django_cfg/apps/payments/services/providers/sync_service.py +50 -50
  355. django_cfg/apps/payments/services/types/__init__.py +21 -22
  356. django_cfg/apps/payments/services/types/data.py +14 -13
  357. django_cfg/apps/payments/services/types/requests.py +21 -22
  358. django_cfg/apps/payments/services/types/responses.py +16 -15
  359. django_cfg/apps/payments/services/types/webhooks.py +30 -30
  360. django_cfg/apps/payments/signals/__init__.py +4 -6
  361. django_cfg/apps/payments/signals/api_key_signals.py +36 -35
  362. django_cfg/apps/payments/signals/balance_signals.py +28 -26
  363. django_cfg/apps/payments/signals/payment_signals.py +29 -28
  364. django_cfg/apps/payments/signals/subscription_signals.py +39 -38
  365. django_cfg/apps/payments/static/payments/js/ngrok-status.js +12 -8
  366. django_cfg/apps/payments/static/payments/js/payment-detail.js +1 -1
  367. django_cfg/apps/payments/static/payments/js/payment-form.js +3 -3
  368. django_cfg/apps/payments/static/payments/js/payment-list.js +13 -6
  369. django_cfg/apps/payments/static/payments/js/webhook-dashboard-mjs.js +241 -0
  370. django_cfg/apps/payments/tasks/__init__.py +11 -12
  371. django_cfg/apps/payments/tasks/types.py +10 -9
  372. django_cfg/apps/payments/tasks/usage_tracking.py +44 -46
  373. django_cfg/apps/payments/templatetags/payment_tags.py +27 -27
  374. django_cfg/apps/payments/urls.py +31 -14
  375. django_cfg/apps/payments/urls_admin.py +10 -10
  376. django_cfg/apps/payments/views/api/__init__.py +32 -33
  377. django_cfg/apps/payments/views/api/api_keys.py +62 -62
  378. django_cfg/apps/payments/views/api/balances.py +63 -64
  379. django_cfg/apps/payments/views/api/base.py +52 -52
  380. django_cfg/apps/payments/views/api/currencies.py +75 -63
  381. django_cfg/apps/payments/views/api/payments.py +73 -74
  382. django_cfg/apps/payments/views/api/subscriptions.py +71 -72
  383. django_cfg/apps/payments/views/api/webhooks.py +85 -84
  384. django_cfg/apps/payments/views/overview/__init__.py +7 -7
  385. django_cfg/apps/payments/views/overview/serializers.py +13 -14
  386. django_cfg/apps/payments/views/overview/services.py +66 -67
  387. django_cfg/apps/payments/views/overview/urls.py +2 -1
  388. django_cfg/apps/payments/views/overview/views.py +31 -31
  389. django_cfg/apps/payments/views/serializers/__init__.py +35 -36
  390. django_cfg/apps/payments/views/serializers/api_keys.py +59 -57
  391. django_cfg/apps/payments/views/serializers/balances.py +34 -33
  392. django_cfg/apps/payments/views/serializers/currencies.py +36 -34
  393. django_cfg/apps/payments/views/serializers/payments.py +48 -47
  394. django_cfg/apps/payments/views/serializers/subscriptions.py +50 -45
  395. django_cfg/apps/payments/views/serializers/webhooks.py +17 -16
  396. django_cfg/apps/support/admin/__init__.py +3 -3
  397. django_cfg/apps/support/admin/resources.py +26 -26
  398. django_cfg/apps/support/admin/support_admin.py +44 -48
  399. django_cfg/apps/support/admin.py +16 -15
  400. django_cfg/apps/support/apps.py +1 -1
  401. django_cfg/apps/support/managers/message_manager.py +4 -4
  402. django_cfg/apps/support/managers/ticket_manager.py +13 -12
  403. django_cfg/apps/support/migrations/0001_initial.py +2 -1
  404. django_cfg/apps/support/models.py +3 -1
  405. django_cfg/apps/support/serializers.py +4 -2
  406. django_cfg/apps/support/signals.py +12 -10
  407. django_cfg/apps/support/urls.py +4 -3
  408. django_cfg/apps/support/utils/support_email_service.py +11 -9
  409. django_cfg/apps/support/views/__init__.py +3 -3
  410. django_cfg/apps/support/views/admin.py +9 -9
  411. django_cfg/apps/support/views/api.py +12 -13
  412. django_cfg/apps/support/views/chat.py +14 -14
  413. django_cfg/apps/tasks/admin/tasks_admin.py +65 -74
  414. django_cfg/apps/tasks/apps.py +2 -2
  415. django_cfg/apps/tasks/serializers.py +6 -6
  416. django_cfg/apps/tasks/static/tasks/js/dashboard/main.mjs +44 -20
  417. django_cfg/apps/tasks/static/tasks/js/dashboard/overview.mjs +7 -5
  418. django_cfg/apps/tasks/static/tasks/js/dashboard/queues.mjs +5 -3
  419. django_cfg/apps/tasks/static/tasks/js/dashboard/tasks.mjs +5 -3
  420. django_cfg/apps/tasks/static/tasks/js/dashboard/workers.mjs +5 -3
  421. django_cfg/apps/tasks/tasks/demo_tasks.py +12 -11
  422. django_cfg/apps/tasks/templates/tasks/components/tasks_mjs_integration.html +269 -0
  423. django_cfg/apps/tasks/templates/tasks/pages/dashboard-improved.html +168 -0
  424. django_cfg/apps/tasks/templates/tasks/pages/dashboard.html +21 -2
  425. django_cfg/apps/tasks/urls.py +3 -2
  426. django_cfg/apps/tasks/urls_admin.py +1 -0
  427. django_cfg/apps/tasks/utils/simulator.py +49 -52
  428. django_cfg/apps/tasks/views/api.py +75 -73
  429. django_cfg/apps/tasks/views/dashboard.py +5 -4
  430. django_cfg/apps/urls.py +20 -11
  431. django_cfg/apps.py +6 -5
  432. django_cfg/cli/commands/create_project.py +7 -6
  433. django_cfg/cli/commands/info.py +25 -25
  434. django_cfg/cli/utils.py +27 -27
  435. django_cfg/config.py +1 -1
  436. django_cfg/core/__init__.py +8 -8
  437. django_cfg/core/base/config_model.py +13 -12
  438. django_cfg/core/builders/apps_builder.py +2 -2
  439. django_cfg/core/builders/middleware_builder.py +1 -1
  440. django_cfg/core/builders/security_builder.py +1 -1
  441. django_cfg/core/config.py +2 -2
  442. django_cfg/core/environment/detector.py +27 -28
  443. django_cfg/core/exceptions.py +1 -1
  444. django_cfg/core/generation/core_generators/settings.py +1 -1
  445. django_cfg/core/generation/core_generators/static.py +11 -5
  446. django_cfg/core/generation/core_generators/templates.py +1 -1
  447. django_cfg/core/generation/data_generators/__init__.py +1 -1
  448. django_cfg/core/generation/data_generators/cache.py +1 -1
  449. django_cfg/core/generation/data_generators/database.py +1 -1
  450. django_cfg/core/generation/generation.py +1 -3
  451. django_cfg/core/generation/integration_generators/__init__.py +2 -2
  452. django_cfg/core/generation/integration_generators/api.py +12 -2
  453. django_cfg/core/generation/integration_generators/sessions.py +1 -1
  454. django_cfg/core/generation/integration_generators/tailwind.py +1 -1
  455. django_cfg/core/generation/integration_generators/tasks.py +1 -1
  456. django_cfg/core/generation/integration_generators/third_party.py +1 -1
  457. django_cfg/core/generation/orchestrator.py +1 -1
  458. django_cfg/core/generation/protocols.py +1 -1
  459. django_cfg/core/generation/utility_generators/__init__.py +1 -1
  460. django_cfg/core/generation/utility_generators/email.py +1 -1
  461. django_cfg/core/generation/utility_generators/i18n.py +1 -1
  462. django_cfg/core/generation/utility_generators/limits.py +1 -1
  463. django_cfg/core/generation/utility_generators/logging.py +1 -1
  464. django_cfg/core/generation/utility_generators/security.py +1 -1
  465. django_cfg/core/generation/utils/helpers.py +1 -1
  466. django_cfg/core/integration/__init__.py +5 -5
  467. django_cfg/core/integration/commands_collector.py +38 -39
  468. django_cfg/core/integration/display/__init__.py +2 -2
  469. django_cfg/core/integration/display/base.py +30 -30
  470. django_cfg/core/integration/display/ngrok.py +35 -36
  471. django_cfg/core/integration/display/startup.py +149 -139
  472. django_cfg/core/integration/url_integration.py +10 -10
  473. django_cfg/core/integration/version_checker.py +20 -19
  474. django_cfg/core/services/config_service.py +4 -4
  475. django_cfg/core/state/__init__.py +1 -1
  476. django_cfg/core/state/registry.py +1 -1
  477. django_cfg/core/types/__init__.py +8 -1
  478. django_cfg/core/validation.py +36 -39
  479. django_cfg/management/commands/check_endpoints.py +3 -1
  480. django_cfg/management/commands/check_settings.py +3 -1
  481. django_cfg/management/commands/clear_constance.py +3 -1
  482. django_cfg/management/commands/create_token.py +3 -1
  483. django_cfg/management/commands/generate_clients.py +3 -1
  484. django_cfg/management/commands/migrate_all.py +3 -1
  485. django_cfg/management/commands/rundramatiq.py +3 -1
  486. django_cfg/management/commands/rundramatiq_simulator.py +3 -1
  487. django_cfg/management/commands/runserver_ngrok.py +3 -1
  488. django_cfg/management/commands/show_config.py +3 -1
  489. django_cfg/management/commands/superuser.py +3 -1
  490. django_cfg/management/commands/task_clear.py +3 -1
  491. django_cfg/management/commands/task_status.py +3 -1
  492. django_cfg/management/commands/test_email.py +3 -1
  493. django_cfg/management/commands/test_telegram.py +3 -1
  494. django_cfg/management/commands/test_twilio.py +3 -1
  495. django_cfg/management/commands/validate_openapi.py +3 -1
  496. django_cfg/middleware/pagination.py +8 -8
  497. django_cfg/middleware/public_endpoints.py +24 -23
  498. django_cfg/middleware/user_activity.py +27 -25
  499. django_cfg/models/__init__.py +19 -20
  500. django_cfg/models/api/__init__.py +4 -4
  501. django_cfg/models/api/config.py +23 -21
  502. django_cfg/models/api/cors.py +17 -16
  503. django_cfg/models/api/drf/__init__.py +1 -1
  504. django_cfg/models/api/drf/config.py +2 -1
  505. django_cfg/models/api/drf/redoc.py +2 -1
  506. django_cfg/models/api/drf/spectacular.py +4 -2
  507. django_cfg/models/api/drf/swagger.py +2 -1
  508. django_cfg/models/api/jwt.py +37 -36
  509. django_cfg/models/api/keys.py +13 -12
  510. django_cfg/models/api/limits.py +31 -30
  511. django_cfg/models/base/config.py +40 -41
  512. django_cfg/models/base/module.py +8 -8
  513. django_cfg/models/django/__init__.py +1 -1
  514. django_cfg/models/django/constance.py +8 -7
  515. django_cfg/models/django/environment.py +5 -3
  516. django_cfg/models/django/openapi.py +6 -16
  517. django_cfg/models/django/revolution_legacy.py +17 -16
  518. django_cfg/models/infrastructure/__init__.py +1 -1
  519. django_cfg/models/infrastructure/cache.py +46 -45
  520. django_cfg/models/infrastructure/database/config.py +4 -6
  521. django_cfg/models/infrastructure/database/converters.py +1 -1
  522. django_cfg/models/infrastructure/database/parsers.py +1 -1
  523. django_cfg/models/infrastructure/database/validators.py +1 -1
  524. django_cfg/models/infrastructure/logging.py +59 -57
  525. django_cfg/models/infrastructure/security.py +26 -24
  526. django_cfg/models/ngrok/auth.py +2 -1
  527. django_cfg/models/ngrok/config.py +3 -2
  528. django_cfg/models/ngrok/tunnel.py +2 -1
  529. django_cfg/models/payments/__init__.py +1 -1
  530. django_cfg/models/payments/api_keys.py +3 -1
  531. django_cfg/models/payments/config.py +4 -1
  532. django_cfg/models/payments/providers/base.py +2 -1
  533. django_cfg/models/payments/providers/nowpayments.py +3 -1
  534. django_cfg/models/services/__init__.py +1 -1
  535. django_cfg/models/services/base.py +2 -1
  536. django_cfg/models/services/email.py +28 -26
  537. django_cfg/models/services/telegram.py +2 -1
  538. django_cfg/models/tasks/__init__.py +2 -2
  539. django_cfg/models/tasks/backends.py +4 -3
  540. django_cfg/models/tasks/config.py +6 -4
  541. django_cfg/models/tasks/utils.py +3 -3
  542. django_cfg/modules/base.py +18 -17
  543. django_cfg/modules/django_admin/__init__.py +14 -15
  544. django_cfg/modules/django_admin/decorators/__init__.py +1 -1
  545. django_cfg/modules/django_admin/decorators/actions.py +8 -7
  546. django_cfg/modules/django_admin/decorators/display.py +9 -7
  547. django_cfg/modules/django_admin/icons/__init__.py +1 -1
  548. django_cfg/modules/django_admin/icons/constants.py +27 -27
  549. django_cfg/modules/django_admin/icons/generate_icons.py +54 -54
  550. django_cfg/modules/django_admin/management/commands/check_endpoints.py +5 -3
  551. django_cfg/modules/django_admin/management/commands/check_settings.py +40 -44
  552. django_cfg/modules/django_admin/management/commands/clear_constance.py +29 -30
  553. django_cfg/modules/django_admin/management/commands/create_token.py +42 -42
  554. django_cfg/modules/django_admin/management/commands/list_urls.py +37 -38
  555. django_cfg/modules/django_admin/management/commands/migrate_all.py +13 -15
  556. django_cfg/modules/django_admin/management/commands/migrator.py +17 -17
  557. django_cfg/modules/django_admin/management/commands/script.py +58 -60
  558. django_cfg/modules/django_admin/management/commands/show_config.py +32 -30
  559. django_cfg/modules/django_admin/management/commands/show_urls.py +46 -44
  560. django_cfg/modules/django_admin/management/commands/superuser.py +47 -48
  561. django_cfg/modules/django_admin/management/commands/tree.py +50 -54
  562. django_cfg/modules/django_admin/mixins/display_mixin.py +16 -15
  563. django_cfg/modules/django_admin/mixins/optimization_mixin.py +9 -8
  564. django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +25 -24
  565. django_cfg/modules/django_admin/models/__init__.py +4 -4
  566. django_cfg/modules/django_admin/models/action_models.py +3 -1
  567. django_cfg/modules/django_admin/models/badge_models.py +4 -2
  568. django_cfg/modules/django_admin/models/base.py +3 -3
  569. django_cfg/modules/django_admin/models/display_models.py +1 -0
  570. django_cfg/modules/django_admin/utils/badges.py +27 -26
  571. django_cfg/modules/django_admin/utils/displays.py +49 -49
  572. django_cfg/modules/django_client/apps.py +21 -3
  573. django_cfg/modules/django_client/core/__init__.py +9 -10
  574. django_cfg/modules/django_client/core/archive/manager.py +2 -2
  575. django_cfg/modules/django_client/core/cli/main.py +1 -3
  576. django_cfg/modules/django_client/core/config/config.py +3 -1
  577. django_cfg/modules/django_client/core/config/group.py +1 -0
  578. django_cfg/modules/django_client/core/config/service.py +2 -1
  579. django_cfg/modules/django_client/core/generator/__init__.py +1 -1
  580. django_cfg/modules/django_client/core/generator/base.py +2 -2
  581. django_cfg/modules/django_client/core/generator/python/async_client_gen.py +1 -1
  582. django_cfg/modules/django_client/core/generator/python/files_generator.py +1 -1
  583. django_cfg/modules/django_client/core/generator/python/generator.py +4 -4
  584. django_cfg/modules/django_client/core/generator/python/models_generator.py +1 -1
  585. django_cfg/modules/django_client/core/generator/python/operations_generator.py +2 -2
  586. django_cfg/modules/django_client/core/generator/python/sync_client_gen.py +1 -1
  587. django_cfg/modules/django_client/core/generator/typescript/client_generator.py +3 -1
  588. django_cfg/modules/django_client/core/generator/typescript/fetchers_generator.py +14 -13
  589. django_cfg/modules/django_client/core/generator/typescript/files_generator.py +1 -0
  590. django_cfg/modules/django_client/core/generator/typescript/generator.py +6 -6
  591. django_cfg/modules/django_client/core/generator/typescript/hooks_generator.py +12 -10
  592. django_cfg/modules/django_client/core/generator/typescript/models_generator.py +2 -1
  593. django_cfg/modules/django_client/core/generator/typescript/naming.py +2 -3
  594. django_cfg/modules/django_client/core/generator/typescript/operations_generator.py +12 -10
  595. django_cfg/modules/django_client/core/generator/typescript/schemas_generator.py +3 -2
  596. django_cfg/modules/django_client/core/generator/typescript/templates/client/client.ts.jinja +14 -6
  597. django_cfg/modules/django_client/core/generator/typescript/templates/main_index.ts.jinja +4 -10
  598. django_cfg/modules/django_client/core/groups/__init__.py +1 -1
  599. django_cfg/modules/django_client/core/groups/detector.py +2 -1
  600. django_cfg/modules/django_client/core/groups/manager.py +2 -1
  601. django_cfg/modules/django_client/core/ir/schema.py +1 -1
  602. django_cfg/modules/django_client/core/parser/base.py +0 -2
  603. django_cfg/modules/django_client/core/parser/models/schema.py +1 -1
  604. django_cfg/modules/django_client/core/validation/__init__.py +1 -1
  605. django_cfg/modules/django_client/core/validation/fixer.py +1 -2
  606. django_cfg/modules/django_client/core/validation/reporter.py +2 -2
  607. django_cfg/modules/django_client/core/validation/safety.py +1 -1
  608. django_cfg/modules/django_client/management/commands/generate_client.py +14 -11
  609. django_cfg/modules/django_client/management/commands/validate_openapi.py +4 -6
  610. django_cfg/modules/django_client/spectacular/__init__.py +1 -1
  611. django_cfg/modules/django_client/spectacular/async_detection.py +3 -2
  612. django_cfg/modules/django_client/spectacular/enum_naming.py +1 -1
  613. django_cfg/modules/django_client/spectacular/schema.py +5 -5
  614. django_cfg/modules/django_client/system/__init__.py +24 -0
  615. django_cfg/modules/django_client/system/base_generator.py +123 -0
  616. django_cfg/modules/django_client/system/generate_mjs_clients.py +174 -0
  617. django_cfg/modules/django_client/system/mjs_generator.py +219 -0
  618. django_cfg/modules/django_client/system/schema_parser.py +195 -0
  619. django_cfg/modules/django_client/system/templates/api_client.js.j2 +87 -0
  620. django_cfg/modules/django_client/system/templates/app_index.js.j2 +13 -0
  621. django_cfg/modules/django_client/system/templates/base_client.js.j2 +166 -0
  622. django_cfg/modules/django_client/system/templates/main_index.js.j2 +80 -0
  623. django_cfg/modules/django_client/system/templates/types.js.j2 +24 -0
  624. django_cfg/modules/django_client/urls.py +3 -2
  625. django_cfg/modules/django_currency/__init__.py +17 -18
  626. django_cfg/modules/django_currency/clients/__init__.py +2 -2
  627. django_cfg/modules/django_currency/clients/coinpaprika_client.py +48 -48
  628. django_cfg/modules/django_currency/clients/hybrid_client.py +76 -75
  629. django_cfg/modules/django_currency/core/__init__.py +7 -13
  630. django_cfg/modules/django_currency/core/converter.py +25 -24
  631. django_cfg/modules/django_currency/core/models.py +9 -8
  632. django_cfg/modules/django_currency/database/__init__.py +4 -4
  633. django_cfg/modules/django_currency/database/database_loader.py +65 -66
  634. django_cfg/modules/django_currency/examples/example_database_usage.py +29 -28
  635. django_cfg/modules/django_currency/utils/cache.py +10 -11
  636. django_cfg/modules/django_dashboard/__init__.py +4 -5
  637. django_cfg/modules/django_dashboard/components.py +11 -7
  638. django_cfg/modules/django_dashboard/debug.py +1 -3
  639. django_cfg/modules/django_dashboard/management/commands/debug_dashboard.py +3 -3
  640. django_cfg/modules/django_dashboard/sections/base.py +2 -1
  641. django_cfg/modules/django_dashboard/sections/commands.py +3 -2
  642. django_cfg/modules/django_dashboard/sections/documentation.py +8 -6
  643. django_cfg/modules/django_dashboard/sections/overview.py +13 -9
  644. django_cfg/modules/django_dashboard/sections/stats.py +2 -2
  645. django_cfg/modules/django_dashboard/sections/system.py +2 -1
  646. django_cfg/modules/django_drf_theme/templatetags/tailwind_tags.py +12 -4
  647. django_cfg/modules/django_email/management/commands/test_email.py +8 -7
  648. django_cfg/modules/django_email/service.py +5 -4
  649. django_cfg/modules/django_health/service.py +46 -44
  650. django_cfg/modules/django_import_export/__init__.py +7 -3
  651. django_cfg/modules/django_llm/__init__.py +3 -2
  652. django_cfg/modules/django_llm/example.py +58 -56
  653. django_cfg/modules/django_llm/llm/__init__.py +1 -1
  654. django_cfg/modules/django_llm/llm/cache.py +21 -20
  655. django_cfg/modules/django_llm/llm/client.py +9 -9
  656. django_cfg/modules/django_llm/llm/costs.py +14 -14
  657. django_cfg/modules/django_llm/llm/embeddings/__init__.py +1 -1
  658. django_cfg/modules/django_llm/llm/embeddings/mock_embedder.py +1 -2
  659. django_cfg/modules/django_llm/llm/embeddings/openai_embedder.py +1 -2
  660. django_cfg/modules/django_llm/llm/extractor.py +8 -8
  661. django_cfg/modules/django_llm/llm/models.py +5 -5
  662. django_cfg/modules/django_llm/llm/models_api/models_query.py +2 -2
  663. django_cfg/modules/django_llm/llm/models_cache.py +91 -92
  664. django_cfg/modules/django_llm/llm/providers/config_builder.py +1 -1
  665. django_cfg/modules/django_llm/llm/providers/provider_manager.py +2 -1
  666. django_cfg/modules/django_llm/llm/requests/cache_manager.py +1 -1
  667. django_cfg/modules/django_llm/llm/requests/chat_handler.py +2 -2
  668. django_cfg/modules/django_llm/llm/requests/embedding_handler.py +1 -1
  669. django_cfg/modules/django_llm/llm/responses/response_builder.py +2 -2
  670. django_cfg/modules/django_llm/llm/stats/stats_manager.py +1 -1
  671. django_cfg/modules/django_llm/llm/tokenizer.py +10 -9
  672. django_cfg/modules/django_llm/translator/__init__.py +1 -1
  673. django_cfg/modules/django_llm/translator/cache.py +36 -35
  674. django_cfg/modules/django_llm/translator/detectors/__init__.py +1 -1
  675. django_cfg/modules/django_llm/translator/detectors/script_detector.py +0 -1
  676. django_cfg/modules/django_llm/translator/stats/stats_tracker.py +1 -1
  677. django_cfg/modules/django_llm/translator/translator.py +5 -4
  678. django_cfg/modules/django_llm/translator/translators/__init__.py +1 -1
  679. django_cfg/modules/django_llm/translator/translators/json_translator.py +1 -1
  680. django_cfg/modules/django_llm/translator/utils/__init__.py +1 -1
  681. django_cfg/modules/django_llm/translator/utils/prompt_builder.py +0 -1
  682. django_cfg/modules/django_logging/__init__.py +1 -1
  683. django_cfg/modules/django_logging/django_logger.py +33 -34
  684. django_cfg/modules/django_logging/logger.py +3 -7
  685. django_cfg/modules/django_ngrok/__init__.py +7 -7
  686. django_cfg/modules/django_ngrok/management/commands/runserver_ngrok.py +33 -30
  687. django_cfg/modules/django_ngrok/service.py +33 -32
  688. django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +4 -36
  689. django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +1 -1
  690. django_cfg/modules/django_tasks/__init__.py +5 -5
  691. django_cfg/modules/django_tasks/dramatiq_setup.py +1 -1
  692. django_cfg/modules/django_tasks/factory.py +1 -1
  693. django_cfg/modules/django_tasks/management/commands/rundramatiq.py +39 -40
  694. django_cfg/modules/django_tasks/management/commands/rundramatiq_simulator.py +79 -80
  695. django_cfg/modules/django_tasks/management/commands/task_clear.py +34 -34
  696. django_cfg/modules/django_tasks/management/commands/task_status.py +34 -34
  697. django_cfg/modules/django_tasks/service.py +4 -3
  698. django_cfg/modules/django_tasks/settings.py +1 -1
  699. django_cfg/modules/django_telegram/__init__.py +4 -4
  700. django_cfg/modules/django_telegram/management/commands/test_telegram.py +4 -5
  701. django_cfg/modules/django_telegram/service.py +4 -3
  702. django_cfg/modules/django_telegram/utils.py +1 -1
  703. django_cfg/modules/django_twilio/__init__.py +15 -16
  704. django_cfg/modules/django_twilio/_imports.py +1 -1
  705. django_cfg/modules/django_twilio/base.py +9 -5
  706. django_cfg/modules/django_twilio/email_otp.py +4 -3
  707. django_cfg/modules/django_twilio/exceptions.py +36 -36
  708. django_cfg/modules/django_twilio/management/commands/test_twilio.py +6 -7
  709. django_cfg/modules/django_twilio/models.py +54 -53
  710. django_cfg/modules/django_twilio/sendgrid_service.py +70 -72
  711. django_cfg/modules/django_twilio/simple_service.py +42 -41
  712. django_cfg/modules/django_twilio/sms.py +1 -0
  713. django_cfg/modules/django_twilio/twilio_service.py +79 -83
  714. django_cfg/modules/django_twilio/unified.py +6 -5
  715. django_cfg/modules/django_twilio/utils.py +2 -3
  716. django_cfg/modules/django_twilio/whatsapp.py +3 -2
  717. django_cfg/modules/django_unfold/__init__.py +7 -6
  718. django_cfg/modules/django_unfold/callbacks/actions.py +6 -5
  719. django_cfg/modules/django_unfold/callbacks/apizones.py +122 -0
  720. django_cfg/modules/django_unfold/callbacks/base.py +9 -8
  721. django_cfg/modules/django_unfold/callbacks/charts.py +36 -37
  722. django_cfg/modules/django_unfold/callbacks/commands.py +2 -2
  723. django_cfg/modules/django_unfold/callbacks/main.py +27 -27
  724. django_cfg/modules/django_unfold/callbacks/statistics.py +12 -12
  725. django_cfg/modules/django_unfold/callbacks/system.py +5 -5
  726. django_cfg/modules/django_unfold/callbacks/users.py +4 -4
  727. django_cfg/modules/django_unfold/dashboard.py +29 -29
  728. django_cfg/modules/django_unfold/models/__init__.py +23 -8
  729. django_cfg/modules/django_unfold/models/config.py +84 -81
  730. django_cfg/modules/django_unfold/models/dashboard.py +20 -19
  731. django_cfg/modules/django_unfold/models/dropdown.py +6 -4
  732. django_cfg/modules/django_unfold/models/navigation.py +6 -4
  733. django_cfg/modules/django_unfold/models/tabs.py +4 -3
  734. django_cfg/modules/django_unfold/models.py +2 -3
  735. django_cfg/modules/django_unfold/system_monitor.py +27 -25
  736. django_cfg/modules/django_unfold/tailwind.py +12 -14
  737. django_cfg/modules/django_unfold/utils.py +7 -6
  738. django_cfg/pyproject.toml +1 -1
  739. django_cfg/registry/__init__.py +3 -3
  740. django_cfg/registry/core.py +8 -8
  741. django_cfg/registry/modules.py +2 -2
  742. django_cfg/registry/services.py +2 -2
  743. django_cfg/registry/third_party.py +3 -3
  744. django_cfg/routing/__init__.py +3 -3
  745. django_cfg/routing/callbacks.py +27 -26
  746. django_cfg/routing/routers.py +2 -2
  747. django_cfg/static/js/api/accounts/client.mjs +69 -0
  748. django_cfg/static/js/api/accounts/index.mjs +13 -0
  749. django_cfg/static/js/api/base.mjs +166 -0
  750. django_cfg/static/js/api/index.mjs +100 -0
  751. django_cfg/static/js/api/ipc/client.mjs +74 -0
  752. django_cfg/static/js/api/ipc/index.mjs +13 -0
  753. django_cfg/static/js/api/leads/client.mjs +71 -0
  754. django_cfg/static/js/api/leads/index.mjs +13 -0
  755. django_cfg/static/js/api/newsletter/client.mjs +109 -0
  756. django_cfg/static/js/api/newsletter/index.mjs +13 -0
  757. django_cfg/static/js/api/payments/client.mjs +1264 -0
  758. django_cfg/static/js/api/payments/index.mjs +13 -0
  759. django_cfg/static/js/api/support/client.mjs +84 -0
  760. django_cfg/static/js/api/support/index.mjs +13 -0
  761. django_cfg/static/js/api/tasks/client.mjs +74 -0
  762. django_cfg/static/js/api/tasks/index.mjs +13 -0
  763. django_cfg/static/js/api/types.mjs +729 -0
  764. django_cfg/static/js/api-loader.mjs +169 -0
  765. django_cfg/templates/admin/snippets/zones/zones_table.html +4 -3
  766. django_cfg/templatetags/django_cfg.py +4 -4
  767. django_cfg/utils/path_resolution.py +49 -50
  768. django_cfg/utils/smart_defaults.py +27 -29
  769. django_cfg/utils/version_check.py +14 -14
  770. {django_cfg-1.4.20.dist-info → django_cfg-1.4.23.dist-info}/METADATA +1 -1
  771. django_cfg-1.4.23.dist-info/RECORD +1137 -0
  772. django_cfg/apps/payments/static/payments/js/api-client.js +0 -408
  773. django_cfg/modules/django_ipc_client/dashboard/README.md +0 -517
  774. django_cfg/modules/django_ipc_client/dashboard/UNFOLD_INTEGRATION.md +0 -439
  775. django_cfg/modules/django_ipc_client/dashboard/__init__.py +0 -11
  776. django_cfg/modules/django_ipc_client/dashboard/apps.py +0 -22
  777. django_cfg/modules/django_ipc_client/dashboard/templates/django_ipc_dashboard/dashboard.html +0 -200
  778. django_cfg/modules/django_ipc_client/dashboard/urls.py +0 -22
  779. django_cfg/modules/django_ipc_client/dashboard/urls_admin.py +0 -9
  780. django_cfg/modules/django_ipc_client/dashboard/views.py +0 -251
  781. django_cfg/modules/django_rpc_old/POETRY.md +0 -344
  782. django_cfg/modules/django_rpc_old/README.md +0 -397
  783. django_cfg/modules/django_rpc_old/TESTING.md +0 -358
  784. django_cfg/modules/django_rpc_old/__init__.py +0 -39
  785. django_cfg/modules/django_rpc_old/client.py +0 -531
  786. django_cfg/modules/django_rpc_old/config.py +0 -279
  787. django_cfg/modules/django_rpc_old/exceptions.py +0 -172
  788. django_cfg/modules/django_unfold/callbacks/revolution.py +0 -81
  789. django_cfg-1.4.20.dist-info/RECORD +0 -1110
  790. /django_cfg/{modules/django_ipc_client → apps/ipc}/README.md +0 -0
  791. /django_cfg/{modules/django_ipc_client → apps/ipc/services/client}/config.py +0 -0
  792. {django_cfg-1.4.20.dist-info → django_cfg-1.4.23.dist-info}/WHEEL +0 -0
  793. {django_cfg-1.4.20.dist-info → django_cfg-1.4.23.dist-info}/entry_points.txt +0 -0
  794. {django_cfg-1.4.20.dist-info → django_cfg-1.4.23.dist-info}/licenses/LICENSE +0 -0
@@ -2,22 +2,22 @@
2
2
  Startup display manager for Django CFG.
3
3
  """
4
4
 
5
- from typing import Optional, Dict, Any, List
6
- from rich.text import Text
7
- from rich.table import Table
8
5
  from rich.panel import Panel
9
- from .base import BaseDisplayManager, MAIN_PANEL_WIDTH, HALF_PANEL_WIDTH
6
+ from rich.table import Table
7
+ from rich.text import Text
8
+
9
+ from .base import BaseDisplayManager
10
10
  from .ngrok import NgrokDisplayManager
11
11
 
12
12
 
13
13
  class StartupDisplayManager(BaseDisplayManager):
14
14
  """Manager for displaying startup information."""
15
-
15
+
16
16
  def __init__(self, config=None):
17
17
  """Initialize startup display manager."""
18
18
  super().__init__(config)
19
19
  self.ngrok_manager = NgrokDisplayManager(config)
20
-
20
+
21
21
  def display_startup_info(self):
22
22
  """Display startup information based on config.startup_info_mode."""
23
23
  if not self.config:
@@ -35,7 +35,7 @@ class StartupDisplayManager(BaseDisplayManager):
35
35
  self.display_essential_info()
36
36
  elif mode == StartupInfoMode.FULL:
37
37
  self.display_complete_info()
38
-
38
+
39
39
  def display_minimal_info(self):
40
40
  """Display minimal startup info (NONE mode)."""
41
41
  try:
@@ -70,7 +70,7 @@ class StartupDisplayManager(BaseDisplayManager):
70
70
  print(f"❌ ERROR in display_minimal_info: {e}")
71
71
  print("🔍 TRACEBACK:")
72
72
  traceback.print_exc()
73
-
73
+
74
74
  def display_essential_info(self):
75
75
  """Display essential startup info (SHORT mode)."""
76
76
  try:
@@ -105,7 +105,7 @@ class StartupDisplayManager(BaseDisplayManager):
105
105
  print(f"❌ ERROR in display_essential_info: {e}")
106
106
  print("🔍 TRACEBACK:")
107
107
  traceback.print_exc()
108
-
108
+
109
109
  def display_complete_info(self):
110
110
  """Display complete startup info (FULL mode)."""
111
111
  try:
@@ -114,8 +114,10 @@ class StartupDisplayManager(BaseDisplayManager):
114
114
 
115
115
  # Get library info
116
116
  from django_cfg.config import (
117
- LIB_NAME, LIB_SITE_URL, LIB_DOCS_URL, LIB_GITHUB_URL,
118
- LIB_SUPPORT_URL, LIB_HEALTH_URL
117
+ LIB_DOCS_URL,
118
+ LIB_GITHUB_URL,
119
+ LIB_SITE_URL,
120
+ LIB_SUPPORT_URL,
119
121
  )
120
122
 
121
123
  # Create main info table
@@ -172,17 +174,17 @@ class StartupDisplayManager(BaseDisplayManager):
172
174
  print(f"❌ ERROR in display_complete_info: {e}")
173
175
  print("🔍 TRACEBACK:")
174
176
  traceback.print_exc()
175
-
177
+
176
178
  def _display_update_notification_short(self):
177
179
  """Display update notification for SHORT mode."""
178
180
  try:
179
181
  from ..version_checker import get_version_info
180
182
  version_info = get_version_info()
181
-
183
+
182
184
  if version_info.get('update_available'):
183
185
  current = version_info.get('current_version', 'unknown')
184
186
  latest = version_info.get('latest_version', 'unknown')
185
-
187
+
186
188
  update_text = Text()
187
189
  update_text.append("🚨 Update available: ", style="bold yellow")
188
190
  update_text.append(f"{current}", style="red")
@@ -190,7 +192,7 @@ class StartupDisplayManager(BaseDisplayManager):
190
192
  update_text.append(f"{latest}", style="green")
191
193
  update_text.append("\n💡 Run: ", style="dim")
192
194
  update_text.append("poetry add django-cfg@latest", style="bright_blue")
193
-
195
+
194
196
  update_panel = self.create_panel(
195
197
  update_text,
196
198
  title="",
@@ -201,38 +203,38 @@ class StartupDisplayManager(BaseDisplayManager):
201
203
  self.console.print(update_panel)
202
204
  except Exception:
203
205
  pass
204
-
206
+
205
207
  def _display_update_notification_full(self):
206
208
  """Display update notification for FULL mode."""
207
209
  try:
208
210
  from ..version_checker import get_version_info
209
211
  version_info = get_version_info()
210
-
212
+
211
213
  if version_info.get('update_available'):
212
214
  update_table = self.create_table()
213
215
  update_table.add_column("Info", style="yellow", width=15)
214
216
  update_table.add_column("Value", style="white")
215
-
217
+
216
218
  current = version_info.get('current_version', 'unknown')
217
219
  latest = version_info.get('latest_version', 'unknown')
218
220
  update_url = version_info.get('update_url', '')
219
-
221
+
220
222
  update_table.add_row("Current", f"[red]{current}[/red]")
221
223
  update_table.add_row("Latest", f"[green]{latest}[/green]")
222
224
  update_table.add_row("💡 Update", "[bright_blue]poetry add django-cfg@latest[/bright_blue]")
223
225
  if update_url:
224
226
  update_table.add_row("PyPI", update_url)
225
-
227
+
226
228
  update_panel = self.create_full_width_panel(
227
229
  update_table,
228
230
  title="🚨 Update Available",
229
231
  border_style="yellow"
230
232
  )
231
-
233
+
232
234
  self.console.print(update_panel)
233
235
  except Exception:
234
236
  pass
235
-
237
+
236
238
  def _display_essential_columns(self):
237
239
  """Display essential info in columns for SHORT mode."""
238
240
  # Enabled apps
@@ -243,14 +245,14 @@ class StartupDisplayManager(BaseDisplayManager):
243
245
  for app in enabled_apps[:5]: # Limit for SHORT mode
244
246
  app_name = app.split('.')[-1]
245
247
  apps_table.add_row(f"• {app_name}")
246
-
248
+
247
249
  # Key endpoints
248
250
  endpoints_table = self.create_table()
249
251
  endpoints_table.add_column("Endpoint", style="bright_green")
250
-
252
+
251
253
  endpoints_table.add_row(f"• {self.get_base_url('cfg', 'health')}")
252
254
  endpoints_table.add_row(f"• {self.get_base_url('api', 'payments')}")
253
-
255
+
254
256
  # Use new two-column table method for perfect 50/50 layout
255
257
  self.print_two_column_table(
256
258
  left_content=apps_table,
@@ -260,7 +262,7 @@ class StartupDisplayManager(BaseDisplayManager):
260
262
  left_style="blue",
261
263
  right_style="green"
262
264
  )
263
-
265
+
264
266
  def _display_main_columns(self):
265
267
  """Display main columns (apps and endpoints) for FULL mode."""
266
268
  # Enabled apps
@@ -271,15 +273,15 @@ class StartupDisplayManager(BaseDisplayManager):
271
273
  for app in enabled_apps:
272
274
  app_name = app.split('.')[-1]
273
275
  apps_table.add_row(f"• {app_name}")
274
-
276
+
275
277
  # Endpoints
276
278
  endpoints_table = self.create_table()
277
279
  endpoints_table.add_column("Endpoint", style="bright_green")
278
-
280
+
279
281
  # Add core endpoints
280
282
  endpoints_table.add_row(f"• {self.get_base_url('cfg', 'health')}")
281
283
  endpoints_table.add_row(f"• {self.get_base_url('cfg', 'commands')}")
282
-
284
+
283
285
  # Add app-specific API endpoints based on enabled apps
284
286
  for app in enabled_apps:
285
287
  app_name = app.split('.')[-1]
@@ -287,7 +289,7 @@ class StartupDisplayManager(BaseDisplayManager):
287
289
  continue
288
290
  else:
289
291
  endpoints_table.add_row(f"• {self.get_base_url('api', app_name)}")
290
-
292
+
291
293
  # Use new two-column table method for perfect 50/50 layout
292
294
  self.print_two_column_table(
293
295
  left_content=apps_table,
@@ -297,38 +299,38 @@ class StartupDisplayManager(BaseDisplayManager):
297
299
  left_style="blue",
298
300
  right_style="green"
299
301
  )
300
-
302
+
301
303
  def _display_config_panels(self):
302
304
  """Display app-specific configuration panels."""
303
305
  config_panels = []
304
-
306
+
305
307
  # Payments configuration
306
- if (self.config and hasattr(self.config, 'payments') and
308
+ if (self.config and hasattr(self.config, 'payments') and
307
309
  self.config.payments and self.config.payments.enabled):
308
-
310
+
309
311
  payment_table = self.create_table()
310
312
  payment_table.add_column("Setting", style="cyan", width=20)
311
313
  payment_table.add_column("Value", style="white")
312
-
314
+
313
315
  payment_table.add_row("Enabled", f"[green]{self.config.payments.enabled}[/green]")
314
316
  middleware_enabled = self.config.payments.middleware_enabled
315
317
  color = 'green' if middleware_enabled else 'red'
316
318
  payment_table.add_row("Middleware", f"[{color}]{middleware_enabled}[/{color}]")
317
-
319
+
318
320
  config_panels.append(self.create_panel(
319
- payment_table,
320
- title="💳 Payments",
321
+ payment_table,
322
+ title="💳 Payments",
321
323
  border_style="yellow"
322
324
  ))
323
-
325
+
324
326
  # Tasks configuration - removed from config_panels, will be shown separately
325
-
327
+
326
328
  # Constance configuration
327
329
  try:
328
330
  constance_table = self.create_table()
329
331
  constance_table.add_column("Setting", style="cyan", width=20)
330
332
  constance_table.add_column("Value", style="white")
331
-
333
+
332
334
  # Constance fields moved to separate block
333
335
  # Get cache info
334
336
  try:
@@ -339,7 +341,7 @@ class StartupDisplayManager(BaseDisplayManager):
339
341
  constance_table.add_row("Cache", "[yellow]Not configured[/yellow]")
340
342
  except Exception:
341
343
  constance_table.add_row("Cache", "[red]Error[/red]")
342
-
344
+
343
345
  # Add validation info
344
346
  try:
345
347
  from django_cfg.core.validation import ConfigurationValidator
@@ -351,22 +353,22 @@ class StartupDisplayManager(BaseDisplayManager):
351
353
  constance_table.add_row("Validation", f"[red]✗ {error_count} errors[/red]")
352
354
  except Exception:
353
355
  constance_table.add_row("Validation", "[red]Error[/red]")
354
-
356
+
355
357
  # Add installed apps count
356
358
  try:
357
359
  installed_apps = self.config.get_installed_apps() if hasattr(self.config, 'get_installed_apps') else []
358
360
  constance_table.add_row("Apps", f"[blue]{len(installed_apps)}[/blue]")
359
361
  except Exception:
360
362
  constance_table.add_row("Apps", "[red]Error[/red]")
361
-
363
+
362
364
  config_panels.append(self.create_panel(
363
- constance_table,
364
- title="⚙️ Configuration",
365
+ constance_table,
366
+ title="⚙️ Configuration",
365
367
  border_style="cyan"
366
368
  ))
367
369
  except Exception:
368
370
  pass
369
-
371
+
370
372
  # Show config panels
371
373
  if len(config_panels) >= 2:
372
374
  # Show first two panels in 50/50 layout
@@ -378,7 +380,7 @@ class StartupDisplayManager(BaseDisplayManager):
378
380
  left_style=config_panels[0].border_style,
379
381
  right_style=config_panels[1].border_style
380
382
  )
381
-
383
+
382
384
  # Show remaining panels individually
383
385
  for panel in config_panels[2:]:
384
386
  self.console.print(panel)
@@ -386,73 +388,73 @@ class StartupDisplayManager(BaseDisplayManager):
386
388
  # Show single panel
387
389
  for panel in config_panels:
388
390
  self.console.print(panel)
389
-
391
+
390
392
  # Show Background Tasks separately
391
393
  self._display_background_tasks()
392
-
394
+
393
395
  # Show detailed Constance information (includes summary)
394
396
  self._display_constance_details()
395
-
397
+
396
398
  def _display_background_tasks(self):
397
399
  """Display Background Tasks information in a separate panel."""
398
400
  try:
399
401
  # Always show Background Tasks section if config exists
400
402
  if not self.config:
401
403
  return
402
-
404
+
403
405
  task_table = self.create_table()
404
406
  task_table.add_column("Setting", style="cyan", width=20)
405
407
  task_table.add_column("Value", style="white")
406
-
408
+
407
409
  # Show real tasks status
408
410
  tasks_enabled = self.config.should_enable_tasks()
409
411
  if tasks_enabled:
410
412
  task_table.add_row("Tasks Enabled", "[green]True[/green]")
411
413
  else:
412
414
  task_table.add_row("Tasks Enabled", "[yellow]False[/yellow]")
413
-
415
+
414
416
  if hasattr(self.config, 'tasks') and self.config.tasks:
415
417
  queue_name = getattr(self.config.tasks, 'queue_name', 'default')
416
418
  task_table.add_row("Queue", f"[yellow]{queue_name}[/yellow]")
417
419
  else:
418
420
  task_table.add_row("Queue", "[yellow]default[/yellow]")
419
-
421
+
420
422
  # Add worker command
421
423
  task_table.add_row("Start Workers", "[bright_blue]poetry run python manage.py rundramatiq[/bright_blue]")
422
-
424
+
423
425
  task_panel = self.create_full_width_panel(
424
- task_table,
425
- title="⚡ Background Tasks",
426
+ task_table,
427
+ title="⚡ Background Tasks",
426
428
  border_style="purple"
427
429
  )
428
-
430
+
429
431
  self.console.print(task_panel)
430
-
432
+
431
433
  except Exception as e:
432
434
  import traceback
433
435
  print(f"❌ ERROR in _display_background_tasks: {e}")
434
436
  traceback.print_exc()
435
-
437
+
436
438
  def _display_constance_integrated_block(self, constance_config, all_fields):
437
439
  """Display integrated Constance block with summary and field details."""
438
440
  try:
439
441
  # Create main content table that will contain everything
440
442
  main_content = Table(show_header=False, box=None, padding=(0, 1))
441
443
  main_content.add_column("Content", justify="left")
442
-
444
+
443
445
  # 1. Add summary section
444
446
  summary_table = self.create_table()
445
447
  summary_table.add_column("Source", style="cyan", width=20)
446
448
  summary_table.add_column("Fields", style="white")
447
-
449
+
448
450
  # Count fields by source
449
451
  user_fields = len(constance_config.fields)
450
-
452
+
451
453
  # Count by app
452
454
  tasks_count = 0
453
455
  knowbase_count = 0
454
456
  payments_count = 0
455
-
457
+
456
458
  config = self.config
457
459
  if config and config.should_enable_tasks():
458
460
  try:
@@ -461,23 +463,27 @@ class StartupDisplayManager(BaseDisplayManager):
461
463
  tasks_count = len(tasks_fields)
462
464
  except:
463
465
  pass
464
-
466
+
465
467
  if config and config.enable_knowbase:
466
468
  try:
467
- from django_cfg.apps.knowbase.config import get_django_cfg_knowbase_constance_fields
469
+ from django_cfg.apps.knowbase.config import (
470
+ get_django_cfg_knowbase_constance_fields,
471
+ )
468
472
  knowbase_fields = get_django_cfg_knowbase_constance_fields()
469
473
  knowbase_count = len(knowbase_fields)
470
474
  except:
471
475
  pass
472
-
476
+
473
477
  if config and config.payments and config.payments.enabled:
474
478
  try:
475
- from django_cfg.apps.payments.config import get_django_cfg_payments_constance_fields
479
+ from django_cfg.apps.payments.config import (
480
+ get_django_cfg_payments_constance_fields,
481
+ )
476
482
  payments_fields = get_django_cfg_payments_constance_fields()
477
483
  payments_count = len(payments_fields)
478
484
  except:
479
485
  pass
480
-
486
+
481
487
  summary_table.add_row("User Defined", f"[blue]{user_fields}[/blue]")
482
488
  if tasks_count > 0:
483
489
  summary_table.add_row("Tasks Module", f"[green]{tasks_count}[/green]")
@@ -486,10 +492,10 @@ class StartupDisplayManager(BaseDisplayManager):
486
492
  if payments_count > 0:
487
493
  summary_table.add_row("Payments App", f"[green]{payments_count}[/green]")
488
494
  summary_table.add_row("Total", f"[yellow]{len(all_fields)}[/yellow]")
489
-
495
+
490
496
  main_content.add_row(summary_table)
491
497
  main_content.add_row("") # Spacer
492
-
498
+
493
499
  # 2. Add field details section
494
500
  groups = {}
495
501
  for field in all_fields:
@@ -497,29 +503,29 @@ class StartupDisplayManager(BaseDisplayManager):
497
503
  if group not in groups:
498
504
  groups[group] = []
499
505
  groups[group].append(field)
500
-
506
+
501
507
  group_names = list(groups.keys())[:2]
502
-
508
+
503
509
  if len(group_names) >= 2:
504
510
  # Create two-column layout for field details
505
511
  details_table = Table(show_header=False, box=None, padding=(0, 2))
506
512
  details_table.add_column("Left", justify="left")
507
513
  details_table.add_column("Right", justify="left")
508
-
514
+
509
515
  # Left column - first group
510
516
  left_table = self.create_table()
511
517
  left_table.add_column("Field", style="bright_cyan")
512
518
  left_table.add_column("Type", style="yellow")
513
519
  for field in groups[group_names[0]][:8]:
514
520
  left_table.add_row(field.name, field.field_type)
515
-
516
- # Right column - second group
521
+
522
+ # Right column - second group
517
523
  right_table = self.create_table()
518
524
  right_table.add_column("Field", style="bright_cyan")
519
525
  right_table.add_column("Type", style="yellow")
520
526
  for field in groups[group_names[1]][:8]:
521
527
  right_table.add_row(field.name, field.field_type)
522
-
528
+
523
529
  # Create panels for each group
524
530
  left_panel = Panel(
525
531
  left_table,
@@ -528,7 +534,7 @@ class StartupDisplayManager(BaseDisplayManager):
528
534
  expand=True,
529
535
  padding=(1, 1)
530
536
  )
531
-
537
+
532
538
  right_panel = Panel(
533
539
  right_table,
534
540
  title=f"🔧 {group_names[1]} Settings",
@@ -536,21 +542,21 @@ class StartupDisplayManager(BaseDisplayManager):
536
542
  expand=True,
537
543
  padding=(1, 1)
538
544
  )
539
-
545
+
540
546
  details_table.add_row(left_panel, right_panel)
541
547
  main_content.add_row(details_table)
542
-
548
+
543
549
  elif len(group_names) == 1:
544
550
  # Single group
545
551
  single_table = self.create_table()
546
552
  single_table.add_column("Field", style="bright_cyan")
547
553
  single_table.add_column("Type", style="yellow")
548
554
  single_table.add_column("Default", style="white")
549
-
555
+
550
556
  for field in groups[group_names[0]][:10]:
551
557
  default_str = str(field.default)[:20] + "..." if len(str(field.default)) > 20 else str(field.default)
552
558
  single_table.add_row(field.name, field.field_type, default_str)
553
-
559
+
554
560
  single_panel = Panel(
555
561
  single_table,
556
562
  title=f"🔧 {group_names[0]} Settings",
@@ -559,53 +565,53 @@ class StartupDisplayManager(BaseDisplayManager):
559
565
  padding=(1, 1)
560
566
  )
561
567
  main_content.add_row(single_panel)
562
-
568
+
563
569
  # Create the main panel containing everything
564
570
  integrated_panel = self.create_full_width_panel(
565
571
  main_content,
566
572
  title="📊 Constance Fields Summary",
567
573
  border_style="purple"
568
574
  )
569
-
575
+
570
576
  self.console.print(integrated_panel)
571
-
577
+
572
578
  except Exception as e:
573
579
  import traceback
574
580
  print(f"❌ ERROR in _display_constance_integrated_block: {e}")
575
581
  traceback.print_exc()
576
-
582
+
577
583
  def _display_constance_details(self):
578
584
  """Display detailed Constance configuration information."""
579
585
  try:
580
586
  if not (self.config and hasattr(self.config, 'constance')):
581
587
  return
582
-
588
+
583
589
  constance_config = self.config.constance
584
590
  all_fields = constance_config.get_all_fields()
585
-
591
+
586
592
  if not all_fields:
587
593
  return
588
-
594
+
589
595
  # Show integrated summary and details in one block
590
596
  self._display_constance_integrated_block(constance_config, all_fields)
591
-
597
+
592
598
  except Exception as e:
593
599
  import traceback
594
600
  print(f"❌ ERROR in _display_constance_details: {e}")
595
601
  traceback.print_exc()
596
-
602
+
597
603
  def _display_constance_summary(self, constance_config, all_fields):
598
604
  """Display summary of Constance fields by source."""
599
605
  try:
600
606
  # Count fields by source
601
607
  user_fields = len(constance_config.fields) # User-defined fields
602
608
  app_fields = constance_config._get_app_constance_fields()
603
-
609
+
604
610
  # Count by app
605
611
  tasks_count = 0
606
612
  knowbase_count = 0
607
613
  payments_count = 0
608
-
614
+
609
615
  # Try to get individual app field counts
610
616
  config = self.config
611
617
  if config and config.should_enable_tasks():
@@ -615,52 +621,56 @@ class StartupDisplayManager(BaseDisplayManager):
615
621
  tasks_count = len(tasks_fields)
616
622
  except:
617
623
  pass
618
-
624
+
619
625
  if config and config.enable_knowbase:
620
626
  try:
621
- from django_cfg.apps.knowbase.config import get_django_cfg_knowbase_constance_fields
627
+ from django_cfg.apps.knowbase.config import (
628
+ get_django_cfg_knowbase_constance_fields,
629
+ )
622
630
  knowbase_fields = get_django_cfg_knowbase_constance_fields()
623
631
  knowbase_count = len(knowbase_fields)
624
632
  except:
625
633
  pass
626
-
634
+
627
635
  if config and config.payments and config.payments.enabled:
628
636
  try:
629
- from django_cfg.apps.payments.config import get_django_cfg_payments_constance_fields
637
+ from django_cfg.apps.payments.config import (
638
+ get_django_cfg_payments_constance_fields,
639
+ )
630
640
  payments_fields = get_django_cfg_payments_constance_fields()
631
641
  payments_count = len(payments_fields)
632
642
  except:
633
643
  pass
634
-
644
+
635
645
  # Create summary table
636
646
  summary_table = self.create_table()
637
647
  summary_table.add_column("Source", style="cyan", width=20)
638
648
  summary_table.add_column("Fields", style="white")
639
-
649
+
640
650
  summary_table.add_row("User Defined", f"[blue]{user_fields}[/blue]")
641
-
651
+
642
652
  if tasks_count > 0:
643
653
  summary_table.add_row("Tasks Module", f"[green]{tasks_count}[/green]")
644
654
  if knowbase_count > 0:
645
655
  summary_table.add_row("Knowbase App", f"[green]{knowbase_count}[/green]")
646
656
  if payments_count > 0:
647
657
  summary_table.add_row("Payments App", f"[green]{payments_count}[/green]")
648
-
658
+
649
659
  summary_table.add_row("Total", f"[yellow]{len(all_fields)}[/yellow]")
650
-
660
+
651
661
  summary_panel = self.create_panel(
652
662
  summary_table,
653
663
  title="📊 Constance Fields Summary",
654
664
  border_style="purple"
655
665
  )
656
-
666
+
657
667
  self.console.print(summary_panel)
658
-
668
+
659
669
  except Exception as e:
660
670
  import traceback
661
671
  print(f"❌ ERROR in _display_constance_summary: {e}")
662
672
  traceback.print_exc()
663
-
673
+
664
674
  def _display_openapi_client_info(self):
665
675
  """Display Django Client (OpenAPI) information."""
666
676
  try:
@@ -696,91 +706,91 @@ class StartupDisplayManager(BaseDisplayManager):
696
706
  pass
697
707
  except Exception:
698
708
  pass
699
-
709
+
700
710
  def _display_commands_info(self):
701
711
  """Display management commands information."""
702
712
  try:
703
- from ..commands_collector import get_all_commands, get_commands_with_descriptions
704
-
713
+ from ..commands_collector import get_all_commands
714
+
705
715
  # Get command counts
706
716
  all_commands = get_all_commands()
707
717
  core_count = sum(len(commands) for commands in all_commands.get('django_cfg_core', {}).values())
708
718
  app_count = sum(len(commands) for commands in all_commands.get('django_cfg_apps', {}).values())
709
719
  project_count = sum(len(commands) for commands in all_commands.get('project_commands', {}).values())
710
720
  total_count = core_count + app_count + project_count
711
-
721
+
712
722
  # Main commands info
713
723
  commands_table = self.create_table()
714
724
  commands_table.add_column("Type", style="cyan", width=20)
715
725
  commands_table.add_column("Count", style="white")
716
-
726
+
717
727
  commands_table.add_row("🔧 Core Commands", str(core_count))
718
728
  commands_table.add_row("📱 App Commands", str(app_count))
719
729
  commands_table.add_row("🏗️ Project Commands", str(project_count))
720
730
  commands_table.add_row("📊 Total", str(total_count))
721
-
731
+
722
732
  commands_panel = self.create_full_width_panel(
723
733
  commands_table,
724
734
  title="⚡ Management Commands",
725
735
  border_style="purple"
726
736
  )
727
-
737
+
728
738
  self.console.print(commands_panel)
729
-
739
+
730
740
  # Detailed commands breakdown
731
741
  self._display_commands_breakdown()
732
-
742
+
733
743
  except Exception as e:
734
744
  import traceback
735
745
  print(f"❌ ERROR in _display_commands_info: {e}")
736
746
  traceback.print_exc()
737
-
747
+
738
748
  def _display_commands_breakdown(self):
739
749
  """Display detailed commands breakdown."""
740
750
  try:
741
751
  from ..commands_collector import get_all_commands
742
752
  all_commands = get_all_commands()
743
-
753
+
744
754
  columns_content = []
745
-
755
+
746
756
  # Core commands
747
757
  core_commands_dict = all_commands.get('django_cfg_core', {})
748
758
  if core_commands_dict:
749
759
  core_table = self.create_table()
750
760
  core_table.add_column("Command", style="bright_blue")
751
-
761
+
752
762
  # Flatten all core commands
753
763
  all_core_commands = []
754
764
  for commands_list in core_commands_dict.values():
755
765
  all_core_commands.extend(commands_list)
756
-
766
+
757
767
  for cmd in all_core_commands[:15]: # Limit to first 15
758
768
  core_table.add_row(f"• {cmd}")
759
-
769
+
760
770
  columns_content.append(self.create_panel(
761
- core_table,
762
- title="🔧 Core Commands",
771
+ core_table,
772
+ title="🔧 Core Commands",
763
773
  border_style="blue"
764
774
  ))
765
-
775
+
766
776
  # App commands
767
777
  app_commands_dict = all_commands.get('django_cfg_apps', {})
768
778
  if app_commands_dict:
769
779
  app_table = self.create_table()
770
780
  app_table.add_column("Command", style="bright_green")
771
-
781
+
772
782
  for app_name, commands_list in app_commands_dict.items():
773
783
  if commands_list:
774
784
  app_table.add_row(f"[bold]{app_name.title()}:[/bold]")
775
785
  for cmd in commands_list[:3]: # Limit per app
776
786
  app_table.add_row(f" • {cmd}")
777
-
787
+
778
788
  columns_content.append(self.create_panel(
779
- app_table,
780
- title="📱 App Commands",
789
+ app_table,
790
+ title="📱 App Commands",
781
791
  border_style="green"
782
792
  ))
783
-
793
+
784
794
  # Show command columns in 50/50 layout
785
795
  if len(columns_content) == 2:
786
796
  self.print_two_column_table(
@@ -797,7 +807,7 @@ class StartupDisplayManager(BaseDisplayManager):
797
807
  elif columns_content:
798
808
  # Fallback for other cases
799
809
  self.print_columns(columns_content, equal=True, expand=True)
800
-
810
+
801
811
  # Project commands (separate panel due to length)
802
812
  project_commands_dict = all_commands.get('project_commands', {})
803
813
  if project_commands_dict:
@@ -805,31 +815,31 @@ class StartupDisplayManager(BaseDisplayManager):
805
815
  all_project_commands = []
806
816
  for commands_list in project_commands_dict.values():
807
817
  all_project_commands.extend(commands_list)
808
-
818
+
809
819
  # Split commands into two columns
810
820
  mid_point = len(all_project_commands) // 2
811
821
  left_commands = all_project_commands[:mid_point]
812
822
  right_commands = all_project_commands[mid_point:]
813
-
823
+
814
824
  # Create two-column table inside one panel
815
825
  project_columns_table = Table(show_header=False, box=None, padding=(0, 2))
816
826
  project_columns_table.add_column("Left", justify="left")
817
827
  project_columns_table.add_column("Right", justify="left")
818
-
828
+
819
829
  # Create content for each column
820
830
  left_content = "\n".join([f"• {cmd}" for cmd in left_commands[:15]]) # Limit to 15 per column
821
831
  right_content = "\n".join([f"• {cmd}" for cmd in right_commands[:15]])
822
-
832
+
823
833
  project_columns_table.add_row(left_content, right_content)
824
-
834
+
825
835
  project_panel = self.create_full_width_panel(
826
- project_columns_table,
827
- title="🏗️ Project Commands",
836
+ project_columns_table,
837
+ title="🏗️ Project Commands",
828
838
  border_style="yellow"
829
839
  )
830
-
840
+
831
841
  self.console.print(project_panel)
832
-
842
+
833
843
  except Exception as e:
834
844
  import traceback
835
845
  print(f"❌ ERROR in _display_commands_breakdown: {e}")