create fastapi

This commit is contained in:
Waylon Walker 2024-03-01 10:23:13 -06:00
parent a21dbb08d4
commit f42e8e4807
No known key found for this signature in database
GPG key ID: 66E2BF2B4190EFE4
6 changed files with 40 additions and 43 deletions

View file

@ -24,7 +24,7 @@ classifiers = [
"Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy", "Programming Language :: Python :: Implementation :: PyPy",
] ]
dependencies = [ 'rich', 'sqlmodel', 'typer', 'iterfzf'] dependencies = [ 'rich', 'sqlmodel', 'typer', 'iterfzf', 'fastapi', 'uvicorn']
[project.urls] [project.urls]
Documentation = "https://github.com/waylonwalker/sqlmodel-base#readme" Documentation = "https://github.com/waylonwalker/sqlmodel-base#readme"

View file

@ -1,13 +1,14 @@
import json
from typing import Optional from typing import Optional
import typer import typer
import uvicorn
from fastapi import APIRouter, FastAPI
from iterfzf import iterfzf from iterfzf import iterfzf
from pydantic import BaseModel, validator from pydantic import BaseModel
from pydantic_core._pydantic_core import PydanticUndefinedType from pydantic_core._pydantic_core import PydanticUndefinedType
from rich.console import Console from rich.console import Console
from sqlalchemy import func from sqlalchemy import func
from sqlmodel import Field, Session, SQLModel, create_engine, select from sqlmodel import Session, SQLModel, select
from sqlmodel_base.database import get_engine from sqlmodel_base.database import get_engine
@ -177,6 +178,31 @@ class Base(SQLModel):
item.update() item.update()
console.print(item) console.print(item)
@classmethod
def api(cls):
api = FastAPI(
title="FastAPI",
version="0.1.0",
docs_url=None,
redoc_url=None,
openapi_url=None,
# openapi_tags=tags_metadata,
# dependencies=[Depends(set_user), Depends(set_prefers)],
)
api.include_router(cls.router())
return api
@classmethod
def router(cls):
router = APIRouter()
router.add_api_route("/get/", cls.get, methods=["GET"])
router.add_api_route("/list/", cls.all, methods=["GET"])
router.add_api_route("/create/", cls.interactive_create, methods=["POST"])
router.add_api_route("/update/", cls.interactive_update, methods=["PUT"])
return router
@classmethod @classmethod
@property @property
def cli(cls): def cli(cls):
@ -206,37 +232,16 @@ class Base(SQLModel):
) )
) )
@app.command()
def api():
cls.run_api()
@app.command() @app.command()
def update(): def update():
console.print(cls.interactive_update()) console.print(cls.interactive_update())
return app return app
@classmethod
# replace with alembic commands def run_api(cls):
def create_db_and_tables(): uvicorn.run(cls.api(), host="127.0.0.1", port=8000)
SQLModel.metadata.create_all(engine)
def create_heroes():
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson").create()
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador").create()
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48).create()
def page_heroes():
next_page = 1
while next_page:
page = Hero.get_page(page=next_page, page_size=2)
console.print(page)
next_page = page.next_page
def main():
create_db_and_tables()
create_heroes()
page_heroes()
if __name__ == "__main__":
main()

View file

@ -1,6 +1,6 @@
from functools import lru_cache from functools import lru_cache
from sqlmodel import Field, Session, SQLModel, create_engine, select from sqlmodel import Session, SQLModel, create_engine
sqlite_file_name = "database.db" sqlite_file_name = "database.db"
sqlite_url = f"sqlite:///{sqlite_file_name}" sqlite_url = f"sqlite:///{sqlite_file_name}"
@ -8,8 +8,6 @@ sqlite_url = f"sqlite:///{sqlite_file_name}"
@lru_cache @lru_cache
def get_engine(): def get_engine():
from sqlmodel_base.hero.models import Hero
from sqlmodel_base.team.models import Team
engine = create_engine(sqlite_url) engine = create_engine(sqlite_url)
SQLModel.metadata.create_all(engine) SQLModel.metadata.create_all(engine)

View file

@ -1,12 +1,8 @@
import json
import typer
from iterfzf import iterfzf
from rich.console import Console from rich.console import Console
from sqlmodel_base.database import get_engine from sqlmodel_base.database import get_engine
from sqlmodel_base.hero.models import Hero from sqlmodel_base.hero.models import Hero
from sqlmodel_base.team.models import Team
engine = get_engine() engine = get_engine()

View file

@ -1,9 +1,8 @@
from typing import Optional from typing import Optional
from pydantic import BaseModel, validator from pydantic import validator
from rich.console import Console from rich.console import Console
from sqlalchemy import func from sqlmodel import Field
from sqlmodel import Field, Session, SQLModel, create_engine, select
from sqlmodel_base.base import Base from sqlmodel_base.base import Base

View file

@ -1,6 +1,5 @@
from typing import Optional from typing import Optional
from rich.console import Console
from sqlmodel import Field from sqlmodel import Field
from sqlmodel_base.base import Base from sqlmodel_base.base import Base