django-cfg 1.1.72__tar.gz → 1.1.74__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 (274) hide show
  1. {django_cfg-1.1.72 → django_cfg-1.1.74}/PKG-INFO +44 -7
  2. {django_cfg-1.1.72 → django_cfg-1.1.74}/README.md +43 -6
  3. {django_cfg-1.1.72 → django_cfg-1.1.74}/pyproject.toml +1 -1
  4. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/__init__.py +1 -1
  5. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/managers/user_manager.py +2 -2
  6. django_cfg-1.1.74/src/django_cfg/management/commands/migrate_all.py +117 -0
  7. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/migrator.py +53 -7
  8. {django_cfg-1.1.72 → django_cfg-1.1.74}/.gitignore +0 -0
  9. {django_cfg-1.1.72 → django_cfg-1.1.74}/LICENSE +0 -0
  10. {django_cfg-1.1.72 → django_cfg-1.1.74}/MANIFEST.in +0 -0
  11. {django_cfg-1.1.72 → django_cfg-1.1.74}/requirements-dev.txt +0 -0
  12. {django_cfg-1.1.72 → django_cfg-1.1.74}/requirements-test.txt +0 -0
  13. {django_cfg-1.1.72 → django_cfg-1.1.74}/requirements.txt +0 -0
  14. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/README.md +0 -0
  15. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/__init__.py +0 -0
  16. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/README.md +0 -0
  17. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/__init__.py +0 -0
  18. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/admin/__init__.py +0 -0
  19. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/admin/activity.py +0 -0
  20. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/admin/filters.py +0 -0
  21. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/admin/group.py +0 -0
  22. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/admin/inlines.py +0 -0
  23. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/admin/otp.py +0 -0
  24. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/admin/registration_source.py +0 -0
  25. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/admin/resources.py +0 -0
  26. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/admin/twilio_response.py +0 -0
  27. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/admin/user.py +0 -0
  28. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/apps.py +0 -0
  29. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/management/commands/test_otp.py +0 -0
  30. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/managers/__init__.py +0 -0
  31. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/migrations/0001_initial.py +0 -0
  32. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/migrations/0002_add_phone_otp_clean.py +0 -0
  33. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/migrations/0003_twilioresponse.py +0 -0
  34. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/migrations/0004_delete_twilioresponse.py +0 -0
  35. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/migrations/0005_twilioresponse.py +0 -0
  36. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/migrations/__init__.py +0 -0
  37. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/models.py +0 -0
  38. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/serializers/__init__.py +0 -0
  39. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/serializers/otp.py +0 -0
  40. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/serializers/profile.py +0 -0
  41. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/serializers/webhook.py +0 -0
  42. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/services/__init__.py +0 -0
  43. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/services/activity_service.py +0 -0
  44. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/services/otp_service.py +0 -0
  45. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/signals.py +0 -0
  46. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/templates/emails/base_email.html +0 -0
  47. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/templates/emails/base_email.txt +0 -0
  48. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/templates/emails/otp_email.html +0 -0
  49. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/templates/emails/otp_email.txt +0 -0
  50. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/templates/emails/welcome_email.html +0 -0
  51. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/templates/emails/welcome_email.txt +0 -0
  52. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/urls.py +0 -0
  53. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/utils/notifications.py +0 -0
  54. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/views/__init__.py +0 -0
  55. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/views/otp.py +0 -0
  56. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/views/profile.py +0 -0
  57. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/accounts/views/webhook.py +0 -0
  58. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/api/__init__.py +0 -0
  59. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/api/commands/__init__.py +0 -0
  60. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/api/commands/urls.py +0 -0
  61. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/api/commands/views.py +0 -0
  62. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/api/health/__init__.py +0 -0
  63. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/api/health/urls.py +0 -0
  64. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/api/health/views.py +0 -0
  65. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/leads/README.md +0 -0
  66. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/leads/__init__.py +0 -0
  67. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/leads/admin/__init__.py +0 -0
  68. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/leads/admin/leads_admin.py +0 -0
  69. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/leads/admin/resources.py +0 -0
  70. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/leads/apps.py +0 -0
  71. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/leads/migrations/0001_initial.py +0 -0
  72. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/leads/migrations/__init__.py +0 -0
  73. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/leads/models.py +0 -0
  74. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/leads/serializers.py +0 -0
  75. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/leads/signals.py +0 -0
  76. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/leads/tests.py +0 -0
  77. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/leads/urls.py +0 -0
  78. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/leads/views.py +0 -0
  79. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/README.md +0 -0
  80. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/__init__.py +0 -0
  81. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/admin/__init__.py +0 -0
  82. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/admin/filters.py +0 -0
  83. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/admin/newsletter_admin.py +0 -0
  84. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/admin/resources.py +0 -0
  85. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/apps.py +0 -0
  86. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/management/__init__.py +0 -0
  87. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/management/commands/__init__.py +0 -0
  88. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/management/commands/test_newsletter.py +0 -0
  89. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/managers/README.md +0 -0
  90. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/managers/__init__.py +0 -0
  91. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/migrations/0001_initial.py +0 -0
  92. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/migrations/__init__.py +0 -0
  93. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/models.py +0 -0
  94. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/serializers.py +0 -0
  95. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/services/email_service.py +0 -0
  96. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/signals.py +0 -0
  97. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/urls.py +0 -0
  98. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/utils/__init__.py +0 -0
  99. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/views/__init__.py +0 -0
  100. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/views/campaigns.py +0 -0
  101. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/views/emails.py +0 -0
  102. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/views/newsletters.py +0 -0
  103. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/views/subscriptions.py +0 -0
  104. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/newsletter/views/tracking.py +0 -0
  105. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/__init__.py +0 -0
  106. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/admin/__init__.py +0 -0
  107. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/admin/filters.py +0 -0
  108. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/admin/resources.py +0 -0
  109. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/admin/support_admin.py +0 -0
  110. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/apps.py +0 -0
  111. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/managers/message_manager.py +0 -0
  112. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/managers/ticket_manager.py +0 -0
  113. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/migrations/0001_initial.py +0 -0
  114. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/migrations/0002_alter_message_ticket.py +0 -0
  115. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/migrations/__init__.py +0 -0
  116. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/models.py +0 -0
  117. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/serializers.py +0 -0
  118. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/signals.py +0 -0
  119. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/templates/support/chat/access_denied.html +0 -0
  120. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/templates/support/chat/ticket_chat.html +0 -0
  121. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/urls.py +0 -0
  122. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/utils/__init__.py +0 -0
  123. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/utils/support_email_service.py +0 -0
  124. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/views/__init__.py +0 -0
  125. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/views/admin.py +0 -0
  126. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/views/api.py +0 -0
  127. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/support/views/chat.py +0 -0
  128. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/__init__.py +0 -0
  129. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/admin.py +0 -0
  130. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/apps.py +0 -0
  131. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/serializers.py +0 -0
  132. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/static/tasks/css/dashboard.css +0 -0
  133. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/static/tasks/js/api.js +0 -0
  134. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/static/tasks/js/dashboard.js +0 -0
  135. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/static/tasks/js/modals.js +0 -0
  136. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/static/tasks/js/notifications.js +0 -0
  137. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/static/tasks/js/task-monitor.js +0 -0
  138. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/static/tasks/js/theme.js +0 -0
  139. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/templates/tasks/base.html +0 -0
  140. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/templates/tasks/components/info_cards.html +0 -0
  141. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/templates/tasks/components/management_actions.html +0 -0
  142. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/templates/tasks/components/overview_tab.html +0 -0
  143. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/templates/tasks/components/queues_tab.html +0 -0
  144. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/templates/tasks/components/status_cards.html +0 -0
  145. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +0 -0
  146. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html +0 -0
  147. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/templates/tasks/components/tasks_tab.html +0 -0
  148. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/templates/tasks/components/workers_tab.html +0 -0
  149. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/templates/tasks/dashboard.html +0 -0
  150. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/urls.py +0 -0
  151. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/tasks/views.py +0 -0
  152. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps/urls.py +0 -0
  153. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/apps.py +0 -0
  154. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/archive/django_sample.zip +0 -0
  155. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/cli/README.md +0 -0
  156. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/cli/__init__.py +0 -0
  157. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/cli/commands/__init__.py +0 -0
  158. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/cli/commands/create_project.py +0 -0
  159. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/cli/commands/info.py +0 -0
  160. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/cli/main.py +0 -0
  161. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/cli/utils.py +0 -0
  162. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/core/__init__.py +0 -0
  163. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/core/config.py +0 -0
  164. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/core/environment.py +0 -0
  165. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/core/generation.py +0 -0
  166. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/core/validation.py +0 -0
  167. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/exceptions.py +0 -0
  168. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/integration.py +0 -0
  169. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/__init__.py +0 -0
  170. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/__init__.py +0 -0
  171. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/check_settings.py +0 -0
  172. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/clear_constance.py +0 -0
  173. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/create_token.py +0 -0
  174. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/generate.py +0 -0
  175. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/list_urls.py +0 -0
  176. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/rundramatiq.py +0 -0
  177. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/runserver_ngrok.py +0 -0
  178. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/script.py +0 -0
  179. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/show_config.py +0 -0
  180. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/show_urls.py +0 -0
  181. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/superuser.py +0 -0
  182. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/task_clear.py +0 -0
  183. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/task_status.py +0 -0
  184. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/test_email.py +0 -0
  185. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/test_telegram.py +0 -0
  186. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/test_twilio.py +0 -0
  187. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/tree.py +0 -0
  188. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/management/commands/validate_config.py +0 -0
  189. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/middleware/README.md +0 -0
  190. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/middleware/__init__.py +0 -0
  191. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/middleware/user_activity.py +0 -0
  192. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/models/__init__.py +0 -0
  193. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/models/cache.py +0 -0
  194. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/models/constance.py +0 -0
  195. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/models/database.py +0 -0
  196. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/models/drf.py +0 -0
  197. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/models/jwt.py +0 -0
  198. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/models/limits.py +0 -0
  199. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/models/ngrok.py +0 -0
  200. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/models/revolution.py +0 -0
  201. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/models/services.py +0 -0
  202. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/models/tasks.py +0 -0
  203. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/models/unfold.py +0 -0
  204. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/__init__.py +0 -0
  205. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/base.py +0 -0
  206. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_currency/README.md +0 -0
  207. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_currency/__init__.py +0 -0
  208. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_currency/cache.py +0 -0
  209. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_currency/converter.py +0 -0
  210. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_currency/service.py +0 -0
  211. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_email.py +0 -0
  212. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_llm/README.md +0 -0
  213. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_llm/__init__.py +0 -0
  214. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_llm/example.py +0 -0
  215. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_llm/llm/__init__.py +0 -0
  216. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_llm/llm/cache.py +0 -0
  217. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_llm/llm/client.py +0 -0
  218. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_llm/llm/costs.py +0 -0
  219. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_llm/llm/extractor.py +0 -0
  220. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_llm/llm/models_cache.py +0 -0
  221. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_llm/llm/tokenizer.py +0 -0
  222. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_llm/translator/__init__.py +0 -0
  223. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_llm/translator/cache.py +0 -0
  224. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_llm/translator/translator.py +0 -0
  225. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_logger.py +0 -0
  226. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_ngrok.py +0 -0
  227. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_tasks.py +0 -0
  228. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_telegram.py +0 -0
  229. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_twilio/README.md +0 -0
  230. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_twilio/__init__.py +0 -0
  231. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_twilio/exceptions.py +0 -0
  232. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_twilio/models.py +0 -0
  233. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_twilio/sendgrid_service.py +0 -0
  234. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_twilio/service.py +0 -0
  235. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_twilio/simple_service.py +0 -0
  236. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_twilio/templates/guide.md +0 -0
  237. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html +0 -0
  238. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_twilio/templates/sendgrid_test_data.json +0 -0
  239. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/django_twilio/twilio_service.py +0 -0
  240. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/dramatiq_setup.py +0 -0
  241. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/logger.py +0 -0
  242. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/unfold/__init__.py +0 -0
  243. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/unfold/callbacks.py +0 -0
  244. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/unfold/dashboard.py +0 -0
  245. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/unfold/models.py +0 -0
  246. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/unfold/system_monitor.py +0 -0
  247. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/modules/unfold/tailwind.py +0 -0
  248. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/pyproject.toml +0 -0
  249. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/routers.py +0 -0
  250. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/__init__.py +0 -0
  251. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/index.html +0 -0
  252. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/layouts/dashboard_with_tabs.html +0 -0
  253. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/components/activity_tracker.html +0 -0
  254. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/components/charts_section.html +0 -0
  255. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/components/django_commands.html +0 -0
  256. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/components/quick_actions.html +0 -0
  257. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/components/recent_activity.html +0 -0
  258. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/components/recent_users_table.html +0 -0
  259. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/components/stats_cards.html +0 -0
  260. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/components/stats_tiles.html +0 -0
  261. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/components/system_health.html +0 -0
  262. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/components/system_metrics.html +0 -0
  263. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/components/user_permissions.html +0 -0
  264. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/tabs/app_stats_tab.html +0 -0
  265. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/tabs/commands_tab.html +0 -0
  266. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/tabs/overview_tab.html +0 -0
  267. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/tabs/stats_tab.html +0 -0
  268. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/tabs/users_tab.html +0 -0
  269. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/admin/snippets/zones/zones_table.html +0 -0
  270. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/templates/emails/base_email.html +0 -0
  271. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/utils/__init__.py +0 -0
  272. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/utils/path_resolution.py +0 -0
  273. {django_cfg-1.1.72 → django_cfg-1.1.74}/src/django_cfg/utils/smart_defaults.py +0 -0
  274. {django_cfg-1.1.72 → django_cfg-1.1.74}/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.72
