codefortify-starter 1.0.0__tar.gz → 1.2.0__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 (184) hide show
  1. codefortify_starter-1.2.0/MANIFEST.in +4 -0
  2. {codefortify_starter-1.0.0/codefortify_starter.egg-info → codefortify_starter-1.2.0}/PKG-INFO +37 -18
  3. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0}/README.md +32 -13
  4. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0}/pyproject.toml +10 -5
  5. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/__init__.py +2 -2
  6. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/cli.py +49 -38
  7. codefortify_starter-1.2.0/src/codefortify_starter/config.py +61 -0
  8. codefortify_starter-1.2.0/src/codefortify_starter/constants.py +31 -0
  9. codefortify_starter-1.2.0/src/codefortify_starter/exceptions.py +12 -0
  10. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/generator.py +98 -60
  11. codefortify_starter-1.2.0/src/codefortify_starter/renderer.py +74 -0
  12. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/template_engine.py +10 -1
  13. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/Makefile.jinja +40 -0
  14. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/README.md.jinja +92 -0
  15. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/__init__.py +0 -0
  16. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/__pycache__/__init__.cpython-312.pyc +0 -0
  17. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/admin.py +15 -0
  18. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/apps.py +7 -0
  19. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/forms.py +17 -0
  20. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/managers.py +25 -0
  21. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/migrations/__init__.py +0 -0
  22. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/models.py +20 -0
  23. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/selectors.py +9 -0
  24. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/services.py +9 -0
  25. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/__init__.py +0 -0
  26. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/__pycache__/__init__.cpython-312.pyc +0 -0
  27. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/__pycache__/test_models.cpython-312-pytest-9.0.3.pyc +0 -0
  28. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/__pycache__/test_services.cpython-312-pytest-9.0.3.pyc +0 -0
  29. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/__pycache__/test_views.cpython-312-pytest-9.0.3.pyc +0 -0
  30. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/test_models.py +10 -0
  31. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/test_services.py +10 -0
  32. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/test_views.py +21 -0
  33. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/urls.py +22 -0
  34. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/views.py +22 -0
  35. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/__init__.py +2 -0
  36. codefortify_starter-1.0.0/codefortify_starter/templates/features/drf/apps/api/apps.py.jinja → codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/apps.py +2 -2
  37. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/constants.py +2 -0
  38. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/exceptions.py +3 -0
  39. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/models.py +10 -0
  40. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/pagination.py +8 -0
  41. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/permissions.py +6 -0
  42. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/tests/__init__.py +0 -0
  43. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/utils.py +9 -0
  44. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/validators.py +4 -0
  45. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/__init__.py +2 -0
  46. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/admin.py +9 -0
  47. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/migrations/__init__.py +0 -0
  48. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/models.py +10 -0
  49. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/tests/__init__.py +0 -0
  50. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/urls.py +13 -0
  51. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/views.py +19 -0
  52. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/__init__.py.jinja +4 -0
  53. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/templates/base_project/core/asgi.py.jinja +2 -4
  54. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/__init__.py +2 -0
  55. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/base.py.jinja +120 -0
  56. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/dev.py.jinja +4 -0
  57. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/production.py.jinja +13 -0
  58. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/test.py.jinja +8 -0
  59. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/static/css/app.css +28 -0
  60. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/static/js/app.js +4 -0
  61. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/accounts/login.html.jinja +13 -0
  62. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/accounts/password_change.html.jinja +13 -0
  63. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/accounts/profile.html.jinja +10 -0
  64. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/accounts/register.html.jinja +13 -0
  65. {codefortify_starter-1.0.0/codefortify_starter/templates/base_project → codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core}/templates/base.html.jinja +6 -5
  66. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/errors/400.html +9 -0
  67. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/errors/403.html +9 -0
  68. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/errors/404.html +9 -0
  69. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/errors/500.html +9 -0
  70. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/footer.html +4 -0
  71. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/messages.html +8 -0
  72. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/navbar.html +12 -0
  73. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/pagination.html +12 -0
  74. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/sidebar.html +7 -0
  75. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/layouts/auth.html +8 -0
  76. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/layouts/dashboard.html +11 -0
  77. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/layouts/public.html +8 -0
  78. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/pages/about.html.jinja +9 -0
  79. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/pages/contact.html.jinja +9 -0
  80. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/pages/dashboard.html.jinja +9 -0
  81. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/pages/home.html.jinja +9 -0
  82. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/urls.py.jinja +10 -0
  83. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/templates/base_project/core/wsgi.py.jinja +2 -4
  84. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/architecture.md +10 -0
  85. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/changelog.md +14 -0
  86. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/commands.md +11 -0
  87. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/deployment.md +7 -0
  88. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/environment.md +10 -0
  89. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/dot-env.example.jinja +35 -0
  90. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/dot-gitignore +14 -0
  91. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/manage.py.jinja +21 -0
  92. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/scripts/backup-db.sh +13 -0
  93. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/scripts/create-superuser.sh +5 -0
  94. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/scripts/entrypoint.sh +6 -0
  95. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/scripts/wait-for-db.sh +13 -0
  96. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/tests/__init__.py +0 -0
  97. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/tests/__pycache__/__init__.cpython-312.pyc +0 -0
  98. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/tests/__pycache__/conftest.cpython-312-pytest-9.0.3.pyc +0 -0
  99. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/tests/conftest.py +7 -0
  100. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/celery/apps/common/tasks.py +7 -0
  101. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/celery/core/celery.py.jinja +10 -0
  102. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/Dockerfile.jinja +23 -0
  103. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/config/gunicorn/gunicorn.conf.py +5 -0
  104. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/config/nginx/default.conf +20 -0
  105. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/docker-compose.prod.yml.jinja +37 -0
  106. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/docker-compose.yml.jinja +62 -0
  107. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/dot-dockerignore +14 -0
  108. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/__init__.py +2 -0
  109. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/exceptions.py +8 -0
  110. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/pagination.py +8 -0
  111. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/permissions.py +9 -0
  112. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/routers.py +4 -0
  113. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/urls.py +16 -0
  114. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/versioning.py +7 -0
  115. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/htmx/core/templates/partials/_form.html +6 -0
  116. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/htmx/core/templates/partials/_messages.html +8 -0
  117. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/htmx/core/templates/partials/_table.html +19 -0
  118. codefortify_starter-1.2.0/src/codefortify_starter/utils/__init__.py +2 -0
  119. codefortify_starter-1.2.0/src/codefortify_starter/utils/filesystem.py +16 -0
  120. codefortify_starter-1.2.0/src/codefortify_starter/utils/terminal.py +11 -0
  121. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/validators.py +6 -11
  122. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src/codefortify_starter.egg-info}/PKG-INFO +37 -18
  123. codefortify_starter-1.2.0/src/codefortify_starter.egg-info/SOURCES.txt +134 -0
  124. codefortify_starter-1.2.0/src/codefortify_starter.egg-info/requires.txt +3 -0
  125. codefortify_starter-1.2.0/tests/test_cli.py +68 -0
  126. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0}/tests/test_generated_projects.py +10 -9
  127. codefortify_starter-1.2.0/tests/test_generator.py +328 -0
  128. codefortify_starter-1.2.0/tests/test_renderer.py +23 -0
  129. codefortify_starter-1.2.0/tests/test_version.py +6 -0
  130. codefortify_starter-1.0.0/MANIFEST.in +0 -4
  131. codefortify_starter-1.0.0/codefortify_starter/constants.py +0 -48
  132. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/README.md.jinja +0 -87
  133. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/apps/__init__.py +0 -1
  134. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/apps/home/__init__.py +0 -1
  135. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/apps/home/templates/home/index.html.jinja +0 -25
  136. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/apps/home/tests.py.jinja +0 -17
  137. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/apps/home/urls.py.jinja +0 -14
  138. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/apps/home/views.py.jinja +0 -13
  139. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/__init__.py.jinja +0 -7
  140. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/env.py.jinja +0 -46
  141. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/middleware/__init__.py +0 -1
  142. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/middleware/exceptions.py +0 -26
  143. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/middleware/security.py +0 -12
  144. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/settings/__init__.py +0 -1
  145. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/settings/base.py.jinja +0 -160
  146. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/settings/dev.py.jinja +0 -8
  147. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/settings/production.py.jinja +0 -21
  148. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/templates/errors/400.html +0 -8
  149. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/templates/errors/403.html +0 -8
  150. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/templates/errors/404.html +0 -8
  151. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/templates/errors/405.html +0 -8
  152. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/templates/errors/500.html +0 -8
  153. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/urls.py.jinja +0 -23
  154. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/views.py.jinja +0 -56
  155. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/dot-env.example.jinja +0 -66
  156. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/dot-gitignore +0 -34
  157. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/manage.py.jinja +0 -16
  158. codefortify_starter-1.0.0/codefortify_starter/templates/base_project/static/css/main.css +0 -19
  159. codefortify_starter-1.0.0/codefortify_starter/templates/features/celery/apps/home/tasks.py.jinja +0 -7
  160. codefortify_starter-1.0.0/codefortify_starter/templates/features/celery/core/celery.py.jinja +0 -16
  161. codefortify_starter-1.0.0/codefortify_starter/templates/features/docker/DOCKER_README.md.jinja +0 -67
  162. codefortify_starter-1.0.0/codefortify_starter/templates/features/docker/Dockerfile.jinja +0 -20
  163. codefortify_starter-1.0.0/codefortify_starter/templates/features/docker/docker-compose.prod.yml.jinja +0 -158
  164. codefortify_starter-1.0.0/codefortify_starter/templates/features/docker/docker-compose.yml.jinja +0 -208
  165. codefortify_starter-1.0.0/codefortify_starter/templates/features/docker/docker_deploy.sh.jinja +0 -132
  166. codefortify_starter-1.0.0/codefortify_starter/templates/features/docker/dot-dockerignore +0 -12
  167. codefortify_starter-1.0.0/codefortify_starter/templates/features/docker/entrypoint.sh.jinja +0 -95
  168. codefortify_starter-1.0.0/codefortify_starter/templates/features/drf/apps/api/__init__.py +0 -1
  169. codefortify_starter-1.0.0/codefortify_starter/templates/features/drf/apps/api/serializers.py +0 -7
  170. codefortify_starter-1.0.0/codefortify_starter/templates/features/drf/apps/api/tests.py +0 -11
  171. codefortify_starter-1.0.0/codefortify_starter/templates/features/drf/apps/api/urls.py +0 -11
  172. codefortify_starter-1.0.0/codefortify_starter/templates/features/drf/apps/api/views.py +0 -16
  173. codefortify_starter-1.0.0/codefortify_starter/templates/features/htmx/templates/partials/example.html.jinja +0 -5
  174. codefortify_starter-1.0.0/codefortify_starter.egg-info/SOURCES.txt +0 -67
  175. codefortify_starter-1.0.0/codefortify_starter.egg-info/requires.txt +0 -3
  176. codefortify_starter-1.0.0/tests/test_cli.py +0 -63
  177. codefortify_starter-1.0.0/tests/test_generator.py +0 -256
  178. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0}/LICENSE +0 -0
  179. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0}/setup.cfg +0 -0
  180. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/__main__.py +0 -0
  181. /codefortify_starter-1.0.0/codefortify_starter/templates/base_project/apps/home/apps.py.jinja → /codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/apps.py +0 -0
  182. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter.egg-info/dependency_links.txt +0 -0
  183. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter.egg-info/entry_points.txt +0 -0
  184. {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter.egg-info/top_level.txt +0 -0
@@ -0,0 +1,4 @@
1
+ include README.md
2
+ include LICENSE
3
+ recursive-include src/codefortify_starter/templates *
4
+
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codefortify-starter
3
- Version: 1.0.0
4
- Summary: A production-ready Django project generator with optional HTMX, DRF, Docker, Celery, Redis, PostgreSQL, and MySQL support.
3
+ Version: 1.2.0
4
+ Summary: Production-ready Django project starter generator by CodeFortify
5
5
  Author-email: Codefortify <maintainers@codefortify.dev>
6
6
  License: MIT
7
7
  Project-URL: Homepage, https://github.com/codefortify/codefortify-starter
@@ -24,9 +24,9 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
24
  Requires-Python: >=3.10
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
- Requires-Dist: typer<1.0.0,>=0.12.0
28
- Requires-Dist: rich<14.0.0,>=13.7.0
29
- Requires-Dist: Jinja2<4.0.0,>=3.1.0
27
+ Requires-Dist: click>=8.1.0
28
+ Requires-Dist: rich>=13.0.0
29
+ Requires-Dist: Jinja2>=3.1.0
30
30
  Dynamic: license-file
31
31
 
32
32
  # codefortify-starter
@@ -65,7 +65,7 @@ pip install codefortify-starter
65
65
  Install an exact version:
66
66
 
67
67
  ```bash
68
- pip install codefortify-starter==1.0.0
68
+ pip install codefortify-starter==1.2.0
69
69
  ```
70
70
 
71
71
  Verify the CLI:
@@ -83,12 +83,18 @@ codefortify-startproject myproject
83
83
  cd myproject
84
84
  python -m venv .venv
85
85
  source .venv/bin/activate
86
- pip install -r requirements.txt
86
+ pip install -r requirements/dev.txt
87
87
  cp .env.example .env
88
88
  python manage.py migrate
89
89
  python manage.py runserver
90
90
  ```
91
91
 
92
+ Requirements files:
93
+
94
+ - Development: `pip install -r requirements/dev.txt`
95
+ - Production: `pip install -r requirements/production.txt`
96
+ - Minimal runtime: `pip install -r requirements/base.txt`
97
+
92
98
  ## Supported CLI Flags
93
99
 
94
100
  - `--htmx`
@@ -131,7 +137,7 @@ codefortify-startproject myproject --htmx --drf --docker --celery --database pos
131
137
  |---|---|---|
132
138
  | Django MVT | default | Clean Django project with settings, templates, static/media, and home app |
133
139
  | HTMX | `--htmx` | Adds `django-htmx`, middleware, and example partial views |
134
- | Django REST Framework | `--drf` | Adds DRF, API app, API routes, serializers, and tests |
140
+ | Django REST Framework | `--drf` | Adds DRF, API app, API routes, and REST config |
135
141
  | Docker | `--docker` | Adds Dockerfile, docker-compose, entrypoint, deployment script, and Docker docs |
136
142
  | Celery + Redis | `--celery` | Adds Celery config, Redis broker settings, and example task |
137
143
  | PostgreSQL | `--database postgres` | Adds PostgreSQL-ready configuration |
@@ -143,21 +149,34 @@ codefortify-startproject myproject --htmx --drf --docker --celery --database pos
143
149
  ```text
144
150
  myproject/
145
151
  ├── apps/
152
+ │ ├── accounts/
153
+ │ ├── common/
146
154
  │ └── home/
147
155
  ├── core/
148
156
  │ ├── settings/
157
+ │ │ ├── __init__.py
149
158
  │ │ ├── base.py
150
159
  │ │ ├── dev.py
151
- │ │ └── production.py
160
+ │ │ ├── production.py
161
+ │ │ └── test.py
152
162
  │ ├── urls.py
153
163
  │ ├── asgi.py
154
- └── wsgi.py
155
- ├── templates/
156
- ├── static/
157
- ├── media/
164
+ ├── wsgi.py
165
+ ├── templates/
166
+ ├── static/
167
+ │ └── media/
168
+ ├── docs/
169
+ ├── scripts/
158
170
  ├── manage.py
159
- ├── requirements.txt
171
+ ├── requirements/
172
+ │ ├── base.txt
173
+ │ ├── dev.txt
174
+ │ ├── production.txt
175
+ │ └── test.txt
176
+ ├── tests/
160
177
  ├── .env.example
178
+ ├── .gitignore
179
+ ├── Makefile
161
180
  └── README.md
162
181
  ```
163
182
 
@@ -165,11 +184,11 @@ Feature-specific files are added only when their flags are selected (for example
165
184
 
166
185
  ## Database Options
167
186
 
168
- - Default without `--docker`: SQLite
169
- - Default with `--docker`: PostgreSQL
187
+ - Default: SQLite
170
188
  - Explicit: `--database postgres`, `--database mysql`, or `--database sqlite`
189
+ - `--all` sets PostgreSQL automatically.
171
190
 
172
- Generated settings safely handle an empty `DATABASE_URL` and support local fallback behavior for development.
191
+ Generated settings use environment variables with sane defaults for local development.
173
192
 
174
193
  ## HTMX Usage
175
194
 
@@ -268,7 +287,7 @@ Use this only for testing pre-release package builds:
268
287
  ```bash
269
288
  pip install --index-url https://test.pypi.org/simple/ \
270
289
  --extra-index-url https://pypi.org/simple \
271
- codefortify-starter==1.0.0
290
+ codefortify-starter==1.2.0
272
291
  ```
273
292
 
274
293
  ## License
@@ -34,7 +34,7 @@ pip install codefortify-starter
34
34
  Install an exact version:
35
35
 
36
36
  ```bash
37
- pip install codefortify-starter==1.0.0
37
+ pip install codefortify-starter==1.2.0
38
38
  ```
39
39
 
40
40
  Verify the CLI:
@@ -52,12 +52,18 @@ codefortify-startproject myproject
52
52
  cd myproject
53
53
  python -m venv .venv
54
54
  source .venv/bin/activate
55
- pip install -r requirements.txt
55
+ pip install -r requirements/dev.txt
56
56
  cp .env.example .env
57
57
  python manage.py migrate
58
58
  python manage.py runserver
59
59
  ```
60
60
 
61
+ Requirements files:
62
+
63
+ - Development: `pip install -r requirements/dev.txt`
64
+ - Production: `pip install -r requirements/production.txt`
65
+ - Minimal runtime: `pip install -r requirements/base.txt`
66
+
61
67
  ## Supported CLI Flags
62
68
 
63
69
  - `--htmx`
@@ -100,7 +106,7 @@ codefortify-startproject myproject --htmx --drf --docker --celery --database pos
100
106
  |---|---|---|
101
107
  | Django MVT | default | Clean Django project with settings, templates, static/media, and home app |
102
108
  | HTMX | `--htmx` | Adds `django-htmx`, middleware, and example partial views |
103
- | Django REST Framework | `--drf` | Adds DRF, API app, API routes, serializers, and tests |
109
+ | Django REST Framework | `--drf` | Adds DRF, API app, API routes, and REST config |
104
110
  | Docker | `--docker` | Adds Dockerfile, docker-compose, entrypoint, deployment script, and Docker docs |
105
111
  | Celery + Redis | `--celery` | Adds Celery config, Redis broker settings, and example task |
106
112
  | PostgreSQL | `--database postgres` | Adds PostgreSQL-ready configuration |
@@ -112,21 +118,34 @@ codefortify-startproject myproject --htmx --drf --docker --celery --database pos
112
118
  ```text
113
119
  myproject/
114
120
  ├── apps/
121
+ │ ├── accounts/
122
+ │ ├── common/
115
123
  │ └── home/
116
124
  ├── core/
117
125
  │ ├── settings/
126
+ │ │ ├── __init__.py
118
127
  │ │ ├── base.py
119
128
  │ │ ├── dev.py
120
- │ │ └── production.py
129
+ │ │ ├── production.py
130
+ │ │ └── test.py
121
131
  │ ├── urls.py
122
132
  │ ├── asgi.py
123
- └── wsgi.py
124
- ├── templates/
125
- ├── static/
126
- ├── media/
133
+ ├── wsgi.py
134
+ ├── templates/
135
+ ├── static/
136
+ │ └── media/
137
+ ├── docs/
138
+ ├── scripts/
127
139
  ├── manage.py
128
- ├── requirements.txt
140
+ ├── requirements/
141
+ │ ├── base.txt
142
+ │ ├── dev.txt
143
+ │ ├── production.txt
144
+ │ └── test.txt
145
+ ├── tests/
129
146
  ├── .env.example
147
+ ├── .gitignore
148
+ ├── Makefile
130
149
  └── README.md
131
150
  ```
132
151
 
@@ -134,11 +153,11 @@ Feature-specific files are added only when their flags are selected (for example
134
153
 
135
154
  ## Database Options
136
155
 
137
- - Default without `--docker`: SQLite
138
- - Default with `--docker`: PostgreSQL
156
+ - Default: SQLite
139
157
  - Explicit: `--database postgres`, `--database mysql`, or `--database sqlite`
158
+ - `--all` sets PostgreSQL automatically.
140
159
 
141
- Generated settings safely handle an empty `DATABASE_URL` and support local fallback behavior for development.
160
+ Generated settings use environment variables with sane defaults for local development.
142
161
 
143
162
  ## HTMX Usage
144
163
 
@@ -237,7 +256,7 @@ Use this only for testing pre-release package builds:
237
256
  ```bash
238
257
  pip install --index-url https://test.pypi.org/simple/ \
239
258
  --extra-index-url https://pypi.org/simple \
240
- codefortify-starter==1.0.0
259
+ codefortify-starter==1.2.0
241
260
  ```
242
261
 
243
262
  ## License
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "codefortify-starter"
7
- version = "1.0.0"
8
- description = "A production-ready Django project generator with optional HTMX, DRF, Docker, Celery, Redis, PostgreSQL, and MySQL support."
7
+ version = "1.2.0"
8
+ description = "Production-ready Django project starter generator by CodeFortify"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
11
11
  license = { text = "MIT" }
@@ -46,9 +46,9 @@ classifiers = [
46
46
  "Topic :: Software Development :: Libraries :: Python Modules",
47
47
  ]
48
48
  dependencies = [
49
- "typer>=0.12.0,<1.0.0",
50
- "rich>=13.7.0,<14.0.0",
51
- "Jinja2>=3.1.0,<4.0.0",
49
+ "click>=8.1.0",
50
+ "rich>=13.0.0",
51
+ "Jinja2>=3.1.0",
52
52
  ]
53
53
 
54
54
  [project.scripts]
@@ -60,8 +60,10 @@ Source = "https://github.com/codefortify/codefortify-starter"
60
60
 
61
61
  [tool.setuptools]
62
62
  include-package-data = true
63
+ package-dir = {"" = "src"}
63
64
 
64
65
  [tool.setuptools.packages.find]
66
+ where = ["src"]
65
67
  include = ["codefortify_starter*"]
66
68
 
67
69
  [tool.setuptools.package-data]
@@ -69,3 +71,6 @@ codefortify_starter = ["templates/**/*"]
69
71
 
70
72
  [tool.pytest.ini_options]
71
73
  DJANGO_SETTINGS_MODULE = "core.settings.dev"
74
+ pythonpath = ["src"]
75
+ testpaths = ["tests"]
76
+ norecursedirs = ["src/codefortify_starter/templates"]
@@ -1,7 +1,7 @@
1
1
  """Codefortify starter project generator package."""
2
2
 
3
- from codefortify_starter.constants import PACKAGE_VERSION
3
+ from codefortify_starter.config import PACKAGE_VERSION
4
4
 
5
5
  __all__ = ["PACKAGE_VERSION", "__version__"]
6
6
 
7
- __version__ = PACKAGE_VERSION
7
+ __version__ = "1.2.0"
@@ -4,8 +4,9 @@ from __future__ import annotations
4
4
 
5
5
  from pathlib import Path
6
6
 
7
- import typer
7
+ import click
8
8
  from rich.console import Console
9
+ from rich.panel import Panel
9
10
 
10
11
  from codefortify_starter.generator import StarterProjectGenerator, build_generation_options
11
12
  from codefortify_starter.validators import ValidationError, build_project_identity, normalize_database
@@ -14,25 +15,33 @@ from codefortify_starter.validators import ValidationError, build_project_identi
14
15
  console = Console()
15
16
 
16
17
 
17
- def run(
18
- project_name: str = typer.Argument(..., help="Project directory name to create."),
19
- htmx: bool = typer.Option(False, "--htmx", help="Include HTMX integration."),
20
- drf: bool = typer.Option(False, "--drf", help="Include Django REST Framework starter API."),
21
- docker: bool = typer.Option(False, "--docker", help="Include Docker and Compose files."),
22
- celery: bool = typer.Option(False, "--celery", help="Include Celery + Redis task setup."),
23
- database: str | None = typer.Option(
24
- None,
25
- "--database",
26
- help="Database backend to configure: sqlite, postgres, or mysql.",
27
- ),
28
- no_git: bool = typer.Option(False, "--no-git", help="Skip git repository initialization."),
29
- force: bool = typer.Option(False, "--force", help="Allow generation into an existing directory."),
30
- directory: Path = typer.Option(Path("."), "--directory", help="Parent directory for the generated project."),
31
- all_features: bool = typer.Option(
32
- False,
33
- "--all",
34
- help="Enable full-stack preset: --htmx --drf --docker --celery --database postgres.",
35
- ),
18
+ @click.command(context_settings={"help_option_names": ["-h", "--help"]})
19
+ @click.argument("project_name")
20
+ @click.option("--htmx", is_flag=True, help="Include HTMX integration.")
21
+ @click.option("--drf", is_flag=True, help="Include Django REST Framework starter API.")
22
+ @click.option("--docker", is_flag=True, help="Include Docker and Compose files.")
23
+ @click.option("--celery", is_flag=True, help="Include Celery + Redis task setup.")
24
+ @click.option("--database", type=click.Choice(["sqlite", "postgres", "mysql"], case_sensitive=False))
25
+ @click.option("--no-git", is_flag=True, help="Skip git repository initialization.")
26
+ @click.option("--force", is_flag=True, help="Allow generation into an existing directory.")
27
+ @click.option("--directory", type=click.Path(path_type=Path), default=Path("."), show_default=True)
28
+ @click.option(
29
+ "--all",
30
+ "all_features",
31
+ is_flag=True,
32
+ help="Enable full-stack preset: --htmx --drf --docker --celery --database postgres.",
33
+ )
34
+ def main(
35
+ project_name: str,
36
+ htmx: bool,
37
+ drf: bool,
38
+ docker: bool,
39
+ celery: bool,
40
+ database: str | None,
41
+ no_git: bool,
42
+ force: bool,
43
+ directory: Path,
44
+ all_features: bool,
36
45
  ) -> None:
37
46
  """Generate a Django starter project."""
38
47
  try:
@@ -46,7 +55,6 @@ def run(
46
55
 
47
56
  resolved_database = normalize_database(database, use_docker=docker)
48
57
  identity = build_project_identity(project_name)
49
-
50
58
  options = build_generation_options(
51
59
  project_name=identity.project_name,
52
60
  project_slug=identity.project_slug,
@@ -66,38 +74,41 @@ def run(
66
74
  result = generator.generate(options)
67
75
  except (ValidationError, FileExistsError, NotADirectoryError, RuntimeError) as exc:
68
76
  console.print(f"[bold red]Error:[/bold red] {exc}")
69
- raise typer.Exit(code=1) from exc
77
+ raise SystemExit(1) from exc
70
78
 
71
79
  selected_features = []
72
- if htmx:
73
- selected_features.append("htmx")
74
80
  if drf:
75
81
  selected_features.append("drf")
82
+ if htmx:
83
+ selected_features.append("htmx")
76
84
  if docker:
77
85
  selected_features.append("docker")
78
86
  if celery:
79
87
  selected_features.append("celery")
80
88
  features_text = ", ".join(selected_features) if selected_features else "base"
81
89
 
82
- console.print(
83
- f"[bold green]Created[/bold green] {result.project_path} "
84
- f"(database={resolved_database}, features={features_text})"
90
+ summary = (
91
+ f"Project: [bold]{result.project_path.name}[/bold]\n"
92
+ f"Location: {result.project_path}\n"
93
+ f"Database: {resolved_database}\n"
94
+ f"Features: {features_text}"
85
95
  )
96
+ console.print(Panel(summary, title="CodeFortify Starter", expand=False))
97
+
86
98
  if result.warnings:
87
99
  for warning in result.warnings:
88
100
  console.print(f"[yellow]Warning:[/yellow] {warning}")
89
101
 
90
102
  console.print("Next steps:")
91
103
  console.print(f" 1. cd {result.project_path}")
92
- console.print(" 2. python -m venv .venv && source .venv/bin/activate")
93
- console.print(" 3. pip install -r requirements.txt")
94
- console.print(" 4. cp .env.example .env")
95
- console.print(" 5. python manage.py migrate && python manage.py runserver")
96
-
97
-
98
- def main() -> None:
99
- typer.run(run)
104
+ console.print(" 2. cp .env.example .env")
105
+ console.print(" 3. python -m venv venv")
106
+ console.print(" 4. source venv/bin/activate")
107
+ console.print(" 5. pip install -r requirements/dev.txt")
108
+ console.print(" 6. python manage.py migrate")
109
+ console.print(" 7. python manage.py createsuperuser")
110
+ console.print(" 8. python manage.py runserver")
100
111
 
101
-
102
- if __name__ == "__main__":
103
- main()
112
+ if docker:
113
+ console.print("\nDocker:")
114
+ console.print(" docker compose up --build")
@@ -0,0 +1,61 @@
1
+ """Configuration defaults for the generator."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Final
6
+
7
+
8
+ PACKAGE_NAME: Final[str] = "codefortify-starter"
9
+ IMPORT_PACKAGE: Final[str] = "codefortify_starter"
10
+ CLI_COMMAND: Final[str] = "codefortify-startproject"
11
+ PACKAGE_VERSION: Final[str] = "1.2.0"
12
+
13
+ VALID_DATABASES: Final[tuple[str, ...]] = ("sqlite", "postgres", "mysql")
14
+
15
+ BASE_REQUIREMENTS: Final[tuple[str, ...]] = (
16
+ "Django>=5.2,<6.1",
17
+ "django-environ",
18
+ "Pillow",
19
+ )
20
+
21
+ DEV_REQUIREMENTS: Final[tuple[str, ...]] = (
22
+ "django-debug-toolbar",
23
+ "ipython",
24
+ "ruff",
25
+ "black",
26
+ "pre-commit",
27
+ )
28
+
29
+ TEST_REQUIREMENTS: Final[tuple[str, ...]] = (
30
+ "pytest",
31
+ "pytest-django",
32
+ "pytest-cov",
33
+ "factory-boy",
34
+ "faker",
35
+ )
36
+
37
+ PRODUCTION_REQUIREMENTS: Final[tuple[str, ...]] = (
38
+ "gunicorn",
39
+ "whitenoise",
40
+ "sentry-sdk",
41
+ )
42
+
43
+ FEATURE_REQUIREMENTS: Final[dict[str, tuple[str, ...]]] = {
44
+ "drf": ("djangorestframework",),
45
+ "htmx": ("django-htmx",),
46
+ "celery": ("celery", "redis"),
47
+ }
48
+
49
+ DATABASE_REQUIREMENTS: Final[dict[str, tuple[str, ...]]] = {
50
+ "sqlite": (),
51
+ "postgres": ("psycopg[binary]", "dj-database-url"),
52
+ "mysql": ("mysqlclient", "dj-database-url"),
53
+ }
54
+
55
+ EXECUTABLE_FILES: Final[tuple[str, ...]] = (
56
+ "scripts/entrypoint.sh",
57
+ "scripts/wait-for-db.sh",
58
+ "scripts/create-superuser.sh",
59
+ "scripts/backup-db.sh",
60
+ )
61
+
@@ -0,0 +1,31 @@
1
+ """Shared constants for the starter generator."""
2
+
3
+ from codefortify_starter.config import ( # noqa: F401
4
+ BASE_REQUIREMENTS,
5
+ CLI_COMMAND,
6
+ DATABASE_REQUIREMENTS,
7
+ DEV_REQUIREMENTS,
8
+ EXECUTABLE_FILES,
9
+ FEATURE_REQUIREMENTS,
10
+ IMPORT_PACKAGE,
11
+ PACKAGE_NAME,
12
+ PACKAGE_VERSION,
13
+ PRODUCTION_REQUIREMENTS,
14
+ TEST_REQUIREMENTS,
15
+ VALID_DATABASES,
16
+ )
17
+
18
+ __all__ = [
19
+ "BASE_REQUIREMENTS",
20
+ "CLI_COMMAND",
21
+ "DATABASE_REQUIREMENTS",
22
+ "DEV_REQUIREMENTS",
23
+ "EXECUTABLE_FILES",
24
+ "FEATURE_REQUIREMENTS",
25
+ "IMPORT_PACKAGE",
26
+ "PACKAGE_NAME",
27
+ "PACKAGE_VERSION",
28
+ "PRODUCTION_REQUIREMENTS",
29
+ "TEST_REQUIREMENTS",
30
+ "VALID_DATABASES",
31
+ ]
@@ -0,0 +1,12 @@
1
+ """Custom exceptions for the generator."""
2
+
3
+ from __future__ import annotations
4
+
5
+
6
+ class StarterError(RuntimeError):
7
+ """Base exception for starter errors."""
8
+
9
+
10
+ class ValidationError(StarterError):
11
+ """Raised when user inputs are invalid."""
12
+