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
@@ -1,703 +0,0 @@
1
- """
2
- ConfigToolkit - Amazing Django Configuration Experience
3
-
4
- The main interface for type-safe, environment-aware Django configuration.
5
- """
6
-
7
- import os
8
- import time
9
- import logging
10
- from pathlib import Path
11
- from typing import Dict, Any, Optional, Type, TypeVar
12
- from threading import Lock
13
-
14
- from ..models.environment import EnvironmentConfig
15
- from ..models.database import DatabaseConfig
16
- from ..models.security import SecurityConfig
17
- from ..models.api import APIConfig
18
- from ..models.cache import CacheConfig
19
- from ..models.email import EmailConfig
20
- from ..modules.django_unfold.models.config import UnfoldConfig
21
- from ..models.constance import ConstanceConfig
22
- from ..models.logging import LoggingConfig
23
-
24
- logger = logging.getLogger(__name__)
25
-
26
- T = TypeVar('T')
27
-
28
-
29
- class ConfigToolkit:
30
- """
31
- 🚀 ConfigToolkit - Amazing Django Configuration Experience
32
-
33
- Features:
34
- - Type-safe configuration access with properties
35
- - Automatic environment detection
36
- - One-line Django settings integration
37
- - Smart defaults and validation
38
- - Amazing developer experience
39
-
40
- Usage:
41
- # Django settings.py
42
- from django_cfg import ConfigToolkit
43
- globals().update(ConfigToolkit.get_django_settings())
44
-
45
- # Anywhere in your code
46
- if ConfigToolkit.debug:
47
- print("Debug mode active")
48
-
49
- db_url = ConfigToolkit.database_url
50
- page_size = ConfigToolkit.api_page_size
51
- """
52
-
53
- _instance: Optional['ConfigToolkit'] = None
54
- _lock = Lock()
55
- _initialized = False
56
-
57
- # Configuration instances
58
- _env_config: Optional[EnvironmentConfig] = None
59
- _db_config: Optional[DatabaseConfig] = None
60
- _security_config: Optional[SecurityConfig] = None
61
- _api_config: Optional[APIConfig] = None
62
- _cache_config: Optional[CacheConfig] = None
63
- _email_config: Optional[EmailConfig] = None
64
- _unfold_config: Optional[UnfoldConfig] = None
65
- # Revolution config removed - use django_revolution directly
66
- _constance_config: Optional[ConstanceConfig] = None
67
- _logging_config: Optional[LoggingConfig] = None
68
-
69
- # Performance tracking
70
- _init_time_ms = 0
71
- _config_cache = {}
72
-
73
- def __new__(cls, *args, **kwargs):
74
- """Singleton pattern for configuration."""
75
- if cls._instance is None:
76
- with cls._lock:
77
- if cls._instance is None:
78
- cls._instance = super().__new__(cls)
79
- return cls._instance
80
-
81
- def __init__(self,
82
- database_config: Optional[DatabaseConfig] = None,
83
- security_config: Optional[SecurityConfig] = None,
84
- cache_config: Optional[CacheConfig] = None,
85
- email_config: Optional[EmailConfig] = None,
86
- unfold_config: Optional[UnfoldConfig] = None,
87
- constance_config: Optional[ConstanceConfig] = None,
88
- logging_config: Optional[LoggingConfig] = None):
89
- """
90
- Initialize ConfigToolkit with configuration models.
91
-
92
- Args:
93
- database_config: Custom database configuration
94
- security_config: Custom security configuration
95
- cache_config: Custom cache configuration
96
- email_config: Custom email configuration
97
- unfold_config: Custom Unfold configuration
98
- constance_config: Custom Constance configuration
99
- logging_config: Custom logging configuration
100
- """
101
- if self._initialized:
102
- return
103
-
104
- start_time = time.perf_counter()
105
-
106
- try:
107
- # Load configurations (use provided configs or create defaults)
108
- self._load_configurations(
109
- database_config=database_config,
110
- security_config=security_config,
111
- cache_config=cache_config,
112
- email_config=email_config,
113
- unfold_config=unfold_config,
114
- constance_config=constance_config,
115
- logging_config=logging_config,
116
- )
117
-
118
- # Configure security based on environment
119
- self._configure_security()
120
-
121
- # Cache performance info
122
- self._init_time_ms = (time.perf_counter() - start_time) * 1000
123
- self._initialized = True
124
-
125
- # Show developer-friendly info
126
- if self.debug:
127
- print(f"🚀 ConfigToolkit initialized in {self._init_time_ms:.2f}ms")
128
- print(f"🌍 Environment: {self.environment}")
129
-
130
- except Exception as e:
131
- logger.error(f"❌ ConfigToolkit initialization failed: {e}")
132
- raise
133
-
134
- def _load_configurations(self,
135
- database_config: Optional[DatabaseConfig] = None,
136
- security_config: Optional[SecurityConfig] = None,
137
- cache_config: Optional[CacheConfig] = None,
138
- email_config: Optional[EmailConfig] = None,
139
- unfold_config: Optional[UnfoldConfig] = None,
140
- constance_config: Optional[ConstanceConfig] = None,
141
- logging_config: Optional[LoggingConfig] = None):
142
- """Load all Pydantic configuration models."""
143
- # Core configurations (always loaded)
144
- self._env_config = EnvironmentConfig()
145
- self._db_config = database_config or DatabaseConfig()
146
- self._security_config = security_config or SecurityConfig()
147
- self._api_config = APIConfig() # Keep default for now
148
- self._cache_config = cache_config or CacheConfig()
149
- self._email_config = email_config or EmailConfig()
150
-
151
- # Extended configurations (optional, loaded if dependencies available)
152
- self._load_extended_configurations(
153
- unfold_config=unfold_config,
154
- constance_config=constance_config,
155
- logging_config=logging_config,
156
- )
157
-
158
- logger.info("✅ All configuration models loaded")
159
-
160
- def _load_extended_configurations(self,
161
- unfold_config: Optional[UnfoldConfig] = None,
162
- constance_config: Optional[ConstanceConfig] = None,
163
- logging_config: Optional[LoggingConfig] = None):
164
- """Load extended configurations if dependencies are available."""
165
- config_count = 6 # Core configs
166
-
167
- # Unfold configuration
168
- if unfold_config:
169
- self._unfold_config = unfold_config
170
- config_count += 1
171
- logger.info("✅ Custom Unfold configuration loaded")
172
- else:
173
- self._unfold_config = UnfoldConfig()
174
- config_count += 1
175
- logger.info("✅ Default Unfold configuration loaded")
176
-
177
- # Revolution config removed - configure directly in Django settings
178
-
179
- # Constance configuration
180
- if constance_config:
181
- self._constance_config = constance_config
182
- config_count += 1
183
- logger.info("✅ Custom Constance configuration loaded")
184
- else:
185
- self._constance_config = ConstanceConfig()
186
- config_count += 1
187
- logger.info("✅ Default Constance configuration loaded")
188
-
189
- # Logging configuration (always available)
190
- self._logging_config = logging_config or LoggingConfig()
191
- config_count += 1
192
-
193
- self._config_count = config_count
194
-
195
- def _configure_security(self):
196
- """Configure security settings based on environment."""
197
- if self._env_config.is_production:
198
- self._security_config.configure_for_production()
199
- else:
200
- self._security_config.configure_for_development()
201
-
202
- # ===============================================
203
- # 🔥 CLASS METHODS - Main API
204
- # ===============================================
205
-
206
- @classmethod
207
- def get_django_settings(cls) -> Dict[str, Any]:
208
- """
209
- 🔥 Get complete Django settings dictionary
210
-
211
- This is the main method for Django integration.
212
- Use in settings.py like this:
213
-
214
- from django_cfg import ConfigToolkit
215
- globals().update(ConfigToolkit.get_django_settings())
216
- """
217
- instance = cls()
218
- settings = {}
219
-
220
- # Merge all configuration settings
221
- settings.update(instance._env_config.to_django_settings())
222
- settings.update(instance._db_config.to_django_settings())
223
- settings.update(instance._security_config.to_django_settings())
224
- settings.update(instance._api_config.to_django_settings())
225
- settings.update(instance._cache_config.to_django_settings())
226
- settings.update(instance._email_config.to_django_settings())
227
-
228
- # Extended configurations
229
- if instance._unfold_config:
230
- settings.update(instance._unfold_config.to_django_settings())
231
-
232
- # Revolution settings applied directly in Django settings
233
-
234
- if instance._constance_config:
235
- settings.update(instance._constance_config.to_django_settings())
236
-
237
- if instance._logging_config:
238
- settings.update(instance._logging_config.to_django_settings())
239
-
240
- # Add third-party apps to INSTALLED_APPS if needed
241
- cls._extend_installed_apps(settings)
242
- cls._extend_middleware(settings)
243
- cls._extend_templates(settings)
244
-
245
- return settings
246
-
247
- @classmethod
248
- def _extend_installed_apps(cls, settings: Dict[str, Any]):
249
- """Extend INSTALLED_APPS with required third-party packages."""
250
- installed_apps = settings.get('INSTALLED_APPS', [])
251
-
252
- # Add common third-party apps
253
- third_party_apps = [
254
- 'rest_framework',
255
- 'rest_framework.authtoken',
256
- 'rest_framework_simplejwt',
257
- 'django_filters',
258
- 'corsheaders',
259
- ]
260
-
261
- # Add API documentation if enabled
262
- instance = cls()
263
- if instance._api_config.docs_enabled:
264
- third_party_apps.extend([
265
- 'drf_spectacular',
266
- 'drf_spectacular_sidecar',
267
- ])
268
-
269
- # Handle special Unfold apps that need to be BEFORE django.contrib.admin
270
- unfold_apps = []
271
- if '_UNFOLD_APPS' in settings:
272
- unfold_apps = settings['_UNFOLD_APPS']
273
- del settings['_UNFOLD_APPS']
274
-
275
- # Add other extended apps
276
- for app_key in ['_REVOLUTION_APPS', '_CONSTANCE_APPS']:
277
- if app_key in settings:
278
- third_party_apps.extend(settings[app_key])
279
- del settings[app_key] # Remove helper key
280
-
281
- # Insert Unfold apps BEFORE django.contrib.admin
282
- if unfold_apps:
283
- admin_index = None
284
- for i, app in enumerate(installed_apps):
285
- if app == 'django.contrib.admin':
286
- admin_index = i
287
- break
288
-
289
- if admin_index is not None:
290
- # Insert unfold apps before admin
291
- for app in reversed(unfold_apps):
292
- if app not in installed_apps:
293
- installed_apps.insert(admin_index, app)
294
- else:
295
- # If no admin app found, add at the beginning
296
- for app in unfold_apps:
297
- if app not in installed_apps:
298
- installed_apps.insert(0, app)
299
-
300
- # Add other apps that aren't already present
301
- for app in third_party_apps:
302
- if app not in installed_apps:
303
- installed_apps.append(app)
304
-
305
- settings['INSTALLED_APPS'] = installed_apps
306
-
307
- @classmethod
308
- def _extend_middleware(cls, settings: Dict[str, Any]):
309
- """Extend MIDDLEWARE with required middleware."""
310
- middleware = settings.get('MIDDLEWARE', [])
311
-
312
- # Add CORS middleware at the beginning if CORS is enabled
313
- instance = cls()
314
- if instance._security_config.cors_enabled:
315
- cors_middleware = 'corsheaders.middleware.CorsMiddleware'
316
- if cors_middleware not in middleware:
317
- middleware.insert(0, cors_middleware)
318
-
319
- settings['MIDDLEWARE'] = middleware
320
-
321
- @classmethod
322
- def _extend_templates(cls, settings: Dict[str, Any]):
323
- """Extend TEMPLATES with django-cfg template directories."""
324
- from pathlib import Path
325
-
326
- print("🔍 _extend_templates called!")
327
-
328
- # Get django-cfg base directory
329
- django_cfg_dir = Path(__file__).parent.parent
330
- print(f"🔍 Django-CFG base dir: {django_cfg_dir}")
331
-
332
- # Collect all template directories
333
- template_dirs = []
334
-
335
- # 1. Main toolkit templates (if exists)
336
- toolkit_templates = django_cfg_dir / 'utils' / 'templates'
337
- print(f"🔍 Checking toolkit templates: {toolkit_templates} (exists: {toolkit_templates.exists()})")
338
- if toolkit_templates.exists():
339
- template_dirs.append(str(toolkit_templates))
340
-
341
- # 2. Auto-discover app template directories
342
- apps_dir = django_cfg_dir / 'apps'
343
- print(f"🔍 Checking apps dir: {apps_dir} (exists: {apps_dir.exists()})")
344
- if apps_dir.exists():
345
- for app_dir in apps_dir.iterdir():
346
- if app_dir.is_dir() and not app_dir.name.startswith(('@', '_', '.')):
347
- print(f"🔍 Checking app: {app_dir.name}")
348
- # Look for common template directory patterns
349
- possible_template_dirs = [
350
- app_dir / 'templates',
351
- app_dir / 'admin_interface' / 'templates',
352
- app_dir / 'frontend' / 'templates',
353
- ]
354
-
355
- for template_dir in possible_template_dirs:
356
- print(f"🔍 Checking template dir: {template_dir} (exists: {template_dir.exists()})")
357
- if template_dir.exists():
358
- template_dirs.append(str(template_dir))
359
-
360
- # Debug: Print found template directories
361
- print(f"🔍 Django-CFG found template directories: {template_dirs}")
362
-
363
- # Add template directories to Django settings
364
- if template_dirs:
365
- templates = settings.get('TEMPLATES', [])
366
- print(f"🔍 Current TEMPLATES config: {templates}")
367
-
368
- # Find the first Django template backend and add our template directories
369
- for template_config in templates:
370
- if template_config.get('BACKEND') == 'django.template.backends.django.DjangoTemplates':
371
- dirs = template_config.get('DIRS', [])
372
- print(f"🔍 Current DIRS: {dirs}")
373
-
374
- # Add each template directory if not already present
375
- for template_dir in template_dirs:
376
- if template_dir not in [str(d) for d in dirs]:
377
- dirs.append(template_dir)
378
-
379
- template_config['DIRS'] = dirs
380
- print(f"🔍 Final TEMPLATE_DIRS: {dirs}")
381
- break
382
-
383
- settings['TEMPLATES'] = templates
384
- else:
385
- print("🔍 No template directories found!")
386
-
387
- # ===============================================
388
- # 🌍 ENVIRONMENT PROPERTIES
389
- # ===============================================
390
-
391
- @classmethod
392
- @property
393
- def debug(cls) -> bool:
394
- """Django DEBUG setting."""
395
- return cls()._env_config.debug
396
-
397
- @classmethod
398
- @property
399
- def secret_key(cls) -> str:
400
- """Django SECRET_KEY."""
401
- return cls()._env_config.secret_key
402
-
403
- @classmethod
404
- @property
405
- def allowed_hosts(cls) -> list:
406
- """Django ALLOWED_HOSTS."""
407
- return cls()._env_config.allowed_hosts
408
-
409
- @classmethod
410
- @property
411
- def is_production(cls) -> bool:
412
- """True if running in production."""
413
- return cls()._env_config.is_production
414
-
415
- @classmethod
416
- @property
417
- def is_development(cls) -> bool:
418
- """True if running in development."""
419
- return cls()._env_config.is_development
420
-
421
- @classmethod
422
- @property
423
- def is_docker(cls) -> bool:
424
- """True if running in Docker."""
425
- return cls()._env_config.is_docker
426
-
427
- @classmethod
428
- @property
429
- def environment(cls) -> str:
430
- """Environment name."""
431
- return cls()._env_config.environment
432
-
433
- # ===============================================
434
- # 🗄️ DATABASE PROPERTIES
435
- # ===============================================
436
-
437
- @classmethod
438
- @property
439
- def database_url(cls) -> str:
440
- """Primary database URL."""
441
- return cls()._db_config.database_url
442
-
443
- @classmethod
444
- @property
445
- def database_max_connections(cls) -> int:
446
- """Database max connections."""
447
- return cls()._db_config.max_connections
448
-
449
- @classmethod
450
- @property
451
- def database_engine(cls) -> str:
452
- """Database engine type."""
453
- return cls()._db_config.database_engine
454
-
455
- @classmethod
456
- @property
457
- def is_sqlite(cls) -> bool:
458
- """True if using SQLite."""
459
- return cls()._db_config.is_sqlite
460
-
461
- @classmethod
462
- @property
463
- def is_postgresql(cls) -> bool:
464
- """True if using PostgreSQL."""
465
- return cls()._db_config.is_postgresql
466
-
467
- # ===============================================
468
- # 🔒 SECURITY PROPERTIES
469
- # ===============================================
470
-
471
- @classmethod
472
- @property
473
- def cors_enabled(cls) -> bool:
474
- """True if CORS is enabled."""
475
- return cls()._security_config.cors_enabled
476
-
477
- @classmethod
478
- @property
479
- def csrf_enabled(cls) -> bool:
480
- """True if CSRF is enabled."""
481
- return cls()._security_config.csrf_enabled
482
-
483
- @classmethod
484
- @property
485
- def ssl_enabled(cls) -> bool:
486
- """True if SSL redirect is enabled."""
487
- return cls()._security_config.ssl_redirect
488
-
489
- # ===============================================
490
- # 🌐 API PROPERTIES
491
- # ===============================================
492
-
493
- @classmethod
494
- @property
495
- def api_page_size(cls) -> int:
496
- """API pagination page size."""
497
- return cls()._api_config.page_size
498
-
499
- @classmethod
500
- @property
501
- def api_max_page_size(cls) -> int:
502
- """API max page size."""
503
- return cls()._api_config.max_page_size
504
-
505
- @classmethod
506
- @property
507
- def api_rate_limit_enabled(cls) -> bool:
508
- """True if API rate limiting is enabled."""
509
- return cls()._api_config.rate_limit_enabled
510
-
511
- @classmethod
512
- @property
513
- def api_docs_enabled(cls) -> bool:
514
- """True if API docs are enabled."""
515
- return cls()._api_config.docs_enabled
516
-
517
- # ===============================================
518
- # 💾 CACHE PROPERTIES
519
- # ===============================================
520
-
521
- @classmethod
522
- @property
523
- def cache_backend(cls) -> str:
524
- """Cache backend type."""
525
- return cls()._cache_config.backend
526
-
527
- @classmethod
528
- @property
529
- def cache_timeout(cls) -> int:
530
- """Default cache timeout."""
531
- return cls()._cache_config.default_timeout
532
-
533
- # ===============================================
534
- # 🎨 UNFOLD PROPERTIES
535
- # ===============================================
536
-
537
- @classmethod
538
- @property
539
- def unfold_enabled(cls) -> bool:
540
- """True if Unfold admin is enabled."""
541
- return cls()._unfold_config is not None
542
-
543
- @classmethod
544
- @property
545
- def site_title(cls) -> str:
546
- """Site title from Unfold config."""
547
- instance = cls()
548
- return instance._unfold_config.site_title if instance._unfold_config else "Admin"
549
-
550
- # ===============================================
551
- # 🚀 REVOLUTION PROPERTIES
552
- # ===============================================
553
-
554
- @classmethod
555
- @property
556
- def revolution_enabled(cls) -> bool:
557
- """True if Django Revolution is enabled."""
558
- instance = cls()
559
- return False # Revolution configured directly in Django settings
560
-
561
- @classmethod
562
- @property
563
- def api_prefix(cls) -> str:
564
- """API prefix from Revolution config."""
565
- instance = cls()
566
- return "api" # Revolution configured directly in Django settings
567
-
568
- # ===============================================
569
- # ⚙️ CONSTANCE PROPERTIES
570
- # ===============================================
571
-
572
- @classmethod
573
- @property
574
- def constance_enabled(cls) -> bool:
575
- """True if Constance is enabled."""
576
- return cls()._constance_config is not None
577
-
578
- @classmethod
579
- @property
580
- def constance_backend(cls) -> str:
581
- """Constance backend."""
582
- instance = cls()
583
- return instance._constance_config.backend if instance._constance_config else "database"
584
-
585
- # ===============================================
586
- # 📝 LOGGING PROPERTIES
587
- # ===============================================
588
-
589
- @classmethod
590
- @property
591
- def logging_enabled(cls) -> bool:
592
- """True if logging is configured."""
593
- return cls()._logging_config is not None
594
-
595
- @classmethod
596
- @property
597
- def log_level(cls) -> str:
598
- """Root log level."""
599
- instance = cls()
600
- return instance._logging_config.root_level if instance._logging_config else "INFO"
601
-
602
- # ===============================================
603
- # 📧 EMAIL PROPERTIES
604
- # ===============================================
605
-
606
- @classmethod
607
- @property
608
- def email_backend(cls) -> str:
609
- """Email backend."""
610
- return cls()._email_config.backend
611
-
612
- @classmethod
613
- @property
614
- def email_host(cls) -> str:
615
- """Email host."""
616
- return cls()._email_config.host
617
-
618
- @classmethod
619
- @property
620
- def email_from(cls) -> str:
621
- """Default from email."""
622
- return cls()._email_config.default_from
623
-
624
- # ===============================================
625
- # 🛠️ DEVELOPER EXPERIENCE METHODS
626
- # ===============================================
627
-
628
- @classmethod
629
- def print_config_summary(cls):
630
- """Print helpful configuration summary for developers."""
631
- instance = cls()
632
-
633
- print("🚀 Django Config Toolkit - Configuration Summary")
634
- print("=" * 60)
635
- print(f"🌍 Environment: {cls.environment.upper()}")
636
- print(f"🔧 Debug: {cls.debug}")
637
- print(f"🗄️ Database: {cls.database_engine}")
638
- print(f"💾 Cache: {cls.cache_backend}")
639
- print(f"📧 Email: {cls.email_backend}")
640
- print(f"🔒 Security: CORS={cls.cors_enabled}, CSRF={cls.csrf_enabled}, SSL={cls.ssl_enabled}")
641
- print(f"🌐 API: Docs={cls.api_docs_enabled}, Rate Limit={cls.api_rate_limit_enabled}")
642
- print(f"⚡ Init Time: {instance._init_time_ms:.2f}ms")
643
- print("=" * 60)
644
- print("💡 Access anywhere: ConfigToolkit.debug, ConfigToolkit.database_url, etc.")
645
- print("📚 Docs: https://django-config-toolkit.readthedocs.io/")
646
- print("=" * 60)
647
-
648
- @classmethod
649
- def validate_configuration(cls) -> bool:
650
- """Validate all configurations for current environment."""
651
- try:
652
- instance = cls()
653
-
654
- # Validate each configuration
655
- env_valid = instance._env_config.validate_for_environment(cls.environment)
656
- db_valid = instance._db_config.validate_for_environment(cls.environment)
657
-
658
- return env_valid and db_valid
659
-
660
- except Exception as e:
661
- print(f"❌ Configuration validation failed: {e}")
662
- return False
663
-
664
- @classmethod
665
- def create_env_examples(cls):
666
- """Create .env.example files for all configurations."""
667
- configs = [
668
- ('environment', EnvironmentConfig),
669
- ('database', DatabaseConfig),
670
- ('security', SecurityConfig),
671
- ('api', APIConfig),
672
- ('cache', CacheConfig),
673
- ('email', EmailConfig),
674
- ]
675
-
676
- print("🚀 Creating environment configuration examples...")
677
-
678
- for name, config_class in configs:
679
- filename = f".env.{name}.example"
680
- config_class.create_env_example(filename)
681
-
682
- # Create combined example
683
- print("📋 Creating combined .env.example...")
684
- EnvironmentConfig.create_env_example(".env.example")
685
-
686
- print("✅ All environment examples created!")
687
- print("💡 Copy .env.example to .env and customize your settings")
688
-
689
-
690
- # Convenience functions for developers
691
- def show_config():
692
- """Show configuration summary - helpful for debugging."""
693
- ConfigToolkit.print_config_summary()
694
-
695
-
696
- def validate_config() -> bool:
697
- """Validate current configuration."""
698
- return ConfigToolkit.validate_configuration()
699
-
700
-
701
- def create_env_examples():
702
- """Create .env example files."""
703
- ConfigToolkit.create_env_examples()