3
+ Version: 1.1.74
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
@@ -552,31 +552,68 @@ def queue_document_processing(sender, instance, created, **kwargs):
552
552
 
553
553
  Django-CFG includes powerful management commands for development and operations:
554
554
 
555
+ ### 🗄️ Database & Migration Commands
556
+ | Command | Description | Example |
557
+ |---------|-------------|---------|
558
+ | **`migrator`** | Interactive database migration tool with multi-DB support | `python manage.py migrator --auto` |
559
+ | **`migrate_all`** | Simple migration command for all databases (production-ready) | `python manage.py migrate_all --dry-run` |
560
+
561
+ **Migration Command Details:**
562
+ - **`migrator`** - Full-featured migration tool with interactive menu, database status, and diagnostics
563
+ - `python manage.py migrator` - Interactive menu with all options
564
+ - `python manage.py migrator --auto` - Automatic migration of all databases
565
+ - `python manage.py migrator --database vehicles` - Migrate specific database only
566
+ - `python manage.py migrator --app vehicles_data` - Migrate specific app across all databases
567
+ - **`migrate_all`** - Simplified migration tool optimized for production and CI/CD
568
+ - `python manage.py migrate_all` - Migrate all databases automatically
569
+ - `python manage.py migrate_all --dry-run` - Show what would be migrated without executing
570
+ - `python manage.py migrate_all --skip-makemigrations` - Skip makemigrations step
571
+
572
+ ### 🔧 Configuration & Validation Commands
555
573
  | Command | Description | Example |
