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.
- codefortify_starter-1.2.0/MANIFEST.in +4 -0
- {codefortify_starter-1.0.0/codefortify_starter.egg-info → codefortify_starter-1.2.0}/PKG-INFO +37 -18
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0}/README.md +32 -13
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0}/pyproject.toml +10 -5
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/__init__.py +2 -2
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/cli.py +49 -38
- codefortify_starter-1.2.0/src/codefortify_starter/config.py +61 -0
- codefortify_starter-1.2.0/src/codefortify_starter/constants.py +31 -0
- codefortify_starter-1.2.0/src/codefortify_starter/exceptions.py +12 -0
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/generator.py +98 -60
- codefortify_starter-1.2.0/src/codefortify_starter/renderer.py +74 -0
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/template_engine.py +10 -1
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/Makefile.jinja +40 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/README.md.jinja +92 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/__init__.py +0 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/__pycache__/__init__.cpython-312.pyc +0 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/admin.py +15 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/apps.py +7 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/forms.py +17 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/managers.py +25 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/migrations/__init__.py +0 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/models.py +20 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/selectors.py +9 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/services.py +9 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/__init__.py +0 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/__pycache__/__init__.cpython-312.pyc +0 -0
- 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
- 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
- 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
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/test_models.py +10 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/test_services.py +10 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/tests/test_views.py +21 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/urls.py +22 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/accounts/views.py +22 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/__init__.py +2 -0
- 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
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/constants.py +2 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/exceptions.py +3 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/models.py +10 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/pagination.py +8 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/permissions.py +6 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/tests/__init__.py +0 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/utils.py +9 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/common/validators.py +4 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/__init__.py +2 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/admin.py +9 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/migrations/__init__.py +0 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/models.py +10 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/tests/__init__.py +0 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/urls.py +13 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/apps/home/views.py +19 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/__init__.py.jinja +4 -0
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/templates/base_project/core/asgi.py.jinja +2 -4
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/__init__.py +2 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/base.py.jinja +120 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/dev.py.jinja +4 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/production.py.jinja +13 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/settings/test.py.jinja +8 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/static/css/app.css +28 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/static/js/app.js +4 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/accounts/login.html.jinja +13 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/accounts/password_change.html.jinja +13 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/accounts/profile.html.jinja +10 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/accounts/register.html.jinja +13 -0
- {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
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/errors/400.html +9 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/errors/403.html +9 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/errors/404.html +9 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/errors/500.html +9 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/footer.html +4 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/messages.html +8 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/navbar.html +12 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/pagination.html +12 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/includes/sidebar.html +7 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/layouts/auth.html +8 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/layouts/dashboard.html +11 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/layouts/public.html +8 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/pages/about.html.jinja +9 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/pages/contact.html.jinja +9 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/pages/dashboard.html.jinja +9 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/templates/pages/home.html.jinja +9 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/core/urls.py.jinja +10 -0
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/templates/base_project/core/wsgi.py.jinja +2 -4
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/architecture.md +10 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/changelog.md +14 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/commands.md +11 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/deployment.md +7 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/docs/environment.md +10 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/dot-env.example.jinja +35 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/dot-gitignore +14 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/manage.py.jinja +21 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/scripts/backup-db.sh +13 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/scripts/create-superuser.sh +5 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/scripts/entrypoint.sh +6 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/scripts/wait-for-db.sh +13 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/tests/__init__.py +0 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/tests/__pycache__/__init__.cpython-312.pyc +0 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/tests/__pycache__/conftest.cpython-312-pytest-9.0.3.pyc +0 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/base_project/tests/conftest.py +7 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/celery/apps/common/tasks.py +7 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/celery/core/celery.py.jinja +10 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/Dockerfile.jinja +23 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/config/gunicorn/gunicorn.conf.py +5 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/config/nginx/default.conf +20 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/docker-compose.prod.yml.jinja +37 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/docker-compose.yml.jinja +62 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/docker/dot-dockerignore +14 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/__init__.py +2 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/exceptions.py +8 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/pagination.py +8 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/permissions.py +9 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/routers.py +4 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/urls.py +16 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/drf/apps/api/versioning.py +7 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/htmx/core/templates/partials/_form.html +6 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/htmx/core/templates/partials/_messages.html +8 -0
- codefortify_starter-1.2.0/src/codefortify_starter/templates/features/htmx/core/templates/partials/_table.html +19 -0
- codefortify_starter-1.2.0/src/codefortify_starter/utils/__init__.py +2 -0
- codefortify_starter-1.2.0/src/codefortify_starter/utils/filesystem.py +16 -0
- codefortify_starter-1.2.0/src/codefortify_starter/utils/terminal.py +11 -0
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/validators.py +6 -11
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src/codefortify_starter.egg-info}/PKG-INFO +37 -18
- codefortify_starter-1.2.0/src/codefortify_starter.egg-info/SOURCES.txt +134 -0
- codefortify_starter-1.2.0/src/codefortify_starter.egg-info/requires.txt +3 -0
- codefortify_starter-1.2.0/tests/test_cli.py +68 -0
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0}/tests/test_generated_projects.py +10 -9
- codefortify_starter-1.2.0/tests/test_generator.py +328 -0
- codefortify_starter-1.2.0/tests/test_renderer.py +23 -0
- codefortify_starter-1.2.0/tests/test_version.py +6 -0
- codefortify_starter-1.0.0/MANIFEST.in +0 -4
- codefortify_starter-1.0.0/codefortify_starter/constants.py +0 -48
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/README.md.jinja +0 -87
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/apps/__init__.py +0 -1
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/apps/home/__init__.py +0 -1
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/apps/home/templates/home/index.html.jinja +0 -25
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/apps/home/tests.py.jinja +0 -17
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/apps/home/urls.py.jinja +0 -14
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/apps/home/views.py.jinja +0 -13
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/__init__.py.jinja +0 -7
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/env.py.jinja +0 -46
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/middleware/__init__.py +0 -1
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/middleware/exceptions.py +0 -26
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/middleware/security.py +0 -12
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/settings/__init__.py +0 -1
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/settings/base.py.jinja +0 -160
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/settings/dev.py.jinja +0 -8
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/settings/production.py.jinja +0 -21
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/templates/errors/400.html +0 -8
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/templates/errors/403.html +0 -8
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/templates/errors/404.html +0 -8
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/templates/errors/405.html +0 -8
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/templates/errors/500.html +0 -8
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/urls.py.jinja +0 -23
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/core/views.py.jinja +0 -56
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/dot-env.example.jinja +0 -66
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/dot-gitignore +0 -34
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/manage.py.jinja +0 -16
- codefortify_starter-1.0.0/codefortify_starter/templates/base_project/static/css/main.css +0 -19
- codefortify_starter-1.0.0/codefortify_starter/templates/features/celery/apps/home/tasks.py.jinja +0 -7
- codefortify_starter-1.0.0/codefortify_starter/templates/features/celery/core/celery.py.jinja +0 -16
- codefortify_starter-1.0.0/codefortify_starter/templates/features/docker/DOCKER_README.md.jinja +0 -67
- codefortify_starter-1.0.0/codefortify_starter/templates/features/docker/Dockerfile.jinja +0 -20
- codefortify_starter-1.0.0/codefortify_starter/templates/features/docker/docker-compose.prod.yml.jinja +0 -158
- codefortify_starter-1.0.0/codefortify_starter/templates/features/docker/docker-compose.yml.jinja +0 -208
- codefortify_starter-1.0.0/codefortify_starter/templates/features/docker/docker_deploy.sh.jinja +0 -132
- codefortify_starter-1.0.0/codefortify_starter/templates/features/docker/dot-dockerignore +0 -12
- codefortify_starter-1.0.0/codefortify_starter/templates/features/docker/entrypoint.sh.jinja +0 -95
- codefortify_starter-1.0.0/codefortify_starter/templates/features/drf/apps/api/__init__.py +0 -1
- codefortify_starter-1.0.0/codefortify_starter/templates/features/drf/apps/api/serializers.py +0 -7
- codefortify_starter-1.0.0/codefortify_starter/templates/features/drf/apps/api/tests.py +0 -11
- codefortify_starter-1.0.0/codefortify_starter/templates/features/drf/apps/api/urls.py +0 -11
- codefortify_starter-1.0.0/codefortify_starter/templates/features/drf/apps/api/views.py +0 -16
- codefortify_starter-1.0.0/codefortify_starter/templates/features/htmx/templates/partials/example.html.jinja +0 -5
- codefortify_starter-1.0.0/codefortify_starter.egg-info/SOURCES.txt +0 -67
- codefortify_starter-1.0.0/codefortify_starter.egg-info/requires.txt +0 -3
- codefortify_starter-1.0.0/tests/test_cli.py +0 -63
- codefortify_starter-1.0.0/tests/test_generator.py +0 -256
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0}/LICENSE +0 -0
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0}/setup.cfg +0 -0
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter/__main__.py +0 -0
- /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
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter.egg-info/dependency_links.txt +0 -0
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter.egg-info/entry_points.txt +0 -0
- {codefortify_starter-1.0.0 → codefortify_starter-1.2.0/src}/codefortify_starter.egg-info/top_level.txt +0 -0
{codefortify_starter-1.0.0/codefortify_starter.egg-info → codefortify_starter-1.2.0}/PKG-INFO
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codefortify-starter
|
|
3
|
-
Version: 1.
|
|
4
|
-
Summary:
|
|
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:
|
|
28
|
-
Requires-Dist: rich
|
|
29
|
-
Requires-Dist: Jinja2
|
|
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.
|
|
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,
|
|
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
|
-
│ │
|
|
160
|
+
│ │ ├── production.py
|
|
161
|
+
│ │ └── test.py
|
|
152
162
|
│ ├── urls.py
|
|
153
163
|
│ ├── asgi.py
|
|
154
|
-
│
|
|
155
|
-
├── templates/
|
|
156
|
-
├── static/
|
|
157
|
-
|
|
164
|
+
│ ├── wsgi.py
|
|
165
|
+
│ ├── templates/
|
|
166
|
+
│ ├── static/
|
|
167
|
+
│ └── media/
|
|
168
|
+
├── docs/
|
|
169
|
+
├── scripts/
|
|
158
170
|
├── manage.py
|
|
159
|
-
├── requirements
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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,
|
|
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
|
-
│ │
|
|
129
|
+
│ │ ├── production.py
|
|
130
|
+
│ │ └── test.py
|
|
121
131
|
│ ├── urls.py
|
|
122
132
|
│ ├── asgi.py
|
|
123
|
-
│
|
|
124
|
-
├── templates/
|
|
125
|
-
├── static/
|
|
126
|
-
|
|
133
|
+
│ ├── wsgi.py
|
|
134
|
+
│ ├── templates/
|
|
135
|
+
│ ├── static/
|
|
136
|
+
│ └── media/
|
|
137
|
+
├── docs/
|
|
138
|
+
├── scripts/
|
|
127
139
|
├── manage.py
|
|
128
|
-
├── requirements
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
8
|
-
description = "
|
|
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
|
-
"
|
|
50
|
-
"rich>=13.
|
|
51
|
-
"Jinja2>=3.1.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.
|
|
3
|
+
from codefortify_starter.config import PACKAGE_VERSION
|
|
4
4
|
|
|
5
5
|
__all__ = ["PACKAGE_VERSION", "__version__"]
|
|
6
6
|
|
|
7
|
-
__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
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
|
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
|
-
|
|
83
|
-
f"
|
|
84
|
-
f"
|
|
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.
|
|
93
|
-
console.print(" 3.
|
|
94
|
-
console.print(" 4.
|
|
95
|
-
console.print(" 5.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
103
|
-
|
|
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
|
+
|