django-cfg 1.3.13__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 (438) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/accounts/admin/user_admin.py +39 -16
  3. django_cfg/apps/accounts/serializers/profile.py +1 -1
  4. django_cfg/apps/accounts/services/otp_service.py +18 -11
  5. django_cfg/apps/accounts/signals.py +15 -24
  6. django_cfg/apps/accounts/utils/notifications.py +217 -358
  7. django_cfg/apps/accounts/views/otp.py +2 -2
  8. django_cfg/apps/accounts/views/webhook.py +1 -1
  9. django_cfg/apps/agents/core/django_agent.py +1 -1
  10. django_cfg/apps/api/commands/views.py +66 -83
  11. django_cfg/apps/api/health/drf_views.py +269 -0
  12. django_cfg/apps/api/health/serializers.py +45 -0
  13. django_cfg/apps/api/health/urls.py +6 -1
  14. django_cfg/apps/knowbase/admin/actions/__init__.py +13 -0
  15. django_cfg/apps/knowbase/admin/actions/visibility_actions.py +56 -0
  16. django_cfg/apps/knowbase/admin/document_admin.py +136 -270
  17. django_cfg/apps/knowbase/admin/helpers/__init__.py +17 -0
  18. django_cfg/apps/knowbase/admin/helpers/configs.py +72 -0
  19. django_cfg/apps/knowbase/admin/helpers/display_helpers.py +156 -0
  20. django_cfg/apps/knowbase/admin/helpers/statistics.py +108 -0
  21. django_cfg/apps/knowbase/config/constance_fields.py +1 -1
  22. django_cfg/apps/knowbase/config/settings.py +2 -2
  23. django_cfg/apps/knowbase/mixins/__init__.py +19 -2
  24. django_cfg/apps/knowbase/mixins/config/__init__.py +14 -0
  25. django_cfg/apps/knowbase/mixins/config/defaults.py +75 -0
  26. django_cfg/apps/knowbase/mixins/config/meta_config.py +120 -0
  27. django_cfg/apps/knowbase/mixins/creator.py +10 -10
  28. django_cfg/apps/knowbase/mixins/external_data_mixin.py +105 -403
  29. django_cfg/apps/knowbase/mixins/generators/__init__.py +16 -0
  30. django_cfg/apps/knowbase/mixins/generators/content_generator.py +218 -0
  31. django_cfg/apps/knowbase/mixins/generators/field_analyzer.py +76 -0
  32. django_cfg/apps/knowbase/mixins/generators/metadata_generator.py +124 -0
  33. django_cfg/apps/knowbase/mixins/service.py +2 -2
  34. django_cfg/apps/knowbase/services/archive/__init__.py +1 -0
  35. django_cfg/apps/knowbase/services/archive/analyzers/__init__.py +17 -0
  36. django_cfg/apps/knowbase/services/archive/analyzers/complexity_analyzer.py +33 -0
  37. django_cfg/apps/knowbase/services/archive/analyzers/purpose_detector.py +36 -0
  38. django_cfg/apps/knowbase/services/archive/analyzers/quality_analyzer.py +39 -0
  39. django_cfg/apps/knowbase/services/archive/analyzers/tag_generator.py +103 -0
  40. django_cfg/apps/knowbase/services/archive/chunking/__init__.py +19 -0
  41. django_cfg/apps/knowbase/services/archive/chunking/base.py +81 -0
  42. django_cfg/apps/knowbase/services/archive/chunking/json_chunker.py +62 -0
  43. django_cfg/apps/knowbase/services/archive/chunking/markdown_chunker.py +107 -0
  44. django_cfg/apps/knowbase/services/archive/chunking/python_chunker.py +248 -0
  45. django_cfg/apps/knowbase/services/archive/chunking/text_chunker.py +70 -0
  46. django_cfg/apps/knowbase/services/archive/chunking_service.py +110 -729
  47. django_cfg/apps/knowbase/services/archive/context/__init__.py +14 -0
  48. django_cfg/apps/knowbase/services/archive/context/builders.py +220 -0
  49. django_cfg/apps/knowbase/services/archive/context/models.py +38 -0
  50. django_cfg/apps/knowbase/services/embedding/models.py +18 -14
  51. django_cfg/apps/knowbase/services/embedding/processors.py +6 -3
  52. django_cfg/apps/knowbase/tasks/document_processing.py +11 -3
  53. django_cfg/apps/leads/tests.py +1 -1
  54. django_cfg/apps/payments/admin/api_keys_admin.py +1 -1
  55. django_cfg/apps/payments/admin/balance_admin.py +1 -1
  56. django_cfg/apps/payments/admin/currencies_admin.py +1 -1
  57. django_cfg/apps/payments/admin/payments_admin.py +1 -1
  58. django_cfg/apps/payments/admin/subscriptions_admin.py +1 -1
  59. django_cfg/apps/payments/admin_interface/templates/payments/base.html +59 -126
  60. django_cfg/apps/payments/admin_interface/views/api/payments.py +1 -1
  61. django_cfg/apps/payments/admin_interface/views/api/stats.py +1 -1
  62. django_cfg/apps/payments/admin_interface/views/api/users.py +1 -1
  63. django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +1 -1
  64. django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +1 -1
  65. django_cfg/apps/payments/admin_interface/views/base.py +29 -2
  66. django_cfg/apps/payments/apps.py +1 -1
  67. django_cfg/apps/payments/config/django_cfg_integration.py +2 -2
  68. django_cfg/apps/payments/config/helpers.py +3 -2
  69. django_cfg/apps/payments/management/commands/cleanup_expired_data.py +1 -1
  70. django_cfg/apps/payments/management/commands/currency_stats.py +1 -1
  71. django_cfg/apps/payments/management/commands/manage_currencies.py +1 -1
  72. django_cfg/apps/payments/management/commands/manage_providers.py +1 -1
  73. django_cfg/apps/payments/management/commands/process_pending_payments.py +1 -1
  74. django_cfg/apps/payments/management/commands/test_providers.py +1 -1
  75. django_cfg/apps/payments/middleware/api_access.py +1 -1
  76. django_cfg/apps/payments/middleware/rate_limiting.py +1 -1
  77. django_cfg/apps/payments/middleware/usage_tracking.py +1 -1
  78. django_cfg/apps/payments/models/balance.py +2 -2
  79. django_cfg/apps/payments/models/managers/api_key_managers.py +1 -1
  80. django_cfg/apps/payments/models/managers/balance_managers.py +1 -1
  81. django_cfg/apps/payments/models/managers/currency_managers.py +1 -1
  82. django_cfg/apps/payments/models/managers/payment_managers.py +1 -1
  83. django_cfg/apps/payments/models/managers/subscription_managers.py +1 -1
  84. django_cfg/apps/payments/models/payments.py +2 -2
  85. django_cfg/apps/payments/services/cache_service/__init__.py +1 -1
  86. django_cfg/apps/payments/services/cache_service/simple_cache.py +10 -5
  87. django_cfg/apps/payments/services/core/base.py +1 -1
  88. django_cfg/apps/payments/services/core/currency/__init__.py +13 -0
  89. django_cfg/apps/payments/services/core/currency/currency_converter.py +57 -0
  90. django_cfg/apps/payments/services/core/currency/currency_validator.py +61 -0
  91. django_cfg/apps/payments/services/core/operations/__init__.py +15 -0
  92. django_cfg/apps/payments/services/core/operations/payment_canceller.py +100 -0
  93. django_cfg/apps/payments/services/core/operations/payment_creator.py +196 -0
  94. django_cfg/apps/payments/services/core/operations/status_checker.py +100 -0
  95. django_cfg/apps/payments/services/core/payment_service.py +124 -612
  96. django_cfg/apps/payments/services/core/providers/__init__.py +13 -0
  97. django_cfg/apps/payments/services/core/providers/provider_client.py +132 -0
  98. django_cfg/apps/payments/services/core/providers/status_mapper.py +89 -0
  99. django_cfg/apps/payments/services/core/utils/__init__.py +13 -0
  100. django_cfg/apps/payments/services/core/utils/data_converter.py +48 -0
  101. django_cfg/apps/payments/services/core/utils/statistics_calculator.py +69 -0
  102. django_cfg/apps/payments/services/providers/base.py +1 -1
  103. django_cfg/apps/payments/services/providers/nowpayments/__init__.py +3 -3
  104. django_cfg/apps/payments/services/providers/nowpayments/parsers/__init__.py +9 -0
  105. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/__init__.py +23 -0
  106. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/constants.py +23 -0
  107. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/currency_names.py +244 -0
  108. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/patterns.py +511 -0
  109. django_cfg/apps/payments/services/providers/nowpayments/parsers/parser.py +168 -0
  110. django_cfg/apps/payments/services/providers/nowpayments/provider.py +1 -1
  111. django_cfg/apps/payments/services/providers/nowpayments/sync.py +1 -1
  112. django_cfg/apps/payments/services/providers/registry.py +1 -1
  113. django_cfg/apps/payments/services/providers/sync_service.py +1 -1
  114. django_cfg/apps/payments/signals/__init__.py +1 -1
  115. django_cfg/apps/payments/signals/api_key_signals.py +1 -1
  116. django_cfg/apps/payments/signals/balance_signals.py +1 -1
  117. django_cfg/apps/payments/signals/payment_signals.py +1 -1
  118. django_cfg/apps/payments/signals/subscription_signals.py +1 -1
  119. django_cfg/apps/payments/views/api/api_keys.py +1 -1
  120. django_cfg/apps/payments/views/api/balances.py +1 -1
  121. django_cfg/apps/payments/views/api/base.py +1 -1
  122. django_cfg/apps/payments/views/api/currencies.py +1 -1
  123. django_cfg/apps/payments/views/api/payments.py +1 -1
  124. django_cfg/apps/payments/views/api/subscriptions.py +1 -1
  125. django_cfg/apps/payments/views/api/webhooks.py +1 -1
  126. django_cfg/apps/payments/views/serializers/api_keys.py +1 -1
  127. django_cfg/apps/payments/views/serializers/balances.py +1 -1
  128. django_cfg/apps/payments/views/serializers/currencies.py +1 -1
  129. django_cfg/apps/payments/views/serializers/payments.py +1 -1
  130. django_cfg/apps/payments/views/serializers/subscriptions.py +1 -1
  131. django_cfg/apps/payments/views/serializers/webhooks.py +1 -1
  132. django_cfg/apps/support/admin/support_admin.py +21 -13
  133. django_cfg/apps/support/templates/support/chat/access_denied.html +21 -27
  134. django_cfg/apps/support/templates/support/chat/ticket_chat.html +183 -254
  135. django_cfg/apps/support/utils/support_email_service.py +1 -1
  136. django_cfg/apps/tasks/templates/tasks/layout/base.html +20 -115
  137. django_cfg/apps/tasks/utils/simulator.py +1 -1
  138. django_cfg/apps/tasks/views/dashboard.py +33 -3
  139. django_cfg/apps/urls.py +5 -1
  140. django_cfg/cli/README.md +57 -471
  141. django_cfg/cli/commands/create_project.py +140 -529
  142. django_cfg/cli/main.py +13 -10
  143. django_cfg/core/__init__.py +63 -6
  144. django_cfg/core/base/__init__.py +5 -0
  145. django_cfg/core/base/config_model.py +652 -0
  146. django_cfg/core/builders/__init__.py +11 -0
  147. django_cfg/core/builders/apps_builder.py +258 -0
  148. django_cfg/core/builders/middleware_builder.py +115 -0
  149. django_cfg/core/builders/security_builder.py +96 -0
  150. django_cfg/core/config.py +20 -892
  151. django_cfg/core/constants.py +69 -0
  152. django_cfg/core/environment/__init__.py +9 -0
  153. django_cfg/core/exceptions.py +45 -298
  154. django_cfg/core/generation/__init__.py +51 -0
  155. django_cfg/core/generation/core_generators/__init__.py +0 -0
  156. django_cfg/core/generation/core_generators/settings.py +90 -0
  157. django_cfg/core/generation/core_generators/static.py +82 -0
  158. django_cfg/core/generation/core_generators/templates.py +141 -0
  159. django_cfg/core/generation/data_generators/__init__.py +15 -0
  160. django_cfg/core/generation/data_generators/cache.py +132 -0
  161. django_cfg/core/generation/data_generators/database.py +117 -0
  162. django_cfg/core/generation/generation.py +92 -0
  163. django_cfg/core/generation/integration_generators/__init__.py +21 -0
  164. django_cfg/core/generation/integration_generators/api.py +237 -0
  165. django_cfg/core/generation/integration_generators/sessions.py +65 -0
  166. django_cfg/core/generation/integration_generators/tailwind.py +54 -0
  167. django_cfg/core/generation/integration_generators/tasks.py +92 -0
  168. django_cfg/core/generation/integration_generators/third_party.py +144 -0
  169. django_cfg/core/generation/orchestrator.py +285 -0
  170. django_cfg/core/generation/protocols.py +30 -0
  171. django_cfg/core/generation/security_generators/__init__.py +0 -0
  172. django_cfg/core/generation/utility_generators/__init__.py +24 -0
  173. django_cfg/core/generation/utility_generators/email.py +58 -0
  174. django_cfg/core/generation/utility_generators/i18n.py +66 -0
  175. django_cfg/core/generation/utility_generators/limits.py +58 -0
  176. django_cfg/core/generation/utility_generators/logging.py +66 -0
  177. django_cfg/core/generation/utility_generators/security.py +101 -0
  178. django_cfg/core/generation/utils/__init__.py +0 -0
  179. django_cfg/core/generation/utils/helpers.py +32 -0
  180. django_cfg/core/integration/__init__.py +18 -25
  181. django_cfg/core/integration/display/startup.py +146 -133
  182. django_cfg/core/integration/url_integration.py +13 -2
  183. django_cfg/core/services/__init__.py +5 -0
  184. django_cfg/core/services/config_service.py +121 -0
  185. django_cfg/core/state/__init__.py +9 -0
  186. django_cfg/core/state/registry.py +84 -0
  187. django_cfg/core/types/__init__.py +15 -0
  188. django_cfg/core/types/aliases.py +15 -0
  189. django_cfg/core/types/enums.py +49 -0
  190. django_cfg/dashboard/DEBUG_README.md +105 -0
  191. django_cfg/dashboard/REFACTORING_SUMMARY.md +237 -0
  192. django_cfg/dashboard/__init__.py +24 -0
  193. django_cfg/dashboard/components.py +308 -0
  194. django_cfg/dashboard/debug.py +176 -0
  195. django_cfg/dashboard/management/__init__.py +0 -0
  196. django_cfg/dashboard/management/commands/__init__.py +0 -0
  197. django_cfg/dashboard/management/commands/debug_dashboard.py +109 -0
  198. django_cfg/dashboard/sections/__init__.py +1 -0
  199. django_cfg/dashboard/sections/base.py +128 -0
  200. django_cfg/dashboard/sections/commands.py +32 -0
  201. django_cfg/dashboard/sections/overview.py +394 -0
  202. django_cfg/dashboard/sections/stats.py +48 -0
  203. django_cfg/dashboard/sections/system.py +73 -0
  204. django_cfg/management/commands/check_settings.py +6 -2
  205. django_cfg/management/commands/clear_constance.py +6 -1
  206. django_cfg/management/commands/create_token.py +5 -4
  207. django_cfg/management/commands/generate.py +5 -0
  208. django_cfg/management/commands/list_urls.py +7 -2
  209. django_cfg/management/commands/migrate_all.py +6 -2
  210. django_cfg/management/commands/migrator.py +6 -1
  211. django_cfg/management/commands/rundramatiq.py +6 -1
  212. django_cfg/management/commands/rundramatiq_simulator.py +11 -4
  213. django_cfg/management/commands/runserver_ngrok.py +9 -7
  214. django_cfg/management/commands/script.py +25 -21
  215. django_cfg/management/commands/show_config.py +6 -1
  216. django_cfg/management/commands/show_urls.py +8 -3
  217. django_cfg/management/commands/superuser.py +5 -4
  218. django_cfg/management/commands/task_clear.py +8 -3
  219. django_cfg/management/commands/task_status.py +8 -3
  220. django_cfg/management/commands/test_email.py +6 -1
  221. django_cfg/management/commands/test_telegram.py +6 -1
  222. django_cfg/management/commands/test_twilio.py +6 -1
  223. django_cfg/management/commands/tree.py +7 -4
  224. django_cfg/models/__init__.py +88 -3
  225. django_cfg/models/api/__init__.py +27 -0
  226. django_cfg/models/{api.py → api/config.py} +1 -1
  227. django_cfg/models/api/drf/__init__.py +21 -0
  228. django_cfg/models/api/drf/config.py +101 -0
  229. django_cfg/models/api/drf/redoc.py +31 -0
  230. django_cfg/models/api/drf/spectacular.py +129 -0
  231. django_cfg/models/api/drf/swagger.py +59 -0
  232. django_cfg/models/{api_keys.py → api/keys.py} +16 -6
  233. django_cfg/models/{limits.py → api/limits.py} +0 -1
  234. django_cfg/models/base/__init__.py +14 -0
  235. django_cfg/models/django/__init__.py +16 -0
  236. django_cfg/models/{constance.py → django/constance.py} +1 -1
  237. django_cfg/models/{environment.py → django/environment.py} +1 -1
  238. django_cfg/models/infrastructure/__init__.py +17 -0
  239. django_cfg/models/{cache.py → infrastructure/cache.py} +3 -2
  240. django_cfg/models/infrastructure/database/__init__.py +22 -0
  241. django_cfg/models/infrastructure/database/config.py +265 -0
  242. django_cfg/models/infrastructure/database/converters.py +91 -0
  243. django_cfg/models/infrastructure/database/parsers.py +96 -0
  244. django_cfg/models/infrastructure/database/routing.py +85 -0
  245. django_cfg/models/infrastructure/database/validators.py +170 -0
  246. django_cfg/models/{logging.py → infrastructure/logging.py} +1 -1
  247. django_cfg/models/{security.py → infrastructure/security.py} +2 -2
  248. django_cfg/models/ngrok/__init__.py +11 -0
  249. django_cfg/models/ngrok/auth.py +37 -0
  250. django_cfg/models/ngrok/config.py +77 -0
  251. django_cfg/models/ngrok/tunnel.py +35 -0
  252. django_cfg/models/payments/__init__.py +20 -0
  253. django_cfg/models/payments/api_keys.py +57 -0
  254. django_cfg/models/{payments.py → payments/config.py} +56 -154
  255. django_cfg/models/payments/providers/__init__.py +15 -0
  256. django_cfg/models/payments/providers/base.py +25 -0
  257. django_cfg/models/payments/providers/nowpayments.py +48 -0
  258. django_cfg/models/services/__init__.py +18 -0
  259. django_cfg/models/services/base.py +65 -0
  260. django_cfg/models/{email.py → services/email.py} +1 -1
  261. django_cfg/models/services/telegram.py +172 -0
  262. django_cfg/models/tasks/__init__.py +51 -0
  263. django_cfg/models/tasks/backends.py +250 -0
  264. django_cfg/models/tasks/config.py +314 -0
  265. django_cfg/models/tasks/utils.py +174 -0
  266. django_cfg/modules/base.py +18 -3
  267. django_cfg/modules/django_admin/decorators/actions.py +1 -1
  268. django_cfg/modules/django_admin/decorators/display.py +1 -1
  269. django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +1 -1
  270. django_cfg/modules/django_cfg_rpc_client/README.md +346 -0
  271. django_cfg/modules/django_cfg_rpc_client/__init__.py +51 -0
  272. django_cfg/modules/django_cfg_rpc_client/client.py +540 -0
  273. django_cfg/modules/django_cfg_rpc_client/config.py +207 -0
  274. django_cfg/modules/django_cfg_rpc_client/dashboard/README.md +517 -0
  275. django_cfg/modules/django_cfg_rpc_client/dashboard/UNFOLD_INTEGRATION.md +439 -0
  276. django_cfg/modules/django_cfg_rpc_client/dashboard/__init__.py +11 -0
  277. django_cfg/modules/django_cfg_rpc_client/dashboard/apps.py +22 -0
  278. django_cfg/modules/django_cfg_rpc_client/dashboard/monitor.py +435 -0
  279. django_cfg/modules/django_cfg_rpc_client/dashboard/static/django_cfg_rpc_dashboard/js/dashboard.js +373 -0
  280. django_cfg/modules/django_cfg_rpc_client/dashboard/templates/django_cfg_rpc_dashboard/base.html +76 -0
  281. django_cfg/modules/django_cfg_rpc_client/dashboard/templates/django_cfg_rpc_dashboard/dashboard.html +200 -0
  282. django_cfg/modules/django_cfg_rpc_client/dashboard/urls.py +22 -0
  283. django_cfg/modules/django_cfg_rpc_client/dashboard/urls_admin.py +9 -0
  284. django_cfg/modules/django_cfg_rpc_client/dashboard/views.py +251 -0
  285. django_cfg/modules/django_cfg_rpc_client/exceptions.py +201 -0
  286. django_cfg/modules/django_drf_theme/CHANGELOG.md +210 -0
  287. django_cfg/modules/django_drf_theme/EXAMPLE.md +465 -0
  288. django_cfg/modules/django_drf_theme/IMPLEMENTATION.md +232 -0
  289. django_cfg/modules/django_drf_theme/README.md +207 -0
  290. django_cfg/modules/django_drf_theme/TAILWIND_CDN_GUIDE.md +274 -0
  291. django_cfg/modules/django_drf_theme/__init__.py +23 -0
  292. django_cfg/modules/django_drf_theme/apps.py +15 -0
  293. django_cfg/modules/django_drf_theme/renderers.py +58 -0
  294. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/api.html +375 -0
  295. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/base.html +938 -0
  296. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/filter_form.html +132 -0
  297. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/raw_data_form.html +123 -0
  298. django_cfg/modules/django_drf_theme/templatetags/__init__.py +1 -0
  299. django_cfg/modules/django_drf_theme/templatetags/tailwind_tags.py +57 -0
  300. django_cfg/modules/django_email/__init__.py +14 -0
  301. django_cfg/modules/{django_email.py → django_email/service.py} +78 -113
  302. django_cfg/modules/django_email/utils.py +40 -0
  303. django_cfg/modules/django_health/__init__.py +9 -0
  304. django_cfg/modules/{django_health.py → django_health/service.py} +23 -21
  305. django_cfg/modules/django_llm/llm/client.py +155 -550
  306. django_cfg/modules/django_llm/llm/embeddings/__init__.py +13 -0
  307. django_cfg/modules/django_llm/llm/embeddings/mock_embedder.py +106 -0
  308. django_cfg/modules/django_llm/llm/embeddings/openai_embedder.py +79 -0
  309. django_cfg/modules/django_llm/llm/models_api/__init__.py +9 -0
  310. django_cfg/modules/django_llm/llm/models_api/models_query.py +163 -0
  311. django_cfg/modules/django_llm/llm/providers/__init__.py +15 -0
  312. django_cfg/modules/django_llm/llm/providers/config_builder.py +103 -0
  313. django_cfg/modules/django_llm/llm/providers/provider_manager.py +148 -0
  314. django_cfg/modules/django_llm/llm/providers/provider_selector.py +60 -0
  315. django_cfg/modules/django_llm/llm/requests/__init__.py +15 -0
  316. django_cfg/modules/django_llm/llm/requests/cache_manager.py +170 -0
  317. django_cfg/modules/django_llm/llm/requests/chat_handler.py +199 -0
  318. django_cfg/modules/django_llm/llm/requests/embedding_handler.py +113 -0
  319. django_cfg/modules/django_llm/llm/responses/__init__.py +9 -0
  320. django_cfg/modules/django_llm/llm/responses/response_builder.py +131 -0
  321. django_cfg/modules/django_llm/llm/stats/__init__.py +9 -0
  322. django_cfg/modules/django_llm/llm/stats/stats_manager.py +107 -0
  323. django_cfg/modules/django_llm/translator/detectors/__init__.py +13 -0
  324. django_cfg/modules/django_llm/translator/detectors/language_detector.py +90 -0
  325. django_cfg/modules/django_llm/translator/detectors/script_detector.py +153 -0
  326. django_cfg/modules/django_llm/translator/stats/__init__.py +11 -0
  327. django_cfg/modules/django_llm/translator/stats/stats_tracker.py +85 -0
  328. django_cfg/modules/django_llm/translator/translator.py +150 -603
  329. django_cfg/modules/django_llm/translator/translators/__init__.py +15 -0
  330. django_cfg/modules/django_llm/translator/translators/json_translator.py +316 -0
  331. django_cfg/modules/django_llm/translator/translators/text_translator.py +139 -0
  332. django_cfg/modules/django_llm/translator/utils/__init__.py +13 -0
  333. django_cfg/modules/django_llm/translator/utils/prompt_builder.py +110 -0
  334. django_cfg/modules/django_llm/translator/utils/text_utils.py +114 -0
  335. django_cfg/modules/django_logging/FIXES_SUMMARY.md +276 -0
  336. django_cfg/modules/django_logging/LOGGING_GUIDE.md +504 -0
  337. django_cfg/modules/django_logging/__init__.py +14 -0
  338. django_cfg/modules/{django_logger.py → django_logging/django_logger.py} +13 -13
  339. django_cfg/modules/{logger.py → django_logging/logger.py} +14 -4
  340. django_cfg/modules/django_ngrok/__init__.py +39 -0
  341. django_cfg/modules/{django_ngrok.py → django_ngrok/service.py} +14 -42
  342. django_cfg/modules/django_rpc_old/POETRY.md +344 -0
  343. django_cfg/modules/django_rpc_old/README.md +397 -0
  344. django_cfg/modules/django_rpc_old/TESTING.md +358 -0
  345. django_cfg/modules/django_rpc_old/__init__.py +39 -0
  346. django_cfg/modules/django_rpc_old/client.py +531 -0
  347. django_cfg/modules/django_rpc_old/config.py +279 -0
  348. django_cfg/modules/django_rpc_old/exceptions.py +172 -0
  349. django_cfg/modules/django_tailwind/README.md +478 -0
  350. django_cfg/modules/django_tailwind/__init__.py +7 -0
  351. django_cfg/modules/django_tailwind/apps.py +10 -0
  352. django_cfg/modules/django_tailwind/templates/django_tailwind/app.html +5 -0
  353. django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +117 -0
  354. django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +124 -0
  355. django_cfg/modules/django_tailwind/templates/django_tailwind/components/theme_toggle.html +54 -0
  356. django_cfg/modules/django_tailwind/templates/django_tailwind/components/user_menu.html +116 -0
  357. django_cfg/modules/django_tailwind/templates/django_tailwind/simple.html +46 -0
  358. django_cfg/modules/django_tailwind/templatetags/__init__.py +1 -0
  359. django_cfg/modules/django_tailwind/templatetags/tailwind_info.py +185 -0
  360. django_cfg/modules/django_tasks/__init__.py +29 -0
  361. django_cfg/modules/django_tasks/factory.py +127 -0
  362. django_cfg/modules/{django_tasks.py → django_tasks/service.py} +45 -274
  363. django_cfg/modules/django_tasks/settings.py +107 -0
  364. django_cfg/modules/django_telegram/__init__.py +29 -0
  365. django_cfg/modules/{django_telegram.py → django_telegram/service.py} +45 -113
  366. django_cfg/modules/django_telegram/utils.py +62 -0
  367. django_cfg/modules/django_twilio/__init__.py +54 -107
  368. django_cfg/modules/django_twilio/_imports.py +30 -0
  369. django_cfg/modules/django_twilio/base.py +192 -0
  370. django_cfg/modules/django_twilio/email_otp.py +227 -0
  371. django_cfg/modules/django_twilio/sendgrid_service.py +1 -1
  372. django_cfg/modules/django_twilio/simple_service.py +1 -2
  373. django_cfg/modules/django_twilio/sms.py +94 -0
  374. django_cfg/modules/django_twilio/twilio_service.py +2 -3
  375. django_cfg/modules/django_twilio/unified.py +310 -0
  376. django_cfg/modules/django_twilio/utils.py +190 -0
  377. django_cfg/modules/django_twilio/whatsapp.py +137 -0
  378. django_cfg/modules/django_unfold/callbacks/base.py +198 -7
  379. django_cfg/modules/django_unfold/callbacks/main.py +102 -10
  380. django_cfg/modules/django_unfold/dashboard.py +65 -43
  381. django_cfg/modules/django_unfold/models/config.py +13 -12
  382. django_cfg/modules/django_unfold/models/navigation.py +8 -3
  383. django_cfg/modules/django_unfold/models/tabs.py +2 -2
  384. django_cfg/modules/django_unfold/templates/unfold/helpers/app_list.html +102 -0
  385. django_cfg/registry/core.py +24 -26
  386. django_cfg/registry/modules.py +5 -2
  387. django_cfg/registry/services.py +20 -3
  388. django_cfg/registry/third_party.py +8 -8
  389. django_cfg/static/admin/css/dashboard.css +260 -0
  390. django_cfg/static/admin/js/commands.js +171 -0
  391. django_cfg/static/admin/js/dashboard.js +126 -0
  392. django_cfg/templates/admin/components/management_commands.js +375 -0
  393. django_cfg/templates/admin/components/progress_bar.html +18 -23
  394. django_cfg/templates/admin/index.html +48 -20
  395. django_cfg/templates/admin/index_new.html +106 -0
  396. django_cfg/templates/admin/layouts/base_dashboard.html +60 -0
  397. django_cfg/templates/admin/layouts/dashboard_with_tabs.html +1 -20
  398. django_cfg/templates/admin/sections/commands_section.html +626 -0
  399. django_cfg/templates/admin/sections/overview_section.html +112 -0
  400. django_cfg/templates/admin/sections/stats_section.html +35 -0
  401. django_cfg/templates/admin/sections/system_section.html +99 -0
  402. django_cfg/templates/admin/snippets/components/CHARTS_GUIDE.md +322 -0
  403. django_cfg/templates/admin/snippets/components/activity_tracker.html +85 -47
  404. django_cfg/templates/admin/snippets/components/charts_section.html +154 -64
  405. django_cfg/templates/admin/snippets/components/django_commands.html +3 -3
  406. django_cfg/templates/admin/snippets/components/recent_activity_improved.html +25 -0
  407. django_cfg/templates/admin/snippets/components/recent_users_table.html +1 -1
  408. django_cfg/templates/admin/snippets/components/system_metrics.html +179 -93
  409. django_cfg/templates/admin/snippets/zones/zones_table.html +2 -2
  410. django_cfg/templatetags/django_cfg.py +7 -1
  411. django_cfg/utils/smart_defaults.py +4 -4
  412. django_cfg-1.4.0.dist-info/METADATA +920 -0
  413. {django_cfg-1.3.13.dist-info → django_cfg-1.4.0.dist-info}/RECORD +424 -195
  414. django_cfg/apps/accounts/utils/auth_email_service.py +0 -84
  415. django_cfg/apps/payments/services/providers/nowpayments/parsers.py +0 -879
  416. django_cfg/core/generation.py +0 -621
  417. django_cfg/management/commands/validate_config.py +0 -189
  418. django_cfg/models/database.py +0 -480
  419. django_cfg/models/drf.py +0 -272
  420. django_cfg/models/ngrok.py +0 -122
  421. django_cfg/models/services.py +0 -440
  422. django_cfg/models/tasks.py +0 -550
  423. django_cfg/modules/django_twilio/service.py +0 -942
  424. django_cfg/template_archive/django_sample.zip +0 -0
  425. django_cfg/templates/rest_framework/api.html +0 -12
  426. django_cfg/utils/toolkit.py +0 -703
  427. django_cfg-1.3.13.dist-info/METADATA +0 -1029
  428. /django_cfg/apps/accounts/management/commands/{test_otp.py → otp_test.py} +0 -0
  429. /django_cfg/core/{environment.py → environment/detector.py} +0 -0
  430. /django_cfg/models/{cors.py → api/cors.py} +0 -0
  431. /django_cfg/models/{jwt.py → api/jwt.py} +0 -0
  432. /django_cfg/models/{base.py → base/config.py} +0 -0
  433. /django_cfg/models/{cfg.py → base/module.py} +0 -0
  434. /django_cfg/models/{revolution.py → django/revolution.py} +0 -0
  435. /django_cfg/modules/{dramatiq_setup.py → django_tasks/dramatiq_setup.py} +0 -0
  436. {django_cfg-1.3.13.dist-info → django_cfg-1.4.0.dist-info}/WHEEL +0 -0
  437. {django_cfg-1.3.13.dist-info → django_cfg-1.4.0.dist-info}/entry_points.txt +0 -0
  438. {django_cfg-1.3.13.dist-info → django_cfg-1.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,504 @@
1
+ # Django CFG Logging Strategy Guide
2
+
3
+ ## Overview
4
+
5
+ Django CFG uses a sophisticated logging system that automatically adjusts based on the `debug` configuration setting. This guide explains the logging architecture, how to control logging output, and best practices.
6
+
7
+ ## Core Principles
8
+
9
+ ### 1. Debug-Aware Logging
10
+
11
+ Logging verbosity is controlled by the `config.debug` setting:
12
+
13
+ ```python
14
+ # config.py
15
+ debug: bool = False # Production
16
+ debug: bool = True # Development
17
+ ```
18
+
19
+ **Log Levels by Mode:**
20
+
21
+ | Mode | Level | What You See |
22
+ |------|-------|--------------|
23
+ | `debug=True` | DEBUG | Everything: DEBUG, INFO, WARNING, ERROR, CRITICAL |
24
+ | `debug=False` | WARNING | Only important: WARNING, ERROR, CRITICAL |
25
+
26
+ **Why This Matters:**
27
+ - **Production** (`debug=False`): Clean logs, only warnings and errors → easier monitoring
28
+ - **Development** (`debug=True`): Verbose logs → easier debugging
29
+
30
+ ### 2. Modular File Structure
31
+
32
+ Logs are organized by module for easy troubleshooting:
33
+
34
+ ```
35
+ logs/
36
+ ├── django.log # All Django logs (root logger)
37
+ └── djangocfg/
38
+ ├── core.log # Core django_cfg functionality
39
+ ├── apps.log # Apps (payments, agents, etc.)
40
+ ├── models.log # Data models
41
+ └── modules.log # Modules (logging, tasks, etc.)
42
+ ```
43
+
44
+ **Automatic Module Detection:**
45
+ The logging system automatically routes logs based on the logger name:
46
+ - `django_cfg.core.*` → `core.log`
47
+ - `django_cfg.apps.payments.*` → `apps.log`
48
+ - `django_cfg.modules.*` → `modules.log`
49
+
50
+ ### 3. Dual Handler System
51
+
52
+ Each django-cfg logger has TWO handlers:
53
+
54
+ 1. **Console Handler** (stdout/stderr)
55
+ - Uses Rich formatting for pretty output
56
+ - Respects debug level
57
+ - Shows in terminal during development
58
+
59
+ 2. **File Handler** (modular)
60
+ - Plain text format for parsing
61
+ - Module-specific files
62
+ - Persists for analysis
63
+
64
+ ## Configuration
65
+
66
+ ### YAML Configuration
67
+
68
+ ```yaml
69
+ # config.dev.yaml
70
+ debug: true # Verbose logging
71
+
72
+ # config.prod.yaml
73
+ debug: false # Only warnings/errors
74
+ ```
75
+
76
+ ### Environment Variable Fallback
77
+
78
+ If config is not available, uses `DEBUG` environment variable:
79
+
80
+ ```bash
81
+ DEBUG=true python manage.py runserver # Verbose
82
+ DEBUG=false python manage.py runserver # Quiet
83
+ ```
84
+
85
+ ## Usage Examples
86
+
87
+ ### Basic Logging
88
+
89
+ ```python
90
+ from django_cfg.modules.django_logging import get_logger
91
+
92
+ logger = get_logger(__name__)
93
+
94
+ # These only show when debug=True:
95
+ logger.debug("Detailed debugging information")
96
+ logger.info("General informational message")
97
+
98
+ # These ALWAYS show:
99
+ logger.warning("Something unexpected happened")
100
+ logger.error("An error occurred")
101
+ logger.critical("Critical system failure")
102
+ ```
103
+
104
+ ### Auto-Detected Module Names
105
+
106
+ The `get_logger()` function automatically detects the module:
107
+
108
+ ```python
109
+ # In: /django_cfg/apps/payments/services/provider.py
110
+ logger = get_logger() # Auto-detects as 'django_cfg.apps.payments'
111
+
112
+ # Manual override:
113
+ logger = get_logger('django_cfg.custom_module')
114
+ ```
115
+
116
+ ### Rich Console Output
117
+
118
+ When `debug=True`, you get beautifully formatted console output:
119
+
120
+ ```
121
+ [10/02/25 17:52:00] INFO 🚀 Generated DRF settings
122
+ INFO ✅ Dramatiq enabled with 7 queues
123
+ ```
124
+
125
+ When `debug=False`, console is silent except for warnings/errors.
126
+
127
+ ## Logger Types
128
+
129
+ ### 1. Django Logger (`django_logger.py`)
130
+
131
+ **NEW Simple Auto-Configuring Logger**
132
+
133
+ ```python
134
+ from django_cfg.modules.django_logging.django_logger import get_logger
135
+
136
+ logger = get_logger(__name__)
137
+ logger.info("This message respects debug mode")
138
+ ```
139
+
140
+ **Features:**
141
+ - Automatically respects `config.debug`
142
+ - Modular file output
143
+ - Single source of truth for all django-cfg logging
144
+
145
+ **When to Use:** For all new django-cfg code (PREFERRED)
146
+
147
+ ### 2. Legacy Rich Logger (`logger.py`)
148
+
149
+ **OLD Rich-Formatted Logger**
150
+
151
+ ```python
152
+ from django_cfg.modules.django_logging.logger import DjangoCfgLogger
153
+
154
+ logger = DjangoCfgLogger()
155
+ logger.info("Rich formatted message")
156
+ ```
157
+
158
+ **Features:**
159
+ - Fancy Rich console formatting
160
+ - NOW respects `config.debug` (recently fixed)
161
+ - Used in older code
162
+
163
+ **When to Use:** Existing code that hasn't been migrated yet
164
+
165
+ ## How Debug Control Works
166
+
167
+ ### Architecture Flow
168
+
169
+ ```
170
+ ┌─────────────────────────────────────────────────────┐
171
+ │ 1. config.debug = False │
172
+ │ (Set in config.dev.yaml / config.prod.yaml) │
173
+ └────────────────────┬────────────────────────────────┘
174
+
175
+
176
+ ┌─────────────────────────────────────────────────────┐
177
+ │ 2. Logger Setup Detects Debug Mode │
178
+ │ - Checks config.debug first │
179
+ │ - Falls back to DEBUG env var │
180
+ └────────────────────┬────────────────────────────────┘
181
+
182
+
183
+ ┌─────────────────────────────────────────────────────┐
184
+ │ 3. Sets Log Level Based on Debug │
185
+ │ - debug=True → logging.DEBUG (all messages) │
186
+ │ - debug=False → logging.WARNING (warn+ only) │
187
+ └────────────────────┬────────────────────────────────┘
188
+
189
+
190
+ ┌─────────────────────────────────────────────────────┐
191
+ │ 4. Configures Handlers │
192
+ │ - Console Handler: level = log_level │
193
+ │ - File Handler: level = log_level │
194
+ │ - Both respect the same level │
195
+ └────────────────────┬────────────────────────────────┘
196
+
197
+
198
+ ┌─────────────────────────────────────────────────────┐
199
+ │ 5. Runtime Filtering │
200
+ │ - logger.info() → Filtered out if debug=False │
201
+ │ - logger.warning() → Always passes through │
202
+ └─────────────────────────────────────────────────────┘
203
+ ```
204
+
205
+ ## Code Examples
206
+
207
+ ### Example 1: Simple Usage
208
+
209
+ ```python
210
+ from django_cfg.modules.django_logging import get_logger
211
+
212
+ logger = get_logger(__name__)
213
+
214
+ def process_payment(amount: float):
215
+ logger.debug(f"Processing payment: ${amount}") # Only in debug
216
+
217
+ try:
218
+ result = payment_gateway.charge(amount)
219
+ logger.info(f"Payment processed: {result.id}") # Only in debug
220
+ return result
221
+ except PaymentError as e:
222
+ logger.error(f"Payment failed: {e}") # Always shown
223
+ raise
224
+ ```
225
+
226
+ ### Example 2: Module-Specific Logging
227
+
228
+ ```python
229
+ # File: django_cfg/apps/payments/services/nowpayments.py
230
+ from django_cfg.modules.django_logging import get_logger
231
+
232
+ # Auto-detects as 'django_cfg.apps.payments'
233
+ logger = get_logger()
234
+
235
+ class NowPaymentsProvider:
236
+ def __init__(self, api_key: str):
237
+ logger.debug(f"Initializing NowPayments: {api_key[:10]}...")
238
+ # Logs to: logs/djangocfg/apps.log
239
+ ```
240
+
241
+ ### Example 3: Conditional Debug Code
242
+
243
+ ```python
244
+ from django_cfg.core.state import get_current_config
245
+
246
+ config = get_current_config()
247
+
248
+ if config and config.debug:
249
+ # Expensive operation only in debug mode
250
+ from django_cfg.dashboard.debug import save_section_render
251
+ save_section_render('overview', html_content)
252
+ else:
253
+ # Skip debug rendering in production
254
+ pass
255
+ ```
256
+
257
+ ## Troubleshooting
258
+
259
+ ### Issue: Still Seeing INFO Logs When debug=False
260
+
261
+ **Possible Causes:**
262
+
263
+ 1. **Server not restarted** after changing config
264
+ ```bash
265
+ # Solution: Restart server
266
+ python manage.py runserver
267
+ ```
268
+
269
+ 2. **Wrong config file loaded**
270
+ ```bash
271
+ # Check which config is loaded
272
+ Loading config file: config.dev.ignore.yaml
273
+ [django-cfg] Modular logging configured successfully! Debug: False
274
+ ```
275
+
276
+ 3. **Using wrong logger**
277
+ ```python
278
+ # ❌ BAD: Standard logging (doesn't respect config)
279
+ import logging
280
+ logger = logging.getLogger(__name__)
281
+
282
+ # ✅ GOOD: Django CFG logger (respects config)
283
+ from django_cfg.modules.django_logging import get_logger
284
+ logger = get_logger(__name__)
285
+ ```
286
+
287
+ ### Issue: Logs Not Going to Files
288
+
289
+ **Check:**
290
+
291
+ 1. **Directory permissions**
292
+ ```bash
293
+ ls -la logs/
294
+ # Should be writable
295
+ ```
296
+
297
+ 2. **Logger name prefix**
298
+ ```python
299
+ # Only 'django_cfg.*' loggers get modular files
300
+ logger = get_logger('django_cfg.my_module') # ✅ Gets file
301
+ logger = get_logger('my_module') # ❌ Console only
302
+ ```
303
+
304
+ ### Issue: No Console Output at All
305
+
306
+ **Check debug status:**
307
+
308
+ ```python
309
+ from django_cfg.core.state import get_current_config
310
+
311
+ config = get_current_config()
312
+ print(f"Debug: {config.debug}")
313
+
314
+ # Expected output:
315
+ # debug=True → You'll see INFO, DEBUG, WARNING, ERROR
316
+ # debug=False → You'll ONLY see WARNING, ERROR, CRITICAL
317
+ ```
318
+
319
+ ## Best Practices
320
+
321
+ ### 1. Use Appropriate Log Levels
322
+
323
+ ```python
324
+ # DEBUG: Detailed diagnostic info
325
+ logger.debug(f"SQL query: {query}")
326
+ logger.debug(f"Function called with args: {args}")
327
+
328
+ # INFO: Confirmation of expected behavior
329
+ logger.info(f"User {user.id} logged in successfully")
330
+ logger.info(f"Payment processor initialized")
331
+
332
+ # WARNING: Something unexpected but handled
333
+ logger.warning(f"API rate limit approaching: {count}/1000")
334
+ logger.warning(f"Deprecated function called: {func.__name__}")
335
+
336
+ # ERROR: Actual errors that need attention
337
+ logger.error(f"Payment failed: {error}")
338
+ logger.error(f"Database connection lost")
339
+
340
+ # CRITICAL: System-level failures
341
+ logger.critical(f"Redis connection failed - cache disabled")
342
+ logger.critical(f"Unable to load configuration")
343
+ ```
344
+
345
+ ### 2. Structured Logging for Production
346
+
347
+ ```python
348
+ # Include context for easier troubleshooting
349
+ logger.error(
350
+ f"Payment processing failed",
351
+ extra={
352
+ 'user_id': user.id,
353
+ 'amount': amount,
354
+ 'provider': 'nowpayments',
355
+ 'error_code': error.code
356
+ }
357
+ )
358
+ ```
359
+
360
+ ### 3. Performance Considerations
361
+
362
+ ```python
363
+ # ❌ BAD: Expensive operation always runs
364
+ debug_data = expensive_debug_operation()
365
+ logger.debug(f"Debug data: {debug_data}")
366
+
367
+ # ✅ GOOD: Only run when needed
368
+ if logger.isEnabledFor(logging.DEBUG):
369
+ debug_data = expensive_debug_operation()
370
+ logger.debug(f"Debug data: {debug_data}")
371
+
372
+ # ✅ BETTER: Check config directly
373
+ config = get_current_config()
374
+ if config and config.debug:
375
+ debug_data = expensive_debug_operation()
376
+ logger.debug(f"Debug data: {debug_data}")
377
+ ```
378
+
379
+ ### 4. Migration from Old Logging
380
+
381
+ **Before (using standard logging):**
382
+ ```python
383
+ import logging
384
+ logger = logging.getLogger(__name__)
385
+
386
+ logger.info("This always shows") # Problem!
387
+ ```
388
+
389
+ **After (using django-cfg logging):**
390
+ ```python
391
+ from django_cfg.modules.django_logging import get_logger
392
+
393
+ logger = get_logger(__name__)
394
+ logger.info("This respects debug mode") # Better!
395
+ ```
396
+
397
+ ## Quick Reference
398
+
399
+ ### Log Levels Cheat Sheet
400
+
401
+ | Level | Numeric | When to Use | Shows in Production? |
402
+ |-------|---------|-------------|---------------------|
403
+ | DEBUG | 10 | Diagnostic details | ❌ No |
404
+ | INFO | 20 | Confirmation messages | ❌ No |
405
+ | WARNING | 30 | Unexpected but handled | ✅ Yes |
406
+ | ERROR | 40 | Errors requiring attention | ✅ Yes |
407
+ | CRITICAL | 50 | System-level failures | ✅ Yes |
408
+
409
+ ### Configuration Quick Check
410
+
411
+ ```python
412
+ # In Python shell
413
+ from django_cfg.core.state import get_current_config
414
+
415
+ config = get_current_config()
416
+ print(f"Debug mode: {config.debug}")
417
+ print(f"Environment: {config.env_mode}")
418
+
419
+ # Expected for production:
420
+ # Debug mode: False
421
+ # Environment: production
422
+ ```
423
+
424
+ ### File Location Quick Reference
425
+
426
+ ```bash
427
+ # View recent logs
428
+ tail -f logs/django.log # All logs
429
+ tail -f logs/djangocfg/apps.log # App-specific
430
+ tail -f logs/djangocfg/core.log # Core functionality
431
+
432
+ # Search for errors
433
+ grep ERROR logs/django.log
434
+ grep CRITICAL logs/djangocfg/*.log
435
+ ```
436
+
437
+ ## Advanced Topics
438
+
439
+ ### Custom Log Formatting
440
+
441
+ ```python
442
+ from django_cfg.modules.django_logging import get_logger
443
+ import logging
444
+
445
+ logger = get_logger(__name__)
446
+
447
+ # Add custom formatter
448
+ handler = logging.FileHandler('custom.log')
449
+ formatter = logging.Formatter(
450
+ '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
451
+ )
452
+ handler.setFormatter(formatter)
453
+ logger.addHandler(handler)
454
+ ```
455
+
456
+ ### Logging in Async Code
457
+
458
+ ```python
459
+ import asyncio
460
+ from django_cfg.modules.django_logging import get_logger
461
+
462
+ logger = get_logger(__name__)
463
+
464
+ async def async_task():
465
+ logger.debug("Starting async task")
466
+ await asyncio.sleep(1)
467
+ logger.info("Async task completed")
468
+ ```
469
+
470
+ ### Integration with External Services
471
+
472
+ ```python
473
+ from django_cfg.modules.django_logging import get_logger
474
+ import sentry_sdk
475
+
476
+ logger = get_logger(__name__)
477
+
478
+ def process_with_sentry():
479
+ try:
480
+ result = risky_operation()
481
+ logger.info(f"Operation succeeded: {result}")
482
+ except Exception as e:
483
+ logger.error(f"Operation failed: {e}")
484
+ sentry_sdk.capture_exception(e)
485
+ raise
486
+ ```
487
+
488
+ ## Summary
489
+
490
+ The Django CFG logging system provides:
491
+
492
+ ✅ **Automatic debug-aware logging** - Respects `config.debug`
493
+ ✅ **Modular file organization** - Easy to find relevant logs
494
+ ✅ **Rich console formatting** - Beautiful development experience
495
+ ✅ **Production-ready** - Clean, parseable logs in production
496
+ ✅ **Easy migration** - Simple `get_logger()` function
497
+
498
+ **Remember:** When `debug=False`, only WARNING, ERROR, and CRITICAL messages appear. This keeps production logs clean and focused on what matters.
499
+
500
+ ---
501
+
502
+ **Last Updated:** 2025-10-03
503
+ **Django CFG Version:** 1.3.13
504
+ **Python Version:** 3.10+
@@ -0,0 +1,14 @@
1
+ """
2
+ Django Logging Modules for django_cfg.
3
+
4
+ Auto-configuring logging utilities.
5
+ """
6
+
7
+ from .logger import logger
8
+ from .django_logger import DjangoLogger, get_logger
9
+
10
+ __all__ = [
11
+ "logger",
12
+ "DjangoLogger",
13
+ "get_logger",
14
+ ]
@@ -8,8 +8,8 @@ import logging
8
8
  from pathlib import Path
9
9
  from typing import Dict, Optional
10
10
 
11
- from . import BaseCfgModule
12
- from ..utils.smart_defaults import get_log_filename
11
+ from ..base import BaseCfgModule
12
+ from ...utils.smart_defaults import get_log_filename
13
13
 
14
14
 
15
15
  class DjangoLogger(BaseCfgModule):
@@ -46,7 +46,7 @@ class DjangoLogger(BaseCfgModule):
46
46
 
47
47
  # Get debug mode
48
48
  try:
49
- from django_cfg.core.config import get_current_config
49
+ from django_cfg.core.state import get_current_config
50
50
  config = get_current_config()
51
51
  debug = config.debug if config else False
52
52
  except Exception:
@@ -57,20 +57,20 @@ class DjangoLogger(BaseCfgModule):
57
57
  # Handler for general Django logs
58
58
  django_log_path = logs_dir / 'django.log'
59
59
  django_handler = logging.FileHandler(django_log_path, encoding='utf-8')
60
- django_handler.setLevel(logging.DEBUG if debug else logging.INFO)
61
-
60
+ django_handler.setLevel(logging.DEBUG if debug else logging.WARNING)
61
+
62
62
  # Console handler
63
63
  console_handler = logging.StreamHandler()
64
- console_handler.setLevel(logging.DEBUG if debug else logging.INFO)
65
-
64
+ console_handler.setLevel(logging.DEBUG if debug else logging.WARNING)
65
+
66
66
  # Set format for handlers
67
67
  formatter = logging.Formatter('[%(asctime)s] %(levelname)s in %(name)s [%(filename)s:%(lineno)d]: %(message)s')
68
68
  django_handler.setFormatter(formatter)
69
69
  console_handler.setFormatter(formatter)
70
-
70
+
71
71
  # Configure root logger
72
72
  root_logger = logging.getLogger()
73
- root_logger.setLevel(logging.DEBUG if debug else logging.INFO)
73
+ root_logger.setLevel(logging.DEBUG if debug else logging.WARNING)
74
74
 
75
75
  # Clear existing handlers
76
76
  root_logger.handlers.clear()
@@ -86,7 +86,7 @@ class DjangoLogger(BaseCfgModule):
86
86
  print(f"[django-cfg] ERROR setting up modular logging: {e}")
87
87
  # Fallback to console only
88
88
  logging.basicConfig(
89
- level=logging.DEBUG if debug else logging.INFO,
89
+ level=logging.DEBUG if debug else logging.WARNING,
90
90
  format='[%(asctime)s] %(levelname)s in %(name)s [%(filename)s:%(lineno)d]: %(message)s',
91
91
  handlers=[logging.StreamHandler()],
92
92
  force=True
@@ -123,13 +123,13 @@ class DjangoLogger(BaseCfgModule):
123
123
 
124
124
  # Get debug mode
125
125
  try:
126
- from django_cfg.core.config import get_current_config
126
+ from django_cfg.core.state import get_current_config
127
127
  config = get_current_config()
128
128
  debug = config.debug if config else False
129
129
  except Exception:
130
130
  debug = os.getenv('DEBUG', 'false').lower() in ('true', '1', 'yes')
131
-
132
- file_handler.setLevel(logging.DEBUG if debug else logging.INFO)
131
+
132
+ file_handler.setLevel(logging.DEBUG if debug else logging.WARNING)
133
133
 
134
134
  # Set format
135
135
  formatter = logging.Formatter('[%(asctime)s] %(levelname)s in %(name)s [%(filename)s:%(lineno)d]: %(message)s')
@@ -23,7 +23,7 @@ class LoggerConfig:
23
23
  """Configuration for django_cfg logger."""
24
24
 
25
25
  # Default settings
26
- DEFAULT_LEVEL = logging.INFO
26
+ DEFAULT_LEVEL = logging.WARNING # Only show warnings and above when debug=False
27
27
  DEFAULT_FORMAT = (
28
28
  "%(levelname)s %(asctime)s %(name)s %(process)d %(processName)s %(message)s"
29
29
  )
@@ -84,7 +84,14 @@ class DjangoCfgLogger:
84
84
  def _setup_logger(self, debug: bool = None, use_rich: bool = True) -> None:
85
85
  """Setup logger with appropriate configuration."""
86
86
  if debug is None:
87
- debug = os.environ.get("DEBUG", "false").lower() == "true"
87
+ # Try to get debug from django_cfg config first
88
+ try:
89
+ from django_cfg.core.state import get_current_config
90
+ config = get_current_config()
91
+ debug = config.debug if config and hasattr(config, 'debug') else False
92
+ except Exception:
93
+ # Fallback to environment variable
94
+ debug = os.environ.get("DEBUG", "false").lower() == "true"
88
95
 
89
96
  # Determine log level
90
97
  log_level = logging.DEBUG if debug else LoggerConfig.DEFAULT_LEVEL
@@ -104,6 +111,7 @@ class DjangoCfgLogger:
104
111
  show_path=False,
105
112
  markup=True,
106
113
  rich_tracebacks=True,
114
+ level=log_level, # Respect debug mode
107
115
  )
108
116
  except Exception:
109
117
  # Fallback to standard handler if rich fails
@@ -111,6 +119,8 @@ class DjangoCfgLogger:
111
119
  else:
112
120
  handler = self._create_standard_handler()
113
121
 
122
+ # Set handler level
123
+ handler.setLevel(log_level)
114
124
  self.logger.addHandler(handler)
115
125
 
116
126
  def _create_standard_handler(self, use_colors: bool = True) -> logging.Handler:
@@ -175,7 +185,7 @@ class DjangoCfgLogger:
175
185
 
176
186
  def init_complete(self, init_time_ms: float, environment: str) -> None:
177
187
  """Log when initialization is complete."""
178
- self.info(f"🚀 ConfigToolkit initialized in {init_time_ms:.2f}ms")
188
+ self.info(f"🚀 Django-CFG initialized in {init_time_ms:.2f}ms")
179
189
  self.info(f"🌍 Environment: {environment}")
180
190
 
181
191
  def success(self, message: str) -> None:
@@ -240,7 +250,7 @@ class DjangoCfgLogger:
240
250
  logger = DjangoCfgLogger()
241
251
 
242
252
 
243
- # Convenience functions for backward compatibility
253
+ # Convenience functions
244
254
  def get_logger(name: Optional[str] = None) -> DjangoCfgLogger:
245
255
  """Get logger instance."""
246
256
  return DjangoCfgLogger(name)
@@ -0,0 +1,39 @@
1
+ """
2
+ Django Ngrok Module for django_cfg.
3
+
4
+ Auto-configuring Ngrok integration for local development.
5
+ """
6
+
7
+ from .service import (
8
+ DjangoNgrok,
9
+ NgrokManager,
10
+ NgrokError,
11
+ get_ngrok_service,
12
+ start_tunnel,
13
+ stop_tunnel,
14
+ get_tunnel_url,
15
+ get_webhook_url,
16
+ get_api_url,
17
+ get_tunnel_url_from_env,
18
+ get_ngrok_host_from_env,
19
+ is_ngrok_available_from_env,
20
+ is_tunnel_active,
21
+ get_effective_tunnel_url,
22
+ )
23
+
24
+ __all__ = [
25
+ "DjangoNgrok",
26
+ "NgrokManager",
27
+ "NgrokError",
28
+ "get_ngrok_service",
29
+ "start_tunnel",
30
+ "stop_tunnel",
31
+ "get_tunnel_url",
32
+ "get_webhook_url",
33
+ "get_api_url",
34
+ "get_tunnel_url_from_env",
35
+ "get_ngrok_host_from_env",
36
+ "is_ngrok_available_from_env",
37
+ "is_tunnel_active",
38
+ "get_effective_tunnel_url",
39
+ ]