556
574
  |---------|-------------|---------|
557
575
  | **`check_settings`** | Validate configuration and settings | `python manage.py check_settings` |
576
+ | **`show_config`** | Display current configuration | `python manage.py show_config --format yaml` |
577
+ | **`validate_config`** | Deep validation of all settings | `python manage.py validate_config --strict` |
578
+ | **`tree`** | Display Django project structure | `python manage.py tree --depth 3 --include-docs` |
579
+
580
+ ### 🚀 API & Development Commands
581
+ | Command | Description | Example |
582
+ |---------|-------------|---------|
558
583
  | **`create_token`** | Generate API tokens and keys | `python manage.py create_token --user admin` |
559
584
  | **`generate`** | Generate API clients and documentation | `python manage.py generate --zone client` |
560
- | **`migrator`** | Smart database migrations with routing | `python manage.py migrator --apps blog,shop` |
561
- | **`script`** | Run custom scripts with Django context | `python manage.py script my_script.py` |
562
- | **`show_config`** | Display current configuration | `python manage.py show_config --format yaml` |
563
585
  | **`show_urls`** | Display all URL patterns | `python manage.py show_urls --zone client` |
586
+ | **`script`** | Run custom scripts with Django context | `python manage.py script my_script.py` |
587
+ | **`runserver_ngrok`** | Run development server with ngrok tunnel | `python manage.py runserver_ngrok --domain custom` |
588
+
589
+ ### 👤 User & Authentication Commands
590
+ | Command | Description | Example |
591
+ |---------|-------------|---------|
564
592
  | **`superuser`** | Create superuser with smart defaults | `python manage.py superuser --email admin@example.com` |
