import sys from typing import List, Optional, Union from engorgio import engorgio from rich.console import Console import typer from learn_sql_model.config import Config, get_config from learn_sql_model.factories.{{modelname.lower()}} import {{modelname}}Factory from learn_sql_model.factories.pet import PetFactory from learn_sql_model.models.{{modelname.lower()}} import ( {{modelname}}, {{modelname}}Create, {{modelname}}Delete, {{modelname}}Read, {{modelname}}Update, ) {{modelname.lower()}}_app = typer.Typer() @{{modelname.lower()}}_app.callback() def {{modelname.lower()}}(): "model cli" @{{modelname.lower()}}_app.command() @engorgio(typer=True) def get( id: Optional[int] = typer.Argument(default=None), config: Config = None, ) -> Union[{{modelname}}, List[{{modelname.lower()}}]]: "get one {{modelname.lower()}}" config.init() {{modelname.lower()}} = {{modelname}}Read.get(id=id, config=config) Console().print({{modelname.lower()}}) return {{modelname.lower()}} @{{modelname.lower()}}_app.command() @engorgio(typer=True) def list( where: Optional[str] = None, config: Config = None, offset: int = 0, limit: Optional[int] = None, ) -> Union[{{modelname}}, List[{{modelname.lower()}}]]: "get one {{modelname.lower()}}" {{modelname.lower()}} = {{modelname}}Read.list(config=config, where=where, offset=offset, limit=limit) Console().print({{modelname.lower()}}) return {{modelname.lower()}} @{{modelname.lower()}}_app.command() @engorgio(typer=True) def create( {{modelname.lower()}}: {{modelname}}Create, config: Config = None, ) -> {{modelname}}: "read all the {{modelname.lower()}}s" # config.init() {{modelname.lower()}} = {{modelname.lower()}}.post(config=config) Console().print({{modelname.lower()}}) return {{modelname.lower()}} @{{modelname.lower()}}_app.command() @engorgio(typer=True) def update( {{modelname.lower()}}: {{modelname}}Update, config: Config = None, ) -> {{modelname}}: "read all the {{modelname.lower()}}s" {{modelname.lower()}} = {{modelname.lower()}}.update(config=config) Console().print({{modelname.lower()}}) return {{modelname.lower()}} @{{modelname.lower()}}_app.command() @engorgio(typer=True) def delete( {{modelname.lower()}}: {{modelname}}Delete, config: Config = None, ) -> {{modelname}}: "read all the {{modelname.lower()}}s" # config.init() {{modelname.lower()}} = {{modelname.lower()}}.delete(config=config) return {{modelname.lower()}} @{{modelname.lower()}}_app.command() @engorgio(typer=True) def populate( {{modelname.lower()}}: {{modelname}}, n: int = 10, ) -> {{modelname}}: "read all the {{modelname.lower()}}s" config = get_config() if config.env == "prod": Console().print("populate is not supported in production") sys.exit(1) for {{modelname.lower()}} in {{modelname}}Factory().batch(n): pet = PetFactory().build() {{modelname.lower()}}.pet = pet Console().print({{modelname.lower()}}) {{modelname.lower()}}.post(config=config)