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,124 @@
1
+ {% comment %}
2
+ Universal Navbar Component
3
+
4
+ Parameters:
5
+ - title: Navbar title (default: "Django CFG")
6
+ - icon: Emoji or HTML icon (default: "💎")
7
+ - nav_items: List of navigation items (optional)
8
+ Example: [
9
+ {'label': 'Dashboard', 'url': '/dashboard/', 'active': True},
10
+ {'label': 'Settings', 'url': '/settings/'},
11
+ ]
12
+ - show_theme_toggle: Show dark mode toggle (default: True)
13
+ - show_user_menu: Show user menu dropdown (default: True)
14
+ - sticky: Make navbar sticky (default: True)
15
+ - full_width: Make navbar full width (default: False, uses max-w-7xl)
16
+ - extra_actions: Additional action buttons (optional, block content)
17
+
18
+ User menu parameters:
19
+ - show_profile: Show profile link in user menu (default: False)
20
+ - show_logout: Show logout link in user menu (default: False)
21
+ - profile_url: Custom profile URL (default: /profile/)
22
+ - logout_url: Custom logout URL (default: /accounts/logout/)
23
+
24
+ Usage:
25
+
26
+ Basic:
27
+ {% include 'django_tailwind/components/navbar.html' with title="My App" icon="🚀" %}
28
+
29
+ Full width navbar:
30
+ {% include 'django_tailwind/components/navbar.html' with title="Dashboard" full_width=True %}
31
+
32
+ With navigation items:
33
+ {% include 'django_tailwind/components/navbar.html' with title="Dashboard" nav_items=menu_items %}
34
+
35
+ With user menu options:
36
+ {% include 'django_tailwind/components/navbar.html' with show_profile=True show_logout=True %}
37
+
38
+ In template context:
39
+ menu_items = [
40
+ {'label': 'Home', 'url': '/', 'active': True},
41
+ {'label': 'About', 'url': '/about/'},
42
+ ]
43
+
44
+ Custom navbar (extending):
45
+ {% with title="My App" icon="🚀" %}
46
+ {% include 'django_tailwind/components/navbar.html' %}
47
+ {% endwith %}
48
+ {% endcomment %}
49
+
50
+ <header class="bg-white dark:bg-gray-800 shadow-sm border-b border-gray-200 dark:border-gray-700 {% if sticky|default:True %}sticky top-0 z-50{% endif %}">
51
+ <div class="{% if full_width %}w-full{% else %}max-w-7xl mx-auto{% endif %} px-4 sm:px-6 lg:px-8">
52
+ <!-- Main navbar row -->
53
+ <div class="flex justify-between h-16">
54
+ <!-- Left: Logo, Title & Navigation -->
55
+ <div class="flex items-center space-x-6">
56
+ <div class="flex items-center space-x-3">
57
+ {% if icon %}
58
+ <span class="text-2xl">{{ icon }}</span>
59
+ {% endif %}
60
+ <h1 class="text-xl font-semibold text-gray-900 dark:text-white">
61
+ {{ title|default:"Django CFG" }}
62
+ </h1>
63
+ </div>
64
+
65
+ <!-- Navigation items (horizontal links) -->
66
+ {% if nav_items %}
67
+ <nav class="hidden md:flex items-center space-x-1">
68
+ {% for item in nav_items %}
69
+ <a href="{{ item.url }}"
70
+ class="px-3 py-2 rounded-md text-sm font-medium transition-colors
71
+ {% if item.active %}
72
+ bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-white
73
+ {% else %}
74
+ text-gray-600 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700 hover:text-gray-900 dark:hover:text-white
75
+ {% endif %}">
76
+ {% if item.icon %}<span class="mr-1">{{ item.icon }}</span>{% endif %}
77
+ {{ item.label }}
78
+ </a>
79
+ {% endfor %}
80
+ </nav>
81
+ {% endif %}
82
+ </div>
83
+
84
+ <!-- Right: Actions -->
85
+ <div class="flex items-center space-x-4">
86
+
87
+ <!-- Extra actions slot -->
88
+ {% if extra_actions %}
89
+ {{ extra_actions }}
90
+ {% endif %}
91
+
92
+ <!-- Dark Mode Toggle -->
93
+ {% if show_theme_toggle|default:True %}
94
+ {% include 'django_tailwind/components/theme_toggle.html' %}
95
+ {% endif %}
96
+
97
+ <!-- User Menu -->
98
+ {% if show_user_menu|default:True %}
99
+ {% include 'django_tailwind/components/user_menu.html' with show_profile=show_profile show_logout=show_logout profile_url=profile_url logout_url=logout_url %}
100
+ {% endif %}
101
+ </div>
102
+ </div>
103
+
104
+ <!-- Mobile navigation (dropdown) -->
105
+ {% if nav_items %}
106
+ <div class="md:hidden pb-3 pt-2 border-t border-gray-200 dark:border-gray-700">
107
+ <nav class="flex flex-col space-y-1">
108
+ {% for item in nav_items %}
109
+ <a href="{{ item.url }}"
110
+ class="px-3 py-2 rounded-md text-sm font-medium transition-colors
111
+ {% if item.active %}
112
+ bg-gray-100 dark:bg-gray-700 text-gray-900 dark:text-white
113
+ {% else %}
114
+ text-gray-600 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700 hover:text-gray-900 dark:hover:text-white
115
+ {% endif %}">
116
+ {% if item.icon %}<span class="mr-2">{{ item.icon }}</span>{% endif %}
117
+ {{ item.label }}
118
+ </a>
119
+ {% endfor %}
120
+ </nav>
121
+ </div>
122
+ {% endif %}
123
+ </div>
124
+ </header>
@@ -0,0 +1,54 @@
1
+ {% comment %}
2
+ Theme Toggle Component
3
+
4
+ Usage:
5
+ {% include 'django_tailwind/components/theme_toggle.html' %}
6
+
7
+ With custom classes:
8
+ {% include 'django_tailwind/components/theme_toggle.html' with button_class="custom-class" %}
9
+
10
+ Variants:
11
+ - button_variant: "default" (default), "icon", "text"
12
+ - button_class: additional CSS classes
13
+ {% endcomment %}
14
+
15
+ {% if button_variant == "text" %}
16
+ <!-- Text variant with label -->
17
+ <button @click="darkMode = !darkMode"
18
+ class="inline-flex items-center space-x-2 px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white transition-colors {{ button_class }}">
19
+ <svg x-show="!darkMode" class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
20
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"/>
21
+ </svg>
22
+ <svg x-show="darkMode" x-cloak class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
23
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"/>
24
+ </svg>
25
+ <span x-show="!darkMode">Dark Mode</span>
26
+ <span x-show="darkMode" x-cloak>Light Mode</span>
27
+ </button>
28
+
29
+ {% elif button_variant == "icon" %}
30
+ <!-- Icon only variant (compact) -->
31
+ <button @click="darkMode = !darkMode"
32
+ class="p-2 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white transition-colors {{ button_class }}"
33
+ aria-label="Toggle dark mode">
34
+ <svg x-show="!darkMode" class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
35
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"/>
36
+ </svg>
37
+ <svg x-show="darkMode" x-cloak class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
38
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"/>
39
+ </svg>
40
+ </button>
41
+
42
+ {% else %}
43
+ <!-- Default variant (with background) -->
44
+ <button @click="darkMode = !darkMode"
45
+ class="p-2 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors {{ button_class }}"
46
+ aria-label="Toggle dark mode">
47
+ <svg x-show="!darkMode" class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
48
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"/>
49
+ </svg>
50
+ <svg x-show="darkMode" x-cloak class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
51
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"/>
52
+ </svg>
53
+ </button>
54
+ {% endif %}
@@ -0,0 +1,116 @@
1
+ {% comment %}
2
+ User Menu Component with Dropdown
3
+
4
+ Shows user avatar, name, and dropdown menu with:
5
+ - Admin panel link (for staff)
6
+ - Profile link (optional)
7
+ - Logout link (optional)
8
+
9
+ Parameters:
10
+ - show_admin: Show admin link (default: auto-detect if user.is_staff)
11
+ - show_profile: Show profile link (default: False)
12
+ - show_logout: Show logout link (default: False)
13
+ - profile_url: Custom profile URL
14
+ - logout_url: Custom logout URL
15
+
16
+ Usage:
17
+ {% include 'django_tailwind/components/user_menu.html' %}
18
+
19
+ With parameters:
20
+ {% include 'django_tailwind/components/user_menu.html' with show_profile=True show_logout=True %}
21
+ {% endcomment %}
22
+
23
+ {% load tailwind_info %}
24
+
25
+ {% if request.user.is_authenticated %}
26
+ <!-- User Menu Dropdown -->
27
+ <div class="relative" x-data="{ userMenuOpen: false }" @click.away="userMenuOpen = false">
28
+ <!-- User Avatar Button -->
29
+ <button @click="userMenuOpen = !userMenuOpen"
30
+ class="flex items-center space-x-2 p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors focus:outline-none focus:ring-2 focus:ring-primary-500">
31
+ <!-- Avatar -->
32
+ <div class="w-8 h-8 rounded-full bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center text-white text-sm font-semibold">
33
+ {% get_user_initials as user_initials %}
34
+ {{ user_initials }}
35
+ </div>
36
+
37
+ <!-- User Name (hidden on mobile) -->
38
+ <span class="hidden md:block text-sm font-medium text-gray-700 dark:text-gray-300">
39
+ {% get_user_display_name as user_name %}
40
+ {{ user_name }}
41
+ </span>
42
+
43
+ <!-- Dropdown Arrow -->
44
+ <svg class="w-4 h-4 text-gray-500 dark:text-gray-400 transition-transform"
45
+ :class="{ 'rotate-180': userMenuOpen }"
46
+ fill="none" stroke="currentColor" viewBox="0 0 24 24">
47
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
48
+ </svg>
49
+ </button>
50
+
51
+ <!-- Dropdown Menu -->
52
+ <div x-show="userMenuOpen"
53
+ x-cloak
54
+ x-transition:enter="transition ease-out duration-200"
55
+ x-transition:enter-start="opacity-0 scale-95"
56
+ x-transition:enter-end="opacity-100 scale-100"
57
+ x-transition:leave="transition ease-in duration-150"
58
+ x-transition:leave-start="opacity-100 scale-100"
59
+ x-transition:leave-end="opacity-0 scale-95"
60
+ class="absolute right-0 mt-2 w-56 rounded-lg shadow-lg bg-white dark:bg-gray-800 ring-1 ring-black ring-opacity-5 divide-y divide-gray-100 dark:divide-gray-700 z-50">
61
+
62
+ <!-- User Info Section -->
63
+ <div class="px-4 py-3">
64
+ <p class="text-sm font-medium text-gray-900 dark:text-white">
65
+ {{ user_name }}
66
+ </p>
67
+ {% if request.user.email %}
68
+ <p class="text-xs text-gray-500 dark:text-gray-400 truncate">
69
+ {{ request.user.email }}
70
+ </p>
71
+ {% endif %}
72
+ </div>
73
+
74
+ <!-- Menu Items -->
75
+ <div class="py-1">
76
+ {% get_admin_url as admin_url %}
77
+
78
+ <!-- Admin Panel Link (for staff only) -->
79
+ {% if show_admin|default:request.user.is_staff %}
80
+ <a href="{{ admin_url }}"
81
+ class="flex items-center px-4 py-2 text-sm text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
82
+ <svg class="w-5 h-5 mr-3 text-gray-500 dark:text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
83
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"/>
84
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"/>
85
+ </svg>
86
+ Admin Panel
87
+ </a>
88
+ {% endif %}
89
+
90
+ <!-- Profile Link (optional) -->
91
+ {% if show_profile %}
92
+ <a href="{{ profile_url|default:'/profile/' }}"
93
+ class="flex items-center px-4 py-2 text-sm text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
94
+ <svg class="w-5 h-5 mr-3 text-gray-500 dark:text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
95
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"/>
96
+ </svg>
97
+ Profile
98
+ </a>
99
+ {% endif %}
100
+ </div>
101
+
102
+ <!-- Logout Section -->
103
+ {% if show_logout %}
104
+ <div class="py-1">
105
+ <a href="{{ logout_url|default:'/accounts/logout/' }}"
106
+ class="flex items-center px-4 py-2 text-sm text-red-600 dark:text-red-400 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
107
+ <svg class="w-5 h-5 mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
108
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"/>
109
+ </svg>
110
+ Logout
111
+ </a>
112
+ </div>
113
+ {% endif %}
114
+ </div>
115
+ </div>
116
+ {% endif %}
@@ -0,0 +1,46 @@
1
+ {% extends 'django_tailwind/base.html' %}
2
+
3
+ {% block container_class %}{% endblock %}
4
+
5
+ {% block main %}
6
+ <!-- Floating Dark Mode Toggle -->
7
+ <div class="fixed top-4 right-4 z-50">
8
+ {% include 'django_tailwind/components/theme_toggle.html' %}
9
+ </div>
10
+
11
+ <div class="min-h-screen flex items-center justify-center px-4 py-12">
12
+ <div class="w-full max-w-md">
13
+ {% block content %}
14
+ <div class="bg-white dark:bg-gray-800 rounded-lg shadow-lg p-8 text-center">
15
+ {% block simple_icon %}
16
+ <div class="text-6xl mb-4">
17
+ {% block icon %}ℹ️{% endblock %}
18
+ </div>
19
+ {% endblock %}
20
+
21
+ {% block simple_title %}
22
+ <h1 class="text-2xl font-bold text-gray-900 dark:text-white mb-4">
23
+ {% block heading %}Title{% endblock %}
24
+ </h1>
25
+ {% endblock %}
26
+
27
+ {% block simple_message %}
28
+ <p class="text-gray-600 dark:text-gray-400 mb-6">
29
+ {% block message %}Message goes here{% endblock %}
30
+ </p>
31
+ {% endblock %}
32
+
33
+ {% block simple_actions %}
34
+ <div class="flex flex-col sm:flex-row gap-3 justify-center">
35
+ {% block actions %}
36
+ <a href="/"
37
+ class="inline-flex items-center justify-center px-6 py-3 border border-transparent rounded-lg shadow-sm text-base font-medium text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 transition-colors">
38
+ Go Home
39
+ </a>
40
+ {% endblock %}
41
+ </div>
42
+ {% endblock %}
43
+ </div>
44
+ </div>
45
+ </div>
46
+ {% endblock %}
@@ -0,0 +1 @@
1
+ """Django Tailwind templatetags package."""
@@ -0,0 +1,185 @@
1
+ """
2
+ Django Tailwind Layouts templatetags.
3
+
4
+ Template tags for universal Tailwind layouts with dark mode support.
5
+ """
6
+
7
+ from django import template
8
+ from django.utils.safestring import mark_safe
9
+
10
+ register = template.Library()
11
+
12
+
13
+ # Library metadata
14
+ LIBRARY_INFO = {
15
+ 'name': 'Django Tailwind Layouts',
16
+ 'version': '1.0.0',
17
+ 'description': 'Universal Tailwind CSS layouts with dark mode for Django applications',
18
+ 'url': 'https://github.com/yourusername/django-cfg',
19
+ 'author': 'Django-CFG Team',
20
+ 'license': 'MIT',
21
+ }
22
+
23
+
24
+ @register.simple_tag
25
+ def tailwind_lib_name():
26
+ """Get library name."""
27
+ return LIBRARY_INFO['name']
28
+
29
+
30
+ @register.simple_tag
31
+ def tailwind_lib_version():
32
+ """Get library version."""
33
+ return LIBRARY_INFO['version']
34
+
35
+
36
+ @register.simple_tag
37
+ def tailwind_lib_description():
38
+ """Get library description."""
39
+ return LIBRARY_INFO['description']
40
+
41
+
42
+ @register.simple_tag
43
+ def tailwind_lib_url():
44
+ """Get library URL."""
45
+ return LIBRARY_INFO['url']
46
+
47
+
48
+ @register.simple_tag
49
+ def tailwind_lib_author():
50
+ """Get library author."""
51
+ return LIBRARY_INFO['author']
52
+
53
+
54
+ @register.simple_tag
55
+ def tailwind_lib_info():
56
+ """
57
+ Get complete library info as dictionary.
58
+
59
+ Usage in template:
60
+ {% load tailwind_info %}
61
+ {% tailwind_lib_info as lib %}
62
+ <p>{{ lib.name }} v{{ lib.version }}</p>
63
+ """
64
+ return LIBRARY_INFO
65
+
66
+
67
+ @register.simple_tag
68
+ def tailwind_powered_by():
69
+ """
70
+ Generate "Powered by" HTML snippet.
71
+
72
+ Usage:
73
+ {% load tailwind_info %}
74
+ {% tailwind_powered_by %}
75
+ """
76
+ return mark_safe(
77
+ f'Powered by <a href="{LIBRARY_INFO["url"]}" '
78
+ f'class="font-medium text-gray-900 dark:text-white hover:text-blue-600 dark:hover:text-blue-400 transition-colors" '
79
+ f'target="_blank">{LIBRARY_INFO["name"]}</a> v{LIBRARY_INFO["version"]}'
80
+ )
81
+
82
+
83
+ @register.simple_tag
84
+ def tailwind_footer_text():
85
+ """
86
+ Generate footer text with library info.
87
+
88
+ Usage:
89
+ {% load tailwind_info %}
90
+ {% tailwind_footer_text %}
91
+ """
92
+ return mark_safe(
93
+ f'<span class="text-gray-600 dark:text-gray-400">{LIBRARY_INFO["name"]}</span> '
94
+ f'<span class="text-gray-400 dark:text-gray-600">v{LIBRARY_INFO["version"]}</span>'
95
+ )
96
+
97
+
98
+ @register.filter
99
+ def add_class(field, css_class):
100
+ """
101
+ Add CSS class to form field.
102
+
103
+ Usage:
104
+ {{ form.field|add_class:"custom-class" }}
105
+ """
106
+ return field.as_widget(attrs={"class": css_class})
107
+
108
+
109
+ @register.simple_tag(takes_context=True)
110
+ def get_admin_url(context):
111
+ """
112
+ Get admin URL from settings or default.
113
+
114
+ Usage:
115
+ {% load tailwind_info %}
116
+ {% get_admin_url as admin_url %}
117
+ <a href="{{ admin_url }}">Admin</a>
118
+ """
119
+ from django.conf import settings
120
+ from django.urls import reverse
121
+
122
+ # Try to get custom admin URL from settings
123
+ admin_url = getattr(settings, 'ADMIN_URL', None)
124
+
125
+ if not admin_url:
126
+ try:
127
+ admin_url = reverse('admin:index')
128
+ except Exception:
129
+ admin_url = '/admin/'
130
+
131
+ return admin_url
132
+
133
+
134
+ @register.simple_tag(takes_context=True)
135
+ def get_user_display_name(context):
136
+ """
137
+ Get user display name (full name or username).
138
+
139
+ Usage:
140
+ {% load tailwind_info %}
141
+ {% get_user_display_name as user_name %}
142
+ """
143
+ request = context.get('request')
144
+ if not request or not request.user.is_authenticated:
145
+ return 'Guest'
146
+
147
+ user = request.user
148
+
149
+ # Try full name first
150
+ full_name = user.get_full_name() if hasattr(user, 'get_full_name') else ''
151
+ if full_name:
152
+ return full_name
153
+
154
+ # Fallback to username
155
+ return user.username if hasattr(user, 'username') else 'User'
156
+
157
+
158
+ @register.simple_tag(takes_context=True)
159
+ def get_user_initials(context):
160
+ """
161
+ Get user initials for avatar.
162
+
163
+ Usage:
164
+ {% load tailwind_info %}
165
+ {% get_user_initials as initials %}
166
+ """
167
+ request = context.get('request')
168
+ if not request or not request.user.is_authenticated:
169
+ return '?'
170
+
171
+ user = request.user
172
+
173
+ # Try to get initials from full name
174
+ if hasattr(user, 'get_full_name'):
175
+ full_name = user.get_full_name()
176
+ if full_name:
177
+ parts = full_name.split()
178
+ if len(parts) >= 2:
179
+ return f"{parts[0][0]}{parts[1][0]}".upper()
180
+ elif len(parts) == 1:
181
+ return parts[0][:2].upper()
182
+
183
+ # Fallback to username
184
+ username = user.username if hasattr(user, 'username') else 'U'
185
+ return username[:2].upper()
@@ -0,0 +1,29 @@
1
+ """
2
+ Django-CFG Task Service Module.
3
+
4
+ Simplified task service for Dramatiq integration with essential functionality.
5
+ """
6
+
7
+ from .service import DjangoTasks
8
+ from .factory import (
9
+ get_task_service,
10
+ reset_task_service,
11
+ is_task_system_available,
12
+ get_task_health,
13
+ initialize_task_system,
14
+ )
15
+ from .settings import (
16
+ generate_dramatiq_settings_from_config,
17
+ extend_constance_config_with_tasks,
18
+ )
19
+
20
+ __all__ = [
21
+ "DjangoTasks",
22
+ "get_task_service",
23
+ "reset_task_service",
24
+ "is_task_system_available",
25
+ "get_task_health",
26
+ "generate_dramatiq_settings_from_config",
27
+ "extend_constance_config_with_tasks",
28
+ "initialize_task_system",
29
+ ]