593
+
594
+ ### 📧 Communication & Integration Commands
595
+ | Command | Description | Example |
596
+ |---------|-------------|---------|
565
597
  | **`test_email`** | Test email configuration | `python manage.py test_email --to test@example.com` |
566
598
  | **`test_telegram`** | Test Telegram bot integration | `python manage.py test_telegram --chat_id 123` |
567
599
  | **`test_twilio`** | Test Twilio SMS and WhatsApp integration | `python manage.py test_twilio` |
568
600
  | **`translate_content`** | Translate JSON with LLM and smart caching | `python manage.py translate_content --target-lang es` |
601
+
602
+ ### 🎫 Built-in Module Commands
603
+ | Command | Description | Example |
604
+ |---------|-------------|---------|
569
605
  | **`support_stats`** | Display support ticket statistics | `python manage.py support_stats --format json` |
570
606
  | **`test_newsletter`** | Test newsletter sending functionality | `python manage.py test_newsletter --email test@example.com` |
571
607
  | **`newsletter_stats`** | Display newsletter campaign statistics | `python manage.py newsletter_stats --format json` |
572
608
  | **`leads_stats`** | Display lead conversion statistics | `python manage.py leads_stats --format json` |
573
- | **`runserver_ngrok`** | Run development server with ngrok tunnel | `python manage.py runserver_ngrok --domain custom` |
609
+
610
+ ### 🔄 Background Task Commands
611
+ | Command | Description | Example |
612
+ |---------|-------------|---------|
574
613
  | **`rundramatiq`** | Run Dramatiq background task workers | `python manage.py rundramatiq --processes 4` |
