codefortify-starter 1.0.0__py3-none-any.whl

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 (60) hide show
  1. codefortify_starter/__init__.py +7 -0
  2. codefortify_starter/__main__.py +6 -0
  3. codefortify_starter/cli.py +103 -0
  4. codefortify_starter/constants.py +48 -0
  5. codefortify_starter/generator.py +246 -0
  6. codefortify_starter/template_engine.py +63 -0
  7. codefortify_starter/templates/base_project/README.md.jinja +87 -0
  8. codefortify_starter/templates/base_project/apps/__init__.py +1 -0
  9. codefortify_starter/templates/base_project/apps/home/__init__.py +1 -0
  10. codefortify_starter/templates/base_project/apps/home/apps.py.jinja +7 -0
  11. codefortify_starter/templates/base_project/apps/home/templates/home/index.html.jinja +25 -0
  12. codefortify_starter/templates/base_project/apps/home/tests.py.jinja +17 -0
  13. codefortify_starter/templates/base_project/apps/home/urls.py.jinja +14 -0
  14. codefortify_starter/templates/base_project/apps/home/views.py.jinja +13 -0
  15. codefortify_starter/templates/base_project/core/__init__.py.jinja +7 -0
  16. codefortify_starter/templates/base_project/core/asgi.py.jinja +10 -0
  17. codefortify_starter/templates/base_project/core/env.py.jinja +46 -0
  18. codefortify_starter/templates/base_project/core/middleware/__init__.py +1 -0
  19. codefortify_starter/templates/base_project/core/middleware/exceptions.py +26 -0
  20. codefortify_starter/templates/base_project/core/middleware/security.py +12 -0
  21. codefortify_starter/templates/base_project/core/settings/__init__.py +1 -0
  22. codefortify_starter/templates/base_project/core/settings/base.py.jinja +160 -0
  23. codefortify_starter/templates/base_project/core/settings/dev.py.jinja +8 -0
  24. codefortify_starter/templates/base_project/core/settings/production.py.jinja +21 -0
  25. codefortify_starter/templates/base_project/core/templates/errors/400.html +8 -0
  26. codefortify_starter/templates/base_project/core/templates/errors/403.html +8 -0
  27. codefortify_starter/templates/base_project/core/templates/errors/404.html +8 -0
  28. codefortify_starter/templates/base_project/core/templates/errors/405.html +8 -0
  29. codefortify_starter/templates/base_project/core/templates/errors/500.html +8 -0
  30. codefortify_starter/templates/base_project/core/urls.py.jinja +23 -0
  31. codefortify_starter/templates/base_project/core/views.py.jinja +56 -0
  32. codefortify_starter/templates/base_project/core/wsgi.py.jinja +10 -0
  33. codefortify_starter/templates/base_project/dot-env.example.jinja +66 -0
  34. codefortify_starter/templates/base_project/dot-gitignore +34 -0
  35. codefortify_starter/templates/base_project/manage.py.jinja +16 -0
  36. codefortify_starter/templates/base_project/static/css/main.css +19 -0
  37. codefortify_starter/templates/base_project/templates/base.html.jinja +19 -0
  38. codefortify_starter/templates/features/celery/apps/home/tasks.py.jinja +7 -0
  39. codefortify_starter/templates/features/celery/core/celery.py.jinja +16 -0
  40. codefortify_starter/templates/features/docker/DOCKER_README.md.jinja +67 -0
  41. codefortify_starter/templates/features/docker/Dockerfile.jinja +20 -0
  42. codefortify_starter/templates/features/docker/docker-compose.prod.yml.jinja +158 -0
  43. codefortify_starter/templates/features/docker/docker-compose.yml.jinja +208 -0
  44. codefortify_starter/templates/features/docker/docker_deploy.sh.jinja +132 -0
  45. codefortify_starter/templates/features/docker/dot-dockerignore +12 -0
  46. codefortify_starter/templates/features/docker/entrypoint.sh.jinja +95 -0
  47. codefortify_starter/templates/features/drf/apps/api/__init__.py +1 -0
  48. codefortify_starter/templates/features/drf/apps/api/apps.py.jinja +7 -0
  49. codefortify_starter/templates/features/drf/apps/api/serializers.py +7 -0
  50. codefortify_starter/templates/features/drf/apps/api/tests.py +11 -0
  51. codefortify_starter/templates/features/drf/apps/api/urls.py +11 -0
  52. codefortify_starter/templates/features/drf/apps/api/views.py +16 -0
  53. codefortify_starter/templates/features/htmx/templates/partials/example.html.jinja +5 -0
  54. codefortify_starter/validators.py +70 -0
  55. codefortify_starter-1.0.0.dist-info/METADATA +276 -0
  56. codefortify_starter-1.0.0.dist-info/RECORD +60 -0
  57. codefortify_starter-1.0.0.dist-info/WHEEL +5 -0
  58. codefortify_starter-1.0.0.dist-info/entry_points.txt +2 -0
  59. codefortify_starter-1.0.0.dist-info/licenses/LICENSE +22 -0
  60. codefortify_starter-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,70 @@
