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.
- codefortify_starter-1.2.0/MANIFEST.in +4 -0
- {codefortify_starter-1.1.0/codefortify_starter.egg-info → codefortify_starter-1.2.0}/PKG-INFO +24 -14
- {codefortify_starter-1.1.0 → codefortify_starter-1.2.0}/README.md +19 -9
- {codefortify_starter-1.1.0 → codefortify_starter-1.2.0}/pyproject.toml +10 -5
- {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter/__init__.py +2 -2
- {codefortify_starter-1.1.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.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter/generator.py +65 -104
- codefortify_starter-1.2.0/src/codefortify_starter/renderer.py +74 -0
- 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.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
- 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.1.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.1.0 → 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.1.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.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter/validators.py +6 -11
- {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src/codefortify_starter.egg-info}/PKG-INFO +24 -14
- 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.1.0 → codefortify_starter-1.2.0}/tests/test_generated_projects.py +10 -9
- {codefortify_starter-1.1.0 → codefortify_starter-1.2.0}/tests/test_generator.py +55 -44
- 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.1.0/MANIFEST.in +0 -4
- codefortify_starter-1.1.0/codefortify_starter/constants.py +0 -48
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/README.md.jinja +0 -97
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/apps/__init__.py +0 -1
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/apps/home/__init__.py +0 -1
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/apps/home/templates/home/index.html.jinja +0 -25
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/apps/home/tests.py.jinja +0 -17
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/apps/home/urls.py.jinja +0 -14
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/apps/home/views.py.jinja +0 -13
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/__init__.py.jinja +0 -7
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/env.py.jinja +0 -46
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/middleware/__init__.py +0 -1
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/middleware/exceptions.py +0 -26
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/middleware/security.py +0 -12
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/settings/__init__.py +0 -1
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/settings/base.py.jinja +0 -160
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/settings/dev.py.jinja +0 -8
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/settings/production.py.jinja +0 -21
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/static/css/main.css +0 -17
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/templates/errors/400.html +0 -8
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/templates/errors/403.html +0 -8
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/templates/errors/404.html +0 -8
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/templates/errors/405.html +0 -8
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/templates/errors/500.html +0 -8
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/urls.py.jinja +0 -23
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/core/views.py.jinja +0 -56
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/dot-env.example.jinja +0 -66
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/dot-gitignore +0 -34
- codefortify_starter-1.1.0/codefortify_starter/templates/base_project/manage.py.jinja +0 -16
- codefortify_starter-1.1.0/codefortify_starter/templates/features/celery/apps/home/tasks.py.jinja +0 -7
- codefortify_starter-1.1.0/codefortify_starter/templates/features/celery/core/celery.py.jinja +0 -16
- codefortify_starter-1.1.0/codefortify_starter/templates/features/docker/DOCKER_README.md.jinja +0 -67
- codefortify_starter-1.1.0/codefortify_starter/templates/features/docker/Dockerfile.jinja +0 -19
- codefortify_starter-1.1.0/codefortify_starter/templates/features/docker/docker-compose.prod.yml.jinja +0 -158
- codefortify_starter-1.1.0/codefortify_starter/templates/features/docker/docker-compose.yml.jinja +0 -208
- codefortify_starter-1.1.0/codefortify_starter/templates/features/docker/docker_deploy.sh.jinja +0 -132
- codefortify_starter-1.1.0/codefortify_starter/templates/features/docker/dot-dockerignore +0 -12
- codefortify_starter-1.1.0/codefortify_starter/templates/features/docker/entrypoint.sh.jinja +0 -94
- codefortify_starter-1.1.0/codefortify_starter/templates/features/drf/apps/api/__init__.py +0 -1
- codefortify_starter-1.1.0/codefortify_starter/templates/features/drf/apps/api/serializers.py +0 -7
- codefortify_starter-1.1.0/codefortify_starter/templates/features/drf/apps/api/tests.py +0 -11
- codefortify_starter-1.1.0/codefortify_starter/templates/features/drf/apps/api/urls.py +0 -11
- codefortify_starter-1.1.0/codefortify_starter/templates/features/drf/apps/api/views.py +0 -16
- codefortify_starter-1.1.0/codefortify_starter/templates/features/htmx/core/templates/partials/example.html.jinja +0 -5
- codefortify_starter-1.1.0/codefortify_starter.egg-info/SOURCES.txt +0 -67
- codefortify_starter-1.1.0/codefortify_starter.egg-info/requires.txt +0 -3
- codefortify_starter-1.1.0/tests/test_cli.py +0 -63
- {codefortify_starter-1.1.0 → codefortify_starter-1.2.0}/LICENSE +0 -0
- {codefortify_starter-1.1.0 → codefortify_starter-1.2.0}/setup.cfg +0 -0
- {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter/__main__.py +0 -0
- {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter/template_engine.py +0 -0
- /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
- {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter.egg-info/dependency_links.txt +0 -0
- {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter.egg-info/entry_points.txt +0 -0
- {codefortify_starter-1.1.0 → codefortify_starter-1.2.0/src}/codefortify_starter.egg-info/top_level.txt +0 -0
{codefortify_starter-1.1.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:
|
|
@@ -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,
|
|
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
|
-
│ │
|
|
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
|
-
│
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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,
|
|
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
|
-
│ │
|
|
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
|
-
│
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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
|
+
|