django-cfg 1.1.59__tar.gz → 1.1.61__tar.gz

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 (262) hide show
  1. {django_cfg-1.1.59 → django_cfg-1.1.61}/PKG-INFO +1 -1
  2. {django_cfg-1.1.59 → django_cfg-1.1.61}/pyproject.toml +1 -1
  3. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/__init__.py +1 -1
  4. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/rundramatiq.py +48 -23
  5. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_tasks.py +12 -71
  6. {django_cfg-1.1.59 → django_cfg-1.1.61}/.gitignore +0 -0
  7. {django_cfg-1.1.59 → django_cfg-1.1.61}/LICENSE +0 -0
  8. {django_cfg-1.1.59 → django_cfg-1.1.61}/MANIFEST.in +0 -0
  9. {django_cfg-1.1.59 → django_cfg-1.1.61}/README.md +0 -0
  10. {django_cfg-1.1.59 → django_cfg-1.1.61}/requirements-dev.txt +0 -0
  11. {django_cfg-1.1.59 → django_cfg-1.1.61}/requirements-test.txt +0 -0
  12. {django_cfg-1.1.59 → django_cfg-1.1.61}/requirements.txt +0 -0
  13. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/__init__.py +0 -0
  14. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/README.md +0 -0
  15. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/__init__.py +0 -0
  16. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/admin/__init__.py +0 -0
  17. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/admin/activity.py +0 -0
  18. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/admin/filters.py +0 -0
  19. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/admin/group.py +0 -0
  20. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/admin/inlines.py +0 -0
  21. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/admin/otp.py +0 -0
  22. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/admin/registration_source.py +0 -0
  23. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/admin/twilio_response.py +0 -0
  24. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/admin/user.py +0 -0
  25. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/apps.py +0 -0
  26. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/management/commands/test_otp.py +0 -0
  27. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/managers/__init__.py +0 -0
  28. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/managers/user_manager.py +0 -0
  29. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/migrations/0001_initial.py +0 -0
  30. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/migrations/0002_add_phone_otp_clean.py +0 -0
  31. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/migrations/0003_twilioresponse.py +0 -0
  32. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/migrations/0004_delete_twilioresponse.py +0 -0
  33. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/migrations/__init__.py +0 -0
  34. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/models.py +0 -0
  35. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/serializers/__init__.py +0 -0
  36. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/serializers/otp.py +0 -0
  37. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/serializers/profile.py +0 -0
  38. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/serializers/webhook.py +0 -0
  39. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/services/__init__.py +0 -0
  40. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/services/activity_service.py +0 -0
  41. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/services/otp_service.py +0 -0
  42. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/signals.py +0 -0
  43. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/templates/emails/base_email.html +0 -0
  44. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/templates/emails/base_email.txt +0 -0
  45. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/templates/emails/otp_email.html +0 -0
  46. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/templates/emails/otp_email.txt +0 -0
  47. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/templates/emails/welcome_email.html +0 -0
  48. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/templates/emails/welcome_email.txt +0 -0
  49. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/urls.py +0 -0
  50. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/utils/notifications.py +0 -0
  51. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/views/__init__.py +0 -0
  52. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/views/otp.py +0 -0
  53. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/views/profile.py +0 -0
  54. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/accounts/views/webhook.py +0 -0
  55. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/api/__init__.py +0 -0
  56. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/api/commands/__init__.py +0 -0
  57. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/api/commands/urls.py +0 -0
  58. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/api/commands/views.py +0 -0
  59. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/api/health/__init__.py +0 -0
  60. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/api/health/urls.py +0 -0
  61. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/api/health/views.py +0 -0
  62. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/leads/README.md +0 -0
  63. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/leads/__init__.py +0 -0
  64. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/leads/admin.py +0 -0
  65. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/leads/apps.py +0 -0
  66. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/leads/migrations/0001_initial.py +0 -0
  67. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/leads/migrations/__init__.py +0 -0
  68. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/leads/models.py +0 -0
  69. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/leads/serializers.py +0 -0
  70. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/leads/signals.py +0 -0
  71. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/leads/tests.py +0 -0
  72. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/leads/urls.py +0 -0
  73. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/leads/views.py +0 -0
  74. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/README.md +0 -0
  75. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/__init__.py +0 -0
  76. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/admin.py +0 -0
  77. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/admin_filters.py +0 -0
  78. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/apps.py +0 -0
  79. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/management/__init__.py +0 -0
  80. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/management/commands/__init__.py +0 -0
  81. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/management/commands/test_newsletter.py +0 -0
  82. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/managers/README.md +0 -0
  83. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/managers/__init__.py +0 -0
  84. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/migrations/0001_initial.py +0 -0
  85. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/migrations/__init__.py +0 -0
  86. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/models.py +0 -0
  87. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/serializers.py +0 -0
  88. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/services/email_service.py +0 -0
  89. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/signals.py +0 -0
  90. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/urls.py +0 -0
  91. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/utils/__init__.py +0 -0
  92. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/views/__init__.py +0 -0
  93. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/views/campaigns.py +0 -0
  94. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/views/emails.py +0 -0
  95. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/views/newsletters.py +0 -0
  96. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/views/subscriptions.py +0 -0
  97. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/newsletter/views/tracking.py +0 -0
  98. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/__init__.py +0 -0
  99. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/admin.py +0 -0
  100. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/admin_filters.py +0 -0
  101. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/apps.py +0 -0
  102. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/managers/message_manager.py +0 -0
  103. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/managers/ticket_manager.py +0 -0
  104. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/migrations/0001_initial.py +0 -0
  105. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/migrations/0002_alter_message_ticket.py +0 -0
  106. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/migrations/__init__.py +0 -0
  107. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/models.py +0 -0
  108. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/serializers.py +0 -0
  109. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/signals.py +0 -0
  110. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/templates/support/chat/access_denied.html +0 -0
  111. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/templates/support/chat/ticket_chat.html +0 -0
  112. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/urls.py +0 -0
  113. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/utils/__init__.py +0 -0
  114. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/utils/support_email_service.py +0 -0
  115. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/views/__init__.py +0 -0
  116. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/views/admin.py +0 -0
  117. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/views/api.py +0 -0
  118. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/support/views/chat.py +0 -0
  119. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/__init__.py +0 -0
  120. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/admin.py +0 -0
  121. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/apps.py +0 -0
  122. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/serializers.py +0 -0
  123. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/static/tasks/css/dashboard.css +0 -0
  124. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/static/tasks/js/api.js +0 -0
  125. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/static/tasks/js/dashboard.js +0 -0
  126. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/static/tasks/js/modals.js +0 -0
  127. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/static/tasks/js/notifications.js +0 -0
  128. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/static/tasks/js/task-monitor.js +0 -0
  129. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/static/tasks/js/theme.js +0 -0
  130. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/templates/tasks/base.html +0 -0
  131. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/templates/tasks/components/info_cards.html +0 -0
  132. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/templates/tasks/components/management_actions.html +0 -0
  133. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/templates/tasks/components/overview_tab.html +0 -0
  134. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/templates/tasks/components/queues_tab.html +0 -0
  135. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/templates/tasks/components/status_cards.html +0 -0
  136. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +0 -0
  137. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html +0 -0
  138. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/templates/tasks/components/tasks_tab.html +0 -0
  139. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/templates/tasks/components/workers_tab.html +0 -0
  140. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/templates/tasks/dashboard.html +0 -0
  141. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/urls.py +0 -0
  142. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/tasks/views.py +0 -0
  143. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps/urls.py +0 -0
  144. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/apps.py +0 -0
  145. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/archive/django_sample.zip +0 -0
  146. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/cli/README.md +0 -0
  147. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/cli/__init__.py +0 -0
  148. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/cli/commands/__init__.py +0 -0
  149. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/cli/commands/create_project.py +0 -0
  150. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/cli/commands/info.py +0 -0
  151. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/cli/main.py +0 -0
  152. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/cli/utils.py +0 -0
  153. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/core/__init__.py +0 -0
  154. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/core/config.py +0 -0
  155. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/core/environment.py +0 -0
  156. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/core/generation.py +0 -0
  157. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/core/validation.py +0 -0
  158. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/exceptions.py +0 -0
  159. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/integration.py +0 -0
  160. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/__init__.py +0 -0
  161. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/__init__.py +0 -0
  162. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/check_settings.py +0 -0
  163. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/clear_constance.py +0 -0
  164. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/create_token.py +0 -0
  165. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/generate.py +0 -0
  166. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/list_urls.py +0 -0
  167. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/migrator.py +0 -0
  168. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/runserver_ngrok.py +0 -0
  169. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/script.py +0 -0
  170. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/show_config.py +0 -0
  171. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/show_urls.py +0 -0
  172. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/superuser.py +0 -0
  173. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/task_clear.py +0 -0
  174. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/task_status.py +0 -0
  175. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/test_email.py +0 -0
  176. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/test_telegram.py +0 -0
  177. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/test_twilio.py +0 -0
  178. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/tree.py +0 -0
  179. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/management/commands/validate_config.py +0 -0
  180. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/middleware/README.md +0 -0
  181. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/middleware/__init__.py +0 -0
  182. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/middleware/user_activity.py +0 -0
  183. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/models/__init__.py +0 -0
  184. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/models/cache.py +0 -0
  185. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/models/constance.py +0 -0
  186. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/models/database.py +0 -0
  187. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/models/drf.py +0 -0
  188. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/models/jwt.py +0 -0
  189. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/models/limits.py +0 -0
  190. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/models/ngrok.py +0 -0
  191. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/models/revolution.py +0 -0
  192. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/models/services.py +0 -0
  193. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/models/tasks.py +0 -0
  194. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/models/unfold.py +0 -0
  195. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/__init__.py +0 -0
  196. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/base.py +0 -0
  197. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_currency/README.md +0 -0
  198. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_currency/__init__.py +0 -0
  199. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_currency/cache.py +0 -0
  200. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_currency/converter.py +0 -0
  201. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_currency/service.py +0 -0
  202. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_email.py +0 -0
  203. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_llm/README.md +0 -0
  204. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_llm/__init__.py +0 -0
  205. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_llm/example.py +0 -0
  206. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_llm/llm/__init__.py +0 -0
  207. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_llm/llm/cache.py +0 -0
  208. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_llm/llm/client.py +0 -0
  209. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_llm/llm/costs.py +0 -0
  210. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_llm/llm/extractor.py +0 -0
  211. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_llm/llm/models_cache.py +0 -0
  212. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_llm/llm/tokenizer.py +0 -0
  213. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_llm/translator/__init__.py +0 -0
  214. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_llm/translator/cache.py +0 -0
  215. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_llm/translator/translator.py +0 -0
  216. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_logger.py +0 -0
  217. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_ngrok.py +0 -0
  218. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_telegram.py +0 -0
  219. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_twilio/README.md +0 -0
  220. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_twilio/__init__.py +0 -0
  221. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_twilio/exceptions.py +0 -0
  222. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_twilio/models.py +0 -0
  223. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_twilio/sendgrid_service.py +0 -0
  224. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_twilio/service.py +0 -0
  225. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_twilio/simple_service.py +0 -0
  226. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_twilio/templates/guide.md +0 -0
  227. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html +0 -0
  228. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_twilio/templates/sendgrid_test_data.json +0 -0
  229. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/django_twilio/twilio_service.py +0 -0
  230. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/logger.py +0 -0
  231. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/unfold/__init__.py +0 -0
  232. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/unfold/callbacks.py +0 -0
  233. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/unfold/dashboard.py +0 -0
  234. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/unfold/models.py +0 -0
  235. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/unfold/system_monitor.py +0 -0
  236. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/modules/unfold/tailwind.py +0 -0
  237. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/routers.py +0 -0
  238. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/__init__.py +0 -0
  239. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/index.html +0 -0
  240. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/layouts/dashboard_with_tabs.html +0 -0
  241. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/components/activity_tracker.html +0 -0
  242. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/components/charts_section.html +0 -0
  243. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/components/django_commands.html +0 -0
  244. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/components/quick_actions.html +0 -0
  245. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/components/recent_activity.html +0 -0
  246. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/components/recent_users_table.html +0 -0
  247. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/components/stats_cards.html +0 -0
  248. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/components/stats_tiles.html +0 -0
  249. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/components/system_health.html +0 -0
  250. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/components/system_metrics.html +0 -0
  251. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/components/user_permissions.html +0 -0
  252. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/tabs/app_stats_tab.html +0 -0
  253. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/tabs/commands_tab.html +0 -0
  254. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/tabs/overview_tab.html +0 -0
  255. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/tabs/stats_tab.html +0 -0
  256. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/tabs/users_tab.html +0 -0
  257. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/admin/snippets/zones/zones_table.html +0 -0
  258. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/templates/emails/base_email.html +0 -0
  259. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/utils/__init__.py +0 -0
  260. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/utils/path_resolution.py +0 -0
  261. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/utils/smart_defaults.py +0 -0
  262. {django_cfg-1.1.59 → django_cfg-1.1.61}/src/django_cfg/version_check.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-cfg
