django-cfg 1.3.11__py3-none-any.whl → 1.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/accounts/admin/inlines.py +11 -5
  3. django_cfg/apps/accounts/admin/user_admin.py +39 -16
  4. django_cfg/apps/accounts/serializers/profile.py +1 -1
  5. django_cfg/apps/accounts/services/otp_service.py +18 -11
  6. django_cfg/apps/accounts/signals.py +15 -24
  7. django_cfg/apps/accounts/utils/notifications.py +217 -358
  8. django_cfg/apps/accounts/views/otp.py +2 -2
  9. django_cfg/apps/accounts/views/webhook.py +1 -1
  10. django_cfg/apps/agents/core/django_agent.py +1 -1
  11. django_cfg/apps/api/commands/views.py +66 -83
  12. django_cfg/apps/api/health/drf_views.py +269 -0
  13. django_cfg/apps/api/health/serializers.py +45 -0
  14. django_cfg/apps/api/health/urls.py +6 -1
  15. django_cfg/apps/knowbase/admin/actions/__init__.py +13 -0
  16. django_cfg/apps/knowbase/admin/actions/visibility_actions.py +56 -0
  17. django_cfg/apps/knowbase/admin/document_admin.py +136 -270
  18. django_cfg/apps/knowbase/admin/helpers/__init__.py +17 -0
  19. django_cfg/apps/knowbase/admin/helpers/configs.py +72 -0
  20. django_cfg/apps/knowbase/admin/helpers/display_helpers.py +156 -0
  21. django_cfg/apps/knowbase/admin/helpers/statistics.py +108 -0
  22. django_cfg/apps/knowbase/config/constance_fields.py +1 -1
  23. django_cfg/apps/knowbase/config/settings.py +2 -2
  24. django_cfg/apps/knowbase/mixins/__init__.py +19 -2
  25. django_cfg/apps/knowbase/mixins/config/__init__.py +14 -0
  26. django_cfg/apps/knowbase/mixins/config/defaults.py +75 -0
  27. django_cfg/apps/knowbase/mixins/config/meta_config.py +120 -0
  28. django_cfg/apps/knowbase/mixins/creator.py +10 -10
  29. django_cfg/apps/knowbase/mixins/external_data_mixin.py +105 -403
  30. django_cfg/apps/knowbase/mixins/generators/__init__.py +16 -0
  31. django_cfg/apps/knowbase/mixins/generators/content_generator.py +218 -0
  32. django_cfg/apps/knowbase/mixins/generators/field_analyzer.py +76 -0
  33. django_cfg/apps/knowbase/mixins/generators/metadata_generator.py +124 -0
  34. django_cfg/apps/knowbase/mixins/service.py +2 -2
  35. django_cfg/apps/knowbase/services/archive/__init__.py +1 -0
  36. django_cfg/apps/knowbase/services/archive/analyzers/__init__.py +17 -0
  37. django_cfg/apps/knowbase/services/archive/analyzers/complexity_analyzer.py +33 -0
  38. django_cfg/apps/knowbase/services/archive/analyzers/purpose_detector.py +36 -0
  39. django_cfg/apps/knowbase/services/archive/analyzers/quality_analyzer.py +39 -0
  40. django_cfg/apps/knowbase/services/archive/analyzers/tag_generator.py +103 -0
  41. django_cfg/apps/knowbase/services/archive/chunking/__init__.py +19 -0
  42. django_cfg/apps/knowbase/services/archive/chunking/base.py +81 -0
  43. django_cfg/apps/knowbase/services/archive/chunking/json_chunker.py +62 -0
  44. django_cfg/apps/knowbase/services/archive/chunking/markdown_chunker.py +107 -0
  45. django_cfg/apps/knowbase/services/archive/chunking/python_chunker.py +248 -0
  46. django_cfg/apps/knowbase/services/archive/chunking/text_chunker.py +70 -0
  47. django_cfg/apps/knowbase/services/archive/chunking_service.py +110 -729
  48. django_cfg/apps/knowbase/services/archive/context/__init__.py +14 -0
  49. django_cfg/apps/knowbase/services/archive/context/builders.py +220 -0
  50. django_cfg/apps/knowbase/services/archive/context/models.py +38 -0
  51. django_cfg/apps/knowbase/services/embedding/models.py +18 -14
  52. django_cfg/apps/knowbase/services/embedding/processors.py +6 -3
  53. django_cfg/apps/knowbase/tasks/document_processing.py +11 -3
  54. django_cfg/apps/leads/tests.py +1 -1
  55. django_cfg/apps/payments/admin/api_keys_admin.py +1 -1
  56. django_cfg/apps/payments/admin/balance_admin.py +1 -1
  57. django_cfg/apps/payments/admin/currencies_admin.py +1 -1
  58. django_cfg/apps/payments/admin/payments_admin.py +1 -1
  59. django_cfg/apps/payments/admin/subscriptions_admin.py +1 -1
  60. django_cfg/apps/payments/admin_interface/templates/payments/base.html +59 -126
  61. django_cfg/apps/payments/admin_interface/views/api/payments.py +1 -1
  62. django_cfg/apps/payments/admin_interface/views/api/stats.py +1 -1
  63. django_cfg/apps/payments/admin_interface/views/api/users.py +1 -1
  64. django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +1 -1
  65. django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +1 -1
  66. django_cfg/apps/payments/admin_interface/views/base.py +29 -2
  67. django_cfg/apps/payments/apps.py +1 -1
  68. django_cfg/apps/payments/config/django_cfg_integration.py +2 -2
  69. django_cfg/apps/payments/config/helpers.py +3 -2
  70. django_cfg/apps/payments/management/commands/cleanup_expired_data.py +1 -1
  71. django_cfg/apps/payments/management/commands/currency_stats.py +1 -1
  72. django_cfg/apps/payments/management/commands/manage_currencies.py +1 -1
  73. django_cfg/apps/payments/management/commands/manage_providers.py +1 -1
  74. django_cfg/apps/payments/management/commands/process_pending_payments.py +1 -1
  75. django_cfg/apps/payments/management/commands/test_providers.py +1 -1
  76. django_cfg/apps/payments/middleware/api_access.py +1 -1
  77. django_cfg/apps/payments/middleware/rate_limiting.py +1 -1
  78. django_cfg/apps/payments/middleware/usage_tracking.py +1 -1
  79. django_cfg/apps/payments/models/balance.py +2 -2
  80. django_cfg/apps/payments/models/managers/api_key_managers.py +1 -1
  81. django_cfg/apps/payments/models/managers/balance_managers.py +1 -1
  82. django_cfg/apps/payments/models/managers/currency_managers.py +1 -1
  83. django_cfg/apps/payments/models/managers/payment_managers.py +1 -1
  84. django_cfg/apps/payments/models/managers/subscription_managers.py +1 -1
  85. django_cfg/apps/payments/models/payments.py +2 -2
  86. django_cfg/apps/payments/services/cache_service/__init__.py +1 -1
  87. django_cfg/apps/payments/services/cache_service/simple_cache.py +10 -5
  88. django_cfg/apps/payments/services/core/base.py +1 -1
  89. django_cfg/apps/payments/services/core/currency/__init__.py +13 -0
  90. django_cfg/apps/payments/services/core/currency/currency_converter.py +57 -0
  91. django_cfg/apps/payments/services/core/currency/currency_validator.py +61 -0
  92. django_cfg/apps/payments/services/core/operations/__init__.py +15 -0
  93. django_cfg/apps/payments/services/core/operations/payment_canceller.py +100 -0
  94. django_cfg/apps/payments/services/core/operations/payment_creator.py +196 -0
  95. django_cfg/apps/payments/services/core/operations/status_checker.py +100 -0
  96. django_cfg/apps/payments/services/core/payment_service.py +124 -612
  97. django_cfg/apps/payments/services/core/providers/__init__.py +13 -0
  98. django_cfg/apps/payments/services/core/providers/provider_client.py +132 -0
  99. django_cfg/apps/payments/services/core/providers/status_mapper.py +89 -0
  100. django_cfg/apps/payments/services/core/utils/__init__.py +13 -0
  101. django_cfg/apps/payments/services/core/utils/data_converter.py +48 -0
  102. django_cfg/apps/payments/services/core/utils/statistics_calculator.py +69 -0
  103. django_cfg/apps/payments/services/providers/base.py +1 -1
  104. django_cfg/apps/payments/services/providers/nowpayments/__init__.py +3 -3
  105. django_cfg/apps/payments/services/providers/nowpayments/parsers/__init__.py +9 -0
  106. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/__init__.py +23 -0
  107. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/constants.py +23 -0
  108. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/currency_names.py +244 -0
  109. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/patterns.py +511 -0
  110. django_cfg/apps/payments/services/providers/nowpayments/parsers/parser.py +168 -0
  111. django_cfg/apps/payments/services/providers/nowpayments/provider.py +1 -1
  112. django_cfg/apps/payments/services/providers/nowpayments/sync.py +1 -1
  113. django_cfg/apps/payments/services/providers/registry.py +1 -1
  114. django_cfg/apps/payments/services/providers/sync_service.py +1 -1
  115. django_cfg/apps/payments/signals/__init__.py +1 -1
  116. django_cfg/apps/payments/signals/api_key_signals.py +1 -1
  117. django_cfg/apps/payments/signals/balance_signals.py +1 -1
  118. django_cfg/apps/payments/signals/payment_signals.py +1 -1
  119. django_cfg/apps/payments/signals/subscription_signals.py +1 -1
  120. django_cfg/apps/payments/views/api/api_keys.py +1 -1
  121. django_cfg/apps/payments/views/api/balances.py +1 -1
  122. django_cfg/apps/payments/views/api/base.py +1 -1
  123. django_cfg/apps/payments/views/api/currencies.py +1 -1
  124. django_cfg/apps/payments/views/api/payments.py +1 -1
  125. django_cfg/apps/payments/views/api/subscriptions.py +1 -1
  126. django_cfg/apps/payments/views/api/webhooks.py +1 -1
  127. django_cfg/apps/payments/views/serializers/api_keys.py +1 -1
  128. django_cfg/apps/payments/views/serializers/balances.py +1 -1
  129. django_cfg/apps/payments/views/serializers/currencies.py +1 -1
  130. django_cfg/apps/payments/views/serializers/payments.py +1 -1
  131. django_cfg/apps/payments/views/serializers/subscriptions.py +1 -1
  132. django_cfg/apps/payments/views/serializers/webhooks.py +1 -1
  133. django_cfg/apps/support/admin/support_admin.py +21 -13
  134. django_cfg/apps/support/templates/support/chat/access_denied.html +21 -27
  135. django_cfg/apps/support/templates/support/chat/ticket_chat.html +183 -254
  136. django_cfg/apps/support/utils/support_email_service.py +1 -1
  137. django_cfg/apps/tasks/templates/tasks/layout/base.html +20 -115
  138. django_cfg/apps/tasks/utils/simulator.py +1 -1
  139. django_cfg/apps/tasks/views/dashboard.py +33 -3
  140. django_cfg/apps/urls.py +5 -1
  141. django_cfg/cli/README.md +57 -471
  142. django_cfg/cli/commands/create_project.py +140 -529
  143. django_cfg/cli/main.py +13 -10
  144. django_cfg/core/__init__.py +63 -6
  145. django_cfg/core/base/__init__.py +5 -0
  146. django_cfg/core/base/config_model.py +652 -0
  147. django_cfg/core/builders/__init__.py +11 -0
  148. django_cfg/core/builders/apps_builder.py +258 -0
  149. django_cfg/core/builders/middleware_builder.py +115 -0
  150. django_cfg/core/builders/security_builder.py +96 -0
  151. django_cfg/core/config.py +20 -892
  152. django_cfg/core/constants.py +69 -0
  153. django_cfg/core/environment/__init__.py +9 -0
  154. django_cfg/core/exceptions.py +45 -298
  155. django_cfg/core/generation/__init__.py +51 -0
  156. django_cfg/core/generation/core_generators/__init__.py +0 -0
  157. django_cfg/core/generation/core_generators/settings.py +90 -0
  158. django_cfg/core/generation/core_generators/static.py +82 -0
  159. django_cfg/core/generation/core_generators/templates.py +141 -0
  160. django_cfg/core/generation/data_generators/__init__.py +15 -0
  161. django_cfg/core/generation/data_generators/cache.py +132 -0
  162. django_cfg/core/generation/data_generators/database.py +117 -0
  163. django_cfg/core/generation/generation.py +92 -0
  164. django_cfg/core/generation/integration_generators/__init__.py +21 -0
  165. django_cfg/core/generation/integration_generators/api.py +237 -0
  166. django_cfg/core/generation/integration_generators/sessions.py +65 -0
  167. django_cfg/core/generation/integration_generators/tailwind.py +54 -0
  168. django_cfg/core/generation/integration_generators/tasks.py +92 -0
  169. django_cfg/core/generation/integration_generators/third_party.py +144 -0
  170. django_cfg/core/generation/orchestrator.py +285 -0
  171. django_cfg/core/generation/protocols.py +30 -0
  172. django_cfg/core/generation/security_generators/__init__.py +0 -0
  173. django_cfg/core/generation/utility_generators/__init__.py +24 -0
  174. django_cfg/core/generation/utility_generators/email.py +58 -0
  175. django_cfg/core/generation/utility_generators/i18n.py +66 -0
  176. django_cfg/core/generation/utility_generators/limits.py +58 -0
  177. django_cfg/core/generation/utility_generators/logging.py +66 -0
  178. django_cfg/core/generation/utility_generators/security.py +101 -0
  179. django_cfg/core/generation/utils/__init__.py +0 -0
  180. django_cfg/core/generation/utils/helpers.py +32 -0
  181. django_cfg/core/integration/__init__.py +18 -25
  182. django_cfg/core/integration/display/startup.py +146 -133
  183. django_cfg/core/integration/url_integration.py +13 -2
  184. django_cfg/core/services/__init__.py +5 -0
  185. django_cfg/core/services/config_service.py +121 -0
  186. django_cfg/core/state/__init__.py +9 -0
  187. django_cfg/core/state/registry.py +84 -0
  188. django_cfg/core/types/__init__.py +15 -0
  189. django_cfg/core/types/aliases.py +15 -0
  190. django_cfg/core/types/enums.py +49 -0
  191. django_cfg/dashboard/DEBUG_README.md +105 -0
  192. django_cfg/dashboard/REFACTORING_SUMMARY.md +237 -0
  193. django_cfg/dashboard/__init__.py +24 -0
  194. django_cfg/dashboard/components.py +308 -0
  195. django_cfg/dashboard/debug.py +176 -0
  196. django_cfg/dashboard/management/__init__.py +0 -0
  197. django_cfg/dashboard/management/commands/__init__.py +0 -0
  198. django_cfg/dashboard/management/commands/debug_dashboard.py +109 -0
  199. django_cfg/dashboard/sections/__init__.py +1 -0
  200. django_cfg/dashboard/sections/base.py +128 -0
  201. django_cfg/dashboard/sections/commands.py +32 -0
  202. django_cfg/dashboard/sections/overview.py +394 -0
  203. django_cfg/dashboard/sections/stats.py +48 -0
  204. django_cfg/dashboard/sections/system.py +73 -0
  205. django_cfg/management/commands/check_settings.py +6 -2
  206. django_cfg/management/commands/clear_constance.py +6 -1
  207. django_cfg/management/commands/create_token.py +5 -4
  208. django_cfg/management/commands/generate.py +5 -0
  209. django_cfg/management/commands/list_urls.py +7 -2
  210. django_cfg/management/commands/migrate_all.py +6 -2
  211. django_cfg/management/commands/migrator.py +6 -1
  212. django_cfg/management/commands/rundramatiq.py +6 -1
  213. django_cfg/management/commands/rundramatiq_simulator.py +11 -4
  214. django_cfg/management/commands/runserver_ngrok.py +9 -7
  215. django_cfg/management/commands/script.py +25 -21
  216. django_cfg/management/commands/show_config.py +6 -1
  217. django_cfg/management/commands/show_urls.py +8 -3
  218. django_cfg/management/commands/superuser.py +5 -4
  219. django_cfg/management/commands/task_clear.py +8 -3
  220. django_cfg/management/commands/task_status.py +8 -3
  221. django_cfg/management/commands/test_email.py +6 -1
  222. django_cfg/management/commands/test_telegram.py +6 -1
  223. django_cfg/management/commands/test_twilio.py +6 -1
  224. django_cfg/management/commands/tree.py +7 -4
  225. django_cfg/models/__init__.py +88 -3
  226. django_cfg/models/api/__init__.py +27 -0
  227. django_cfg/models/{api.py → api/config.py} +1 -1
  228. django_cfg/models/api/drf/__init__.py +21 -0
  229. django_cfg/models/api/drf/config.py +101 -0
  230. django_cfg/models/api/drf/redoc.py +31 -0
  231. django_cfg/models/api/drf/spectacular.py +129 -0
  232. django_cfg/models/api/drf/swagger.py +59 -0
  233. django_cfg/models/{api_keys.py → api/keys.py} +16 -6
  234. django_cfg/models/{limits.py → api/limits.py} +0 -1
  235. django_cfg/models/base/__init__.py +14 -0
  236. django_cfg/models/django/__init__.py +16 -0
  237. django_cfg/models/{constance.py → django/constance.py} +1 -1
  238. django_cfg/models/{environment.py → django/environment.py} +1 -1
  239. django_cfg/models/infrastructure/__init__.py +17 -0
  240. django_cfg/models/{cache.py → infrastructure/cache.py} +3 -2
  241. django_cfg/models/infrastructure/database/__init__.py +22 -0
  242. django_cfg/models/infrastructure/database/config.py +265 -0
  243. django_cfg/models/infrastructure/database/converters.py +91 -0
  244. django_cfg/models/infrastructure/database/parsers.py +96 -0
  245. django_cfg/models/infrastructure/database/routing.py +85 -0
  246. django_cfg/models/infrastructure/database/validators.py +170 -0
  247. django_cfg/models/{logging.py → infrastructure/logging.py} +1 -1
  248. django_cfg/models/{security.py → infrastructure/security.py} +2 -2
  249. django_cfg/models/ngrok/__init__.py +11 -0
  250. django_cfg/models/ngrok/auth.py +37 -0
  251. django_cfg/models/ngrok/config.py +77 -0
  252. django_cfg/models/ngrok/tunnel.py +35 -0
  253. django_cfg/models/payments/__init__.py +20 -0
  254. django_cfg/models/payments/api_keys.py +57 -0
  255. django_cfg/models/{payments.py → payments/config.py} +56 -154
  256. django_cfg/models/payments/providers/__init__.py +15 -0
  257. django_cfg/models/payments/providers/base.py +25 -0
  258. django_cfg/models/payments/providers/nowpayments.py +48 -0
  259. django_cfg/models/services/__init__.py +18 -0
  260. django_cfg/models/services/base.py +65 -0
  261. django_cfg/models/{email.py → services/email.py} +1 -1
  262. django_cfg/models/services/telegram.py +172 -0
  263. django_cfg/models/tasks/__init__.py +51 -0
  264. django_cfg/models/tasks/backends.py +250 -0
  265. django_cfg/models/tasks/config.py +314 -0
  266. django_cfg/models/tasks/utils.py +174 -0
  267. django_cfg/modules/base.py +18 -3
  268. django_cfg/modules/django_admin/decorators/actions.py +1 -1
  269. django_cfg/modules/django_admin/decorators/display.py +1 -1
  270. django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +1 -1
  271. django_cfg/modules/django_cfg_rpc_client/README.md +346 -0
  272. django_cfg/modules/django_cfg_rpc_client/__init__.py +51 -0
  273. django_cfg/modules/django_cfg_rpc_client/client.py +540 -0
  274. django_cfg/modules/django_cfg_rpc_client/config.py +207 -0
  275. django_cfg/modules/django_cfg_rpc_client/dashboard/README.md +517 -0
  276. django_cfg/modules/django_cfg_rpc_client/dashboard/UNFOLD_INTEGRATION.md +439 -0
  277. django_cfg/modules/django_cfg_rpc_client/dashboard/__init__.py +11 -0
  278. django_cfg/modules/django_cfg_rpc_client/dashboard/apps.py +22 -0
  279. django_cfg/modules/django_cfg_rpc_client/dashboard/monitor.py +435 -0
  280. django_cfg/modules/django_cfg_rpc_client/dashboard/static/django_cfg_rpc_dashboard/js/dashboard.js +373 -0
  281. django_cfg/modules/django_cfg_rpc_client/dashboard/templates/django_cfg_rpc_dashboard/base.html +76 -0
  282. django_cfg/modules/django_cfg_rpc_client/dashboard/templates/django_cfg_rpc_dashboard/dashboard.html +200 -0
  283. django_cfg/modules/django_cfg_rpc_client/dashboard/urls.py +22 -0
  284. django_cfg/modules/django_cfg_rpc_client/dashboard/urls_admin.py +9 -0
  285. django_cfg/modules/django_cfg_rpc_client/dashboard/views.py +251 -0
  286. django_cfg/modules/django_cfg_rpc_client/exceptions.py +201 -0
  287. django_cfg/modules/django_drf_theme/CHANGELOG.md +210 -0
  288. django_cfg/modules/django_drf_theme/EXAMPLE.md +465 -0
  289. django_cfg/modules/django_drf_theme/IMPLEMENTATION.md +232 -0
  290. django_cfg/modules/django_drf_theme/README.md +207 -0
  291. django_cfg/modules/django_drf_theme/TAILWIND_CDN_GUIDE.md +274 -0
  292. django_cfg/modules/django_drf_theme/__init__.py +23 -0
  293. django_cfg/modules/django_drf_theme/apps.py +15 -0
  294. django_cfg/modules/django_drf_theme/renderers.py +58 -0
  295. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/api.html +375 -0
  296. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/base.html +938 -0
  297. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/filter_form.html +132 -0
  298. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/raw_data_form.html +123 -0
  299. django_cfg/modules/django_drf_theme/templatetags/__init__.py +1 -0
  300. django_cfg/modules/django_drf_theme/templatetags/tailwind_tags.py +57 -0
  301. django_cfg/modules/django_email/__init__.py +14 -0
  302. django_cfg/modules/{django_email.py → django_email/service.py} +78 -113
  303. django_cfg/modules/django_email/utils.py +40 -0
  304. django_cfg/modules/django_health/__init__.py +9 -0
  305. django_cfg/modules/{django_health.py → django_health/service.py} +23 -21
  306. django_cfg/modules/django_llm/llm/client.py +155 -550
  307. django_cfg/modules/django_llm/llm/embeddings/__init__.py +13 -0
  308. django_cfg/modules/django_llm/llm/embeddings/mock_embedder.py +106 -0
  309. django_cfg/modules/django_llm/llm/embeddings/openai_embedder.py +79 -0
  310. django_cfg/modules/django_llm/llm/models_api/__init__.py +9 -0
  311. django_cfg/modules/django_llm/llm/models_api/models_query.py +163 -0
  312. django_cfg/modules/django_llm/llm/providers/__init__.py +15 -0
  313. django_cfg/modules/django_llm/llm/providers/config_builder.py +103 -0
  314. django_cfg/modules/django_llm/llm/providers/provider_manager.py +148 -0
  315. django_cfg/modules/django_llm/llm/providers/provider_selector.py +60 -0
  316. django_cfg/modules/django_llm/llm/requests/__init__.py +15 -0
  317. django_cfg/modules/django_llm/llm/requests/cache_manager.py +170 -0
  318. django_cfg/modules/django_llm/llm/requests/chat_handler.py +199 -0
  319. django_cfg/modules/django_llm/llm/requests/embedding_handler.py +113 -0
  320. django_cfg/modules/django_llm/llm/responses/__init__.py +9 -0
  321. django_cfg/modules/django_llm/llm/responses/response_builder.py +131 -0
  322. django_cfg/modules/django_llm/llm/stats/__init__.py +9 -0
  323. django_cfg/modules/django_llm/llm/stats/stats_manager.py +107 -0
  324. django_cfg/modules/django_llm/translator/detectors/__init__.py +13 -0
  325. django_cfg/modules/django_llm/translator/detectors/language_detector.py +90 -0
  326. django_cfg/modules/django_llm/translator/detectors/script_detector.py +153 -0
  327. django_cfg/modules/django_llm/translator/stats/__init__.py +11 -0
  328. django_cfg/modules/django_llm/translator/stats/stats_tracker.py +85 -0
  329. django_cfg/modules/django_llm/translator/translator.py +150 -603
  330. django_cfg/modules/django_llm/translator/translators/__init__.py +15 -0
  331. django_cfg/modules/django_llm/translator/translators/json_translator.py +316 -0
  332. django_cfg/modules/django_llm/translator/translators/text_translator.py +139 -0
  333. django_cfg/modules/django_llm/translator/utils/__init__.py +13 -0
  334. django_cfg/modules/django_llm/translator/utils/prompt_builder.py +110 -0
  335. django_cfg/modules/django_llm/translator/utils/text_utils.py +114 -0
  336. django_cfg/modules/django_logging/FIXES_SUMMARY.md +276 -0
  337. django_cfg/modules/django_logging/LOGGING_GUIDE.md +504 -0
  338. django_cfg/modules/django_logging/__init__.py +14 -0
  339. django_cfg/modules/{django_logger.py → django_logging/django_logger.py} +13 -13
  340. django_cfg/modules/{logger.py → django_logging/logger.py} +14 -4
  341. django_cfg/modules/django_ngrok/__init__.py +39 -0
  342. django_cfg/modules/{django_ngrok.py → django_ngrok/service.py} +14 -42
  343. django_cfg/modules/django_rpc_old/POETRY.md +344 -0
  344. django_cfg/modules/django_rpc_old/README.md +397 -0
  345. django_cfg/modules/django_rpc_old/TESTING.md +358 -0
  346. django_cfg/modules/django_rpc_old/__init__.py +39 -0
  347. django_cfg/modules/django_rpc_old/client.py +531 -0
  348. django_cfg/modules/django_rpc_old/config.py +279 -0
  349. django_cfg/modules/django_rpc_old/exceptions.py +172 -0
  350. django_cfg/modules/django_tailwind/README.md +478 -0
  351. django_cfg/modules/django_tailwind/__init__.py +7 -0
  352. django_cfg/modules/django_tailwind/apps.py +10 -0
  353. django_cfg/modules/django_tailwind/templates/django_tailwind/app.html +5 -0
  354. django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +117 -0
  355. django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +124 -0
  356. django_cfg/modules/django_tailwind/templates/django_tailwind/components/theme_toggle.html +54 -0
  357. django_cfg/modules/django_tailwind/templates/django_tailwind/components/user_menu.html +116 -0
  358. django_cfg/modules/django_tailwind/templates/django_tailwind/simple.html +46 -0
  359. django_cfg/modules/django_tailwind/templatetags/__init__.py +1 -0
  360. django_cfg/modules/django_tailwind/templatetags/tailwind_info.py +185 -0
  361. django_cfg/modules/django_tasks/__init__.py +29 -0
  362. django_cfg/modules/django_tasks/factory.py +127 -0
  363. django_cfg/modules/{django_tasks.py → django_tasks/service.py} +45 -274
  364. django_cfg/modules/django_tasks/settings.py +107 -0
  365. django_cfg/modules/django_telegram/__init__.py +29 -0
  366. django_cfg/modules/{django_telegram.py → django_telegram/service.py} +45 -113
  367. django_cfg/modules/django_telegram/utils.py +62 -0
  368. django_cfg/modules/django_twilio/__init__.py +54 -107
  369. django_cfg/modules/django_twilio/_imports.py +30 -0
  370. django_cfg/modules/django_twilio/base.py +192 -0
  371. django_cfg/modules/django_twilio/email_otp.py +227 -0
  372. django_cfg/modules/django_twilio/sendgrid_service.py +1 -1
  373. django_cfg/modules/django_twilio/simple_service.py +1 -2
  374. django_cfg/modules/django_twilio/sms.py +94 -0
  375. django_cfg/modules/django_twilio/twilio_service.py +2 -3
  376. django_cfg/modules/django_twilio/unified.py +310 -0
  377. django_cfg/modules/django_twilio/utils.py +190 -0
  378. django_cfg/modules/django_twilio/whatsapp.py +137 -0
  379. django_cfg/modules/django_unfold/callbacks/base.py +198 -7
  380. django_cfg/modules/django_unfold/callbacks/main.py +102 -10
  381. django_cfg/modules/django_unfold/dashboard.py +65 -43
  382. django_cfg/modules/django_unfold/models/config.py +13 -12
  383. django_cfg/modules/django_unfold/models/navigation.py +8 -3
  384. django_cfg/modules/django_unfold/models/tabs.py +2 -2
  385. django_cfg/modules/django_unfold/templates/unfold/helpers/app_list.html +102 -0
  386. django_cfg/registry/core.py +24 -26
  387. django_cfg/registry/modules.py +5 -2
  388. django_cfg/registry/services.py +20 -3
  389. django_cfg/registry/third_party.py +8 -8
  390. django_cfg/static/admin/css/dashboard.css +260 -0
  391. django_cfg/static/admin/js/commands.js +171 -0
  392. django_cfg/static/admin/js/dashboard.js +126 -0
  393. django_cfg/templates/admin/components/management_commands.js +375 -0
  394. django_cfg/templates/admin/components/progress_bar.html +18 -23
  395. django_cfg/templates/admin/index.html +48 -20
  396. django_cfg/templates/admin/index_new.html +106 -0
  397. django_cfg/templates/admin/layouts/base_dashboard.html +60 -0
  398. django_cfg/templates/admin/layouts/dashboard_with_tabs.html +1 -20
  399. django_cfg/templates/admin/sections/commands_section.html +626 -0
  400. django_cfg/templates/admin/sections/overview_section.html +112 -0
  401. django_cfg/templates/admin/sections/stats_section.html +35 -0
  402. django_cfg/templates/admin/sections/system_section.html +99 -0
  403. django_cfg/templates/admin/snippets/components/CHARTS_GUIDE.md +322 -0
  404. django_cfg/templates/admin/snippets/components/activity_tracker.html +85 -47
  405. django_cfg/templates/admin/snippets/components/charts_section.html +154 -64
  406. django_cfg/templates/admin/snippets/components/django_commands.html +3 -3
  407. django_cfg/templates/admin/snippets/components/recent_activity_improved.html +25 -0
  408. django_cfg/templates/admin/snippets/components/recent_users_table.html +1 -1
  409. django_cfg/templates/admin/snippets/components/system_metrics.html +179 -93
  410. django_cfg/templates/admin/snippets/zones/zones_table.html +2 -2
  411. django_cfg/templatetags/django_cfg.py +7 -1
  412. django_cfg/utils/smart_defaults.py +4 -4
  413. django_cfg-1.4.0.dist-info/METADATA +920 -0
  414. {django_cfg-1.3.11.dist-info → django_cfg-1.4.0.dist-info}/RECORD +425 -196
  415. django_cfg/apps/accounts/utils/auth_email_service.py +0 -84
  416. django_cfg/apps/payments/services/providers/nowpayments/parsers.py +0 -879
  417. django_cfg/core/generation.py +0 -621
  418. django_cfg/management/commands/validate_config.py +0 -189
  419. django_cfg/models/database.py +0 -480
  420. django_cfg/models/drf.py +0 -272
  421. django_cfg/models/ngrok.py +0 -122
  422. django_cfg/models/services.py +0 -440
  423. django_cfg/models/tasks.py +0 -550
  424. django_cfg/modules/django_twilio/service.py +0 -942
  425. django_cfg/template_archive/django_sample.zip +0 -0
  426. django_cfg/templates/rest_framework/api.html +0 -12
  427. django_cfg/utils/toolkit.py +0 -703
  428. django_cfg-1.3.11.dist-info/METADATA +0 -1029
  429. /django_cfg/apps/accounts/management/commands/{test_otp.py → otp_test.py} +0 -0
  430. /django_cfg/core/{environment.py → environment/detector.py} +0 -0
  431. /django_cfg/models/{cors.py → api/cors.py} +0 -0
  432. /django_cfg/models/{jwt.py → api/jwt.py} +0 -0
  433. /django_cfg/models/{base.py → base/config.py} +0 -0
  434. /django_cfg/models/{cfg.py → base/module.py} +0 -0
  435. /django_cfg/models/{revolution.py → django/revolution.py} +0 -0
  436. /django_cfg/modules/{dramatiq_setup.py → django_tasks/dramatiq_setup.py} +0 -0
  437. {django_cfg-1.3.11.dist-info → django_cfg-1.4.0.dist-info}/WHEEL +0 -0
  438. {django_cfg-1.3.11.dist-info → django_cfg-1.4.0.dist-info}/entry_points.txt +0 -0
  439. {django_cfg-1.3.11.dist-info → django_cfg-1.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,112 @@
1
+ {% load unfold %}
2
+
3
+ <!-- Overview Section -->
4
+ <div class="space-y-10 flex flex-col gap-8">
5
+ <!-- Hero Section with Key Metrics -->
6
+ <div>
7
+ <div class="flex items-center justify-between mb-6">
8
+ <div>
9
+ <h1 class="text-2xl font-bold theme-text">{{ title|default:"System Overview" }}</h1>
10
+ <p class="text-gray-600 dark:text-gray-300 mt-2">
11
+ Real-time monitoring and key performance indicators
12
+ </p>
13
+ </div>
14
+ <div class="flex items-center space-x-2 text-sm text-gray-500 dark:text-gray-400">
15
+ <span class="material-icons text-green-500">fiber_manual_record</span>
16
+ <span>Live data</span>
17
+ </div>
18
+ </div>
19
+
20
+ <!-- Key Statistics Cards -->
21
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-6">
22
+ {% for key, value in data.stats.items %}
23
+ <div class="theme-card p-6 rounded-lg shadow-sm border theme-border">
24
+ <div class="flex items-center justify-between">
25
+ <div>
26
+ <p class="text-sm text-gray-600 dark:text-gray-400 uppercase">{{ key }}</p>
27
+ <p class="text-3xl font-bold theme-text mt-2">{{ value }}</p>
28
+ </div>
29
+ <span class="material-icons text-blue-500 text-4xl">{{ icon|default:"analytics" }}</span>
30
+ </div>
31
+ </div>
32
+ {% endfor %}
33
+ </div>
34
+ </div>
35
+
36
+ <!-- System Health & Quick Actions -->
37
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-8 mb-8">
38
+ <div class="theme-card rounded-lg shadow-sm border theme-border">
39
+ <div class="p-6 border-b theme-border">
40
+ <h3 class="text-lg font-semibold theme-text flex items-center">
41
+ <span class="material-icons text-green-500 mr-2">favorite</span>
42
+ System Health
43
+ </h3>
44
+ </div>
45
+ <div class="p-6">
46
+ <div class="space-y-4">
47
+ {% for key, value in data.system_health.items %}
48
+ <div class="flex items-center justify-between">
49
+ <span class="text-gray-700 dark:text-gray-300">{{ key|title }}</span>
50
+ <span class="font-mono text-sm theme-text">{{ value }}</span>
51
+ </div>
52
+ {% endfor %}
53
+ </div>
54
+ </div>
55
+ </div>
56
+
57
+ <!-- Quick Actions Card -->
58
+ <div class="theme-card rounded-lg border theme-border shadow-sm">
59
+ <div class="p-6">
60
+ {% include 'admin/snippets/components/quick_actions.html' %}
61
+ </div>
62
+ </div>
63
+ </div>
64
+
65
+ <!-- Charts & Recent Activity -->
66
+ <div class="space-y-8">
67
+ <!-- Charts Section -->
68
+ {% include 'admin/snippets/components/charts_section.html' %}
69
+
70
+ <!-- Recent Activity Stream -->
71
+ <div class="theme-card rounded-lg shadow-sm border theme-border">
72
+ <div class="p-6 border-b theme-border">
73
+ <h3 class="text-lg font-semibold theme-text flex items-center">
74
+ <span class="material-icons text-blue-600 mr-2">timeline</span>
75
+ Recent Activity
76
+ </h3>
77
+ </div>
78
+ <div class="p-6">
79
+ {% include 'admin/snippets/components/recent_activity_improved.html' %}
80
+ </div>
81
+ </div>
82
+ </div>
83
+
84
+ <!-- Secondary Metrics Row -->
85
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-8">
86
+ <!-- System Metrics -->
87
+ <div class="theme-card rounded-lg border theme-border shadow-sm">
88
+ <div class="p-6 border-b theme-border">
89
+ <h3 class="text-lg font-semibold theme-text flex items-center">
90
+ <span class="material-icons text-blue-500 mr-2">memory</span>
91
+ System Metrics
92
+ </h3>
93
+ </div>
94
+ <div class="p-6">
95
+ {% include 'admin/snippets/components/system_metrics.html' %}
96
+ </div>
97
+ </div>
98
+
99
+ <!-- Activity Tracker -->
100
+ <div class="theme-card rounded-lg border theme-border shadow-sm">
101
+ <div class="p-6 border-b theme-border">
102
+ <h3 class="text-lg font-semibold theme-text flex items-center">
103
+ <span class="material-icons text-blue-600 mr-2">track_changes</span>
104
+ Activity Tracker
105
+ </h3>
106
+ </div>
107
+ <div class="p-6">
108
+ {% include 'admin/snippets/components/activity_tracker.html' %}
109
+ </div>
110
+ </div>
111
+ </div>
112
+ </div>
@@ -0,0 +1,35 @@
1
+ {% load unfold %}
2
+
3
+ <!-- Statistics Section -->
4
+ <div class="space-y-8">
5
+ <div class="flex items-center justify-between mb-6">
6
+ <div>
7
+ <h1 class="text-2xl font-bold theme-text">{{ title|default:"Statistics" }}</h1>
8
+ <p class="text-gray-600 dark:text-gray-300 mt-2">
9
+ Detailed metrics for each application module
10
+ </p>
11
+ </div>
12
+ </div>
13
+
14
+ <!-- App Statistics -->
15
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
16
+ {% for app in data.app_stats %}
17
+ <div class="theme-card p-6 rounded-lg shadow-sm border theme-border">
18
+ <div class="flex items-center justify-between mb-4">
19
+ <h3 class="font-semibold theme-text">{{ app.name }}</h3>
20
+ <span class="material-icons text-blue-500">{{ app.icon|default:"apps" }}</span>
21
+ </div>
22
+ <div class="space-y-2">
23
+ <div class="flex justify-between text-sm">
24
+ <span class="text-gray-600 dark:text-gray-400">Label:</span>
25
+ <span class="theme-text">{{ app.label }}</span>
26
+ </div>
27
+ <div class="flex justify-between text-sm">
28
+ <span class="text-gray-600 dark:text-gray-400">Models:</span>
29
+ <span class="theme-text font-mono">{{ app.models_count }}</span>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ {% endfor %}
34
+ </div>
35
+ </div>
@@ -0,0 +1,99 @@
1
+ {% load unfold %}
2
+
3
+ <!-- System Management Section -->
4
+ <div class="space-y-8">
5
+ <div class="flex items-center justify-between mb-6">
6
+ <div>
7
+ <h1 class="text-2xl font-bold theme-text">{{ title|default:"System Management" }}</h1>
8
+ <p class="text-gray-600 dark:text-gray-300 mt-2">
9
+ System health checks and configuration overview
10
+ </p>
11
+ </div>
12
+ <div class="flex items-center space-x-2">
13
+ {% if data.health.status == 'healthy' %}
14
+ <span class="material-icons text-green-500">check_circle</span>
15
+ <span class="text-sm text-green-600 dark:text-green-400 font-medium">Healthy</span>
16
+ {% else %}
17
+ <span class="material-icons text-red-500">error</span>
18
+ <span class="text-sm text-red-600 dark:text-red-400 font-medium">Issues Detected</span>
19
+ {% endif %}
20
+ </div>
21
+ </div>
22
+
23
+ <!-- Health Checks Grid -->
24
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
25
+ {% for check_name, check_status in data.health.checks.items %}
26
+ <div class="theme-card p-6 rounded-lg shadow-sm border theme-border">
27
+ <div class="flex items-center justify-between">
28
+ <div>
29
+ <p class="text-sm text-gray-600 dark:text-gray-400 uppercase">{{ check_name|title }}</p>
30
+ <p class="text-lg font-semibold theme-text mt-2">
31
+ {% if check_status %}
32
+ <span class="text-green-600 dark:text-green-400">Operational</span>
33
+ {% else %}
34
+ <span class="text-red-600 dark:text-red-400">Failed</span>
35
+ {% endif %}
36
+ </p>
37
+ </div>
38
+ {% if check_status %}
39
+ <span class="material-icons text-green-500 text-3xl">check_circle</span>
40
+ {% else %}
41
+ <span class="material-icons text-red-500 text-3xl">cancel</span>
42
+ {% endif %}
43
+ </div>
44
+ </div>
45
+ {% endfor %}
46
+ </div>
47
+
48
+ <!-- Configuration & Services -->
49
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-8">
50
+ <!-- Configuration Card -->
51
+ <div class="theme-card rounded-lg shadow-sm border theme-border">
52
+ <div class="p-6 border-b theme-border">
53
+ <h3 class="text-lg font-semibold theme-text flex items-center">
54
+ <span class="material-icons text-blue-500 mr-2">settings</span>
55
+ Configuration
56
+ </h3>
57
+ </div>
58
+ <div class="p-6">
59
+ <div class="space-y-4">
60
+ {% for key, value in data.configuration.items %}
61
+ <div class="flex items-center justify-between">
62
+ <span class="text-gray-700 dark:text-gray-300">{{ key|title }}</span>
63
+ <span class="font-mono text-sm theme-text">{{ value }}</span>
64
+ </div>
65
+ {% endfor %}
66
+ </div>
67
+ </div>
68
+ </div>
69
+
70
+ <!-- Services Status Card -->
71
+ <div class="theme-card rounded-lg shadow-sm border theme-border">
72
+ <div class="p-6 border-b theme-border">
73
+ <h3 class="text-lg font-semibold theme-text flex items-center">
74
+ <span class="material-icons text-purple-500 mr-2">cloud</span>
75
+ Services
76
+ </h3>
77
+ </div>
78
+ <div class="p-6">
79
+ {% if data.services %}
80
+ <div class="space-y-3">
81
+ {% for service_name, service_status in data.services.items %}
82
+ <div class="flex items-center justify-between text-sm">
83
+ <span class="theme-text">{{ service_name }}</span>
84
+ <div class="status-indicator">
85
+ <span class="status-dot {% if service_status %}success{% else %}error{% endif %}"></span>
86
+ <span class="text-gray-600 dark:text-gray-400">
87
+ {% if service_status %}Active{% else %}Inactive{% endif %}
88
+ </span>
89
+ </div>
90
+ </div>
91
+ {% endfor %}
92
+ </div>
93
+ {% else %}
94
+ <p class="text-gray-500 dark:text-gray-400 text-sm">No external services configured</p>
95
+ {% endif %}
96
+ </div>
97
+ </div>
98
+ </div>
99
+ </div>
@@ -0,0 +1,322 @@
1
+ # Chart.js Integration Guide
2
+
3
+ ## Overview
4
+
5
+ This guide documents the Chart.js integration in the Django CFG dashboard, including key insights, best practices, and solutions to common issues.
6
+
7
+ ## Architecture
8
+
9
+ ### Data Flow
10
+
11
+ ```
12
+ Python (callbacks/charts.py)
13
+ → Pydantic Models (ChartData, ChartDataset)
14
+ → JSON Serialization (.model_dump())
15
+ → Django Template (|safe filter)
16
+ → JavaScript (Chart.js)
17
+ ```
18
+
19
+ ### File Structure
20
+
21
+ - **Backend**: `/django_cfg/modules/django_unfold/callbacks/charts.py` - Chart data generation
22
+ - **Models**: `/django_cfg/modules/django_unfold/models/charts.py` - Pydantic data models
23
+ - **Template**: `/django_cfg/templates/admin/snippets/components/charts_section.html` - Chart rendering
24
+
25
+ ## Key Implementation Details
26
+
27
+ ### 1. Container Height - CRITICAL
28
+
29
+ **❌ WRONG - Infinite Height Growth:**
30
+ ```html
31
+ <canvas id="myChart" height="300"></canvas>
32
+ ```
33
+
34
+ **✅ CORRECT - Fixed Container:**
35
+ ```html
36
+ <div class="relative h-[300px]">
37
+ <canvas id="myChart"></canvas>
38
+ </div>
39
+ ```
40
+
41
+ **Why:** Chart.js with `responsive: true` + `maintainAspectRatio: false` needs a fixed-height parent container. Without it, the canvas grows infinitely as Chart.js tries to maintain responsiveness.
42
+
43
+ ### 2. Data Format
44
+
45
+ Chart.js expects this structure:
46
+
47
+ ```javascript
48
+ {
49
+ type: 'line', // or 'bar', 'pie', etc.
50
+ data: {
51
+ labels: ['Day 1', 'Day 2', ...],
52
+ datasets: [{
53
+ label: 'Dataset Name',
54
+ data: [10, 20, 30, ...],
55
+ backgroundColor: 'rgba(59, 130, 246, 0.1)',
56
+ borderColor: 'rgb(59, 130, 246)',
57
+ tension: 0.4 // for line charts
58
+ }]
59
+ },
60
+ options: { ... }
61
+ }
62
+ ```
63
+
64
+ **Our Implementation:**
65
+ ```javascript
66
+ new Chart(ctx, {
67
+ type: 'line',
68
+ data: chartData, // chartData = {labels: [...], datasets: [...]}
69
+ options: { ... }
70
+ });
71
+ ```
72
+
73
+ ### 3. Python to JavaScript Bridge
74
+
75
+ **Backend (charts.py):**
76
+ ```python
77
+ from .models.charts import ChartData, ChartDataset
78
+
79
+ def get_user_registration_chart_data(self) -> Dict[str, Any]:
80
+ chart_data = ChartData(
81
+ labels=["09/26", "09/27", ...],
82
+ datasets=[
83
+ ChartDataset(
84
+ label="New Users",
85
+ data=[2, 5, 3, ...],
86
+ backgroundColor="rgba(59, 130, 246, 0.1)",
87
+ borderColor="rgb(59, 130, 246)",
88
+ tension=0.4
89
+ )
90
+ ]
91
+ )
92
+ return chart_data.model_dump() # Converts Pydantic to dict
93
+ ```
94
+
95
+ **Template:**
96
+ ```html
97
+ <!-- Serialize to JSON for JavaScript -->
98
+ "charts": {
99
+ "user_registrations_json": json.dumps(self.get_user_registration_chart_data()),
100
+ "user_registrations": self.get_user_registration_chart_data(),
101
+ }
102
+ ```
103
+
104
+ **HTML/JavaScript:**
105
+ ```html
106
+ <script>
107
+ const chartData = {{ charts.user_registrations_json|safe }};
108
+ new Chart(ctx, {
109
+ type: 'line',
110
+ data: chartData,
111
+ options: { ... }
112
+ });
113
+ </script>
114
+ ```
115
+
116
+ ### 4. Chart.js Configuration Best Practices
117
+
118
+ ```javascript
119
+ {
120
+ type: 'line', // or 'bar'
121
+ data: chartData,
122
+ options: {
123
+ responsive: true, // Chart resizes with container
124
+ maintainAspectRatio: false, // Don't maintain aspect ratio
125
+ plugins: {
126
+ legend: {
127
+ display: true,
128
+ position: 'top'
129
+ }
130
+ },
131
+ scales: {
132
+ y: {
133
+ beginAtZero: true, // Start Y axis at 0
134
+ ticks: {
135
+ precision: 0 // Show integers only (no decimals)
136
+ }
137
+ }
138
+ }
139
+ }
140
+ }
141
+ ```
142
+
143
+ ## Common Issues & Solutions
144
+
145
+ ### Issue 1: Charts Not Displaying
146
+
147
+ **Symptoms:** Canvas element exists but no chart visible
148
+
149
+ **Debug Checklist:**
150
+ ```javascript
151
+ console.log('Chart.js loaded:', typeof Chart !== 'undefined');
152
+ console.log('Canvas element:', document.getElementById('myChart'));
153
+ console.log('Chart data:', chartData);
154
+ console.log('Data has labels:', 'labels' in chartData);
155
+ console.log('Data has datasets:', 'datasets' in chartData);
156
+ ```
157
+
158
+ **Common Causes:**
159
+ 1. Chart.js library not loaded
160
+ 2. Canvas ID mismatch
161
+ 3. Data format incorrect
162
+ 4. DOMContentLoaded not fired yet
163
+
164
+ ### Issue 2: Infinite Height Growth
165
+
166
+ **Symptoms:** Chart keeps expanding vertically, page becomes very tall
167
+
168
+ **Solution:** Wrap canvas in fixed-height container (see section 1 above)
169
+
170
+ ### Issue 3: Data Not Updating
171
+
172
+ **Symptoms:** Chart shows old data after refresh
173
+
174
+ **Solution:** Ensure Chart.js recreates instead of updates:
175
+ ```javascript
176
+ // Destroy existing chart first
177
+ if (window.myChart) {
178
+ window.myChart.destroy();
179
+ }
180
+ window.myChart = new Chart(ctx, config);
181
+ ```
182
+
183
+ ### Issue 4: Dark Mode Colors
184
+
185
+ **Best Practices:**
186
+ ```python
187
+ ChartDataset(
188
+ backgroundColor="rgba(59, 130, 246, 0.1)", # Light with transparency
189
+ borderColor="rgb(59, 130, 246)", # Solid color
190
+ # Use theme-aware colors that work in both light/dark modes
191
+ )
192
+ ```
193
+
194
+ ## Template Integration
195
+
196
+ ### Complete Working Example
197
+
198
+ ```html
199
+ {% if charts.user_registrations %}
200
+ <div class="relative h-[300px]">
201
+ <canvas id="userRegistrationsChart"></canvas>
202
+ </div>
203
+ <script>
204
+ document.addEventListener('DOMContentLoaded', function() {
205
+ const ctx = document.getElementById('userRegistrationsChart');
206
+ const chartData = {{ charts.user_registrations_json|safe }};
207
+
208
+ if (ctx && typeof Chart !== 'undefined') {
209
+ try {
210
+ new Chart(ctx, {
211
+ type: 'line',
212
+ data: chartData,
213
+ options: {
214
+ responsive: true,
215
+ maintainAspectRatio: false,
216
+ plugins: {
217
+ legend: {
218
+ display: true,
219
+ position: 'top'
220
+ }
221
+ },
222
+ scales: {
223
+ y: {
224
+ beginAtZero: true,
225
+ ticks: {
226
+ precision: 0
227
+ }
228
+ }
229
+ }
230
+ }
231
+ });
232
+ } catch (error) {
233
+ console.error('Error creating chart:', error);
234
+ }
235
+ }
236
+ });
237
+ </script>
238
+ {% else %}
239
+ <div class="h-[300px] flex items-center justify-center">
240
+ <p class="text-gray-500">No chart data available</p>
241
+ </div>
242
+ {% endif %}
243
+ ```
244
+
245
+ ## Testing Chart Integration
246
+
247
+ ### 1. Verify Chart.js Load
248
+
249
+ ```javascript
250
+ console.log('Chart.js version:', Chart.version); // Should show: 4.4.0
251
+ ```
252
+
253
+ ### 2. Check Data Structure
254
+
255
+ ```python
256
+ # In callbacks/charts.py
257
+ chart_data = self.get_user_registration_chart_data()
258
+ print(f"Labels: {chart_data['labels']}")
259
+ print(f"Dataset count: {len(chart_data['datasets'])}")
260
+ print(f"Data points: {chart_data['datasets'][0]['data']}")
261
+ ```
262
+
263
+ ### 3. Template Debugging
264
+
265
+ ```html
266
+ <!-- Add temporary debug output -->
267
+ <pre>{{ charts.user_registrations|pprint }}</pre>
268
+ ```
269
+
270
+ ## Performance Considerations
271
+
272
+ 1. **Limit Data Points**: Keep chart data to reasonable size (e.g., 7-90 days max)
273
+ 2. **Lazy Loading**: Load charts only when tab/section is visible
274
+ 3. **Caching**: Cache chart data in backend if queries are expensive
275
+ 4. **Animation**: Disable animations for large datasets:
276
+ ```javascript
277
+ options: {
278
+ animation: false // or { duration: 0 }
279
+ }
280
+ ```
281
+
282
+ ## Future Enhancements
283
+
284
+ ### 1. Interactive Features
285
+ - Click to drill down
286
+ - Hover tooltips with detailed info
287
+ - Date range picker integration
288
+
289
+ ### 2. Additional Chart Types
290
+ - Pie/Doughnut for distribution
291
+ - Mixed charts (line + bar)
292
+ - Area charts for cumulative data
293
+
294
+ ### 3. Export Functionality
295
+ - Download as PNG/SVG
296
+ - Export data as CSV
297
+ - Share chart snapshots
298
+
299
+ ## Troubleshooting Reference
300
+
301
+ | Symptom | Likely Cause | Solution |
302
+ |---------|--------------|----------|
303
+ | Chart not visible | No fixed-height container | Add `h-[300px]` to parent div |
304
+ | Infinite scrolling | Canvas height attribute set | Remove `height="300"` from canvas |
305
+ | No data | Backend not providing data | Check callback method |
306
+ | Wrong data | Cache issue | Clear browser cache |
307
+ | Colors don't match theme | Hardcoded colors | Use CSS variables or theme-aware colors |
308
+ | Chart flickers | Multiple DOMContentLoaded listeners | Ensure single initialization |
309
+
310
+ ## References
311
+
312
+ - [Chart.js Documentation](https://www.chartjs.org/docs/latest/)
313
+ - [Chart.js Examples](https://www.chartjs.org/docs/latest/samples/)
314
+ - [Tailwind CSS Height Utilities](https://tailwindcss.com/docs/height)
315
+ - Pydantic Models: `/django_cfg/modules/django_unfold/models/charts.py`
316
+ - Chart Callbacks: `/django_cfg/modules/django_unfold/callbacks/charts.py`
317
+
318
+ ---
319
+
320
+ **Last Updated:** 2025-10-03
321
+ **Chart.js Version:** 4.4.0
322
+ **Django Version:** 5.x