A lightweight CLI tool to scaffold fastapi projects, run migrations and migrate migration files.
Create and activate a virtual environment and then install fastapi-gene:
$ pip install fastapi-gene
Here are some examples of what fastapi_gene can do:
It creates a fastapi project named main
along with it's subfolder models
,schema
,api
and file app.py
inside it.
main/
├── app.py
└── main/
├── __init__.py
├── api/
│ ├── __init__.py
│ └── item.py
├── models/
│ └── __init__.py
└── schema/
├── __init__.py
└── item.py
To run the project just change path to main
and run fastapi dev
.now, you can navigate to http://127.0.0.1:8000/docs/ to see autogenerated items
endpoints but make sure to install fastapi
on your enviroment.😊
It creates file and add user table on it as well as map endpoint into your project automatically from fastapi-users[sqlalchemy]
module but project structure should be maintained to work as smoothly.
- Supported modules are:
fastapi-users[sqlalchemy]
fastapi-users[sqlalchemy,oauth]
fastapi-users[beanie]
fastapi-users[beanie,oauth]
Now, File structure changed to
main/
├── app.py
└── main/
├── __init__.py
├── api/
│ ├── __init__.py
│ |── item.py
| └── users.py #created
|
├── models/
│ |── __init__.py
| |── db.py #created
| └── users.py #created
|
└── schema/
├── __init__.py
|── item.py
└── users.py #created
// To reflect users endpoint on project include `user_router` in `app.py` as
# app.py
from fastapi import FastAPI
from main.api import item_router,user_router
app = FastAPI()
app.include_router(item_router)
app.include_router(user_router)
Migrations directory wasnot created to store migrations file. To create that, you should run above command in your terminal and it creates migrations directory named alembic
. It works same as alembic init alembic
but you can also provide custom name as fastapi_gene makemigrations init --name=migrations
main/
├── app.py
├── alembic/... #created
├── alembic.ini #created
└── main/...
// some manual setup
# main/models/__init__.py
from .db import Base
# alembic/env.py
from main.models import Base
...
target_metadata = Base.metadata
config.set_main_option("sqlalchemy.url","sqlite:///./fastgen.db")
After importing Base
from user model and sqlalchemy_url
inside env.py of migrations directory, you can run this command which will create the migration file with named randomnumber_create_user_tables.py
inside version directory of migrations. It works same as alembic revision --autogenerate -m "create user tables"
.
It applies all migrations upto latest version. It works same as alembic upgrade head
. By default, it passes head
revision but you can provide desire revision as fastapi_gene migrate up revision_id
It reverts all migrations, bringing the database back to its initial empty state. It works same as alembic downgrade base
. By default, it passes base
revision but you can provide desire revision as fastapi_gene migrate down revision_id
command
: To know all about the commandsfastapi_gene --help
specific-command
: For the information of specific commandsfastapi_gene "command_name" --help