575
614
  | **`task_status`** | Show Dramatiq task status and queues | `python manage.py task_status --queue high` |
576
615
  | **`task_clear`** | Clear Dramatiq queues | `python manage.py task_clear --queue default` |
577
616
  | **`test_tasks`** | Test Dramatiq task processing pipeline | `python manage.py test_tasks --document-id 123` |
578
- | **`tree`** | Display Django project structure | `python manage.py tree --depth 3 --include-docs` |
579
- | **`validate_config`** | Deep validation of all settings | `python manage.py validate_config --strict` |
580
617
 
581
618
  ---
582
619
 
@@ -425,31 +425,68 @@ def queue_document_processing(sender, instance, created, **kwargs):
425
425
 
426
426
  Django-CFG includes powerful management commands for development and operations:
427
427
 
428
+ ### 🗄️ Database & Migration Commands
429
+ | Command | Description | Example |
430
+ |---------|-------------|---------|
431
+ | **`migrator`** | Interactive database migration tool with multi-DB support | `python manage.py migrator --auto` |
432
+ | **`migrate_all`** | Simple migration command for all databases (production-ready) | `python manage.py migrate_all --dry-run` |
433
+
434
+ **Migration Command Details:**
435
+ - **`migrator`** - Full-featured migration tool with interactive menu, database status, and diagnostics
436
+ - `python manage.py migrator` - Interactive menu with all options
437
+ - `python manage.py migrator --auto` - Automatic migration of all databases
438
+ - `python manage.py migrator --database vehicles` - Migrate specific database only
439
+ - `python manage.py migrator --app vehicles_data` - Migrate specific app across all databases
440
+ - **`migrate_all`** - Simplified migration tool optimized for production and CI/CD
441
+ - `python manage.py migrate_all` - Migrate all databases automatically
442
+ - `python manage.py migrate_all --dry-run` - Show what would be migrated without executing
443
+ - `python manage.py migrate_all --skip-makemigrations` - Skip makemigrations step
444
+
445
+ ### 🔧 Configuration & Validation Commands
428
446
  | Command | Description | Example |
429
447
  |---------|-------------|---------|
430
448
  | **`check_settings`** | Validate configuration and settings | `python manage.py check_settings` |
449
+ | **`show_config`** | Display current configuration | `python manage.py show_config --format yaml` |
450
+ | **`validate_config`** | Deep validation of all settings | `python manage.py validate_config --strict` |
451
+ | **`tree`** | Display Django project structure | `python manage.py tree --depth 3 --include-docs` |
452
+
453
+ ### 🚀 API & Development Commands
454
+ | Command | Description | Example |
455
+ |---------|-------------|---------|
431
456
  | **`create_token`** | Generate API tokens and keys | `python manage.py create_token --user admin` |