3
- Version: 1.1.59
3
+ Version: 1.1.61
4
4
  Summary: 🚀 Production-ready Django configuration framework with type-safe settings, smart automation, and modern developer experience
5
5
  Project-URL: Homepage, https://github.com/markolofsen/django-cfg
6
6
  Project-URL: Documentation, https://django-cfg.readthedocs.io
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "django-cfg"
7
- version = "1.1.59"
7
+ version = "1.1.61"
8
8
  description = "🚀 Production-ready Django configuration framework with type-safe settings, smart automation, and modern developer experience"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -38,7 +38,7 @@ default_app_config = "django_cfg.apps.DjangoCfgConfig"
38
38
  from typing import TYPE_CHECKING
39
39
 
40
40
  # Version information
41
- __version__ = "1.1.59"
41
+ __version__ = "1.1.60"
42
42
  __author__ = "Unrealos Team"
43
43
  __email__ = "info@unrealos.com"
44
44
  __license__ = "MIT"
@@ -183,7 +183,7 @@ class Command(BaseCommand):
183
183
  self.stdout.write(f" {' '.join(worker_args)}")
184
184
 
185
185
  def _start_workers(self, worker_args, options):
186
- """Start Dramatiq workers using Python API instead of CLI."""
186
+ """Start Dramatiq workers using subprocess like django_dramatiq does."""
187
187
  self.stdout.write(
188
188
  self.style.SUCCESS("Starting Dramatiq workers...")
189
189
  )
