django-cfg 1.2.17__tar.gz → 1.2.19__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 (558) hide show
  1. {django_cfg-1.2.17 → django_cfg-1.2.19}/PKG-INFO +52 -1
  2. {django_cfg-1.2.17 → django_cfg-1.2.19}/README.md +51 -0
  3. {django_cfg-1.2.17 → django_cfg-1.2.19}/pyproject.toml +1 -1
  4. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/__init__.py +1 -1
  5. django_cfg-1.2.19/src/django_cfg/apps/accounts/models/__init__.py +68 -0
  6. django_cfg-1.2.19/src/django_cfg/apps/accounts/models/activity.py +34 -0
  7. django_cfg-1.2.19/src/django_cfg/apps/accounts/models/auth.py +50 -0
  8. django_cfg-1.2.19/src/django_cfg/apps/accounts/models/base.py +8 -0
  9. django_cfg-1.2.19/src/django_cfg/apps/accounts/models/choices.py +32 -0
  10. django_cfg-1.2.19/src/django_cfg/apps/accounts/models/integrations.py +75 -0
  11. django_cfg-1.2.19/src/django_cfg/apps/accounts/models/registration.py +52 -0
  12. django_cfg-1.2.19/src/django_cfg/apps/accounts/models/user.py +80 -0
  13. django_cfg-1.2.19/src/django_cfg/apps/maintenance/__init__.py +56 -0
  14. django_cfg-1.2.19/src/django_cfg/apps/maintenance/admin/__init__.py +17 -0
  15. django_cfg-1.2.19/src/django_cfg/apps/maintenance/admin/api_key_admin.py +185 -0
  16. django_cfg-1.2.19/src/django_cfg/apps/maintenance/admin/log_admin.py +156 -0
  17. django_cfg-1.2.19/src/django_cfg/apps/maintenance/admin/scheduled_admin.py +390 -0
  18. django_cfg-1.2.19/src/django_cfg/apps/maintenance/admin/site_admin.py +448 -0
  19. django_cfg-1.2.19/src/django_cfg/apps/maintenance/apps.py +18 -0
  20. django_cfg-1.2.19/src/django_cfg/apps/maintenance/management/commands/maintenance.py +261 -0
  21. django_cfg-1.2.19/src/django_cfg/apps/maintenance/management/commands/process_scheduled_maintenance.py +241 -0
  22. django_cfg-1.2.19/src/django_cfg/apps/maintenance/management/commands/sync_cloudflare.py +209 -0
  23. django_cfg-1.2.19/src/django_cfg/apps/maintenance/managers/__init__.py +15 -0
  24. django_cfg-1.2.19/src/django_cfg/apps/maintenance/managers/cloudflare_site_manager.py +192 -0
  25. django_cfg-1.2.19/src/django_cfg/apps/maintenance/managers/maintenance_log_manager.py +151 -0
  26. django_cfg-1.2.19/src/django_cfg/apps/maintenance/migrations/0001_initial.py +379 -0
  27. django_cfg-1.2.19/src/django_cfg/apps/maintenance/migrations/0002_cloudflaresite_maintenance_url.py +21 -0
  28. django_cfg-1.2.19/src/django_cfg/apps/maintenance/models/__init__.py +29 -0
  29. django_cfg-1.2.19/src/django_cfg/apps/maintenance/models/cloudflare_api_key.py +109 -0
  30. django_cfg-1.2.19/src/django_cfg/apps/maintenance/models/cloudflare_site.py +125 -0
  31. django_cfg-1.2.19/src/django_cfg/apps/maintenance/models/maintenance_log.py +131 -0
  32. django_cfg-1.2.19/src/django_cfg/apps/maintenance/models/scheduled_maintenance.py +307 -0
  33. django_cfg-1.2.19/src/django_cfg/apps/maintenance/services/__init__.py +42 -0
  34. django_cfg-1.2.19/src/django_cfg/apps/maintenance/services/bulk_operations_service.py +400 -0
  35. django_cfg-1.2.19/src/django_cfg/apps/maintenance/services/maintenance_service.py +230 -0
  36. django_cfg-1.2.19/src/django_cfg/apps/maintenance/services/scheduled_maintenance_service.py +381 -0
  37. django_cfg-1.2.19/src/django_cfg/apps/maintenance/services/site_sync_service.py +390 -0
  38. django_cfg-1.2.19/src/django_cfg/apps/maintenance/utils/__init__.py +12 -0
  39. django_cfg-1.2.19/src/django_cfg/apps/maintenance/utils/retry_utils.py +109 -0
  40. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/config.py +4 -0
  41. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/core/config.py +4 -6
  42. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/dashboard.py +4 -5
  43. django_cfg-1.2.17/src/django_cfg/apps/maintenance/README.md +0 -305
  44. django_cfg-1.2.17/src/django_cfg/apps/maintenance/__init__.py +0 -27
  45. django_cfg-1.2.17/src/django_cfg/apps/maintenance/admin/__init__.py +0 -28
  46. django_cfg-1.2.17/src/django_cfg/apps/maintenance/admin/deployments_admin.py +0 -251
  47. django_cfg-1.2.17/src/django_cfg/apps/maintenance/admin/events_admin.py +0 -374
  48. django_cfg-1.2.17/src/django_cfg/apps/maintenance/admin/monitoring_admin.py +0 -215
  49. django_cfg-1.2.17/src/django_cfg/apps/maintenance/admin/sites_admin.py +0 -464
  50. django_cfg-1.2.17/src/django_cfg/apps/maintenance/apps.py +0 -105
  51. django_cfg-1.2.17/src/django_cfg/apps/maintenance/management/commands/maintenance.py +0 -375
  52. django_cfg-1.2.17/src/django_cfg/apps/maintenance/management/commands/sync_cloudflare.py +0 -168
  53. django_cfg-1.2.17/src/django_cfg/apps/maintenance/managers/__init__.py +0 -20
  54. django_cfg-1.2.17/src/django_cfg/apps/maintenance/managers/deployments.py +0 -287
  55. django_cfg-1.2.17/src/django_cfg/apps/maintenance/managers/events.py +0 -374
  56. django_cfg-1.2.17/src/django_cfg/apps/maintenance/managers/monitoring.py +0 -301
  57. django_cfg-1.2.17/src/django_cfg/apps/maintenance/managers/sites.py +0 -335
  58. django_cfg-1.2.17/src/django_cfg/apps/maintenance/migrations/0001_initial.py +0 -939
  59. django_cfg-1.2.17/src/django_cfg/apps/maintenance/models/__init__.py +0 -27
  60. django_cfg-1.2.17/src/django_cfg/apps/maintenance/models/cloudflare.py +0 -316
  61. django_cfg-1.2.17/src/django_cfg/apps/maintenance/models/maintenance.py +0 -334
  62. django_cfg-1.2.17/src/django_cfg/apps/maintenance/models/monitoring.py +0 -393
  63. django_cfg-1.2.17/src/django_cfg/apps/maintenance/models/sites.py +0 -419
  64. django_cfg-1.2.17/src/django_cfg/apps/maintenance/serializers/__init__.py +0 -60
  65. django_cfg-1.2.17/src/django_cfg/apps/maintenance/serializers/actions.py +0 -310
  66. django_cfg-1.2.17/src/django_cfg/apps/maintenance/serializers/base.py +0 -44
  67. django_cfg-1.2.17/src/django_cfg/apps/maintenance/serializers/deployments.py +0 -209
  68. django_cfg-1.2.17/src/django_cfg/apps/maintenance/serializers/events.py +0 -210
  69. django_cfg-1.2.17/src/django_cfg/apps/maintenance/serializers/monitoring.py +0 -278
  70. django_cfg-1.2.17/src/django_cfg/apps/maintenance/serializers/sites.py +0 -213
  71. django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/README.md +0 -168
  72. django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/__init__.py +0 -21
  73. django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/cloudflare_client.py +0 -441
  74. django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/dns_manager.py +0 -497
  75. django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/maintenance_manager.py +0 -504
  76. django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/site_sync.py +0 -448
  77. django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/sync_command_service.py +0 -330
  78. django_cfg-1.2.17/src/django_cfg/apps/maintenance/services/worker_manager.py +0 -264
  79. django_cfg-1.2.17/src/django_cfg/apps/maintenance/signals.py +0 -38
  80. django_cfg-1.2.17/src/django_cfg/apps/maintenance/urls.py +0 -36
  81. django_cfg-1.2.17/src/django_cfg/apps/maintenance/views/__init__.py +0 -18
  82. django_cfg-1.2.17/src/django_cfg/apps/maintenance/views/base.py +0 -61
  83. django_cfg-1.2.17/src/django_cfg/apps/maintenance/views/deployments.py +0 -175
  84. django_cfg-1.2.17/src/django_cfg/apps/maintenance/views/events.py +0 -204
  85. django_cfg-1.2.17/src/django_cfg/apps/maintenance/views/monitoring.py +0 -213
  86. django_cfg-1.2.17/src/django_cfg/apps/maintenance/views/sites.py +0 -338
  87. django_cfg-1.2.17/src/django_cfg/models/cloudflare.py +0 -316
  88. {django_cfg-1.2.17 → django_cfg-1.2.19}/.gitignore +0 -0
  89. {django_cfg-1.2.17 → django_cfg-1.2.19}/LICENSE +0 -0
  90. {django_cfg-1.2.17 → django_cfg-1.2.19}/MANIFEST.in +0 -0
  91. {django_cfg-1.2.17 → django_cfg-1.2.19}/requirements-dev.txt +0 -0
  92. {django_cfg-1.2.17 → django_cfg-1.2.19}/requirements-test.txt +0 -0
  93. {django_cfg-1.2.17 → django_cfg-1.2.19}/requirements.txt +0 -0
  94. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/README.md +0 -0
  95. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/__init__.py +0 -0
  96. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/README.md +0 -0
  97. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/__init__.py +0 -0
  98. /django_cfg-1.2.17/src/django_cfg/apps/accounts/models.py → /django_cfg-1.2.19/src/django_cfg/apps/accounts/__models.py +0 -0
  99. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/admin/__init__.py +0 -0
  100. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/admin/activity.py +0 -0
  101. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/admin/filters.py +0 -0
  102. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/admin/group.py +0 -0
  103. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/admin/inlines.py +0 -0
  104. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/admin/otp.py +0 -0
  105. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/admin/registration_source.py +0 -0
  106. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/admin/resources.py +0 -0
  107. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/admin/twilio_response.py +0 -0
  108. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/admin/user.py +0 -0
  109. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/apps.py +0 -0
  110. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/management/commands/test_otp.py +0 -0
  111. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/managers/__init__.py +0 -0
  112. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/managers/user_manager.py +0 -0
  113. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/migrations/0001_initial.py +0 -0
  114. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/migrations/0002_add_phone_otp_clean.py +0 -0
  115. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/migrations/0003_twilioresponse.py +0 -0
  116. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/migrations/0004_delete_twilioresponse.py +0 -0
  117. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/migrations/0005_twilioresponse.py +0 -0
  118. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/migrations/0006_remove_twilioresponse_otp_secret_and_more.py +0 -0
  119. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/migrations/0007_twilioresponse.py +0 -0
  120. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/migrations/__init__.py +0 -0
  121. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/serializers/__init__.py +0 -0
  122. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/serializers/otp.py +0 -0
  123. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/serializers/profile.py +0 -0
  124. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/serializers/webhook.py +0 -0
  125. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/services/__init__.py +0 -0
  126. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/services/activity_service.py +0 -0
  127. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/services/otp_service.py +0 -0
  128. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/signals.py +0 -0
  129. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/templates/emails/base_email.html +0 -0
  130. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/templates/emails/base_email.txt +0 -0
  131. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/templates/emails/otp_email.html +0 -0
  132. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/templates/emails/otp_email.txt +0 -0
  133. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/templates/emails/welcome_email.html +0 -0
  134. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/templates/emails/welcome_email.txt +0 -0
  135. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/urls.py +0 -0
  136. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/utils/auth_email_service.py +0 -0
  137. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/utils/notifications.py +0 -0
  138. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/views/__init__.py +0 -0
  139. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/views/otp.py +0 -0
  140. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/views/profile.py +0 -0
  141. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/accounts/views/webhook.py +0 -0
  142. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/README.md +0 -0
  143. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/__init__.py +0 -0
  144. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/admin/__init__.py +0 -0
  145. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/admin/execution_admin.py +0 -0
  146. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/admin/registry_admin.py +0 -0
  147. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/admin/toolsets_admin.py +0 -0
  148. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/apps.py +0 -0
  149. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/core/__init__.py +0 -0
  150. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/core/agent.py +0 -0
  151. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/core/dependencies.py +0 -0
  152. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/core/exceptions.py +0 -0
  153. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/core/models.py +0 -0
  154. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/core/orchestrator.py +0 -0
  155. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/examples/__init__.py +0 -0
  156. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/examples/simple_example.py +0 -0
  157. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/integration/__init__.py +0 -0
  158. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/integration/middleware.py +0 -0
  159. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/integration/registry.py +0 -0
  160. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/integration/signals.py +0 -0
  161. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/management/__init__.py +0 -0
  162. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/management/commands/__init__.py +0 -0
  163. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/management/commands/create_agent.py +0 -0
  164. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/management/commands/orchestrator_status.py +0 -0
  165. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/managers/__init__.py +0 -0
  166. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/managers/execution.py +0 -0
  167. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/managers/registry.py +0 -0
  168. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/managers/toolsets.py +0 -0
  169. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/migrations/0001_initial.py +0 -0
  170. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/migrations/__init__.py +0 -0
  171. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/models/__init__.py +0 -0
  172. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/models/execution.py +0 -0
  173. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/models/registry.py +0 -0
  174. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/models/toolsets.py +0 -0
  175. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/patterns/__init__.py +0 -0
  176. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/patterns/content_agents.py +0 -0
  177. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/toolsets/__init__.py +0 -0
  178. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/toolsets/cache_toolset.py +0 -0
  179. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/toolsets/django_toolset.py +0 -0
  180. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/toolsets/file_toolset.py +0 -0
  181. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/toolsets/orm_toolset.py +0 -0
  182. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/agents/urls.py +0 -0
  183. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/api/__init__.py +0 -0
  184. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/api/commands/__init__.py +0 -0
  185. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/api/commands/urls.py +0 -0
  186. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/api/commands/views.py +0 -0
  187. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/api/health/__init__.py +0 -0
  188. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/api/health/urls.py +0 -0
  189. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/api/health/views.py +0 -0
  190. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/README.md +0 -0
  191. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/__init__.py +0 -0
  192. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/admin/__init__.py +0 -0
  193. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/admin/archive_admin.py +0 -0
  194. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/admin/chat_admin.py +0 -0
  195. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/admin/document_admin.py +0 -0
  196. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/admin/external_data_admin.py +0 -0
  197. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/apps.py +0 -0
  198. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/config/README.md +0 -0
  199. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/config/__init__.py +0 -0
  200. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/config/constance_fields.py +0 -0
  201. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/config/constance_settings.py +0 -0
  202. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/config/settings.py +0 -0
  203. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/examples/__init__.py +0 -0
  204. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/examples/external_data_usage.py +0 -0
  205. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/management/__init__.py +0 -0
  206. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/management/commands/__init__.py +0 -0
  207. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/management/commands/knowbase_stats.py +0 -0
  208. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/management/commands/setup_knowbase.py +0 -0
  209. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/managers/__init__.py +0 -0
  210. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/managers/archive.py +0 -0
  211. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/managers/base.py +0 -0
  212. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/managers/chat.py +0 -0
  213. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/managers/document.py +0 -0
  214. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/managers/external_data.py +0 -0
  215. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/migrations/0001_initial.py +0 -0
  216. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/migrations/0002_archiveitem_archiveitemchunk_documentarchive_and_more.py +0 -0
  217. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/migrations/__init__.py +0 -0
  218. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/mixins/__init__.py +0 -0
  219. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/mixins/config.py +0 -0
  220. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/mixins/creator.py +0 -0
  221. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/mixins/examples/vehicle_model_example.py +0 -0
  222. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/mixins/external_data_mixin.py +0 -0
  223. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/mixins/service.py +0 -0
  224. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/models/__init__.py +0 -0
  225. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/models/archive.py +0 -0
  226. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/models/base.py +0 -0
  227. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/models/chat.py +0 -0
  228. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/models/document.py +0 -0
  229. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/models/external_data.py +0 -0
  230. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/serializers/__init__.py +0 -0
  231. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/serializers/archive_serializers.py +0 -0
  232. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/serializers/chat_serializers.py +0 -0
  233. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/serializers/document_serializers.py +0 -0
  234. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/serializers/external_data_serializers.py +0 -0
  235. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/serializers/public_serializers.py +0 -0
  236. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/__init__.py +0 -0
  237. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/archive/__init__.py +0 -0
  238. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/archive/archive_service.py +0 -0
  239. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/archive/chunking_service.py +0 -0
  240. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/archive/exceptions.py +0 -0
  241. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/archive/extraction_service.py +0 -0
  242. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/archive/vectorization_service.py +0 -0
  243. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/base.py +0 -0
  244. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/chat_service.py +0 -0
  245. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/document_service.py +0 -0
  246. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/embedding/__init__.py +0 -0
  247. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/embedding/async_processor.py +0 -0
  248. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/embedding/batch_processor.py +0 -0
  249. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/embedding/batch_result.py +0 -0
  250. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/embedding/models.py +0 -0
  251. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/embedding/processors.py +0 -0
  252. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/embedding/utils.py +0 -0
  253. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/prompt_builder.py +0 -0
  254. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/services/search_service.py +0 -0
  255. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/signals/__init__.py +0 -0
  256. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/signals/archive_signals.py +0 -0
  257. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/signals/chat_signals.py +0 -0
  258. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/signals/document_signals.py +0 -0
  259. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/signals/external_data_signals.py +0 -0
  260. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/tasks/__init__.py +0 -0
  261. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/tasks/archive_tasks.py +0 -0
  262. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/tasks/document_processing.py +0 -0
  263. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/tasks/external_data_tasks.py +0 -0
  264. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/tasks/maintenance.py +0 -0
  265. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/urls.py +0 -0
  266. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/utils/__init__.py +0 -0
  267. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/utils/chunk_settings.py +0 -0
  268. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/utils/text_processing.py +0 -0
  269. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/utils/validation.py +0 -0
  270. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/views/__init__.py +0 -0
  271. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/views/archive_views.py +0 -0
  272. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/views/base.py +0 -0
  273. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/views/chat_views.py +0 -0
  274. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/views/document_views.py +0 -0
  275. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/knowbase/views/public_views.py +0 -0
  276. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/README.md +0 -0
  277. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/__init__.py +0 -0
  278. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/admin/__init__.py +0 -0
  279. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/admin/leads_admin.py +0 -0
  280. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/admin/resources.py +0 -0
  281. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/admin.py +0 -0
  282. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/apps.py +0 -0
  283. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/migrations/0001_initial.py +0 -0
  284. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/migrations/__init__.py +0 -0
  285. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/models.py +0 -0
  286. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/serializers.py +0 -0
  287. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/signals.py +0 -0
  288. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/tests.py +0 -0
  289. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/urls.py +0 -0
  290. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/leads/views.py +0 -0
  291. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/maintenance/management/__init__.py +0 -0
  292. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/maintenance/management/commands/__init__.py +0 -0
  293. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/maintenance/migrations/__init__.py +0 -0
  294. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/README.md +0 -0
  295. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/__init__.py +0 -0
  296. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/admin/__init__.py +0 -0
  297. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/admin/filters.py +0 -0
  298. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/admin/newsletter_admin.py +0 -0
  299. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/admin/resources.py +0 -0
  300. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/admin.py +0 -0
  301. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/admin_filters.py +0 -0
  302. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/apps.py +0 -0
  303. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/management/__init__.py +0 -0
  304. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/management/commands/__init__.py +0 -0
  305. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/management/commands/test_newsletter.py +0 -0
  306. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/managers/README.md +0 -0
  307. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/managers/__init__.py +0 -0
  308. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/migrations/0001_initial.py +0 -0
  309. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/migrations/__init__.py +0 -0
  310. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/models.py +0 -0
  311. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/serializers.py +0 -0
  312. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/services/email_service.py +0 -0
  313. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/signals.py +0 -0
  314. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/urls.py +0 -0
  315. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/utils/__init__.py +0 -0
  316. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/views/__init__.py +0 -0
  317. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/views/campaigns.py +0 -0
  318. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/views/emails.py +0 -0
  319. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/views/newsletters.py +0 -0
  320. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/views/subscriptions.py +0 -0
  321. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/newsletter/views/tracking.py +0 -0
  322. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/__init__.py +0 -0
  323. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/admin/__init__.py +0 -0
  324. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/admin/filters.py +0 -0
  325. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/admin/resources.py +0 -0
  326. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/admin/support_admin.py +0 -0
  327. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/admin.py +0 -0
  328. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/admin_filters.py +0 -0
  329. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/apps.py +0 -0
  330. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/managers/message_manager.py +0 -0
  331. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/managers/ticket_manager.py +0 -0
  332. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/migrations/0001_initial.py +0 -0
  333. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/migrations/0002_alter_message_ticket.py +0 -0
  334. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/migrations/__init__.py +0 -0
  335. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/models.py +0 -0
  336. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/serializers.py +0 -0
  337. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/signals.py +0 -0
  338. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/templates/support/chat/access_denied.html +0 -0
  339. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/templates/support/chat/ticket_chat.html +0 -0
  340. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/urls.py +0 -0
  341. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/utils/__init__.py +0 -0
  342. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/utils/support_email_service.py +0 -0
  343. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/views/__init__.py +0 -0
  344. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/views/admin.py +0 -0
  345. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/views/api.py +0 -0
  346. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/support/views/chat.py +0 -0
  347. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/__init__.py +0 -0
  348. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/admin.py +0 -0
  349. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/apps.py +0 -0
  350. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/serializers.py +0 -0
  351. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/static/tasks/css/dashboard.css +0 -0
  352. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/static/tasks/js/api.js +0 -0
  353. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/static/tasks/js/dashboard.js +0 -0
  354. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/static/tasks/js/modals.js +0 -0
  355. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/static/tasks/js/notifications.js +0 -0
  356. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/static/tasks/js/task-monitor.js +0 -0
  357. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/static/tasks/js/theme.js +0 -0
  358. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/templates/tasks/base.html +0 -0
  359. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/templates/tasks/components/info_cards.html +0 -0
  360. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/templates/tasks/components/management_actions.html +0 -0
  361. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/templates/tasks/components/overview_tab.html +0 -0
  362. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/templates/tasks/components/queues_tab.html +0 -0
  363. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/templates/tasks/components/status_cards.html +0 -0
  364. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +0 -0
  365. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html +0 -0
  366. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/templates/tasks/components/tasks_tab.html +0 -0
  367. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/templates/tasks/components/workers_tab.html +0 -0
  368. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/templates/tasks/dashboard.html +0 -0
  369. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/urls.py +0 -0
  370. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/tasks/views.py +0 -0
  371. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps/urls.py +0 -0
  372. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/apps.py +0 -0
  373. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/cli/README.md +0 -0
  374. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/cli/__init__.py +0 -0
  375. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/cli/commands/__init__.py +0 -0
  376. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/cli/commands/create_project.py +0 -0
  377. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/cli/commands/info.py +0 -0
  378. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/cli/main.py +0 -0
  379. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/cli/utils.py +0 -0
  380. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/core/__init__.py +0 -0
  381. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/core/environment.py +0 -0
  382. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/core/exceptions.py +0 -0
  383. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/core/generation.py +0 -0
  384. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/core/integration.py +0 -0
  385. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/core/validation.py +0 -0
  386. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/__init__.py +0 -0
  387. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/__init__.py +0 -0
  388. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/auto_generate.py +0 -0
  389. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/check_settings.py +0 -0
  390. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/clear_constance.py +0 -0
  391. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/create_token.py +0 -0
  392. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/generate.py +0 -0
  393. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/list_urls.py +0 -0
  394. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/migrate_all.py +0 -0
  395. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/migrator.py +0 -0
  396. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/rundramatiq.py +0 -0
  397. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/runserver_ngrok.py +0 -0
  398. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/script.py +0 -0
  399. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/show_config.py +0 -0
  400. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/show_urls.py +0 -0
  401. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/superuser.py +0 -0
  402. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/task_clear.py +0 -0
  403. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/task_status.py +0 -0
  404. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/test_email.py +0 -0
  405. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/test_telegram.py +0 -0
  406. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/test_twilio.py +0 -0
  407. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/tree.py +0 -0
  408. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/management/commands/validate_config.py +0 -0
  409. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/middleware/README.md +0 -0
  410. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/middleware/__init__.py +0 -0
  411. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/middleware/pagination.py +0 -0
  412. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/middleware/public_endpoints.py +0 -0
  413. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/middleware/user_activity.py +0 -0
  414. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/__init__.py +0 -0
  415. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/api.py +0 -0
  416. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/base.py +0 -0
  417. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/cache.py +0 -0
  418. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/cfg.py +0 -0
  419. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/constance.py +0 -0
  420. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/cors.py +0 -0
  421. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/database.py +0 -0
  422. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/drf.py +0 -0
  423. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/email.py +0 -0
  424. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/environment.py +0 -0
  425. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/jwt.py +0 -0
  426. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/limits.py +0 -0
  427. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/logging.py +0 -0
  428. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/ngrok.py +0 -0
  429. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/revolution.py +0 -0
  430. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/security.py +0 -0
  431. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/services.py +0 -0
  432. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/models/tasks.py +0 -0
  433. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/__init__.py +0 -0
  434. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/base.py +0 -0
  435. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_currency/README.md +0 -0
  436. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_currency/__init__.py +0 -0
  437. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_currency/cache.py +0 -0
  438. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_currency/converter.py +0 -0
  439. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_currency/service.py +0 -0
  440. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_email.py +0 -0
  441. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_health.py +0 -0
  442. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_import_export/README.md +0 -0
  443. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_import_export/__init__.py +0 -0
  444. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_llm/README.md +0 -0
  445. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_llm/__init__.py +0 -0
  446. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_llm/example.py +0 -0
  447. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_llm/llm/__init__.py +0 -0
  448. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_llm/llm/cache.py +0 -0
  449. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_llm/llm/client.py +0 -0
  450. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_llm/llm/costs.py +0 -0
  451. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_llm/llm/extractor.py +0 -0
  452. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_llm/llm/models.py +0 -0
  453. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_llm/llm/models_cache.py +0 -0
  454. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_llm/llm/tokenizer.py +0 -0
  455. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_llm/translator/__init__.py +0 -0
  456. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_llm/translator/cache.py +0 -0
  457. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_llm/translator/translator.py +0 -0
  458. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_logger.py +0 -0
  459. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_ngrok.py +0 -0
  460. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_tasks.py +0 -0
  461. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_telegram.py +0 -0
  462. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_twilio/README.md +0 -0
  463. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_twilio/__init__.py +0 -0
  464. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_twilio/exceptions.py +0 -0
  465. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_twilio/models.py +0 -0
  466. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_twilio/sendgrid_service.py +0 -0
  467. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_twilio/service.py +0 -0
  468. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_twilio/simple_service.py +0 -0
  469. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_twilio/templates/guide.md +0 -0
  470. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html +0 -0
  471. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_twilio/templates/sendgrid_test_data.json +0 -0
  472. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_twilio/twilio_service.py +0 -0
  473. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/__init__.py +0 -0
  474. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/callbacks/__init__.py +0 -0
  475. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/callbacks/actions.py +0 -0
  476. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/callbacks/base.py +0 -0
  477. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/callbacks/charts.py +0 -0
  478. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/callbacks/commands.py +0 -0
  479. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/callbacks/main.py +0 -0
  480. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/callbacks/revolution.py +0 -0
  481. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/callbacks/statistics.py +0 -0
  482. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/callbacks/system.py +0 -0
  483. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/callbacks/users.py +0 -0
  484. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/icons/README.md +0 -0
  485. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/icons/__init__.py +0 -0
  486. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/icons/constants.py +0 -0
  487. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/icons/generate_icons.py +0 -0
  488. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/models/__init__.py +0 -0
  489. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/models/config.py +0 -0
  490. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/models/dashboard.py +0 -0
  491. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/models/dropdown.py +0 -0
  492. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/models/navigation.py +0 -0
  493. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/models/tabs.py +0 -0
  494. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/models.py +0 -0
  495. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/system_monitor.py +0 -0
  496. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/tailwind.py +0 -0
  497. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/django_unfold/utils.py +0 -0
  498. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/dramatiq_setup.py +0 -0
  499. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/modules/logger.py +0 -0
  500. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/registry/__init__.py +0 -0
  501. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/registry/core.py +0 -0
  502. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/registry/exceptions.py +0 -0
  503. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/registry/modules.py +0 -0
  504. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/registry/services.py +0 -0
  505. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/registry/third_party.py +0 -0
  506. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/routing/__init__.py +0 -0
  507. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/routing/callbacks.py +0 -0
  508. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/routing/routers.py +0 -0
  509. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/__init__.py +0 -0
  510. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/components/action_grid.html +0 -0
  511. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/components/card.html +0 -0
  512. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/components/data_table.html +0 -0
  513. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/components/metric_card.html +0 -0
  514. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/components/modal.html +0 -0
  515. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/components/progress_bar.html +0 -0
  516. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/components/section_header.html +0 -0
  517. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/components/stat_item.html +0 -0
  518. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/components/stats_grid.html +0 -0
  519. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/components/status_badge.html +0 -0
  520. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/components/user_avatar.html +0 -0
  521. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/constance/change_list.html +0 -0
  522. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/constance/includes/default_value.html +0 -0
  523. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/constance/includes/fieldset_header.html +0 -0
  524. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/constance/includes/results_list.html +0 -0
  525. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/constance/includes/setting_row.html +0 -0
  526. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/constance/includes/table_headers.html +0 -0
  527. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/import_export/change_list_export.html +0 -0
  528. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/import_export/change_list_import.html +0 -0
  529. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/import_export/change_list_import_export.html +0 -0
  530. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/index.html +0 -0
  531. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/layouts/dashboard_with_tabs.html +0 -0
  532. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/components/activity_tracker.html +0 -0
  533. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/components/charts_section.html +0 -0
  534. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/components/django_commands.html +0 -0
  535. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/components/quick_actions.html +0 -0
  536. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/components/recent_activity.html +0 -0
  537. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/components/recent_users_table.html +0 -0
  538. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/components/stats_cards.html +0 -0
  539. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/components/stats_tiles.html +0 -0
  540. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/components/system_health.html +0 -0
  541. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/components/system_metrics.html +0 -0
  542. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/components/user_permissions.html +0 -0
  543. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/tabs/app_stats_tab.html +0 -0
  544. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/tabs/commands_tab.html +0 -0
  545. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/tabs/overview_tab.html +0 -0
  546. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/tabs/stats_tab.html +0 -0
  547. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/tabs/users_tab.html +0 -0
  548. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/admin/snippets/zones/zones_table.html +0 -0
  549. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/emails/base_email.html +0 -0
  550. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templates/rest_framework/api.html +0 -0
  551. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templatetags/__init__.py +0 -0
  552. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/templatetags/django_cfg.py +0 -0
  553. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/urls.py +0 -0
  554. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/utils/__init__.py +0 -0
  555. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/utils/path_resolution.py +0 -0
  556. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/utils/smart_defaults.py +0 -0
  557. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/utils/toolkit.py +0 -0
  558. {django_cfg-1.2.17 → django_cfg-1.2.19}/src/django_cfg/utils/version_check.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-cfg
