django-cfg 1.1.48__tar.gz → 1.1.50__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 (234) hide show
  1. {django_cfg-1.1.48 → django_cfg-1.1.50}/LICENSE +1 -1
  2. {django_cfg-1.1.48 → django_cfg-1.1.50}/PKG-INFO +4 -4
  3. {django_cfg-1.1.48 → django_cfg-1.1.50}/README.md +1 -1
  4. {django_cfg-1.1.48 → django_cfg-1.1.50}/pyproject.toml +3 -3
  5. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/__init__.py +3 -3
  6. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/serializers/otp.py +2 -2
  7. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/services/otp_service.py +51 -2
  8. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/utils/notifications.py +98 -17
  9. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/views/otp.py +8 -0
  10. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/archive/django_sample.zip +0 -0
  11. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/cli/README.md +1 -1
  12. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/cli/commands/create_project.py +2 -2
  13. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/cli/commands/info.py +1 -1
  14. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/test_email.py +1 -1
  15. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_llm/llm/client.py +2 -2
  16. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_twilio/README.md +1 -1
  17. {django_cfg-1.1.48 → django_cfg-1.1.50}/.gitignore +0 -0
  18. {django_cfg-1.1.48 → django_cfg-1.1.50}/MANIFEST.in +0 -0
  19. {django_cfg-1.1.48 → django_cfg-1.1.50}/requirements-dev.txt +0 -0
  20. {django_cfg-1.1.48 → django_cfg-1.1.50}/requirements-test.txt +0 -0
  21. {django_cfg-1.1.48 → django_cfg-1.1.50}/requirements.txt +0 -0
  22. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/__init__.py +0 -0
  23. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/README.md +0 -0
  24. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/__init__.py +0 -0
  25. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/admin/__init__.py +0 -0
  26. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/admin/activity.py +0 -0
  27. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/admin/filters.py +0 -0
  28. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/admin/group.py +0 -0
  29. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/admin/inlines.py +0 -0
  30. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/admin/otp.py +0 -0
  31. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/admin/registration_source.py +0 -0
  32. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/admin/user.py +0 -0
  33. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/apps.py +0 -0
  34. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/management/commands/test_otp.py +0 -0
  35. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/managers/__init__.py +0 -0
  36. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/managers/user_manager.py +0 -0
  37. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/migrations/0001_initial.py +0 -0
  38. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/migrations/0002_add_phone_otp_clean.py +0 -0
  39. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/migrations/__init__.py +0 -0
  40. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/models.py +0 -0
  41. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/serializers/__init__.py +0 -0
  42. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/serializers/profile.py +0 -0
  43. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/services/__init__.py +0 -0
  44. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/services/activity_service.py +0 -0
  45. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/signals.py +0 -0
  46. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/templates/emails/base_email.html +0 -0
  47. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/templates/emails/base_email.txt +0 -0
  48. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/templates/emails/otp_email.html +0 -0
  49. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/templates/emails/otp_email.txt +0 -0
  50. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/templates/emails/welcome_email.html +0 -0
  51. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/templates/emails/welcome_email.txt +0 -0
  52. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/urls.py +0 -0
  53. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/views/__init__.py +0 -0
  54. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/accounts/views/profile.py +0 -0
  55. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/api/__init__.py +0 -0
  56. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/api/commands/__init__.py +0 -0
  57. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/api/commands/urls.py +0 -0
  58. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/api/commands/views.py +0 -0
  59. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/api/health/__init__.py +0 -0
  60. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/api/health/urls.py +0 -0
  61. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/api/health/views.py +0 -0
  62. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/leads/README.md +0 -0
  63. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/leads/__init__.py +0 -0
  64. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/leads/admin.py +0 -0
  65. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/leads/apps.py +0 -0
  66. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/leads/migrations/0001_initial.py +0 -0
  67. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/leads/migrations/__init__.py +0 -0
  68. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/leads/models.py +0 -0
  69. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/leads/serializers.py +0 -0
  70. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/leads/signals.py +0 -0
  71. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/leads/tests.py +0 -0
  72. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/leads/urls.py +0 -0
  73. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/leads/views.py +0 -0
  74. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/README.md +0 -0
  75. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/__init__.py +0 -0
  76. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/admin.py +0 -0
  77. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/admin_filters.py +0 -0
  78. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/apps.py +0 -0
  79. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/management/__init__.py +0 -0
  80. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/management/commands/__init__.py +0 -0
  81. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/management/commands/test_newsletter.py +0 -0
  82. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/managers/README.md +0 -0
  83. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/managers/__init__.py +0 -0
  84. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/migrations/0001_initial.py +0 -0
  85. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/migrations/__init__.py +0 -0
  86. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/models.py +0 -0
  87. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/serializers.py +0 -0
  88. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/services/email_service.py +0 -0
  89. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/signals.py +0 -0
  90. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/urls.py +0 -0
  91. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/utils/__init__.py +0 -0
  92. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/views/__init__.py +0 -0
  93. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/views/campaigns.py +0 -0
  94. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/views/emails.py +0 -0
  95. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/views/newsletters.py +0 -0
  96. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/views/subscriptions.py +0 -0
  97. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/newsletter/views/tracking.py +0 -0
  98. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/__init__.py +0 -0
  99. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/admin.py +0 -0
  100. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/admin_filters.py +0 -0
  101. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/apps.py +0 -0
  102. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/managers/message_manager.py +0 -0
  103. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/managers/ticket_manager.py +0 -0
  104. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/migrations/0001_initial.py +0 -0
  105. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/migrations/0002_alter_message_ticket.py +0 -0
  106. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/migrations/__init__.py +0 -0
  107. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/models.py +0 -0
  108. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/serializers.py +0 -0
  109. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/signals.py +0 -0
  110. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/templates/support/chat/access_denied.html +0 -0
  111. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/templates/support/chat/ticket_chat.html +0 -0
  112. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/urls.py +0 -0
  113. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/utils/__init__.py +0 -0
  114. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/utils/support_email_service.py +0 -0
  115. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/views/__init__.py +0 -0
  116. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/views/admin.py +0 -0
  117. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/views/api.py +0 -0
  118. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/support/views/chat.py +0 -0
  119. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/tasks/__init__.py +0 -0
  120. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/tasks/admin.py +0 -0
  121. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/tasks/apps.py +0 -0
  122. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/tasks/templates/tasks/dashboard.html +0 -0
  123. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/tasks/urls.py +0 -0
  124. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/tasks/views.py +0 -0
  125. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps/urls.py +0 -0
  126. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/apps.py +0 -0
  127. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/cli/__init__.py +0 -0
  128. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/cli/commands/__init__.py +0 -0
  129. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/cli/main.py +0 -0
  130. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/cli/utils.py +0 -0
  131. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/core/__init__.py +0 -0
  132. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/core/config.py +0 -0
  133. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/core/environment.py +0 -0
  134. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/core/generation.py +0 -0
  135. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/core/validation.py +0 -0
  136. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/examples/README_NGROK.md +0 -0
  137. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/examples/README_NGROK_ENV.md +0 -0
  138. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/examples/ngrok_env_example.py +0 -0
  139. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/examples/ngrok_example.py +0 -0
  140. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/exceptions.py +0 -0
  141. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/integration.py +0 -0
  142. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/__init__.py +0 -0
  143. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/__init__.py +0 -0
  144. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/check_settings.py +0 -0
  145. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/create_token.py +0 -0
  146. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/generate.py +0 -0
  147. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/migrator.py +0 -0
  148. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/rundramatiq.py +0 -0
  149. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/runserver_ngrok.py +0 -0
  150. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/script.py +0 -0
  151. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/show_config.py +0 -0
  152. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/show_urls.py +0 -0
  153. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/superuser.py +0 -0
  154. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/task_clear.py +0 -0
  155. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/task_status.py +0 -0
  156. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/test_telegram.py +0 -0
  157. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/test_twilio.py +0 -0
  158. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/tree.py +0 -0
  159. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/management/commands/validate_config.py +0 -0
  160. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/middleware/README.md +0 -0
  161. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/middleware/__init__.py +0 -0
  162. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/middleware/user_activity.py +0 -0
  163. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/models/__init__.py +0 -0
  164. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/models/cache.py +0 -0
  165. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/models/constance.py +0 -0
  166. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/models/database.py +0 -0
  167. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/models/drf.py +0 -0
  168. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/models/jwt.py +0 -0
  169. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/models/limits.py +0 -0
  170. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/models/ngrok.py +0 -0
  171. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/models/revolution.py +0 -0
  172. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/models/services.py +0 -0
  173. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/models/tasks.py +0 -0
  174. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/models/unfold.py +0 -0
  175. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/__init__.py +0 -0
  176. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/base.py +0 -0
  177. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_currency/README.md +0 -0
  178. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_currency/__init__.py +0 -0
  179. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_currency/cache.py +0 -0
  180. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_currency/converter.py +0 -0
  181. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_currency/service.py +0 -0
  182. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_email.py +0 -0
  183. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_llm/README.md +0 -0
  184. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_llm/__init__.py +0 -0
  185. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_llm/example.py +0 -0
  186. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_llm/llm/__init__.py +0 -0
  187. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_llm/llm/cache.py +0 -0
  188. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_llm/llm/models_cache.py +0 -0
  189. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_llm/service.py +0 -0
  190. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_llm/translator/__init__.py +0 -0
  191. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_llm/translator/cache.py +0 -0
  192. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_llm/translator/translator.py +0 -0
  193. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_logger.py +0 -0
  194. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_ngrok.py +0 -0
  195. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_tasks.py +0 -0
  196. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_telegram.py +0 -0
  197. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_twilio/__init__.py +0 -0
  198. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_twilio/exceptions.py +0 -0
  199. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_twilio/models.py +0 -0
  200. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_twilio/service.py +0 -0
  201. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/django_twilio/simple_service.py +0 -0
  202. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/logger.py +0 -0
  203. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/unfold/__init__.py +0 -0
  204. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/unfold/callbacks.py +0 -0
  205. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/unfold/dashboard.py +0 -0
  206. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/unfold/models.py +0 -0
  207. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/unfold/system_monitor.py +0 -0
  208. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/modules/unfold/tailwind.py +0 -0
  209. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/routers.py +0 -0
  210. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/__init__.py +0 -0
  211. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/index.html +0 -0
  212. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/layouts/dashboard_with_tabs.html +0 -0
  213. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/components/activity_tracker.html +0 -0
  214. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/components/charts_section.html +0 -0
  215. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/components/django_commands.html +0 -0
  216. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/components/quick_actions.html +0 -0
  217. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/components/recent_activity.html +0 -0
  218. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/components/recent_users_table.html +0 -0
  219. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/components/stats_cards.html +0 -0
  220. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/components/stats_tiles.html +0 -0
  221. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/components/system_health.html +0 -0
  222. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/components/system_metrics.html +0 -0
  223. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/components/user_permissions.html +0 -0
  224. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/tabs/app_stats_tab.html +0 -0
  225. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/tabs/commands_tab.html +0 -0
  226. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/tabs/overview_tab.html +0 -0
  227. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/tabs/stats_tab.html +0 -0
  228. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/tabs/users_tab.html +0 -0
  229. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/admin/snippets/zones/zones_table.html +0 -0
  230. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/templates/emails/base_email.html +0 -0
  231. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/utils/__init__.py +0 -0
  232. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/utils/path_resolution.py +0 -0
  233. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/utils/smart_defaults.py +0 -0
  234. {django_cfg-1.1.48 → django_cfg-1.1.50}/src/django_cfg/version_check.py +0 -0
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Unrealos Team
3
+ Copyright (c) 2025 ReformsAI Team
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-cfg
3
- Version: 1.1.48
3
+ Version: 1.1.50
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
7
7
  Project-URL: Repository, https://github.com/markolofsen/django-cfg.git