432
457
  | **`generate`** | Generate API clients and documentation | `python manage.py generate --zone client` |
433
- | **`migrator`** | Smart database migrations with routing | `python manage.py migrator --apps blog,shop` |
434
- | **`script`** | Run custom scripts with Django context | `python manage.py script my_script.py` |
435
- | **`show_config`** | Display current configuration | `python manage.py show_config --format yaml` |
436
458
  | **`show_urls`** | Display all URL patterns | `python manage.py show_urls --zone client` |
459
+ | **`script`** | Run custom scripts with Django context | `python manage.py script my_script.py` |
460
+ | **`runserver_ngrok`** | Run development server with ngrok tunnel | `python manage.py runserver_ngrok --domain custom` |
461
+
462
+ ### 👤 User & Authentication Commands
463
+ | Command | Description | Example |
464
+ |---------|-------------|---------|
437
465
  | **`superuser`** | Create superuser with smart defaults | `python manage.py superuser --email admin@example.com` |
466
+
467
+ ### 📧 Communication & Integration Commands
468
+ | Command | Description | Example |
469
+ |---------|-------------|---------|
438
470
  | **`test_email`** | Test email configuration | `python manage.py test_email --to test@example.com` |
439
471
  | **`test_telegram`** | Test Telegram bot integration | `python manage.py test_telegram --chat_id 123` |
440
472
  | **`test_twilio`** | Test Twilio SMS and WhatsApp integration | `python manage.py test_twilio` |
441
473
  | **`translate_content`** | Translate JSON with LLM and smart caching | `python manage.py translate_content --target-lang es` |
474
+
475
+ ### 🎫 Built-in Module Commands
476
+ | Command | Description | Example |
477
+ |---------|-------------|---------|
442
478
  | **`support_stats`** | Display support ticket statistics | `python manage.py support_stats --format json` |
443
479
  | **`test_newsletter`** | Test newsletter sending functionality | `python manage.py test_newsletter --email test@example.com` |
444
480
  | **`newsletter_stats`** | Display newsletter campaign statistics | `python manage.py newsletter_stats --format json` |
445
481
  | **`leads_stats`** | Display lead conversion statistics | `python manage.py leads_stats --format json` |
446
- | **`runserver_ngrok`** | Run development server with ngrok tunnel | `python manage.py runserver_ngrok --domain custom` |
482
+
483
+ ### 🔄 Background Task Commands
484
+ | Command | Description | Example |
485
+ |---------|-------------|---------|
447
486
  | **`rundramatiq`** | Run Dramatiq background task workers | `python manage.py rundramatiq --processes 4` |
448
487
  | **`task_status`** | Show Dramatiq task status and queues | `python manage.py task_status --queue high` |
449
488
  | **`task_clear`** | Clear Dramatiq queues | `python manage.py task_clear --queue default` |
450
489
  | **`test_tasks`** | Test Dramatiq task processing pipeline | `python manage.py test_tasks --document-id 123` |
451
- | **`tree`** | Display Django project structure | `python manage.py tree --depth 3 --include-docs` |
452
- | **`validate_config`** | Deep validation of all settings | `python manage.py validate_config --strict` |
453
490
 
454
491
  ---
455
492
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "django-cfg"
7
- version = "1.1.72"
7
+ version = "1.1.74"
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.72"
41
+ __version__ = "1.1.74"
42
42
  __author__ = "Unrealos Team"
43
43
  __email__ = "info@unrealos.com"
44
44
  __license__ = "MIT"
@@ -83,8 +83,8 @@ class UserManager(UserManager):
83
83
  f"Attempting to get_or_create user with email: {email}, username: {username}"
84
84
  )
85
85
 