3
- Version: 1.2.17
3
+ Version: 1.2.19
4
4
  Summary: 🚀 Next-gen Django configuration: type-safety, AI features, blazing-fast setup, and automated best practices — all in one.
5
5
  Project-URL: Homepage, https://djangocfg.com
6
6
  Project-URL: Documentation, https://docs.djangocfg.com
@@ -264,6 +264,7 @@ class EnterpriseConfig(DjangoConfig):
264
264
  enable_leads: bool = True # CRM integration
265
265
  enable_agents: bool = True # AI workflow automation
266
266
  enable_knowbase: bool = True # AI knowledge management
267
+ enable_maintenance: bool = True # Multi-site Cloudflare maintenance
267
268
 
268
269
  config = EnterpriseConfig()
269
270
  ```
@@ -315,6 +316,34 @@ workflow = Workflow([
315
316
  result = workflow.run({"document_id": "doc_123"})
316
317
  ```
317
318
 
319
+ ### 🌐 **Multi-Site Cloudflare Maintenance**
320
+ **Zero-configuration maintenance mode** for enterprise applications with automated monitoring.
321
+
322
+ ```python
323
+ from django_cfg.apps.maintenance.services import MaintenanceManager
324
+
325
+ # Enable maintenance for all production sites
326
+ manager = MaintenanceManager(user)
327
+ manager.bulk_enable_maintenance(
328
+ sites=CloudflareSite.objects.filter(environment='production'),
329
+ reason="Database migration",
330
+ message="🚀 Upgrading our systems. Back online in 30 minutes!"
331
+ )
332
+
333
+ # CLI management
334
+ # python manage.py maintenance enable --environment production
335
+ # python manage.py sync_cloudflare --api-token your_token
336
+ ```
337
+
338
+ **Features:**
339
+ - ✅ **Zero-config setup** - Just provide API token and domain
340
+ - ✅ **Multi-site management** - Handle hundreds of sites with ORM queries
341
+ - ✅ **Automated monitoring** - Health checks with auto-triggers
342
+ - ✅ **Rich admin interface** - Bulk operations and real-time status
343
+ - ✅ **CLI automation** - Perfect for CI/CD pipelines
344
+
345
+ [**📚 View Maintenance Documentation →**](https://docs.djangocfg.com/features/built-in-apps/maintenance)
346
+
318
347
  ### 🏢 **Enterprise User Management**
319
348
  **Multi-channel authentication** with OTP, SMS, email verification, and audit trails.
320
349
 
@@ -531,6 +560,7 @@ docker-compose up -d
531
560
 
532
561
  ### **🚀 Enterprise Features**
533
562
  - [**Built-in Applications**](https://docs.djangocfg.com/features/built-in-apps/accounts) - User management, support, CRM
563
+ - [**Maintenance Management**](https://docs.djangocfg.com/features/built-in-apps/maintenance) - Multi-site Cloudflare maintenance
534
564
  - [**Modular System**](https://docs.djangocfg.com/features/modules/overview) - Email, SMS, LLM, currency modules
535
565
  - [**Third-party Integrations**](https://docs.djangocfg.com/features/integrations/patterns) - Dramatiq, Twilio, ngrok
536
566
 
@@ -749,6 +779,27 @@ python manage.py generate_deployment --platform=docker --environment=production
749
779
  curl http://localhost:8000/health/
750
780
  ```
751
781
 
782
+ ### **🌐 Multi-Site Maintenance Management**
783
+ ```bash
784
+ # Enable maintenance for all production sites
785
+ python manage.py maintenance enable --environment production --reason "Database upgrade"
786
+
787
+ # Disable maintenance for specific project
788
+ python manage.py maintenance disable --project ecommerce
789
+
790
+ # Check status of all sites
791
+ python manage.py maintenance status --format json
792
+
793
+ # Auto-discover sites from Cloudflare
794
+ python manage.py sync_cloudflare --api-token your_token
795
+
796
+ # Bulk operations with filters
797
+ python manage.py maintenance enable --tag critical --reason "Security patch"
798
+
799
+ # Dry run to preview changes
800
+ python manage.py maintenance enable --environment staging --dry-run
801
+ ```
802
+
752
803
  ---
753
804
 
754
805
  ## 🔒 Enterprise Security & Compliance
@@ -118,6 +118,7 @@ class EnterpriseConfig(DjangoConfig):
118
118
  enable_leads: bool = True # CRM integration
119
119
  enable_agents: bool = True # AI workflow automation
120
120
  enable_knowbase: bool = True # AI knowledge management
121
+ enable_maintenance: bool = True # Multi-site Cloudflare maintenance
121
122
 
122
123
  config = EnterpriseConfig()
123
124
  ```
@@ -169,6 +170,34 @@ workflow = Workflow([
169
170
  result = workflow.run({"document_id": "doc_123"})
170
171
  ```
171
172
 
173
+ ### 🌐 **Multi-Site Cloudflare Maintenance**
174
+ **Zero-configuration maintenance mode** for enterprise applications with automated monitoring.
175
+
176
+ ```python
177
+ from django_cfg.apps.maintenance.services import MaintenanceManager
178
+
179
+ # Enable maintenance for all production sites
180
+ manager = MaintenanceManager(user)
181
+ manager.bulk_enable_maintenance(
182
+ sites=CloudflareSite.objects.filter(environment='production'),
183
+ reason="Database migration",
184
+ message="🚀 Upgrading our systems. Back online in 30 minutes!"
185
+ )
186
+
187
+ # CLI management
188
+ # python manage.py maintenance enable --environment production
189
+ # python manage.py sync_cloudflare --api-token your_token
190
+ ```
191
+
192
+ **Features:**
193
+ - ✅ **Zero-config setup** - Just provide API token and domain
194
+ - ✅ **Multi-site management** - Handle hundreds of sites with ORM queries
195
+ - ✅ **Automated monitoring** - Health checks with auto-triggers
196
+ - ✅ **Rich admin interface** - Bulk operations and real-time status
197
+ - ✅ **CLI automation** - Perfect for CI/CD pipelines
198
+
199
+ [**📚 View Maintenance Documentation →**](https://docs.djangocfg.com/features/built-in-apps/maintenance)
200
+
172
201
  ### 🏢 **Enterprise User Management**
173
202
  **Multi-channel authentication** with OTP, SMS, email verification, and audit trails.
174
203
 
@@ -385,6 +414,7 @@ docker-compose up -d
385
414
 
386
415
  ### **🚀 Enterprise Features**
387
416
  - [**Built-in Applications**](https://docs.djangocfg.com/features/built-in-apps/accounts) - User management, support, CRM
417
+ - [**Maintenance Management**](https://docs.djangocfg.com/features/built-in-apps/maintenance) - Multi-site Cloudflare maintenance
388
418
  - [**Modular System**](https://docs.djangocfg.com/features/modules/overview) - Email, SMS, LLM, currency modules
389
419
  - [**Third-party Integrations**](https://docs.djangocfg.com/features/integrations/patterns) - Dramatiq, Twilio, ngrok
390
420
 
@@ -603,6 +633,27 @@ python manage.py generate_deployment --platform=docker --environment=production
603
633
  curl http://localhost:8000/health/
604
634
  ```
605
635
 
636
+ ### **🌐 Multi-Site Maintenance Management**
637
+ ```bash
638
+ # Enable maintenance for all production sites
639
+ python manage.py maintenance enable --environment production --reason "Database upgrade"
640
+
641
+ # Disable maintenance for specific project
642
+ python manage.py maintenance disable --project ecommerce
643
+
644
+ # Check status of all sites
645
+ python manage.py maintenance status --format json
646
+
647
+ # Auto-discover sites from Cloudflare
648
+ python manage.py sync_cloudflare --api-token your_token
649
+
650
+ # Bulk operations with filters
651
+ python manage.py maintenance enable --tag critical --reason "Security patch"
652
+
653
+ # Dry run to preview changes
654
+ python manage.py maintenance enable --environment staging --dry-run
655
+ ```
656
+
606
657
  ---
607
658
 
608
659
  ## 🔒 Enterprise Security & Compliance
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "django-cfg"
7
- version = "1.2.17"
7
+ version = "1.2.19"
8
8
  description = "🚀 Next-gen Django configuration: type-safety, AI features, blazing-fast setup, and automated best practices — all in one."
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -32,7 +32,7 @@ Example:
32
32
  default_app_config = "django_cfg.apps.DjangoCfgConfig"
33
33
 
34
34
  # Version information
35
- __version__ = "1.2.17"
35
+ __version__ = "1.2.19"
36
36
  __license__ = "MIT"
37
37
 
38
38
  # Import registry for organized lazy loading
@@ -0,0 +1,68 @@
1
+ """
2
+ Django CFG Accounts Models
3
+
4
+ This module provides all the models for the accounts app.
5
+ Models are organized by functionality:
6
+
7
+ - base: Base utilities and functions
8
+ - user: User model and related functionality
9
+ - registration: Registration and source tracking models
10
+ - auth: Authentication models (OTP, etc.)
11
+ - activity: User activity tracking models
12
+ - integrations: Third-party integrations models (Twilio, etc.)
13
+ """
14
+
15
+ # Import base utilities
16
+ from .base import user_avatar_path
17
+
18
+ # Import choices
19
+ from .choices import (
20
+ ActivityType,
21
+ TwilioResponseType,
22
+ TwilioServiceType,
23
+ )
24
+
25
+ # Import user models
26
+ from .user import CustomUser
27
+
28
+ # Import registration models
29
+ from .registration import (
30
+ RegistrationSource,
31
+ UserRegistrationSource,
32
+ )
33
+
34
+ # Import authentication models
35
+ from .auth import OTPSecret
36
+
37
+ # Import activity models
38
+ from .activity import UserActivity
39
+
40
+ # Import integration models
41
+ from .integrations import TwilioResponse
42
+
43
+ # Export all models
44
+ __all__ = [
45
+ # Base utilities
46
+ 'user_avatar_path',
47
+
48
+ # Choices
49
+ 'ActivityType',
50
+ 'TwilioResponseType',
51
+ 'TwilioServiceType',
52
+
53
+ # User models
54
+ 'CustomUser',
55
+
56
+ # Registration models
57
+ 'RegistrationSource',
58
+ 'UserRegistrationSource',
59
+
60
+ # Authentication models
61
+ 'OTPSecret',
62
+
63
+ # Activity models
64
+ 'UserActivity',
65
+
66
+ # Integration models
67
+ 'TwilioResponse',
68
+ ]
@@ -0,0 +1,34 @@
1
+ """
2
+ User activity tracking models.
3
+ """
4
+
5
+ from django.db import models
6
+
7
+ from .choices import ActivityType
8
+
9
+
10
+ class UserActivity(models.Model):
11
+ """
12
+ User activity log.
13
+ """
14
+
15
+ user = models.ForeignKey('CustomUser', on_delete=models.CASCADE, related_name='activities')
16
+ activity_type = models.CharField(max_length=20, choices=ActivityType.choices)
17
+ description = models.TextField(blank=True)
18
+ ip_address = models.GenericIPAddressField(null=True, blank=True)
19
+ user_agent = models.TextField(blank=True)
20
+
21
+ # Related objects (generic foreign key could be used here)
22
+ object_id = models.PositiveIntegerField(null=True, blank=True)
23
+ object_type = models.CharField(max_length=50, blank=True)
24
+
25
+ created_at = models.DateTimeField(auto_now_add=True)
26
+
27
+ class Meta:
28
+ app_label = 'django_cfg_accounts'
29
+ verbose_name = 'User Activity'
30
+ verbose_name_plural = 'User Activities'
31
+ ordering = ['-created_at']
32
+
33
+ def __str__(self):
34
+ return f"{self.user.username} - {self.get_activity_type_display()}"
@@ -0,0 +1,50 @@
1
+ """
2
+ Authentication models (OTP, etc.).
3
+ """
4
+
5
+ import random
6
+ import string
7
+ from datetime import timedelta
8
+
9
+ from django.db import models
10
+ from django.utils import timezone
11
+
12
+
13
+ class OTPSecret(models.Model):
14
+ """Stores One-Time Passwords for authentication."""
15
+
16
+ email = models.EmailField(db_index=True)
17
+ secret = models.CharField(max_length=6)
18
+ created_at = models.DateTimeField(auto_now_add=True)
19
+ expires_at = models.DateTimeField()
20
+ is_used = models.BooleanField(default=False)
21
+
22
+ def save(self, *args, **kwargs):
23
+ if not self.expires_at:
24
+ self.expires_at = timezone.now() + timedelta(minutes=10)
25
+ super().save(*args, **kwargs)
26
+
27
+ @staticmethod
28
+ def generate_otp(length=6):
29
+ """Generate random numeric OTP."""
30
+ return "".join(random.choices(string.digits, k=length))
31
+
32
+ @property
33
+ def is_valid(self):
34
+ """Check if OTP is still valid."""
35
+ return not self.is_used and timezone.now() < self.expires_at
36
+
37
+ def mark_used(self):
38
+ """Mark OTP as used."""
39
+ self.is_used = True
40
+ self.save(update_fields=["is_used"])
41
+
42
+ def __str__(self):
43
+ return f"OTP for {self.email}"
44
+
45
+ class Meta:
46
+ app_label = 'django_cfg_accounts'
47
+ ordering = ["-created_at"]
48
+ indexes = [
49
+ models.Index(fields=["email", "is_used", "expires_at"]),
50
+ ]
@@ -0,0 +1,8 @@
1
+ """
2
+ Base utilities and functions for accounts models.
3
+ """
4
+
5
+
6
+ def user_avatar_path(instance, filename):
7
+ """Generate file path for user avatar."""
8
+ return f"avatars/{instance.id}/{filename}"
@@ -0,0 +1,32 @@
1
+ """
2
+ Model choices constants for accounts app.
3
+ """
4
+
5
+ from django.db import models
6
+
7
+
8
+ class ActivityType(models.TextChoices):
9
+ """User activity types."""
10
+ LOGIN = 'login', 'Login'
11
+ LOGOUT = 'logout', 'Logout'
12
+ OTP_REQUESTED = 'otp_requested', 'OTP Requested'
13
+ OTP_VERIFIED = 'otp_verified', 'OTP Verified'
14
+ PROFILE_UPDATED = 'profile_updated', 'Profile Updated'
15
+ REGISTRATION = 'registration', 'Registration'
16
+
17
+
18
+ class TwilioResponseType(models.TextChoices):
19
+ """Twilio response types."""
20
+ API_SEND = 'api_send', 'API Send Request'
21
+ API_VERIFY = 'api_verify', 'API Verify Request'
22
+ WEBHOOK_STATUS = 'webhook_status', 'Webhook Status Update'
23
+ WEBHOOK_DELIVERY = 'webhook_delivery', 'Webhook Delivery Report'
24
+
25
+
26
+ class TwilioServiceType(models.TextChoices):
27
+ """Twilio service types."""
28
+ WHATSAPP = 'whatsapp', 'WhatsApp'
29
+ SMS = 'sms', 'SMS'
30
+ VOICE = 'voice', 'Voice'
31
+ EMAIL = 'email', 'Email'
32
+ VERIFY = 'verify', 'Verify API'
@@ -0,0 +1,75 @@
1
+ """
2
+ Third-party integrations models (Twilio, etc.).
3
+ """
4
+
5
+ from django.db import models
6
+
7
+ from .choices import TwilioResponseType, TwilioServiceType
8
+
9
+
10
+ class TwilioResponse(models.Model):
11
+ """Model for storing Twilio API responses and webhook data."""
12
+
13
+ response_type = models.CharField(max_length=20, choices=TwilioResponseType.choices)
14
+ service_type = models.CharField(max_length=10, choices=TwilioServiceType.choices)
15
+
16
+ # Twilio identifiers
17
+ message_sid = models.CharField(max_length=34, blank=True, help_text="Twilio Message SID")
18
+ verification_sid = models.CharField(max_length=34, blank=True, help_text="Twilio Verification SID")
19
+
20
+ # Request/Response data
21
+ request_data = models.JSONField(default=dict, help_text="Original request parameters")
22
+ response_data = models.JSONField(default=dict, help_text="Twilio API response")
23
+
24
+ # Status and error handling
25
+ status = models.CharField(max_length=20, blank=True, help_text="Message/Verification status")
26
+ error_code = models.CharField(max_length=10, blank=True, help_text="Twilio error code")
27
+ error_message = models.TextField(blank=True, help_text="Error description")
28
+
29
+ # Contact information
30
+ to_number = models.CharField(max_length=20, blank=True, help_text="Recipient phone/email")
31
+ from_number = models.CharField(max_length=20, blank=True, help_text="Sender phone/email")
32
+
33
+ # Pricing
34
+ price = models.DecimalField(max_digits=10, decimal_places=6, null=True, blank=True)
35
+ price_unit = models.CharField(max_length=3, blank=True, help_text="Currency code")
36
+
37
+ # Timestamps
38
+ created_at = models.DateTimeField(auto_now_add=True)
39
+ updated_at = models.DateTimeField(auto_now=True)
40
+ twilio_created_at = models.DateTimeField(null=True, blank=True, help_text="Timestamp from Twilio")
41
+
42
+ # Relations
43
+ otp_secret = models.ForeignKey(
44
+ 'OTPSecret',
45
+ on_delete=models.SET_NULL,
46
+ null=True,
47
+ blank=True,
48
+ related_name='twilio_responses',
49
+ help_text="Related OTP if applicable"
50
+ )
51
+
52
+ class Meta:
53
+ app_label = 'django_cfg_accounts'
54
+ verbose_name = 'Twilio Response'
55
+ verbose_name_plural = 'Twilio Responses'
56
+ ordering = ['-created_at']
57
+ indexes = [
58
+ models.Index(fields=['message_sid']),
59
+ models.Index(fields=['verification_sid']),
60
+ models.Index(fields=['status', 'created_at']),
61
+ models.Index(fields=['response_type', 'service_type']),
62
+ ]
63
+
64
+ def __str__(self):
65
+ return f"{self.get_response_type_display()} - {self.get_service_type_display()}"
66
+
67
+ @property
68
+ def has_error(self):
69
+ """Check if response has error."""
70
+ return bool(self.error_code or self.error_message)
71
+
72
+ @property
73
+ def is_successful(self):
74
+ """Check if response is successful."""
75
+ return not self.has_error and self.status in ['sent', 'delivered', 'approved']
@@ -0,0 +1,52 @@
1
+ """
2
+ Registration and source tracking models.
3
+ """
4
+
5
+ from django.db import models
6
+ from urllib.parse import urlparse
7
+
8
+
9
+ class RegistrationSource(models.Model):
10
+ """Model for tracking user registration sources/projects."""
11
+ url = models.URLField(unique=True, help_text="Source URL (e.g., https://unrealon.com)")
12
+ name = models.CharField(max_length=100, blank=True, help_text="Display name for the source")
13
+ description = models.TextField(blank=True, help_text="Optional description")
14
+ is_active = models.BooleanField(default=True, help_text="Whether this source is active")
15
+ created_at = models.DateTimeField(auto_now_add=True)
16
+ updated_at = models.DateTimeField(auto_now=True)
17
+
18
+ def __str__(self):
19
+ return self.name or self.get_domain()
20
+
21
+ def get_domain(self):
22
+ """Extract domain from URL."""
23
+ try:
24
+ parsed = urlparse(self.url)
25
+ return parsed.netloc
26
+ except:
27
+ return self.url
28
+
29
+ def get_display_name(self):
30
+ """Get display name or domain."""
31
+ return self.name or self.get_domain()
32
+
33
+ class Meta:
34
+ app_label = 'django_cfg_accounts'
35
+ verbose_name = "Registration Source"
36
+ verbose_name_plural = "Registration Sources"
37
+ ordering = ['-created_at']
38
+
39
+
40
+ class UserRegistrationSource(models.Model):
41
+ """Many-to-many relationship between users and registration sources."""
42
+ user = models.ForeignKey('CustomUser', on_delete=models.CASCADE, related_name='user_registration_sources')
43
+ source = models.ForeignKey(RegistrationSource, on_delete=models.CASCADE, related_name='user_registration_sources')
44
+ first_registration = models.BooleanField(default=True, help_text="Whether this was the first registration from this source")
45
+ registration_date = models.DateTimeField(auto_now_add=True)
46
+
47
+ class Meta:
48
+ app_label = 'django_cfg_accounts'
49
+ unique_together = ['user', 'source']
50
+ verbose_name = "User Registration Source"
51
+ verbose_name_plural = "User Registration Sources"
52
+ ordering = ['-registration_date']
@@ -0,0 +1,80 @@
1
+ """
2
+ User model and related functionality.
3
+ """
4
+
5
+ from typing import Optional, List
6
+ from django.contrib.auth.models import AbstractUser
7
+ from django.db import models
8
+
9
+ from ..managers.user_manager import UserManager
10
+ from .base import user_avatar_path
11
+
12
+
13
+ class CustomUser(AbstractUser):
14
+ """Simplified user model for OTP-only authentication."""
15
+
16
+ email = models.EmailField(unique=True)
17
+
18
+ # Profile fields
19
+ first_name = models.CharField(max_length=50, blank=True)
20
+ last_name = models.CharField(max_length=50, blank=True)
21
+ company = models.CharField(max_length=100, blank=True)
22
+ phone = models.CharField(max_length=20, blank=True)
23
+ position = models.CharField(max_length=100, blank=True)
24
+ avatar = models.ImageField(upload_to=user_avatar_path, blank=True, null=True)
25
+
26
+ # Profile metadata
27
+ updated_at = models.DateTimeField(auto_now=True)
28
+
29
+ # Managers
30
+ objects: UserManager = UserManager()
31
+
32
+ USERNAME_FIELD = "email"
33
+ REQUIRED_FIELDS = ["username"]
34
+
35
+ def __str__(self):
36
+ return self.email
37
+
38
+ @property
39
+ def is_admin(self) -> bool:
40
+ return self.is_superuser
41
+
42
+ @property
43
+ def full_name(self) -> str:
44
+ """Get user's full name."""
45
+ return self.__class__.objects.get_full_name(self)
46
+
47
+ @property
48
+ def initials(self) -> str:
49
+ """Get user's initials for avatar fallback."""
50
+ return self.__class__.objects.get_initials(self)
51
+
52
+ @property
53
+ def display_username(self) -> str:
54
+ """Get formatted username for display."""
55
+ return self.__class__.objects.get_display_username(self)
56
+
57
+ @property
58
+ def unanswered_messages_count(self) -> int:
59
+ """Get count of unanswered messages for the user."""
60
+ return self.__class__.objects.get_unanswered_messages_count(self)
61
+
62
+ def get_sources(self) -> List['RegistrationSource']:
63
+ """Get all sources associated with this user."""
64
+ from .registration import RegistrationSource
65
+ return RegistrationSource.objects.filter(user_registration_sources__user=self)
66
+
67
+ @property
68
+ def primary_source(self) -> Optional['RegistrationSource']:
69
+ """Get the first source where user registered."""
70
+ from .registration import UserRegistrationSource
71
+ user_source = UserRegistrationSource.objects.filter(
72
+ user=self,
73
+ first_registration=True
74
+ ).first()
75
+ return user_source.source if user_source else None
76
+
77
+ class Meta:
78
+ app_label = 'django_cfg_accounts'
79
+ verbose_name = "User"
80
+ verbose_name_plural = "Users"
@@ -0,0 +1,56 @@
1
+ """
2
+ Simplified Django-CFG Maintenance Application.
3
+
4
+ A simple maintenance mode management app with Cloudflare integration.
5
+ Refactored from 119 files to ~10 files following KISS principles.
6
+
7
+ Proper structure:
8
+ - models/ - CloudflareSite and MaintenanceLog models
9
+ - services/ - MaintenanceService for Cloudflare operations
10
+ - admin/ - Simple admin interfaces
11
+ - management/commands/ - CLI commands
12
+ """
13
+
14
+ __version__ = "2.0.0"
15
+ __author__ = "Django-CFG Team"
16
+
17
+ # Lazy import registry to avoid Django initialization issues
18
+ _LAZY_IMPORTS = {
19
+ # Models
20
+ 'CloudflareApiKey': ('django_cfg.apps.maintenance.models', 'CloudflareApiKey'),
21
+ 'CloudflareSite': ('django_cfg.apps.maintenance.models', 'CloudflareSite'),
22
+ 'MaintenanceLog': ('django_cfg.apps.maintenance.models', 'MaintenanceLog'),
23
+ 'ScheduledMaintenance': ('django_cfg.apps.maintenance.models', 'ScheduledMaintenance'),
24
+
25
+ # Services
26
+ 'MaintenanceService': ('django_cfg.apps.maintenance.services', 'MaintenanceService'),
27
+ 'SiteSyncService': ('django_cfg.apps.maintenance.services', 'SiteSyncService'),
28
+ 'BulkOperationsService': ('django_cfg.apps.maintenance.services', 'BulkOperationsService'),
29
+ 'ScheduledMaintenanceService': ('django_cfg.apps.maintenance.services', 'ScheduledMaintenanceService'),
30
+ 'bulk_operations': ('django_cfg.apps.maintenance.services', 'bulk_operations'),
31
+ 'scheduled_maintenance_service': ('django_cfg.apps.maintenance.services', 'scheduled_maintenance_service'),
32
+ 'enable_maintenance_for_domain': ('django_cfg.apps.maintenance.services', 'enable_maintenance_for_domain'),
33
+ 'disable_maintenance_for_domain': ('django_cfg.apps.maintenance.services', 'disable_maintenance_for_domain'),
34
+ 'sync_site_from_cloudflare': ('django_cfg.apps.maintenance.services', 'sync_site_from_cloudflare'),
35
+ 'enable_maintenance_for_domains': ('django_cfg.apps.maintenance.services', 'enable_maintenance_for_domains'),
36
+ 'disable_maintenance_for_domains': ('django_cfg.apps.maintenance.services', 'disable_maintenance_for_domains'),
37
+ 'bulk_sync_all_sites': ('django_cfg.apps.maintenance.services', 'bulk_sync_all_sites'),
38
+ 'get_maintenance_status_report': ('django_cfg.apps.maintenance.services', 'get_maintenance_status_report'),
39
+ 'schedule_maintenance_for_sites': ('django_cfg.apps.maintenance.services', 'schedule_maintenance_for_sites'),
40
+ 'process_scheduled_maintenances': ('django_cfg.apps.maintenance.services', 'process_scheduled_maintenances'),
41
+ }
42
+
43
+
44
+ def __getattr__(name: str):
45
+ """Lazy import mechanism to avoid Django initialization issues."""
46
+ if name in _LAZY_IMPORTS:
47
+ module_path, attr_name = _LAZY_IMPORTS[name]
48
+
49
+ import importlib
50
+ module = importlib.import_module(module_path)
51
+ return getattr(module, attr_name)
52
+
53
+ raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
54
+
55
+
56
+ __all__ = list(_LAZY_IMPORTS.keys())
@@ -0,0 +1,17 @@
1
+ """
2
+ Maintenance admin interfaces.
3
+
4
+ Decomposed admin interfaces with Unfold styling and action buttons.
5
+ """
6
+
7
+ from .api_key_admin import CloudflareApiKeyAdmin
8
+ from .site_admin import CloudflareSiteAdmin
9
+ from .log_admin import MaintenanceLogAdmin
10
+ from .scheduled_admin import ScheduledMaintenanceAdmin
11
+
12
+ __all__ = [
13
+ 'CloudflareApiKeyAdmin',
14
+ 'CloudflareSiteAdmin',
15
+ 'MaintenanceLogAdmin',
16
+ 'ScheduledMaintenanceAdmin',
17
+ ]