8
8
  Project-URL: Issues, https://github.com/markolofsen/django-cfg/issues
9
9
  Project-URL: Changelog, https://github.com/markolofsen/django-cfg/blob/main/CHANGELOG.md
10
- Author-email: UnrealOS Team <dev@unrealos.com>
11
- Maintainer-email: UnrealOS Team <dev@unrealos.com>
10
+ Author-email: ReformsAI Team <dev@reforms.ai>
11
+ Maintainer-email: ReformsAI Team <dev@reforms.ai>
12
12
  License: MIT
13
13
  License-File: LICENSE
14
14
  Keywords: configuration,developer-experience,django,pydantic,settings,type-safety
@@ -1090,6 +1090,6 @@ MIT License - see [LICENSE](LICENSE) file for details.
1090
1090
 
1091
1091
  ---
1092
1092
 
1093
- **Made with ❤️ by the UnrealOS Team**
1093
+ **Made with ❤️ by the ReformsAI Team**
1094
1094
 
1095
1095
  *Django-CFG: Because configuration should be simple, safe, and powerful.*
@@ -969,6 +969,6 @@ MIT License - see [LICENSE](LICENSE) file for details.
969
969
 
970
970
  ---
971
971
 
972
- **Made with ❤️ by the UnrealOS Team**
972
+ **Made with ❤️ by the ReformsAI Team**
973
973
 