86
- # Create or get user using self.model instead of importing CustomUser
87
- user, created = self.model.objects.get_or_create(
86
+ # Create or get user using self (the manager)
87
+ user, created = self.get_or_create(
88
88
  email=email, defaults=defaults
89
89
  )
90
90
 
@@ -0,0 +1,117 @@
1
+ """
2
+ Simple Migration Command for Django Config Toolkit
3
+ Migrate all databases based on django-cfg configuration.
4
+ """
5
+
6
+ from django.core.management.base import BaseCommand
7
+ from django.core.management import call_command
8
+ from django.apps import apps
9
+
10
+ from django_cfg.core.config import get_current_config
11
+
12
+
13
+ class Command(BaseCommand):
14
+ help = "Migrate all databases based on django-cfg configuration"
15
+
16
+ def add_arguments(self, parser):
17
+ parser.add_argument(
18
+ "--dry-run",
19
+ action="store_true",
20
+ help="Show what would be migrated without executing"
21
+ )
22
+ parser.add_argument(
23
+ "--skip-makemigrations",
24
+ action="store_true",
25
+ help="Skip makemigrations step"
26
+ )
27
+
28
+ def handle(self, *args, **options):
29
+ """Run migrations for all configured databases."""
30
+ dry_run = options.get("dry_run", False)
31
+ skip_makemigrations = options.get("skip_makemigrations", False)
32
+
33
+ if dry_run:
34
+ self.stdout.write(self.style.WARNING("🔍 DRY RUN - No changes will be made"))
35
+
36
+ self.stdout.write(self.style.SUCCESS("🚀 Migrating all databases..."))
37
+
38
+ # Step 1: Create migrations if needed
39
+ if not skip_makemigrations:
40
+ self.stdout.write("📝 Creating migrations...")
41
+ if not dry_run:
42
+ call_command("makemigrations", verbosity=1)
43
+ else:
44
+ self.stdout.write(" Would run: makemigrations")
45
+
46
+ # Step 2: Get database configuration
47
+ try:
48
+ config = get_current_config()
49
+ if not config or not hasattr(config, 'databases'):
50
+ self.stdout.write(self.style.ERROR("❌ No django-cfg configuration found"))
51
+ return
52
+ except Exception as e:
53
+ self.stdout.write(self.style.ERROR(f"❌ Error loading configuration: {e}"))
54
+ return
55
+
56
+ # Step 3: Migrate each database
57
+ for db_name, db_config in config.databases.items():
58
+ self.stdout.write(f"\n🔄 Migrating database: {db_name}")
59
+
60
+ if hasattr(db_config, 'apps') and db_config.apps:
61
+ # Migrate specific apps for this database
62
+ for app_path in db_config.apps:
63
+ app_label = self._get_app_label(app_path)
64
+ if app_label:
65
+ self.stdout.write(f" 📦 Migrating {app_label}...")
66
+ if not dry_run:
67
+ try:
68
+ call_command("migrate", app_label, database=db_name, verbosity=1)
69
+ except Exception as e:
70
+ self.stdout.write(self.style.WARNING(f" ⚠️ Warning: {e}"))
71
+ else:
72
+ self.stdout.write(f" Would run: migrate {app_label} --database={db_name}")
73
+ else:
74
+ # Migrate all apps for this database (usually default)
75
+ self.stdout.write(f" 📦 Migrating all apps...")
76
+ if not dry_run:
77
+ try:
78
+ call_command("migrate", database=db_name, verbosity=1)
79
+ except Exception as e:
80
+ self.stdout.write(self.style.WARNING(f" ⚠️ Warning: {e}"))
81
+ else:
82
+ self.stdout.write(f" Would run: migrate --database={db_name}")
83
+
84
+ # Step 4: Migrate constance if needed
85
+ self.stdout.write(f"\n🔧 Migrating constance...")
86
+ if not dry_run:
87
+ try:
88
+ call_command("migrate", "constance", database="default", verbosity=1)
89
+ except Exception as e:
90
+ self.stdout.write(self.style.WARNING(f"⚠️ Constance warning: {e}"))
91
+ else:
92
+ self.stdout.write(" Would run: migrate constance --database=default")
93
+
94
+ self.stdout.write(self.style.SUCCESS("\n✅ All migrations completed!"))
95
+
96
+ def _get_app_label(self, app_path: str) -> str:
97
+ """Convert full module path to Django app_label."""
98
+ try:
99
+ # Try to get app config by full path first
100
+ try:
101
+ app_config = apps.get_app_config(app_path)
102
+ return app_config.label
103
+ except LookupError:
104
+ pass
105
+
106
+ # Fallback: extract last part of the path as potential app_label
107
+ potential_label = app_path.split('.')[-1]
108
+ try:
109
+ app_config = apps.get_app_config(potential_label)
110
+ return app_config.label
111
+ except LookupError:
112
+ pass
113
+
114
+ return app_path
115
+
116
+ except Exception:
117
+ return app_path
@@ -143,13 +143,16 @@ class Command(BaseCommand):
143
143
  # Migrate each app
144
144
  for app in apps:
145
145
  try:
146
+ # Convert full module path to app_label if needed
147
+ app_label = self.get_app_label_from_path(app)
148
+
146
149
  # Skip apps without migrations
147
- if not self.app_has_migrations(app):
148
- # self.stdout.write(f" ⚠️ Skipping {app} - no migrations")
150
+ if not self.app_has_migrations(app_label):
151
+ # self.stdout.write(f" ⚠️ Skipping {app_label} - no migrations")
149
152
  continue
150
153
 
151
- self.stdout.write(f" 📦 Migrating {app}...")
152
- call_command("migrate", app, database=db_name, verbosity=1)
154
+ self.stdout.write(f" 📦 Migrating {app_label}...")
155
+ call_command("migrate", app_label, database=db_name, verbosity=1)
153
156
  except Exception as e:
154
157
  self.stdout.write(self.style.WARNING(f" ⚠️ Warning migrating {app}: {e}"))
155
158
 
@@ -185,9 +188,11 @@ class Command(BaseCommand):
185
188
  for db_name in databases:
186
189
  apps = self.get_apps_for_database(db_name)
187
190
  if app_name in apps:
188
- self.stdout.write(f" 📊 Migrating {app_name} on {db_name}...")
191
+ # Convert full module path to app_label if needed
192
+ app_label = self.get_app_label_from_path(app_name)
193
+ self.stdout.write(f" 📊 Migrating {app_label} on {db_name}...")
189
194
  try:
190
- call_command("migrate", app_name, database=db_name, verbosity=1)
195
+ call_command("migrate", app_label, database=db_name, verbosity=1)
191
196
  except Exception as e:
192
197
  self.stdout.write(self.style.WARNING(f" ⚠️ Warning: {e}"))
193
198
 
@@ -285,7 +290,10 @@ class Command(BaseCommand):
285
290
  # Collect apps from all non-default databases
286
291
  for other_db_name, other_db_config in config.databases.items():
287
292
  if other_db_name != "default" and hasattr(other_db_config, 'apps'):
288
- apps_in_other_dbs.update(other_db_config.apps)
293
+ # Convert full paths to app_labels for comparison
294
+ for app_path in other_db_config.apps:
295
+ app_label = self.get_app_label_from_path(app_path)
296
+ apps_in_other_dbs.add(app_label)
289
297
 
290
298
  return [app for app in all_apps if app not in apps_in_other_dbs]
291
299
 
@@ -424,3 +432,41 @@ class Command(BaseCommand):
424
432
  except Exception:
425
433
  # Silently return False for apps that don't exist or have issues
426
434
  return False
435
+
436
+ def get_app_label_from_path(self, app_path: str) -> str:
437
+ """
438
+ Convert full module path to Django app_label.
439
+
440
+ Args:
441
+ app_path: Full module path (e.g., 'apps.vehicles_data') or app_label (e.g., 'vehicles_data')
442
+
443
+ Returns:
444
+ Django app_label that can be used with migrate command
445
+
446
+ Examples:
447
+ 'apps.vehicles_data' -> 'vehicles_data'
448
+ 'vehicles_data' -> 'vehicles_data'
449
+ 'myproject.apps.blog' -> 'blog'
450
+ """
451
+ try:
452
+ # Try to get app config by full path first
453
+ try:
454
+ app_config = apps.get_app_config(app_path)
455
+ return app_config.label
456
+ except LookupError:
457
+ pass
458
+
459
+ # Fallback: extract last part of the path as potential app_label
460
+ potential_label = app_path.split('.')[-1]
461
+ try:
462
+ app_config = apps.get_app_config(potential_label)
463
+ return app_config.label
464
+ except LookupError:
465
+ pass
466
+
467
+ # If all fails, return original path
468
+ return app_path
469
+
470
+ except Exception:
471
+ # Fallback to original path
472
+ return app_path
File without changes
File without changes
File without changes