1
+ """Validation and normalization helpers for CLI input."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import keyword
6
+ import re
7
+ from dataclasses import dataclass
8
+
9
+ from codefortify_starter.constants import VALID_DATABASES
10
+
11
+
12
+ PROJECT_NAME_RE = re.compile(r"^[A-Za-z][A-Za-z0-9_-]*$")
13
+ PROJECT_SLUG_RE = re.compile(r"^[a-z_][a-z0-9_]*$")
14
+
15
+
16
+ class ValidationError(ValueError):
17
+ """Raised when user-provided generator inputs are invalid."""
18
+
19
+
20
+ @dataclass(frozen=True)
21
+ class ProjectIdentity:
22
+ """Normalized project naming attributes."""
23
+
24
+ project_name: str
25
+ project_slug: str
26
+ project_title: str
27
+ project_package: str
28
+ project_class_name: str
29
+
30
+
31
+ def build_project_identity(raw_name: str) -> ProjectIdentity:
32
+ """Validate and normalize the requested project name."""
33
+ project_name = raw_name.strip()
34
+ if not project_name:
35
+ raise ValidationError("Project name cannot be empty.")
36
+ if "/" in project_name or "\\" in project_name:
37
+ raise ValidationError("Project name must not contain path separators.")
38
+ if not PROJECT_NAME_RE.fullmatch(project_name):
39
+ raise ValidationError(
40
+ "Project name must start with a letter and contain only letters, numbers, hyphens, or underscores."
41
+ )
42
+
43
+ project_slug = project_name.lower().replace("-", "_")
44
+ if not PROJECT_SLUG_RE.fullmatch(project_slug):
45
+ raise ValidationError("Unable to build a valid Python package slug from the project name.")
46
+ if keyword.iskeyword(project_slug):
47
+ raise ValidationError(f"'{project_slug}' is a reserved Python keyword.")
48
+
49
+ class_name = "".join(part.capitalize() for part in project_slug.split("_"))
50
+ title = class_name or project_slug.capitalize()
51
+ return ProjectIdentity(
52
+ project_name=project_name,
53
+ project_slug=project_slug,
54
+ project_title=title,
55
+ project_package=project_slug,
56
+ project_class_name=class_name,
57
+ )
58
+
59
+
60
+ def normalize_database(requested_database: str | None, *, use_docker: bool) -> str:
61
+ """Resolve database selection defaults and validate explicit values."""
62
+ if requested_database is None:
63
+ return "postgres" if use_docker else "sqlite"
64
+
65
+ database = requested_database.strip().lower()
66
+ if database not in VALID_DATABASES:
67
+ valid_values = ", ".join(VALID_DATABASES)
68
+ raise ValidationError(f"Unsupported database '{requested_database}'. Choose one of: {valid_values}.")
69
+ return database
70
+
@@ -0,0 +1,276 @@
1
+ Metadata-Version: 2.4
2
+ Name: codefortify-starter
3
+ Version: 1.0.0
4
+ Summary: A production-ready Django project generator with optional HTMX, DRF, Docker, Celery, Redis, PostgreSQL, and MySQL support.
5
+ Author-email: Codefortify <maintainers@codefortify.dev>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/codefortify/codefortify-starter
8
+ Project-URL: Source, https://github.com/codefortify/codefortify-starter
9
+ Keywords: django,django-starter,django-boilerplate,project-generator,python,codefortify,htmx,drf,docker,celery,redis,postgresql,mysql,cookiecutter-alternative,backend
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Environment :: Console
12
+ Classifier: Framework :: Django
13
+ Classifier: Framework :: Django :: 5.2
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Topic :: Software Development :: Code Generators
23
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
+ Requires-Python: >=3.10
25
+ Description-Content-Type: text/markdown
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
30
+ Dynamic: license-file
31
+
32
+ # codefortify-starter
33
+
34
+ `codefortify-starter` is a professional Django project starter generator for building clean, scalable, and production-ready Django applications faster.
35
+
36
+ It creates a modern Django architecture with a structured settings layout, reusable app organization, environment-based configuration, templates, static/media setup, and optional support for HTMX, Django REST Framework, Docker, Celery, Redis, PostgreSQL, and MySQL.
37
+
38
+ Whether you need a simple Django MVT project or a full API-ready Dockerized architecture with background workers, `codefortify-starter` gives you a consistent foundation for starting new projects.
39
+
40
+ ## What It Is
41
+
42
+ `codefortify-starter` is a PyPI-installable Django project generator that helps developers quickly scaffold clean, maintainable, production-ready Django architectures.
43
+
44
+ By default, it generates a simple Django MVT project. With flags, it can add HTMX, DRF, Docker, Celery, Redis, PostgreSQL, and MySQL.
45
+
46
+ ## Why It Exists
47
+
48
+ Most Django projects repeat the same setup work: project layout, settings split, dependency wiring, env bootstrapping, and deployment scaffolding. `codefortify-starter` reduces that repeated effort and standardizes project initialization.
49
+
50
+ ## Who Should Use It
51
+
52
+ - Django developers starting new applications
53
+ - Teams that want a consistent starter architecture
54
+ - Backend/API engineers who need optional DRF, Docker, and Celery setup
55
+ - Developers who want a lightweight alternative to larger templating frameworks
56
+
57
+ ## Installation
58
+
59
+ Install from PyPI:
60
+
61
+ ```bash
62
+ pip install codefortify-starter
63
+ ```
64
+
65
+ Install an exact version:
66
+
67
+ ```bash
68
+ pip install codefortify-starter==1.0.0
69
+ ```
70
+
71
+ Verify the CLI:
72
+
73
+ ```bash
74
+ codefortify-startproject --help
75
+ ```
76
+
77
+ ## Quick Start
78
+
79
+ Create a basic Django MVT project:
80
+
81
+ ```bash
82
+ codefortify-startproject myproject
83
+ cd myproject
84
+ python -m venv .venv
85
+ source .venv/bin/activate
86
+ pip install -r requirements.txt
87
+ cp .env.example .env
88
+ python manage.py migrate
89
+ python manage.py runserver
90
+ ```
91
+
92
+ ## Supported CLI Flags
93
+
94
+ - `--htmx`
95
+ - `--drf`
96
+ - `--docker`
97
+ - `--celery`
98
+ - `--database [sqlite|postgres|mysql]`
99
+ - `--no-git`
100
+ - `--force`
101
+ - `--directory PATH`
102
+ - `--all`
103
+
104
+ ## Command Examples
105
+
106
+ ```bash
107
+ codefortify-startproject myproject
108
+ codefortify-startproject myproject --htmx
109
+ codefortify-startproject myproject --drf
110
+ codefortify-startproject myproject --docker
111
+ codefortify-startproject myproject --celery
112
+ codefortify-startproject myproject --docker --celery
113
+ codefortify-startproject myproject --drf --docker --celery
114
+ codefortify-startproject myproject --database postgres
115
+ codefortify-startproject myproject --database mysql
116
+ codefortify-startproject myproject --no-git
117
+ codefortify-startproject myproject --force
118
+ codefortify-startproject myproject --directory /path/to/projects
119
+ codefortify-startproject myproject --all
120
+ ```
121
+
122
+ `--all` is equivalent to:
123
+
124
+ ```bash
125
+ codefortify-startproject myproject --htmx --drf --docker --celery --database postgres
126
+ ```
127
+
128
+ ## Feature Matrix
129
+
130
+ | Feature | Flag | Description |
131
+ |---|---|---|
132
+ | Django MVT | default | Clean Django project with settings, templates, static/media, and home app |
133
+ | HTMX | `--htmx` | Adds `django-htmx`, middleware, and example partial views |
134
+ | Django REST Framework | `--drf` | Adds DRF, API app, API routes, serializers, and tests |
135
+ | Docker | `--docker` | Adds Dockerfile, docker-compose, entrypoint, deployment script, and Docker docs |
136
+ | Celery + Redis | `--celery` | Adds Celery config, Redis broker settings, and example task |
137
+ | PostgreSQL | `--database postgres` | Adds PostgreSQL-ready configuration |
138
+ | MySQL | `--database mysql` | Adds MySQL-ready configuration |
139
+ | Full stack | `--all` | Adds HTMX, DRF, Docker, Celery, Redis, and PostgreSQL |
140
+
141
+ ## Generated Architecture
142
+
143
+ ```text
144
+ myproject/
145
+ ├── apps/
146
+ │ └── home/
147
+ ├── core/
148
+ │ ├── settings/
149
+ │ │ ├── base.py
150
+ │ │ ├── dev.py
151
+ │ │ └── production.py
152
+ │ ├── urls.py
153
+ │ ├── asgi.py
154
+ │ └── wsgi.py
155
+ ├── templates/
156
+ ├── static/
157
+ ├── media/
158
+ ├── manage.py
159
+ ├── requirements.txt
160
+ ├── .env.example
161
+ └── README.md
162
+ ```
163
+
164
+ Feature-specific files are added only when their flags are selected (for example `apps/api`, `core/celery.py`, `Dockerfile`, compose files, and task modules).
165
+
166
+ ## Database Options
167
+
168
+ - Default without `--docker`: SQLite
169
+ - Default with `--docker`: PostgreSQL
170
+ - Explicit: `--database postgres`, `--database mysql`, or `--database sqlite`
171
+
172
+ Generated settings safely handle an empty `DATABASE_URL` and support local fallback behavior for development.
173
+
174
+ ## HTMX Usage
175
+
176
+ Generate with HTMX:
177
+
178
+ ```bash
179
+ codefortify-startproject myproject --htmx
180
+ ```
181
+
182
+ The generated project includes HTMX middleware and an example partial endpoint.
183
+
184
+ ## DRF Usage
185
+
186
+ Generate with DRF:
187
+
188
+ ```bash
189
+ codefortify-startproject myproject --drf
190
+ ```
191
+
192
+ The generated API app includes a health endpoint:
193
+
194
+ - `GET /api/health/`
195
+
196
+ ## Docker Usage
197
+
198
+ ```bash
199
+ codefortify-startproject myproject --docker
200
+ cd myproject
201
+ cp .env.example .env
202
+ docker compose build
203
+ docker compose up -d
204
+ docker compose exec web python manage.py migrate
205
+ ```
206
+
207
+ ## Celery Usage
208
+
209
+ Generate with Celery support:
210
+
211
+ ```bash
212
+ codefortify-startproject myproject --celery
213
+ ```
214
+
215
+ Run worker locally:
216
+
217
+ ```bash
218
+ celery -A core worker -l info
219
+ ```
220
+
221
+ ## Full Stack Usage
222
+
223
+ ```bash
224
+ codefortify-startproject myproject --all
225
+ cd myproject
226
+ cp .env.example .env
227
+ docker compose build
228
+ docker compose up -d
229
+ docker compose ps
230
+ ```
231
+
232
+ ## Local Development (This Package)
233
+
234
+ ```bash
235
+ python -m venv .pkgvenv
236
+ source .pkgvenv/bin/activate
237
+ pip install -r requirements.txt
238
+ pip install -e .
239
+ python -m pytest -q tests
240
+ ```
241
+
242
+ ## Build and Publish
243
+
244
+ Build and validate:
245
+
246
+ ```bash
247
+ rm -rf dist build *.egg-info
248
+ python -m build
249
+ twine check dist/*
250
+ ```
251
+
252
+ Publish to TestPyPI:
253
+
254
+ ```bash
255
+ twine upload --repository testpypi dist/*
256
+ ```
257
+
258
+ Publish to PyPI:
259
+
260
+ ```bash
261
+ twine upload dist/*
262
+ ```
263
+
264
+ ## Testing from TestPyPI
265
+
266
+ Use this only for testing pre-release package builds:
267
+
268
+ ```bash
269
+ pip install --index-url https://test.pypi.org/simple/ \
270
+ --extra-index-url https://pypi.org/simple \
271
+ codefortify-starter==1.0.0
272
+ ```
273
+
274
+ ## License
275
+
276
+ MIT License. See [LICENSE](LICENSE).
@@ -0,0 +1,60 @@
1
+ codefortify_starter/__init__.py,sha256=eIQuq0aj8MjFppFiwY4qNH2--4o8yzrH9hCm4c3kdOA,189
2
+ codefortify_starter/__main__.py,sha256=2AQ0rURMaY59nRb06NUCCxZ2dNqSQxvxDfd1V0HUFS8,82
3
+ codefortify_starter/cli.py,sha256=TW-yiDzbg8zHPbnkyk-pEyBYBzXCfbo5KV1ZVDXqmrc,3773
4
+ codefortify_starter/constants.py,sha256=mL0o3q2z2o9xAnzja7muVSqLHGWgBeZGRBqAOIWhQn4,1225
5
+ codefortify_starter/generator.py,sha256=xtv0UxC7f55w3UcTR2iDYA-cppy1WdrIKZIfCEQTSdU,8856
6
+ codefortify_starter/template_engine.py,sha256=QMWcYg1uCl22yKBwAmanbK-OJqBRinTxn1_esru5NjY,2416
7
+ codefortify_starter/validators.py,sha256=F0_Uf7_FV0cMvewMil5eUVvks78prb6TGPL8YOWOZDY,2430
8
+ codefortify_starter/templates/base_project/README.md.jinja,sha256=Lf3htG3-1VPeNKaWzA26sSUtcXuRav-s_dwNMG0Nps8,1357
9
+ codefortify_starter/templates/base_project/dot-env.example.jinja,sha256=P835WHPkZLmOZrypDVqwxWCjJayTI67p5YpHxoKI0XI,2149
10
+ codefortify_starter/templates/base_project/dot-gitignore,sha256=woqUCvO-I6mZ-hrgYMGHTeuNU2oBqvk15_3iXsW756M,308
11
+ codefortify_starter/templates/base_project/manage.py.jinja,sha256=xs_a6AVI9Nv_Klnk57k0S8tB1yJFVBQP79rL0UQThKw,274
12
+ codefortify_starter/templates/base_project/apps/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
13
+ codefortify_starter/templates/base_project/apps/home/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
14
+ codefortify_starter/templates/base_project/apps/home/apps.py.jinja,sha256=VtvR6nzdPbsS9jbF7soytpBUf8IEovQVB4eVvxEzkT4,146
15
+ codefortify_starter/templates/base_project/apps/home/tests.py.jinja,sha256=IL4Lf8hwQ6fi97-L3gLtlPOZCl4_zn0fMettwMLGo8w,595
16
+ codefortify_starter/templates/base_project/apps/home/urls.py.jinja,sha256=MMcTp2IXiCJ3xb-hAYZhtxR4CDe4bqBbBDPjxPIq30Y,288
17
+ codefortify_starter/templates/base_project/apps/home/views.py.jinja,sha256=rlmZC5dLoftHiU3xVGJHzqefuM6Qd2MnjpOVBItve58,264
18
+ codefortify_starter/templates/base_project/apps/home/templates/home/index.html.jinja,sha256=sHJ_ZvFFdnOnZbuCjh4huMBXor8GO2sjSR6gXLv7qD0,523
19
+ codefortify_starter/templates/base_project/core/__init__.py.jinja,sha256=8-lzmnk3e_XuZR3kZl4hGZBb6Fyz3lw4VZuyK42lpwM,168
20
+ codefortify_starter/templates/base_project/core/asgi.py.jinja,sha256=PP_KiqQLcF1IW0-KTtb0QqN1W91yuWPbOhlXBWNWpiM,160
21
+ codefortify_starter/templates/base_project/core/env.py.jinja,sha256=zSJKcdtnp_OlK2rFdTUz9NXVuGcaDIgdU-5zX0vH2cs,1674
22
+ codefortify_starter/templates/base_project/core/urls.py.jinja,sha256=Asm7_XCqbzAhVsTVUBe-q-Abxq06k-6k9Gv5slW0g9Q,682
23
+ codefortify_starter/templates/base_project/core/views.py.jinja,sha256=ONYrnPcRjY11Nq6B4KpTnIu95H-bCj4SRloXCh3MREs,1956
24
+ codefortify_starter/templates/base_project/core/wsgi.py.jinja,sha256=MBYweKxuRQsMOIelX3rZo0iGAEsFqFCnKNweaQq5cH0,160
25
+ codefortify_starter/templates/base_project/core/middleware/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
26
+ codefortify_starter/templates/base_project/core/middleware/exceptions.py,sha256=faAb-g8R0J588TYlAiZGn3gs4frtHnHDg7WmYaO2-U0,768
27
+ codefortify_starter/templates/base_project/core/middleware/security.py,sha256=6-jERDJGdwhuKVCc8WBbz3HDnTqYt9Jja_SKUy1oLbM,513
28
+ codefortify_starter/templates/base_project/core/settings/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
29
+ codefortify_starter/templates/base_project/core/settings/base.py.jinja,sha256=zvwB26ugjjE1Eguu7sr-EaQtc9Gld6MUkHR9_K6IF9k,4884
30
+ codefortify_starter/templates/base_project/core/settings/dev.py.jinja,sha256=B99Jq9vh_5jMboFBKeJqYzFOHme8jI_ZT3oYxTaqKi8,140
31
+ codefortify_starter/templates/base_project/core/settings/production.py.jinja,sha256=y5yEjGRBLpWD_tE3d4IkZnq9YRCfojYDGoYdnwLmkcA,871
32
+ codefortify_starter/templates/base_project/core/templates/errors/400.html,sha256=NP4INirYFSAQPw9gx7rOB8QWRp2ZvnNc6h49YL9ttUg,138
33
+ codefortify_starter/templates/base_project/core/templates/errors/403.html,sha256=MbT4KuCQp3K4aXOx7sIulp4OoPucv6a9TNeLRZ-Fp44,150
34
+ codefortify_starter/templates/base_project/core/templates/errors/404.html,sha256=i48qo-ZJ8A8lpACSL2DHL1Ta5NeXmStwLvUwX9agbAs,139
35
+ codefortify_starter/templates/base_project/core/templates/errors/405.html,sha256=xtF1KGSh_a7jTEfXwUw7VDJDpLHfVpmOY9ERLw06ESs,152
36
+ codefortify_starter/templates/base_project/core/templates/errors/500.html,sha256=7CyIDPYtiAXXcimIbbneKpc7ZvOpHqbQ-oEUEvmle-4,149
37
+ codefortify_starter/templates/base_project/static/css/main.css,sha256=IVUQ885XgRJpq-dQm4Agk3uEw51SUODf_CaxfHAzCbg,241
38
+ codefortify_starter/templates/base_project/templates/base.html.jinja,sha256=msJNjXXqBdXyB5Iw5k9uv9PhUu3y5J4LKX6L2-BYBbg,497
39
+ codefortify_starter/templates/features/celery/apps/home/tasks.py.jinja,sha256=JrXEd0gLi7fBrqcfGnr7bIqdJLRfjnP3_NObfY_LmPI,77
40
+ codefortify_starter/templates/features/celery/core/celery.py.jinja,sha256=f0036dyYR_JD_fioa10WhxvVcDOiN6bdG8TCeYVlCe4,362
41
+ codefortify_starter/templates/features/docker/DOCKER_README.md.jinja,sha256=OAmg5MKMkYzNj5SdkFHprAVdxCmncQi5SjtF6hpeRGk,1137
42
+ codefortify_starter/templates/features/docker/Dockerfile.jinja,sha256=ABJoa7eXRFZek9poniWdYfsk6U_dQugMeLYOqjVeT6U,455
43
+ codefortify_starter/templates/features/docker/docker-compose.prod.yml.jinja,sha256=IJtMR8ZDUn_dal-sHwSBylGmqa_hNd6L0yrOJehogWI,4794
44
+ codefortify_starter/templates/features/docker/docker-compose.yml.jinja,sha256=xDpaUIthqS3a6n9seLxwNq_DbO5MY4KdHCLNaBlTRjg,6399
45
+ codefortify_starter/templates/features/docker/docker_deploy.sh.jinja,sha256=aLt3SHBE2OgL6uQfiV7oflvh6K82CiXUA3QyQBjKvb8,2723
46
+ codefortify_starter/templates/features/docker/dot-dockerignore,sha256=2Sdou5O_tXMH9PGsUVaYItjdfRFgKzF4cKDezzSd-vc,90
47
+ codefortify_starter/templates/features/docker/entrypoint.sh.jinja,sha256=pCdX_Tt5eITqMGofpykl3i1k2uaOd-8xKorAz1wHLKI,2475
48
+ codefortify_starter/templates/features/drf/apps/api/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
49
+ codefortify_starter/templates/features/drf/apps/api/apps.py.jinja,sha256=-EQ9amecVqf6LQ8O7dl86-ENAqxbm2f3zuEt3y2dxPw,144
50
+ codefortify_starter/templates/features/drf/apps/api/serializers.py,sha256=uFtBEuoKKIOPqAk11Bknx7d3wXwPSAwxh_f7tOMV-1c,165
51
+ codefortify_starter/templates/features/drf/apps/api/tests.py,sha256=cCsU3I_Gntrn4DKFjvMRv0hiqCb7FJEbibk22sIovD0,365
52
+ codefortify_starter/templates/features/drf/apps/api/urls.py,sha256=cX10n5SKnPw86YZSyB7bscGoOMeBTJcJuBW09A2wiow,171
53
+ codefortify_starter/templates/features/drf/apps/api/views.py,sha256=DROkoGEUCirjidu8MyLyXzy-GBfDTelOdKzTZCYwdyk,495
54
+ codefortify_starter/templates/features/htmx/templates/partials/example.html.jinja,sha256=K-u1KawFcofhb3qv2ttDRRbSb514ScxSeThm88Rsl5c,136
55
+ codefortify_starter-1.0.0.dist-info/licenses/LICENSE,sha256=1-ZctcUxkGU1x6Ioi7pi1yjTrYgjZX5hYVP9EnPMcQY,1069
56
+ codefortify_starter-1.0.0.dist-info/METADATA,sha256=ibSj3uLiHxSL-znb2aoGmZ0duZFMjzydVBqW5jr7l1k,7623
57
+ codefortify_starter-1.0.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
58
+ codefortify_starter-1.0.0.dist-info/entry_points.txt,sha256=r2p0PulHgiMGVRM3HmJm4H2seY01-fxumj3pf6X28Pk,74
59
+ codefortify_starter-1.0.0.dist-info/top_level.txt,sha256=fnRqkfOK2-8EKUg0c_iHRQEnsgnYBesv_GDA26F8xCU,20
60
+ codefortify_starter-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ codefortify-startproject = codefortify_starter.cli:main
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Codefortify
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
@@ -0,0 +1 @@
1
+ codefortify_starter