fastango 0.1.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.
- fastango-0.1.0/.github/FUNDING.yaml +3 -0
- fastango-0.1.0/.github/SECURITY.md +14 -0
- fastango-0.1.0/.github/dependabot.yaml +25 -0
- fastango-0.1.0/.github/workflows/ci.yaml +91 -0
- fastango-0.1.0/.github/workflows/release.yaml +33 -0
- fastango-0.1.0/.gitignore +121 -0
- fastango-0.1.0/.pre-commit-config.yaml +24 -0
- fastango-0.1.0/LICENSE +21 -0
- fastango-0.1.0/PKG-INFO +260 -0
- fastango-0.1.0/README.md +223 -0
- fastango-0.1.0/docs/index.md +62 -0
- fastango-0.1.0/docs/logo.png +0 -0
- fastango-0.1.0/fastango/__init__.py +3 -0
- fastango-0.1.0/fastango/cli.py +439 -0
- fastango-0.1.0/fastango/generator/__init__.py +1 -0
- fastango-0.1.0/fastango/generator/constraints.py +77 -0
- fastango-0.1.0/fastango/generator/model_catalog.py +180 -0
- fastango-0.1.0/fastango/generator/models.py +67 -0
- fastango-0.1.0/fastango/generator/planner.py +126 -0
- fastango-0.1.0/fastango/generator/preview.py +88 -0
- fastango-0.1.0/fastango/generator/providers/__init__.py +1 -0
- fastango-0.1.0/fastango/generator/providers/anthropic.py +53 -0
- fastango-0.1.0/fastango/generator/providers/base.py +48 -0
- fastango-0.1.0/fastango/generator/providers/openai.py +44 -0
- fastango-0.1.0/fastango/generator/rules.py +162 -0
- fastango-0.1.0/fastango/generator/skills.py +104 -0
- fastango-0.1.0/fastango/integrations/__init__.py +5 -0
- fastango-0.1.0/fastango/integrations/base.py +27 -0
- fastango-0.1.0/fastango/integrations/builtins.py +434 -0
- fastango-0.1.0/fastango/integrations/catalog.py +224 -0
- fastango-0.1.0/fastango/integrations/categories/__init__.py +1 -0
- fastango-0.1.0/fastango/integrations/categories/ai.py +94 -0
- fastango-0.1.0/fastango/integrations/categories/api.py +47 -0
- fastango-0.1.0/fastango/integrations/categories/auth.py +119 -0
- fastango-0.1.0/fastango/integrations/categories/cache_queue.py +65 -0
- fastango-0.1.0/fastango/integrations/categories/database.py +100 -0
- fastango-0.1.0/fastango/integrations/categories/deploy.py +117 -0
- fastango-0.1.0/fastango/integrations/categories/devtools.py +59 -0
- fastango-0.1.0/fastango/integrations/categories/observability.py +56 -0
- fastango-0.1.0/fastango/integrations/categories/payments.py +98 -0
- fastango-0.1.0/fastango/integrations/categories/product.py +195 -0
- fastango-0.1.0/fastango/integrations/categories/storage.py +59 -0
- fastango-0.1.0/fastango/py.typed +0 -0
- fastango-0.1.0/fastango/scaffold/__init__.py +6 -0
- fastango-0.1.0/fastango/scaffold/config.py +111 -0
- fastango-0.1.0/fastango/scaffold/engine.py +61 -0
- fastango-0.1.0/fastango/scaffold/filesystem.py +54 -0
- fastango-0.1.0/fastango/scaffold/plan.py +111 -0
- fastango-0.1.0/fastango/scaffold/preview.py +34 -0
- fastango-0.1.0/fastango/scaffold/prompts.py +67 -0
- fastango-0.1.0/fastango/scaffold/registry.py +116 -0
- fastango-0.1.0/fastango/scaffold/renderer.py +98 -0
- fastango-0.1.0/fastango/templates/__init__.py +1 -0
- fastango-0.1.0/fastango/templates/project/__init__.py +1 -0
- fastango-0.1.0/fastango/templates/project/mvc/.env.example.j2 +3 -0
- fastango-0.1.0/fastango/templates/project/mvc/.gitignore.j2 +8 -0
- fastango-0.1.0/fastango/templates/project/mvc/README.md.j2 +33 -0
- fastango-0.1.0/fastango/templates/project/mvc/app/__init__.py.j2 +1 -0
- fastango-0.1.0/fastango/templates/project/mvc/app/api/__init__.py.j2 +1 -0
- fastango-0.1.0/fastango/templates/project/mvc/app/api/deps.py.j2 +5 -0
- fastango-0.1.0/fastango/templates/project/mvc/app/api/routes/__init__.py.j2 +1 -0
- fastango-0.1.0/fastango/templates/project/mvc/app/api/routes/health.py.j2 +18 -0
- fastango-0.1.0/fastango/templates/project/mvc/app/core/__init__.py.j2 +1 -0
- fastango-0.1.0/fastango/templates/project/mvc/app/core/config.py.j2 +34 -0
- fastango-0.1.0/fastango/templates/project/mvc/app/core/logging.py.j2 +10 -0
- fastango-0.1.0/fastango/templates/project/mvc/app/main.py.j2 +46 -0
- fastango-0.1.0/fastango/templates/project/mvc/app/models/__init__.py.j2 +1 -0
- fastango-0.1.0/fastango/templates/project/mvc/app/repositories/__init__.py.j2 +1 -0
- fastango-0.1.0/fastango/templates/project/mvc/app/schemas/__init__.py.j2 +1 -0
- fastango-0.1.0/fastango/templates/project/mvc/app/schemas/health.py.j2 +8 -0
- fastango-0.1.0/fastango/templates/project/mvc/app/services/__init__.py.j2 +1 -0
- fastango-0.1.0/fastango/templates/project/mvc/llms.txt.j2 +33 -0
- fastango-0.1.0/fastango/templates/project/mvc/pyproject.toml.j2 +30 -0
- fastango-0.1.0/fastango/templates/project/mvc/tests/test_health.py.j2 +12 -0
- fastango-0.1.0/fastango/templates/project/simple/.env.example.j2 +3 -0
- fastango-0.1.0/fastango/templates/project/simple/.gitignore.j2 +8 -0
- fastango-0.1.0/fastango/templates/project/simple/README.md.j2 +29 -0
- fastango-0.1.0/fastango/templates/project/simple/app/__init__.py.j2 +1 -0
- fastango-0.1.0/fastango/templates/project/simple/app/main.py.j2 +45 -0
- fastango-0.1.0/fastango/templates/project/simple/app/routes.py.j2 +18 -0
- fastango-0.1.0/fastango/templates/project/simple/app/schemas.py.j2 +8 -0
- fastango-0.1.0/fastango/templates/project/simple/app/settings.py.j2 +34 -0
- fastango-0.1.0/fastango/templates/project/simple/llms.txt.j2 +30 -0
- fastango-0.1.0/fastango/templates/project/simple/pyproject.toml.j2 +30 -0
- fastango-0.1.0/fastango/templates/project/simple/tests/test_health.py.j2 +12 -0
- fastango-0.1.0/fastango/terminal/__init__.py +1 -0
- fastango-0.1.0/fastango/terminal/models.py +27 -0
- fastango-0.1.0/fastango/terminal/tables.py +51 -0
- fastango-0.1.0/fastango/terminal/theme.py +36 -0
- fastango-0.1.0/fastango/tui/__init__.py +1 -0
- fastango-0.1.0/fastango/tui/app.py +169 -0
- fastango-0.1.0/pyproject.toml +113 -0
- fastango-0.1.0/scripts/clean.sh +21 -0
- fastango-0.1.0/scripts/format.sh +6 -0
- fastango-0.1.0/scripts/mypy.sh +6 -0
- fastango-0.1.0/scripts/tests.sh +9 -0
- fastango-0.1.0/tests/__init__.py +1 -0
- fastango-0.1.0/tests/test_catalog.py +69 -0
- fastango-0.1.0/tests/test_cli.py +98 -0
- fastango-0.1.0/tests/test_config.py +23 -0
- fastango-0.1.0/tests/test_generated_project_smoke.py +39 -0
- fastango-0.1.0/tests/test_generator.py +127 -0
- fastango-0.1.0/tests/test_registry.py +20 -0
- fastango-0.1.0/tests/test_scaffold_engine.py +47 -0
- fastango-0.1.0/tests/test_tui_app.py +33 -0
- fastango-0.1.0/uv.lock +1115 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Supported Versions
|
|
4
|
+
|
|
5
|
+
We will endeavour to support:
|
|
6
|
+
|
|
7
|
+
* the most recent minor release with bug fixes
|
|
8
|
+
* the latest minor release from the last major version for 6 months after a new major version is released with critical bug fixes
|
|
9
|
+
|
|
10
|
+
## Reporting a Vulnerability
|
|
11
|
+
|
|
12
|
+
If you find what you think might be a security vulnerability with pydantic,
|
|
13
|
+
please do not create an issue on github. Instead please email <dev@yezz.me>
|
|
14
|
+
I'll reply to your email promptly and try to get a patch out ASAP.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
|
|
3
|
+
updates:
|
|
4
|
+
# GitHub Actions
|
|
5
|
+
- package-ecosystem: "github-actions"
|
|
6
|
+
directory: "/"
|
|
7
|
+
schedule:
|
|
8
|
+
interval: "weekly"
|
|
9
|
+
commit-message:
|
|
10
|
+
prefix: ⬆
|
|
11
|
+
labels:
|
|
12
|
+
- "upgrade"
|
|
13
|
+
# Python
|
|
14
|
+
- package-ecosystem: "uv"
|
|
15
|
+
directory: "/"
|
|
16
|
+
schedule:
|
|
17
|
+
interval: "weekly"
|
|
18
|
+
groups:
|
|
19
|
+
python-packages:
|
|
20
|
+
patterns:
|
|
21
|
+
- "*"
|
|
22
|
+
commit-message:
|
|
23
|
+
prefix: ⬆
|
|
24
|
+
labels:
|
|
25
|
+
- "upgrade"
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
name: Continuous Integration
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request: {}
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
lint:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
15
|
+
fail-fast: false
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v6
|
|
19
|
+
- name: Set up Python
|
|
20
|
+
uses: actions/setup-python@v6
|
|
21
|
+
with:
|
|
22
|
+
python-version: ${{ matrix.python-version }}
|
|
23
|
+
|
|
24
|
+
- name: setup uv
|
|
25
|
+
uses: yezz123/setup-uv@v4.1
|
|
26
|
+
with:
|
|
27
|
+
uv-venv: ".venv"
|
|
28
|
+
|
|
29
|
+
- name: Install Dependencies
|
|
30
|
+
run: uv sync --group lint --group type --all-extras
|
|
31
|
+
|
|
32
|
+
- name: Typecheck with mypy
|
|
33
|
+
run: bash scripts/mypy.sh
|
|
34
|
+
|
|
35
|
+
- name: Lint with ruff
|
|
36
|
+
run: bash scripts/format.sh
|
|
37
|
+
|
|
38
|
+
tests:
|
|
39
|
+
|
|
40
|
+
name: test py${{ matrix.python-version }} on ${{ matrix.os }}
|
|
41
|
+
|
|
42
|
+
runs-on: ${{ matrix.os }}-latest
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
strategy:
|
|
46
|
+
|
|
47
|
+
matrix:
|
|
48
|
+
|
|
49
|
+
python-version: [ "3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
50
|
+
|
|
51
|
+
os: [ubuntu]
|
|
52
|
+
|
|
53
|
+
steps:
|
|
54
|
+
- uses: actions/checkout@v6
|
|
55
|
+
|
|
56
|
+
- name: Set up Python
|
|
57
|
+
uses: actions/setup-python@v6
|
|
58
|
+
with:
|
|
59
|
+
python-version: ${{ matrix.python-version }}
|
|
60
|
+
|
|
61
|
+
- name: setup UV
|
|
62
|
+
uses: yezz123/setup-uv@v4.1
|
|
63
|
+
with:
|
|
64
|
+
uv-venv: ".venv"
|
|
65
|
+
|
|
66
|
+
- name: Install Dependencies
|
|
67
|
+
run: uv sync --group test --all-extras
|
|
68
|
+
|
|
69
|
+
- name: Test with pytest - ${{ matrix.os }} - py${{ matrix.python-version }}
|
|
70
|
+
run: bash scripts/tests.sh
|
|
71
|
+
env:
|
|
72
|
+
CONTEXT: ${{ runner.os }}-py${{ matrix.python-version }}-with-deps
|
|
73
|
+
|
|
74
|
+
- name: Upload coverage to Codecov
|
|
75
|
+
uses: codecov/codecov-action@v6
|
|
76
|
+
with:
|
|
77
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
78
|
+
files: ./coverage.xml
|
|
79
|
+
|
|
80
|
+
# https://github.com/marketplace/actions/alls-green#why
|
|
81
|
+
# used for branch protection checks
|
|
82
|
+
check:
|
|
83
|
+
if: always()
|
|
84
|
+
|
|
85
|
+
needs: [lint, tests]
|
|
86
|
+
runs-on: ubuntu-latest
|
|
87
|
+
steps:
|
|
88
|
+
- name: Decide whether the needed jobs succeeded or failed
|
|
89
|
+
uses: re-actors/alls-green@release/v1
|
|
90
|
+
with:
|
|
91
|
+
jobs: ${{ toJSON(needs) }}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types:
|
|
6
|
+
- created
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
|
|
10
|
+
release:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
id-token: write
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v6
|
|
18
|
+
|
|
19
|
+
- uses: astral-sh/setup-uv@v7
|
|
20
|
+
with:
|
|
21
|
+
enable-cache: true
|
|
22
|
+
|
|
23
|
+
- name: check version
|
|
24
|
+
id: check-tag
|
|
25
|
+
uses: samuelcolvin/check-python-version@v5
|
|
26
|
+
with:
|
|
27
|
+
version_file_path: fastango/__init__.py
|
|
28
|
+
|
|
29
|
+
- name: build
|
|
30
|
+
run: uv build
|
|
31
|
+
|
|
32
|
+
- name: Upload package to PyPI
|
|
33
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# mypy
|
|
2
|
+
.mypy_cache/
|
|
3
|
+
|
|
4
|
+
# Byte-compiled / optimized / DLL files
|
|
5
|
+
__pycache__/
|
|
6
|
+
*.py[cod]
|
|
7
|
+
*$py.class
|
|
8
|
+
|
|
9
|
+
# C extensions
|
|
10
|
+
*.so
|
|
11
|
+
|
|
12
|
+
# Distribution / packaging
|
|
13
|
+
.Python
|
|
14
|
+
build/
|
|
15
|
+
develop-eggs/
|
|
16
|
+
dist/
|
|
17
|
+
downloads/
|
|
18
|
+
eggs/
|
|
19
|
+
.eggs/
|
|
20
|
+
lib/
|
|
21
|
+
lib64/
|
|
22
|
+
parts/
|
|
23
|
+
sdist/
|
|
24
|
+
var/
|
|
25
|
+
wheels/
|
|
26
|
+
*.egg-info/
|
|
27
|
+
.installed.cfg
|
|
28
|
+
*.egg
|
|
29
|
+
MANIFEST
|
|
30
|
+
|
|
31
|
+
# PyInstaller
|
|
32
|
+
# Usually these files are written by a python script from a template
|
|
33
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
34
|
+
*.manifest
|
|
35
|
+
*.spec
|
|
36
|
+
|
|
37
|
+
# Installer logs
|
|
38
|
+
pip-log.txt
|
|
39
|
+
pip-delete-this-directory.txt
|
|
40
|
+
|
|
41
|
+
# Unit test / coverage reports
|
|
42
|
+
htmlcov/
|
|
43
|
+
.tox/
|
|
44
|
+
.coverage
|
|
45
|
+
.coverage.*
|
|
46
|
+
.cache
|
|
47
|
+
nosetests.xml
|
|
48
|
+
coverage.xml
|
|
49
|
+
*.cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
|
|
53
|
+
# Translations
|
|
54
|
+
*.mo
|
|
55
|
+
*.pot
|
|
56
|
+
|
|
57
|
+
# Django stuff:
|
|
58
|
+
*.log
|
|
59
|
+
local_settings.py
|
|
60
|
+
db.sqlite3
|
|
61
|
+
|
|
62
|
+
# Flask stuff:
|
|
63
|
+
instance/
|
|
64
|
+
.webassets-cache
|
|
65
|
+
|
|
66
|
+
# Scrapy stuff:
|
|
67
|
+
.scrapy
|
|
68
|
+
|
|
69
|
+
# Sphinx documentation
|
|
70
|
+
docs/_build/
|
|
71
|
+
|
|
72
|
+
# PyBuilder
|
|
73
|
+
target/
|
|
74
|
+
|
|
75
|
+
# Jupyter Notebook
|
|
76
|
+
.ipynb_checkpoints
|
|
77
|
+
|
|
78
|
+
# pyenv
|
|
79
|
+
.python-version
|
|
80
|
+
|
|
81
|
+
# celery beat schedule file
|
|
82
|
+
celerybeat-schedule
|
|
83
|
+
|
|
84
|
+
# SageMath parsed files
|
|
85
|
+
*.sage.py
|
|
86
|
+
|
|
87
|
+
# Environments
|
|
88
|
+
.env
|
|
89
|
+
.venv
|
|
90
|
+
env/
|
|
91
|
+
venv/
|
|
92
|
+
ENV/
|
|
93
|
+
env.bak/
|
|
94
|
+
venv.bak/
|
|
95
|
+
|
|
96
|
+
# Spyder project settings
|
|
97
|
+
.spyderproject
|
|
98
|
+
.spyproject
|
|
99
|
+
|
|
100
|
+
# Rope project settings
|
|
101
|
+
.ropeproject
|
|
102
|
+
|
|
103
|
+
# mkdocs documentation
|
|
104
|
+
/site
|
|
105
|
+
|
|
106
|
+
# mypy
|
|
107
|
+
.mypy_cache/
|
|
108
|
+
|
|
109
|
+
.idea/
|
|
110
|
+
.vscode/
|
|
111
|
+
|
|
112
|
+
# Project
|
|
113
|
+
postgres-data
|
|
114
|
+
.DS_Store
|
|
115
|
+
|
|
116
|
+
# Generated by tests
|
|
117
|
+
authx_profiling_results.*
|
|
118
|
+
*.db
|
|
119
|
+
|
|
120
|
+
# Generated by linting
|
|
121
|
+
.ruff_cache/
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: v6.0.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: check-added-large-files
|
|
6
|
+
- id: check-toml
|
|
7
|
+
- id: check-yaml
|
|
8
|
+
args:
|
|
9
|
+
- --unsafe
|
|
10
|
+
- id: end-of-file-fixer
|
|
11
|
+
- id: trailing-whitespace
|
|
12
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
13
|
+
rev: v0.15.13
|
|
14
|
+
hooks:
|
|
15
|
+
- id: ruff
|
|
16
|
+
args:
|
|
17
|
+
- --fix
|
|
18
|
+
- id: ruff-format
|
|
19
|
+
- repo: https://github.com/codespell-project/codespell
|
|
20
|
+
rev: v2.4.2
|
|
21
|
+
hooks:
|
|
22
|
+
- id: codespell
|
|
23
|
+
additional_dependencies:
|
|
24
|
+
- tomli
|
fastango-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Yasser Tahiri
|
|
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.
|
fastango-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: fastango
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A uv-first CLI for generating FastAPI projects with optional integrations.
|
|
5
|
+
Project-URL: Homepage, https://github.com/yezz123/fastango
|
|
6
|
+
Project-URL: Repository, https://github.com/yezz123/fastango
|
|
7
|
+
Project-URL: Issues, https://github.com/yezz123/fastango/issues
|
|
8
|
+
Project-URL: Funding, https://github.com/sponsors/yezz123
|
|
9
|
+
Author-email: Yasser Tahiri <hello@yezz.me>
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: CLI,FastAPI,Pydantic,scaffold,template,uv
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Framework :: FastAPI
|
|
16
|
+
Classifier: Framework :: Pydantic
|
|
17
|
+
Classifier: Framework :: Pydantic :: 2
|
|
18
|
+
Classifier: Intended Audience :: Developers
|
|
19
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
20
|
+
Classifier: Operating System :: OS Independent
|
|
21
|
+
Classifier: Programming Language :: Python
|
|
22
|
+
Classifier: Programming Language :: Python :: 3
|
|
23
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
27
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
28
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
29
|
+
Requires-Python: >=3.10
|
|
30
|
+
Requires-Dist: jinja2>=3.1.6
|
|
31
|
+
Requires-Dist: pydantic>=2.7.0
|
|
32
|
+
Requires-Dist: rich>=13.7.0
|
|
33
|
+
Requires-Dist: typer>=0.12.0
|
|
34
|
+
Provides-Extra: ai
|
|
35
|
+
Requires-Dist: httpx>=0.27.0; extra == 'ai'
|
|
36
|
+
Description-Content-Type: text/markdown
|
|
37
|
+
|
|
38
|
+
<!-- markdownlint-disable MD033 -->
|
|
39
|
+
<p align="center">
|
|
40
|
+
<img src="https://raw.githubusercontent.com/yezz123/fastango/fa66a81b925515f2a3777c91d66132b8998b9421/docs/logo.png" alt="Fastango logo" width="240">
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
<p align="center">
|
|
44
|
+
<a href="https://github.com/yezz123/fastango/actions/workflows/ci.yaml">
|
|
45
|
+
<img src="https://github.com/yezz123/fastango/actions/workflows/ci.yaml/badge.svg" alt="Continuous Integration">
|
|
46
|
+
</a>
|
|
47
|
+
<a href="https://codecov.io/gh/yezz123/fastango">
|
|
48
|
+
<img src="https://codecov.io/gh/yezz123/fastango/branch/main/graph/badge.svg?token=8ZKMD474LT" alt="Codecov">
|
|
49
|
+
</a>
|
|
50
|
+
<a href="https://pypi.org/project/fastango">
|
|
51
|
+
<img src="https://img.shields.io/pypi/v/fastango?color=%2334D058&label=pypi%20package" alt="PyPI package">
|
|
52
|
+
</a>
|
|
53
|
+
<a href="https://pepy.tech/project/fastango">
|
|
54
|
+
<img src="https://static.pepy.tech/badge/fastango" alt="Downloads">
|
|
55
|
+
</a>
|
|
56
|
+
<a href="https://pydantic.dev">
|
|
57
|
+
<img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json" alt="Pydantic Version 2">
|
|
58
|
+
</a>
|
|
59
|
+
<a href="https://github.com/astral-sh/ruff">
|
|
60
|
+
<img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff">
|
|
61
|
+
</a>
|
|
62
|
+
<img src="https://img.shields.io/badge/python-3.10%2B-blue" alt="Python 3.10+">
|
|
63
|
+
<img src="https://img.shields.io/badge/framework-FastAPI-009688" alt="FastAPI">
|
|
64
|
+
<img src="https://img.shields.io/badge/package%20manager-uv-654ff0" alt="uv">
|
|
65
|
+
<img src="https://img.shields.io/badge/license-MIT-green" alt="MIT license">
|
|
66
|
+
</p>
|
|
67
|
+
|
|
68
|
+
<!-- markdownlint-enable MD033 -->
|
|
69
|
+
|
|
70
|
+
Fastango is a `uv`-first CLI for generating FastAPI projects with polished terminal flows,
|
|
71
|
+
safe AI-assisted planning, selectable templates, and a growing integration catalog.
|
|
72
|
+
|
|
73
|
+
It helps teams start a serious FastAPI codebase quickly without copying random boilerplate,
|
|
74
|
+
hardcoding secrets, or letting an AI write unchecked files.
|
|
75
|
+
|
|
76
|
+
## Why Fastango
|
|
77
|
+
|
|
78
|
+
| Need | What Fastango Gives You |
|
|
79
|
+
| --- | --- |
|
|
80
|
+
| Start a FastAPI app quickly | `simple` and `mvc` templates with settings, routes, tests, README, and `llms.txt`. |
|
|
81
|
+
| Add common infrastructure | A searchable catalog for auth, billing, databases, queues, storage, observability, AI, deployment, and dev tools. |
|
|
82
|
+
| Generate from product ideas | `fastango generate "a starter MVP"` maps prompts to supported templates, skills, presets, and integrations. |
|
|
83
|
+
| Keep generation safe | The generator only uses Fastango-supported tools and validates provider suggestions before writing files. |
|
|
84
|
+
| Work like modern Python teams | Generated projects use `uv`, Ruff, pytest, typed settings, and clear next-step commands. |
|
|
85
|
+
|
|
86
|
+
## Highlights
|
|
87
|
+
|
|
88
|
+
- Branded interactive terminal playground when you run `uvx fastango`.
|
|
89
|
+
- Manual project creation with repeatable flags for CI and documentation.
|
|
90
|
+
- Constrained AI generator for prompt-first FastAPI scaffolding.
|
|
91
|
+
- Live model discovery for Anthropic and OpenAI API keys.
|
|
92
|
+
- Curated presets for starter APIs, SaaS apps, AI APIs, data APIs, and production setups.
|
|
93
|
+
- Generated `llms.txt` so AI assistants understand the project conventions.
|
|
94
|
+
- Validation for integration requirements, conflicts, unsupported tools, and unsafe provider output.
|
|
95
|
+
|
|
96
|
+
## Install
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
uv tool install fastango
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
During local development:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
uv sync --all-groups
|
|
106
|
+
uv run fastango --help
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Quick Start
|
|
110
|
+
|
|
111
|
+
Run Fastango with no subcommand to open the terminal playground:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
uvx fastango
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
You can also launch the playground explicitly:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
fastango playground
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Create a project without prompts:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
fastango create billing-api \
|
|
127
|
+
--style mvc \
|
|
128
|
+
--python 3.12 \
|
|
129
|
+
--preset saas \
|
|
130
|
+
--integration openapi \
|
|
131
|
+
--integration authx \
|
|
132
|
+
--integration stripe \
|
|
133
|
+
--with-docker \
|
|
134
|
+
--no-interactive
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Run the generated app:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
cd billing-api
|
|
141
|
+
uv sync
|
|
142
|
+
cp .env.example .env
|
|
143
|
+
uv run fastapi dev app/main.py
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Generate From A Prompt
|
|
147
|
+
|
|
148
|
+
Fastango can infer a constrained FastAPI scaffold from a natural-language prompt.
|
|
149
|
+
It does not write arbitrary LLM code directly to disk. It converts your prompt into a typed
|
|
150
|
+
plan made from supported templates, skills, presets, and integrations.
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
fastango generate "a starter MVP with auth, billing, email, analytics and secure webhooks"
|
|
154
|
+
fastango generate "AI SaaS with vector search" --dry-run --json
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Optional provider enrichment is available when configured:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
fastango generate "marketplace MVP with billing and uploads" --provider anthropic
|
|
161
|
+
fastango generate "AI SaaS with vector search" --provider openai --model gpt-4.1-mini
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Provider output is validated against the same supported catalog before any files are written.
|
|
165
|
+
Unsupported requests are kept as `not_generated` notes in the preview.
|
|
166
|
+
|
|
167
|
+
## Model Discovery
|
|
168
|
+
|
|
169
|
+
If the matching API key is set, Fastango asks the provider which models your key can access.
|
|
170
|
+
If no key is available, it falls back to a curated offline list.
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
fastango models
|
|
174
|
+
fastango models --provider anthropic
|
|
175
|
+
fastango models --provider openai --json
|
|
176
|
+
fastango models --provider openai --static
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
| Provider | Environment Variable | Model Source |
|
|
180
|
+
| --- | --- | --- |
|
|
181
|
+
| Anthropic | `ANTHROPIC_API_KEY` | Live `/v1/models` discovery with curated fallback. |
|
|
182
|
+
| OpenAI | `OPENAI_API_KEY` | Live `/v1/models` discovery with curated fallback. |
|
|
183
|
+
|
|
184
|
+
## Templates
|
|
185
|
+
|
|
186
|
+
| Template | Best For | Includes |
|
|
187
|
+
| --- | --- | --- |
|
|
188
|
+
| `simple` | Small APIs, internal services, demos, first FastAPI apps. | `app/main.py`, routes, schemas, settings, tests, README, `.env.example`, `llms.txt`. |
|
|
189
|
+
| `mvc` | SaaS apps, production APIs, larger teams, integration-heavy projects. | API routes, core settings, services, repositories, schemas, tests, README, `.env.example`, `llms.txt`. |
|
|
190
|
+
|
|
191
|
+
## Presets
|
|
192
|
+
|
|
193
|
+
| Preset | Purpose | Typical Stack |
|
|
194
|
+
| --- | --- | --- |
|
|
195
|
+
| `api-starter` | A clean FastAPI baseline. | OpenAPI, tests, CORS, Ruff, pre-commit. |
|
|
196
|
+
| `saas` | Product-ready SaaS API. | AuthX, Stripe, Postgres, Redis, Resend, PostHog, Sentry, Docker. |
|
|
197
|
+
| `ai-api` | AI or RAG-ready backend. | OpenAI, Anthropic, pgvector, Postgres, Redis, tests, Docker. |
|
|
198
|
+
| `data-api` | Data-heavy API with workers. | Postgres, Alembic, Redis, Celery, Prometheus, OpenTelemetry. |
|
|
199
|
+
| `production` | Production hardening. | Docker, GitHub Actions, security headers, Sentry, Prometheus, health checks. |
|
|
200
|
+
|
|
201
|
+
## Integration Catalog
|
|
202
|
+
|
|
203
|
+
List, filter, search, and inspect integrations:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
uv run fastango integrations
|
|
207
|
+
uv run fastango integrations --category database
|
|
208
|
+
uv run fastango integrations --search vector
|
|
209
|
+
uv run fastango integrations --presets
|
|
210
|
+
uv run fastango integrations --json
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
| Category | Examples |
|
|
214
|
+
| --- | --- |
|
|
215
|
+
| Auth and security | AuthX, FastAPI Users, OAuth, JWT, CORS, rate limiting, CSRF, security headers, roles, API keys. |
|
|
216
|
+
| Databases and ORM | Postgres, SQLite, MySQL, MongoDB, SQLModel, Tortoise, Alembic, Supabase, pgvector. |
|
|
217
|
+
| Cache and jobs | Redis, Celery, Dramatiq, ARQ, RQ, APScheduler, FastAPI background tasks. |
|
|
218
|
+
| SaaS and payments | Stripe, Paddle, Polar, Lemon Squeezy, subscriptions, customer portal, Resend, PostHog, Sentry. |
|
|
219
|
+
| Storage | S3, Cloudflare R2, Google Cloud Storage, local files, Pillow, uploads. |
|
|
220
|
+
| AI and search | OpenAI, Anthropic, Ollama, LangChain, LlamaIndex, Qdrant, Pinecone, Weaviate, Elasticsearch. |
|
|
221
|
+
| Observability | OpenTelemetry, Prometheus, Structlog, Logfire, health checks, audit logs. |
|
|
222
|
+
| API protocols | OpenAPI, GraphQL, WebSockets, SSE, signed webhooks, versioning. |
|
|
223
|
+
| Deployment and dev tools | Docker, Compose overlays, Kubernetes, GitHub Actions, pre-commit, Ruff, mypy, pytest, Dependabot. |
|
|
224
|
+
|
|
225
|
+
## Generation Skills
|
|
226
|
+
|
|
227
|
+
Skills are internal, allowlisted generation capabilities. They map product intents to supported
|
|
228
|
+
Fastango templates and integrations.
|
|
229
|
+
|
|
230
|
+
| Skill | What It Builds |
|
|
231
|
+
| --- | --- |
|
|
232
|
+
| `saas-mvp` | Auth, teams, subscriptions, billing provider, email, analytics, monitoring. |
|
|
233
|
+
| `secure-api` | CORS, security headers, rate limiting, signed webhooks, API keys, secure settings. |
|
|
234
|
+
| `ai-api` | LLM provider, vector store, RAG-ready services, cache, background jobs. |
|
|
235
|
+
| `marketplace` | Users, teams, payments, uploads, webhooks, audit logs. |
|
|
236
|
+
| `crud-api` | Database, CRUD routes, pagination, filters, tests. |
|
|
237
|
+
| `production-api` | Docker, GitHub Actions, health checks, observability, dependency hygiene. |
|
|
238
|
+
|
|
239
|
+
## Safety Model
|
|
240
|
+
|
|
241
|
+
| Rule | Why It Matters |
|
|
242
|
+
| --- | --- |
|
|
243
|
+
| No arbitrary raw code from providers | LLMs can suggest supported IDs, but Fastango writes files only through templates and integration hooks. |
|
|
244
|
+
| Secrets stay in settings and `.env.example` | Generated code avoids hardcoded tokens, API keys, and webhook secrets. |
|
|
245
|
+
| Registry validation before writes | Presets, aliases, integration requirements, and conflicts are resolved before the filesystem is touched. |
|
|
246
|
+
| Unsupported tech becomes a note | Requests for unsupported frameworks are shown in previews instead of silently generated. |
|
|
247
|
+
|
|
248
|
+
## Development
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
uv sync --all-groups
|
|
252
|
+
uv run pytest
|
|
253
|
+
uv run ruff check .
|
|
254
|
+
uv run mypy fastango
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## Status
|
|
258
|
+
|
|
259
|
+
Fastango is early and evolving quickly. The current focus is a great terminal experience,
|
|
260
|
+
a reliable integration catalog, and safe prompt-to-FastAPI scaffolding.
|