@@ -209,36 +209,61 @@ class Command(BaseCommand):
209
209
  self.stdout.write(f"PID written to: {options['pid_file']}")
210
210
 
211
211
  try:
212
- # Import dramatiq and get broker FIRST
213
- import dramatiq
214
- from dramatiq.worker import Worker
215
- from django_cfg.modules.django_tasks import get_dramatiq_broker
212
+ # Build process arguments like django_dramatiq does
213
+ executable_name = "dramatiq"
214
+ executable_path = self._resolve_executable(executable_name)
216
215
 
217
- # Get the configured broker
218
- broker = get_dramatiq_broker()
216
+ # Discover task modules (including django_dramatiq.setup)
217
+ discovered_modules = self._discover_task_modules()
219
218
 
220
- # CRITICAL: Set the broker as the global default BEFORE importing tasks
221
- dramatiq.set_broker(broker)
219
+ process_args = [
220
+ executable_name,
221
+ "--processes", str(processes),
222
+ "--threads", str(threads),
223
+ ]
222
224
 
223
- # Now discover and import task modules with the correct broker set
224
- discovered_modules = get_task_service().discover_tasks()
225
- for module_name in discovered_modules:
226
- try:
227
- __import__(module_name)
228
- self.stdout.write(f"Loaded tasks from: {module_name}")
229
- except ImportError as e:
230
- self.stdout.write(f"Warning: Could not import {module_name}: {e}")
225
+ # Add queues
226
+ if queues:
227
+ process_args.extend(["--queues"] + queues)
231
228
 