974
974
  *Django-CFG: Because configuration should be simple, safe, and powerful.*
@@ -4,15 +4,15 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "django-cfg"
7
- version = "1.1.48"
7
+ version = "1.1.50"
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"}
11
11
  authors = [
12
- {name = "UnrealOS Team", email = "dev@unrealos.com"},
12
+ {name = "ReformsAI Team", email = "dev@reforms.ai"},
13
13
  ]
14
14
  maintainers = [
15
- {name = "UnrealOS Team", email = "dev@unrealos.com"},
15
+ {name = "ReformsAI Team", email = "dev@reforms.ai"},
16
16
  ]
17
17
  keywords = [
18
18
  "django",
@@ -38,9 +38,9 @@ default_app_config = "django_cfg.apps.DjangoCfgConfig"
38
38
  from typing import TYPE_CHECKING
39
39
 
40
40
  # Version information
41
- __version__ = "1.1.48"
42
- __author__ = "Unrealos Team"
43
- __email__ = "info@unrealos.com"
41
+ __version__ = "1.1.50"
42
+ __author__ = "ReformsAI Team"
43
+ __email__ = "info@reforms.ai"
44
44
  __license__ = "MIT"
45
45
 
46
46
  # Core exports - only import when needed to avoid circular imports
@@ -26,7 +26,7 @@ class OTPRequestSerializer(serializers.Serializer):
26
26
  source_url = serializers.URLField(
27
27
  required=False,
28
28
  allow_blank=True,
29
- help_text="Source URL for tracking registration (e.g., https://unrealos.com)",
29
+ help_text="Source URL for tracking registration (e.g., https://reforms.ai)",
30
30
  )
31
31
 
32
32
  def validate_identifier(self, value):
@@ -76,7 +76,7 @@ class OTPVerifySerializer(serializers.Serializer):
76
76
  source_url = serializers.URLField(
77
77
  required=False,
78
78
  allow_blank=True,
79
- help_text="Source URL for tracking login (e.g., https://unrealos.com)",
79
+ help_text="Source URL for tracking login (e.g., https://reforms.ai)",
80
80
  )
81
81
 
82
82
  def validate_identifier(self, value):
@@ -28,6 +28,53 @@ class OTPService:
28
28
  phone_pattern = r'^\+[1-9]\d{6,14}$' # E.164 format: minimum 7 digits, maximum 15
29
29
  return bool(re.match(phone_pattern, clean_phone))
30
30
 
31
+ @staticmethod
32
+ def _get_temp_email_domain(source_url: Optional[str] = None) -> str:
33
+ """
34
+ Get domain for temporary email addresses.
35
+
36
+ Priority:
37
+ 1. Extract domain from source_url
38
+ 2. Use config.site_url domain
39
+ 3. Fallback to 'temp.local'
40
+ """
41
+ try:
42
+ from django_cfg.core.config import get_current_config
43
+ from urllib.parse import urlparse
44
+
45
+ config = get_current_config()
46
+
47
+ # Try to extract domain from source_url
48
+ if source_url:
49
+ try:
50
+ parsed = urlparse(source_url)
51
+ if parsed.netloc:
52
+ # Remove www. prefix if present
53
+ domain = parsed.netloc
54
+ if domain.startswith("www."):
55
+ domain = domain[4:]
56
+ return domain
57
+ except:
58
+ pass
59
+
60
+ # Try to use config.site_url domain
61
+ if config and config.site_url:
62
+ try:
63
+ parsed = urlparse(config.site_url)
64
+ if parsed.netloc:
65
+ domain = parsed.netloc
66
+ if domain.startswith("www."):
67
+ domain = domain[4:]
68
+ return domain
69
+ except:
70
+ pass
71
+
72
+ # Fallback to temp.local
73
+ return "temp.local"
74
+
75
+ except Exception:
76
+ return "temp.local"
77
+
31
78
  @staticmethod
32
79
  def _determine_channel(identifier: str) -> str:
33
80
  """Determine if identifier is email or phone."""
@@ -114,8 +161,10 @@ class OTPService:
114
161
  user = CustomUser.objects.get(phone=cleaned_identifier)
115
162
  created = False
116
163
  except CustomUser.DoesNotExist:
117
- # Create user with temp email based on phone
118
- temp_email = f"phone_{cleaned_identifier.replace('+', '').replace(' ', '')}@temp.local"
164
+ # Create user with temp email based on phone and domain
165
+ phone_clean = cleaned_identifier.replace('+', '').replace(' ', '')
166
+ domain = OTPService._get_temp_email_domain(source_url)
167
+ temp_email = f"phone_{phone_clean}@{domain}"
119
168
  user, created = CustomUser.objects.register_user(
120
169
  temp_email, source_url=source_url
121
170
  )
@@ -7,7 +7,7 @@ from django.utils import timezone
7
7
  from django.contrib.auth import get_user_model
8
8
  from django_cfg.modules.django_telegram import DjangoTelegram
9
9
  from django_cfg.modules.django_email import DjangoEmailService
10
- from django_cfg.modules.django_twilio import SimpleTwilioService
10
+ from django_cfg.modules.django_twilio import SimpleTwilioService, send_whatsapp
11
11
  from django_cfg.core.config import get_current_config
12
12
 
13
13
  # Get config once
@@ -15,6 +15,44 @@ config = get_current_config()
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
17
 
18
+ class WhatsAppMessageBuilder:
19
+ """Builder for WhatsApp OTP messages"""
20
+
21
+ def __init__(self, app_name: str, otp_code: str):
22
+ self.app_name = app_name
23
+ self.otp_code = otp_code
24
+ self.lines = []
25
+
26
+ def add_greeting(self):
27
+ """Add greeting line"""
28
+ self.lines.append(f"Your {self.app_name} verification code:")
29
+ return self
30
+
31
+ def add_code(self):
32
+ """Add OTP code line"""
33
+ self.lines.append(f"*{self.otp_code}*")
34
+ return self
35
+
36
+ def add_expiry(self):
37
+ """Add expiry information"""
38
+ self.lines.append("Expires in 10 minutes")
39
+ return self
40
+
41
+ def add_url(self, url: str):
42
+ """Add verification URL"""
43
+ self.lines.append(f"Verify: {url}")
44
+ return self
45
+
46
+ def add_security_note(self):
47
+ """Add security note"""
48
+ self.lines.append("Keep this code secure")
49
+ return self
50
+
51
+ def build(self) -> str:
52
+ """Build the final message"""
53
+ return "\n".join(self.lines)
54
+
55
+
18
56
  class AccountNotifications:
19
57
  """Centralized account notification system"""
20
58
 
@@ -217,8 +255,7 @@ class AccountNotifications:
217
255
  """Send OTP notification via email"""
218
256
  if send_email:
219
257
  try:
220
- from ..services.otp_service import OTPService
221
- otp_link = OTPService._get_otp_url(otp_code)
258
+ otp_link = config.get_otp_url(otp_code) if config else f"#otp-{otp_code}"
222
259
  success = AccountNotifications._send_email(
223
260
  user=user,
224
261
  subject=f"Your OTP code: {otp_code}",
@@ -254,23 +291,33 @@ class AccountNotifications:
254
291
 
255
292
  @staticmethod
256
293
  def send_phone_otp_notification(user, otp_code, phone_number, is_new_user=False, source_url=None):
257
- """Send OTP notification via SMS to client and system notification to Telegram"""
294
+ """Send OTP notification via WhatsApp to client and system notification to Telegram"""
258
295
  try:
259
- # Import here to avoid circular imports
260
- from django_cfg.modules.django_twilio import send_sms
261
-
262
- # Format SMS message for client
296
+ # Build WhatsApp message using builder
263
297
  app_name = config.project_name if config else "App"
264
- sms_message = f"Your {app_name} verification code is: {otp_code}. This code expires in 10 minutes."
298
+ builder = WhatsAppMessageBuilder(app_name, otp_code)
299
+
300
+ # Build message with proper formatting
301
+ builder.add_greeting().add_code().add_expiry()
302
+
303
+ # Add URL if available
304
+ otp_url = config.get_otp_url(otp_code) if config else None
305
+ if otp_url:
306
+ builder.add_url(otp_url)
307
+
308
+ builder.add_security_note()
309
+ whatsapp_message = builder.build()
265
310
 
266
- # Send SMS to client using the convenience function
267
- result = send_sms(
311
+ # Send WhatsApp message to client using our OTP code
312
+ result = send_whatsapp(
268
313
  to=phone_number,
269
- body=sms_message
314
+ body=whatsapp_message
270
315
  )
271
316
 
272
- if result:
273
- logger.info(f"OTP SMS sent to client {phone_number}")
317
+ success = bool(result)
318
+
319
+ if success:
320
+ logger.info(f"OTP sent via WhatsApp to client {phone_number}")
274
321
 
275
322
  # Send SYSTEM notification to Telegram (for admins) - WITHOUT OTP code for security
276
323
  try:
@@ -279,7 +326,8 @@ class AccountNotifications:
279
326
  "user_type": "New User" if is_new_user else "Existing User",
280
327
  "source_url": source_url or "Direct",
281
328
  "timestamp": timezone.now().strftime("%Y-%m-%d %H:%M:%S UTC"),
282
- "user_id": user.id if user else "Unknown"
329
+ "user_id": user.id if user else "Unknown",
330
+ "delivery_method": "WhatsApp (with SMS fallback)"
283
331
  }
284
332
 
285
333
  if is_new_user:
@@ -291,10 +339,43 @@ class AccountNotifications:
291
339
  except Exception as e:
292
340
  logger.error(f"Failed to send phone OTP system notification: {e}")
293
341
  else:
294
- logger.error(f"Failed to send OTP SMS to client {phone_number}")
342
+ logger.error(f"Failed to send OTP via WhatsApp to client {phone_number}")
343
+
344
+ # Send error notification to Telegram
345
+ try:
346
+ error_data = {
347
+ "phone": phone_number,
348
+ "error_message": "WhatsApp message delivery failed",
349
+ "user_type": "New User" if is_new_user else "Existing User",
350
+ "source_url": source_url or "Direct",
351
+ "timestamp": timezone.now().strftime("%Y-%m-%d %H:%M:%S UTC"),
352
+ "user_id": user.id if user else "Unknown"
353
+ }
354
+
355
+ DjangoTelegram.send_error("🚫📱 WhatsApp OTP Delivery Failed", error_data)
356
+ logger.info(f"WhatsApp OTP error notification sent to Telegram for {phone_number}")
357
+ except Exception as e:
358
+ logger.error(f"Failed to send WhatsApp OTP error notification to Telegram: {e}")
295
359
 
296
360
  except Exception as e:
297
- logger.error(f"Failed to send OTP SMS to client {phone_number}: {e}")
361
+ logger.error(f"Failed to send OTP via WhatsApp to client {phone_number}: {e}")
362
+
363
+ # Send error notification to Telegram for unexpected errors
364
+ try:
365
+ error_data = {
366
+ "phone": phone_number,
367
+ "error_message": str(e),
368
+ "error_type": "Unexpected Error",
369
+ "user_type": "New User" if is_new_user else "Existing User",
370
+ "source_url": source_url or "Direct",
371
+ "timestamp": timezone.now().strftime("%Y-%m-%d %H:%M:%S UTC"),
372
+ "user_id": user.id if user else "Unknown"
373
+ }
374
+
375
+ DjangoTelegram.send_error("🚨📱 WhatsApp OTP System Error", error_data)
376
+ logger.info(f"WhatsApp OTP system error notification sent to Telegram for {phone_number}")
377
+ except Exception as telegram_error:
378
+ logger.error(f"Failed to send WhatsApp OTP system error notification to Telegram: {telegram_error}")
298
379
 
299
380
  @staticmethod
300
381
  def send_otp_verification_success(user, source_url=None, send_telegram=True):
@@ -83,6 +83,14 @@ class OTPViewSet(viewsets.GenericViewSet):
83
83
  {"error": "Failed to create user account"},
84
84
  status=status.HTTP_500_INTERNAL_SERVER_ERROR,
85
85
  )
86
+ elif error_type in ["email_send_failed", "phone_send_failed"]:
87
+ # Handle delivery failures
88
+ channel_name = "phone number" if error_type == "phone_send_failed" else "email address"
89
+ logger.error(f"Failed to send OTP to {channel_name}: {identifier}")
90
+ return Response(
91
+ {"error": f"Failed to send OTP to your {channel_name}. Please try again."},
92
+ status=status.HTTP_500_INTERNAL_SERVER_ERROR,
93
+ )
86
94
  else:
87
95
  logger.error(f"Unknown error type: {error_type} for {identifier}")
88
96
  return Response(
@@ -505,7 +505,7 @@ print(f"Django installed: {deps['django']}")
505
505
 
506
506
  ## 📚 Documentation
507
507
 
508
- - **Django CFG**: https://django-cfg.unrealos.com
508
+ - **Django CFG**: https://django-cfg.reforms.ai
509
509
  - **GitHub**: https://github.com/unrealos/django-cfg
510
510
  - **PyPI**: https://pypi.org/project/django-cfg/
511
511
  - **Examples**: https://github.com/unrealos/django-cfg/tree/main/examples
@@ -219,7 +219,7 @@ docker-compose -f docker-compose.yml -f docker-compose.nginx.yml up -d
219
219
 
220
220
  - **Admin Interface**: `http://localhost:8000/admin/`
221
221
  - **API Documentation**: `http://localhost:8000/api/schema/swagger-ui/`
222
- - **Django CFG Docs**: [django-cfg.unrealos.com](https://django-cfg.unrealos.com)
222
+ - **Django CFG Docs**: [django-cfg.reforms.ai](https://django-cfg.reforms.ai)
223
223
 
224
224
  ## 🛠️ Development
225
225
 
@@ -579,7 +579,7 @@ def create_project(project_name: str, path: str, no_deps: bool, use_pip: bool, f
579
579
  click.echo(" ⚡ Background task processing")
580
580
  click.echo(" 🐳 Docker deployment ready")
581
581
 
582
- # click.echo(f"\n📚 Documentation: https://django-cfg.unrealos.com")
582
+ # click.echo(f"\n📚 Documentation: https://django-cfg.reforms.ai")
583
583
 
584
584
  # Beautiful thank you message
585
585
  show_thank_you_message()
@@ -119,7 +119,7 @@ def info(verbose: bool):
119
119
  click.echo(" # Install optional dependencies")
120
120
  click.echo(" pip install twilio sendgrid django-unfold")
121
121
  click.echo()
122
- click.echo("📚 Documentation: https://django-cfg.unrealos.com")
122
+ click.echo("📚 Documentation: https://django-cfg.reforms.ai")
123
123
  click.echo("🐙 GitHub: https://github.com/unrealos/django-cfg")
124
124
 
125
125
  # Warnings for missing critical dependencies
@@ -71,7 +71,7 @@ class Command(BaseCommand):
71
71
  'main_text': message,
72
72
  'project_name': 'Django CFG Sample',
73
73
  'site_url': 'http://localhost:8000',
74
- 'logo_url': 'https://unrealos.com/favicon.png',
74
+ 'logo_url': 'https://reforms.ai/favicon.png',
75
75
  'button_text': 'Visit Website',
76
76
  'button_url': 'http://localhost:8000',
77
77
  'secondary_text': 'This is a test email sent from django-cfg management command.',
@@ -127,8 +127,8 @@ class LLMClient:
127
127
 
128
128
  config = base_configs[self.provider].copy()
129
129
 
130
- site_url = getattr(self.django_config, 'site_url', 'https://unrealos.com')
131
- project_name = getattr(self.django_config, 'project_name', 'UnrealOS LLM Client')
130
+ site_url = getattr(self.django_config, 'site_url', 'https://reforms.ai')
131
+ project_name = getattr(self.django_config, 'project_name', 'ReformsAI LLM Client')
132
132
 
133
133
  # Get headers from django config if available
134
134
  if self.django_config:
@@ -498,4 +498,4 @@ MIT License - see LICENSE file for details.
498
498
 
499
499
  ---
500
500
 
501
- **Built with ❤️ for django-cfg by the Unrealos Team**
501
+ **Built with ❤️ for django-cfg by the ReformsAI Team**
File without changes
File without changes