codefortify-starter 1.1.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 (183) hide show
  1. codefortify_starter-1.2.0/MANIFEST.in +4 -0
  2. {codefortify_starter-1.1.0/codefortify_starter.egg-info → codefortify_starter-1.2.0}/PKG-INFO +24 -14
  3. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0}/README.md +19 -9
  4. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0}/pyproject.toml +10 -5
  5. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter/__init__.py +2 -2
  6. {codefortify_starter-1.1.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.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter/generator.py +65 -104
  11. codefortify_starter-1.2.0/src/codefortify_starter/renderer.py +74 -0
  12. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/Makefile.jinja +40 -0
  13. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/README.md.jinja +92 -0
  14. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/__init__.py +0 -0
  15. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/__pycache__/__init__.cpython-312.pyc +0 -0
  16. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/admin.py +15 -0
  17. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/apps.py +7 -0
  18. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/forms.py +17 -0
  19. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/managers.py +25 -0
  20. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/migrations/__init__.py +0 -0
  21. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/models.py +20 -0
  22. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/selectors.py +9 -0
  23. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/services.py +9 -0
  24. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/__init__.py +0 -0
  25. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/__pycache__/__init__.cpython-312.pyc +0 -0
  26. 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
  27. 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
  28. 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
  29. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/test_models.py +10 -0
  30. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/test_services.py +10 -0
  31. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/test_views.py +21 -0
  32. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/urls.py +22 -0
  33. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/views.py +22 -0
  34. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/__init__.py +2 -0
  35. codefortify_starter-1.1.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
  36. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/constants.py +2 -0
  37. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/exceptions.py +3 -0
  38. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/models.py +10 -0
  39. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/pagination.py +8 -0
  40. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/permissions.py +6 -0
  41. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/tests/__init__.py +0 -0
  42. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/utils.py +9 -0
  43. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/validators.py +4 -0
  44. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/__init__.py +2 -0
  45. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/admin.py +9 -0
  46. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/migrations/__init__.py +0 -0
  47. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/models.py +10 -0
  48. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/tests/__init__.py +0 -0
  49. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/urls.py +13 -0
  50. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/views.py +19 -0
  51. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/__init__.py.jinja +4 -0
  52. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter/templates/base_project/core/asgi.py.jinja +2 -4
  53. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/__init__.py +2 -0
  54. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/base.py.jinja +120 -0
  55. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/dev.py.jinja +4 -0
  56. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/production.py.jinja +13 -0
  57. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/test.py.jinja +8 -0
  58. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/static/css/app.css +28 -0
  59. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/static/js/app.js +4 -0
  60. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/accounts/login.html.jinja +13 -0
  61. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/accounts/password_change.html.jinja +13 -0
  62. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/accounts/profile.html.jinja +10 -0
  63. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/accounts/register.html.jinja +13 -0
  64. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter/templates/base_project/core/templates/base.html.jinja +6 -5
  65. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/errors/400.html +9 -0
  66. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/errors/403.html +9 -0
  67. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/errors/404.html +9 -0
  68. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/errors/500.html +9 -0
  69. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/footer.html +4 -0
  70. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/messages.html +8 -0
  71. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/navbar.html +12 -0
  72. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/pagination.html +12 -0
  73. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/sidebar.html +7 -0
  74. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/layouts/auth.html +8 -0
  75. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/layouts/dashboard.html +11 -0
  76. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/layouts/public.html +8 -0
  77. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/pages/about.html.jinja +9 -0
  78. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/pages/contact.html.jinja +9 -0
  79. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/pages/dashboard.html.jinja +9 -0
  80. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/pages/home.html.jinja +9 -0
  81. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/urls.py.jinja +10 -0
  82. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter/templates/base_project/core/wsgi.py.jinja +2 -4
  83. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/architecture.md +10 -0
  84. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/changelog.md +14 -0
  85. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/commands.md +11 -0
  86. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/deployment.md +7 -0
  87. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/environment.md +10 -0
  88. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/dot-env.example.jinja +35 -0
  89. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/dot-gitignore +14 -0
  90. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/manage.py.jinja +21 -0
  91. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/scripts/backup-db.sh +13 -0
  92. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/scripts/create-superuser.sh +5 -0
  93. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/scripts/entrypoint.sh +6 -0
  94. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/scripts/wait-for-db.sh +13 -0
  95. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/tests/__init__.py +0 -0
  96. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/tests/__pycache__/__init__.cpython-312.pyc +0 -0
  97. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/tests/__pycache__/conftest.cpython-312-pytest-9.0.3.pyc +0 -0
  98. codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/tests/conftest.py +7 -0
  99. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/celery/apps/common/tasks.py +7 -0
  100. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/celery/core/celery.py.jinja +10 -0
  101. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/Dockerfile.jinja +23 -0
  102. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/config/gunicorn/gunicorn.conf.py +5 -0
  103. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/config/nginx/default.conf +20 -0
  104. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/docker-compose.prod.yml.jinja +37 -0
  105. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/docker-compose.yml.jinja +62 -0
  106. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/dot-dockerignore +14 -0
  107. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/__init__.py +2 -0
  108. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/exceptions.py +8 -0
  109. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/pagination.py +8 -0
  110. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/permissions.py +9 -0
  111. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/routers.py +4 -0
  112. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/urls.py +16 -0
  113. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/versioning.py +7 -0
  114. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/htmx/core/templates/partials/_form.html +6 -0
  115. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/htmx/core/templates/partials/_messages.html +8 -0
  116. codefortify_starter-1.2.0/src/codefortify_starter/templates/features/htmx/core/templates/partials/_table.html +19 -0
  117. codefortify_starter-1.2.0/src/codefortify_starter/utils/__init__.py +2 -0
  118. codefortify_starter-1.2.0/src/codefortify_starter/utils/filesystem.py +16 -0
  119. codefortify_starter-1.2.0/src/codefortify_starter/utils/terminal.py +11 -0
  120. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter/validators.py +6 -11
  121. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src/codefortify_starter.egg-info}/PKG-INFO +24 -14
  122. codefortify_starter-1.2.0/src/codefortify_starter.egg-info/SOURCES.txt +134 -0
  123. codefortify_starter-1.2.0/src/codefortify_starter.egg-info/requires.txt +3 -0
  124. codefortify_starter-1.2.0/tests/test_cli.py +68 -0
  125. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0}/tests/test_generated_projects.py +10 -9
  126. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0}/tests/test_generator.py +55 -44
  127. codefortify_starter-1.2.0/tests/test_renderer.py +23 -0
  128. codefortify_starter-1.2.0/tests/test_version.py +6 -0
  129. codefortify_starter-1.1.0/MANIFEST.in +0 -4
  130. codefortify_starter-1.1.0/codefortify_starter/constants.py +0 -48
  131. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/README.md.jinja +0 -97
  132. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/apps/__init__.py +0 -1
  133. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/apps/home/__init__.py +0 -1
  134. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/apps/home/templates/home/index.html.jinja +0 -25
  135. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/apps/home/tests.py.jinja +0 -17
  136. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/apps/home/urls.py.jinja +0 -14
  137. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/apps/home/views.py.jinja +0 -13
  138. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/__init__.py.jinja +0 -7
  139. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/env.py.jinja +0 -46
  140. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/middleware/__init__.py +0 -1
  141. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/middleware/exceptions.py +0 -26
  142. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/middleware/security.py +0 -12
  143. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/settings/__init__.py +0 -1
  144. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/settings/base.py.jinja +0 -160
  145. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/settings/dev.py.jinja +0 -8
  146. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/settings/production.py.jinja +0 -21
  147. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/static/css/main.css +0 -17
  148. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/templates/errors/400.html +0 -8
  149. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/templates/errors/403.html +0 -8
  150. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/templates/errors/404.html +0 -8
  151. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/templates/errors/405.html +0 -8
  152. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/templates/errors/500.html +0 -8
  153. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/urls.py.jinja +0 -23
  154. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/views.py.jinja +0 -56
  155. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/dot-env.example.jinja +0 -66
  156. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/dot-gitignore +0 -34
  157. codefortify_starter-1.1.0/codefortify_starter/templates/base_project/manage.py.jinja +0 -16
  158. codefortify_starter-1.1.0/codefortify_starter/templates/features/celery/apps/home/tasks.py.jinja +0 -7
  159. codefortify_starter-1.1.0/codefortify_starter/templates/features/celery/core/celery.py.jinja +0 -16
  160. codefortify_starter-1.1.0/codefortify_starter/templates/features/docker/DOCKER_README.md.jinja +0 -67
  161. codefortify_starter-1.1.0/codefortify_starter/templates/features/docker/Dockerfile.jinja +0 -19
  162. codefortify_starter-1.1.0/codefortify_starter/templates/features/docker/docker-compose.prod.yml.jinja +0 -158
  163. codefortify_starter-1.1.0/codefortify_starter/templates/features/docker/docker-compose.yml.jinja +0 -208
  164. codefortify_starter-1.1.0/codefortify_starter/templates/features/docker/docker_deploy.sh.jinja +0 -132
  165. codefortify_starter-1.1.0/codefortify_starter/templates/features/docker/dot-dockerignore +0 -12
  166. codefortify_starter-1.1.0/codefortify_starter/templates/features/docker/entrypoint.sh.jinja +0 -94
  167. codefortify_starter-1.1.0/codefortify_starter/templates/features/drf/apps/api/__init__.py +0 -1
  168. codefortify_starter-1.1.0/codefortify_starter/templates/features/drf/apps/api/serializers.py +0 -7
  169. codefortify_starter-1.1.0/codefortify_starter/templates/features/drf/apps/api/tests.py +0 -11
  170. codefortify_starter-1.1.0/codefortify_starter/templates/features/drf/apps/api/urls.py +0 -11
  171. codefortify_starter-1.1.0/codefortify_starter/templates/features/drf/apps/api/views.py +0 -16
  172. codefortify_starter-1.1.0/codefortify_starter/templates/features/htmx/core/templates/partials/example.html.jinja +0 -5
  173. codefortify_starter-1.1.0/codefortify_starter.egg-info/SOURCES.txt +0 -67
  174. codefortify_starter-1.1.0/codefortify_starter.egg-info/requires.txt +0 -3
  175. codefortify_starter-1.1.0/tests/test_cli.py +0 -63
  176. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0}/LICENSE +0 -0
  177. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0}/setup.cfg +0 -0
  178. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter/__main__.py +0 -0
  179. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter/template_engine.py +0 -0
  180. /codefortify_starter-1.1.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
  181. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter.egg-info/dependency_links.txt +0 -0
  182. {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter.egg-info/entry_points.txt +0 -0
  183. {codefortify_starter-1.1.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.1.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.1.0
68
+ pip install codefortify-starter==1.2.0
69
69
  ```
70
70
 
71
71
  Verify the CLI:
@@ -137,7 +137,7 @@ codefortify-startproject myproject --htmx --drf --docker --celery --database pos
137
137
  |---|---|---|
138
138
  | Django MVT | default | Clean Django project with settings, templates, static/media, and home app |
139
139
  | HTMX | `--htmx` | Adds `django-htmx`, middleware, and example partial views |
140
- | 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 |
141
141
  | Docker | `--docker` | Adds Dockerfile, docker-compose, entrypoint, deployment script, and Docker docs |
142
142
  | Celery + Redis | `--celery` | Adds Celery config, Redis broker settings, and example task |
143
143
  | PostgreSQL | `--database postgres` | Adds PostgreSQL-ready configuration |
@@ -149,24 +149,34 @@ codefortify-startproject myproject --htmx --drf --docker --celery --database pos
149
149
  ```text
150
150
  myproject/
151
151
  ├── apps/
152
+ │ ├── accounts/
153
+ │ ├── common/
152
154
  │ └── home/
153
155
  ├── core/
154
156
  │ ├── settings/
157
+ │ │ ├── __init__.py
155
158
  │ │ ├── base.py
156
159
  │ │ ├── dev.py
157
- │ │ └── production.py
160
+ │ │ ├── production.py
161
+ │ │ └── test.py
158
162
  │ ├── urls.py
159
163
  │ ├── asgi.py
160
164
  │ ├── wsgi.py
161
165
  │ ├── templates/
162
166
  │ ├── static/
163
167
  │ └── media/
168
+ ├── docs/
169
+ ├── scripts/
164
170
  ├── manage.py
165
171
  ├── requirements/
166
172
  │ ├── base.txt
167
173
  │ ├── dev.txt
168
- └── production.txt
174
+ ├── production.txt
175
+ │ └── test.txt
176
+ ├── tests/
169
177
  ├── .env.example
178
+ ├── .gitignore
179
+ ├── Makefile
170
180
  └── README.md
171
181
  ```
172
182
 
@@ -174,11 +184,11 @@ Feature-specific files are added only when their flags are selected (for example
174
184
 
175
185
  ## Database Options
176
186
 
177
- - Default without `--docker`: SQLite
178
- - Default with `--docker`: PostgreSQL
187
+ - Default: SQLite
179
188
  - Explicit: `--database postgres`, `--database mysql`, or `--database sqlite`
189
+ - `--all` sets PostgreSQL automatically.
180
190
 
181
- 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.
182
192
 
183
193
  ## HTMX Usage
184
194
 
@@ -243,7 +253,7 @@ docker compose ps
243
253
  ```bash
244
254
  python -m venv .pkgvenv
245
255
  source .pkgvenv/bin/activate
246
- pip install -r requirements/dev.txt
256
+ pip install -r requirements.txt
247
257
  pip install -e .
248
258
  python -m pytest -q tests
249
259
  ```
@@ -277,7 +287,7 @@ Use this only for testing pre-release package builds:
277
287
  ```bash
278
288
  pip install --index-url https://test.pypi.org/simple/ \
279
289
  --extra-index-url https://pypi.org/simple \
280
- codefortify-starter==1.1.0
290
+ codefortify-starter==1.2.0
281
291
  ```
282
292
 
283
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.1.0
37
+ pip install codefortify-starter==1.2.0
38
38
  ```
39
39
 
40
40
  Verify the CLI:
@@ -106,7 +106,7 @@ codefortify-startproject myproject --htmx --drf --docker --celery --database pos
106
106
  |---|---|---|
107
107
  | Django MVT | default | Clean Django project with settings, templates, static/media, and home app |
108
108
  | HTMX | `--htmx` | Adds `django-htmx`, middleware, and example partial views |
109
- | 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 |
110
110
  | Docker | `--docker` | Adds Dockerfile, docker-compose, entrypoint, deployment script, and Docker docs |
111
111
  | Celery + Redis | `--celery` | Adds Celery config, Redis broker settings, and example task |
112
112
  | PostgreSQL | `--database postgres` | Adds PostgreSQL-ready configuration |
@@ -118,24 +118,34 @@ codefortify-startproject myproject --htmx --drf --docker --celery --database pos
118
118
  ```text
119
119
  myproject/
120
120
  ├── apps/
121
+ │ ├── accounts/
122
+ │ ├── common/
121
123
  │ └── home/
122
124
  ├── core/
123
125
  │ ├── settings/
126
+ │ │ ├── __init__.py
124
127
  │ │ ├── base.py
125
128
  │ │ ├── dev.py
126
- │ │ └── production.py
129
+ │ │ ├── production.py
130
+ │ │ └── test.py
127
131
  │ ├── urls.py
128
132
  │ ├── asgi.py
129
133
  │ ├── wsgi.py
130
134
  │ ├── templates/
131
135
  │ ├── static/
132
136
  │ └── media/
137
+ ├── docs/
138
+ ├── scripts/
133
139
  ├── manage.py
134
140
  ├── requirements/
135
141
  │ ├── base.txt
136
142
  │ ├── dev.txt
137
- └── production.txt
143
+ ├── production.txt
144
+ │ └── test.txt
145
+ ├── tests/
138
146
  ├── .env.example
147
+ ├── .gitignore
148
+ ├── Makefile
139
149
  └── README.md
140
150
  ```
141
151
 
@@ -143,11 +153,11 @@ Feature-specific files are added only when their flags are selected (for example
143
153
 
144
154
  ## Database Options
145
155
 
146
- - Default without `--docker`: SQLite
147
- - Default with `--docker`: PostgreSQL
156
+ - Default: SQLite
148
157
  - Explicit: `--database postgres`, `--database mysql`, or `--database sqlite`
158
+ - `--all` sets PostgreSQL automatically.
149
159
 
150
- 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.
151
161
 
152
162
  ## HTMX Usage
153
163
 
@@ -212,7 +222,7 @@ docker compose ps
212
222
  ```bash
213
223
  python -m venv .pkgvenv
214
224
  source .pkgvenv/bin/activate
215
- pip install -r requirements/dev.txt
225
+ pip install -r requirements.txt
216
226
  pip install -e .
217
227
  python -m pytest -q tests
218
228
  ```
@@ -246,7 +256,7 @@ Use this only for testing pre-release package builds:
246
256
  ```bash
247
257
  pip install --index-url https://test.pypi.org/simple/ \
248
258
  --extra-index-url https://pypi.org/simple \
249
- codefortify-starter==1.1.0
259
+ codefortify-starter==1.2.0
250
260
  ```
251
261
 
252
262
  ## License
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "codefortify-starter"
7
- version = "1.1.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/dev.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
+