232
- # Verify broker is set correctly
233
- current_broker = dramatiq.get_broker()
234
- self.stdout.write(f"Using broker: {current_broker}")
229
+ # Add task modules (including django_dramatiq.setup)
230
+ process_args.extend(discovered_modules)
235
231
 
236
- # Create and start worker
237
- worker = Worker(broker, worker_timeout=600000)
238
- worker.start()
232
+ self.stdout.write(f"Running dramatiq: {' '.join(process_args)}")
233
+
234
+ # Use subprocess like django_dramatiq does
235
+ import subprocess
236
+ if sys.platform == "win32":
237
+ command = [executable_path] + process_args[1:]
238
+ sys.exit(subprocess.run(command))
239
+ else:
240
+ # Use os.execvp like django_dramatiq
241
+ os.execvp(executable_path, process_args)
239
242
 
240
243
  except KeyboardInterrupt:
241
244
  self.stdout.write("\nShutting down workers...")
242
245
  except Exception as e:
243
246
  logger.exception("Worker execution failed")
244
247
  raise CommandError(f"Worker execution failed: {e}")
248
+
249
+ def _discover_task_modules(self):
250
+ """Discover task modules like django_dramatiq does."""
251
+ task_modules = ["django_dramatiq.setup"] # Always include setup module
252
+
253
+ # Add discovered modules from django-cfg
254
+ discovered_modules = get_task_service().discover_tasks()
255
+ for module_name in discovered_modules:
256
+ self.stdout.write(f"Discovered tasks module: {module_name}")
257
+ task_modules.append(module_name)
258
+
259
+ return task_modules
260
+
261
+ def _resolve_executable(self, exec_name):
262
+ """Resolve executable path like django_dramatiq does."""
263
+ bin_dir = os.path.dirname(sys.executable)
264
+ if bin_dir:
265
+ for d in [bin_dir, os.path.join(bin_dir, "Scripts")]:
266
+ exec_path = os.path.join(d, exec_name)
267
+ if os.path.isfile(exec_path):
268
+ return exec_path
269
+ return exec_name
@@ -682,14 +682,19 @@ def initialize_task_system():
682
682
  if config and config.enabled:
683
683
  logger.info("🔧 Initializing Django-CFG task system...")
684
684
 
685
- # CRITICAL: Set up global broker for task sending
685
+ # Set up Dramatiq broker from Django settings
686
686
  try:
687
687
  import dramatiq
688
- broker = get_dramatiq_broker()
689
- dramatiq.set_broker(broker)
690
- logger.debug(f"Set global Dramatiq broker: {broker}")
688
+ from django.conf import settings
689
+
690
+ # Django-dramatiq automatically configures the broker from DRAMATIQ_BROKER setting
691
+ if hasattr(settings, 'DRAMATIQ_BROKER'):
692
+ logger.debug("✅ Dramatiq broker configured from Django settings")
693
+ else:
694
+ logger.warning("DRAMATIQ_BROKER not found in Django settings")
695
+
691
696
  except Exception as e:
692
- logger.warning(f"Failed to set global broker: {e}")
697
+ logger.warning(f"Failed to configure Dramatiq: {e}")
693
698
 
694
699
  logger.info("✅ Task system initialized successfully")
695
700
  logger.info("💡 To start workers, run: python manage.py rundramatiq")
@@ -722,70 +727,8 @@ def extend_constance_config_with_tasks():
722
727
  return []
723
728
 
724
729
 
725
- # === Broker Creation ===
726
-
727
- def create_dramatiq_broker():
728
- """
729
- Create and configure Dramatiq broker from Django settings.
730
-
731
- This function creates a broker instance that can be used directly
732
- by the Dramatiq CLI without requiring a separate broker.py file.
733
-
734
- Returns:
735
- dramatiq.Broker: Configured Dramatiq broker instance
736
- """
737
- try:
738
- from django.conf import settings
739
-
740
- if not hasattr(settings, 'DRAMATIQ_BROKER'):
741
- raise RuntimeError("DRAMATIQ_BROKER not configured in Django settings")
742
-
743
- broker_config = settings.DRAMATIQ_BROKER
744
-
745
- # Create broker from Django settings
746
- broker = RedisBroker(**broker_config['OPTIONS'])
747
-
748
- # Add middleware (only if not already present)
749
- existing_middleware_types = {type(mw).__name__ for mw in broker.middleware}
750
-
751
- for middleware_path in broker_config['MIDDLEWARE']:
752
- try:
753
- module_path, class_name = middleware_path.rsplit('.', 1)
754
-
755
- # Skip if middleware of this type already exists
756
- if class_name in existing_middleware_types:
757
- continue
758
-
759
- module = __import__(module_path, fromlist=[class_name])
760
- middleware_class = getattr(module, class_name)
761
- broker.add_middleware(middleware_class())
762
- except Exception as e:
763
- logger.warning(f"Failed to add middleware {middleware_path}: {e}")
764
-
765
- return broker
766
-
767
- except Exception as e:
768
- logger.error(f"Failed to create Dramatiq broker: {e}")
769
- raise
770
-
771
-
772
- # Global broker instance (lazy-loaded)
773
- _broker_instance = None
774
-
775
-
776
- def get_dramatiq_broker():
777
- """
778
- Get the global Dramatiq broker instance.
779
-
780
- Returns:
781
- dramatiq.Broker: The singleton broker instance
782
- """
783
- global _broker_instance
784
-
785
- if _broker_instance is None:
786
- _broker_instance = create_dramatiq_broker()
787
-
788
- return _broker_instance
730
+ # === Broker Creation (Simplified) ===
731
+ # Note: We now use django-dramatiq.setup() instead of custom broker creation
789
732
 
790
733
 
791
734
  # === Exports ===
@@ -801,6 +744,4 @@ __all__ = [
801
744
  "extend_constance_config_with_tasks",
802
745
  "initialize_task_system",
803
746
  "clear_dramatiq_queues",
804
- "create_dramatiq_broker",
805
- "get_dramatiq_broker",
806
747
  ]
File without changes
File without changes
File without changes
File without changes