Skip to content

pixano.app.main

create_app(settings=Settings())

Run Pixano app

Parameters:

Name Type Description Default
settings Settings

App settings

Settings()

Returns:

Type Description
FastAPI

Pixano app

Source code in pixano/app/main.py
def create_app(settings: Settings = Settings()) -> FastAPI:
    """Run Pixano app

    Args:
        settings (Settings): App settings

    Returns:
        FastAPI: Pixano app
    """

    # Create app
    app = FastAPI()
    app.add_middleware(
        CORSMiddleware,
        allow_credentials=True,
        allow_methods=["*"],
        allow_headers=["*"],
    )

    # Mount folders
    if isinstance(settings.data_dir, S3Path):
        # If S3, mount models parent folder
        # Check if folder exists
        if not settings.model_dir.exists():
            raise FileNotFoundError(
                f"Local model directory '{settings.model_dir.absolute()}' not found"
            )
        # Mount
        app.mount(
            "/data",
            StaticFiles(directory=settings.model_dir.parent),
            name="data",
        )
    else:
        # If local, mount datasets folder with models subfolder
        # Check if folder exists
        if not settings.data_dir.exists():
            raise FileNotFoundError(
                f"Dataset library '{settings.data_dir.absolute()}' not found"
            )
        # Create models subfolder in case it doesn't exist yet
        settings.model_dir.mkdir(exist_ok=True)
        # Mount
        app.mount(
            "/data",
            StaticFiles(directory=settings.data_dir),
            name="data",
        )

    app.include_router(datasets.router)
    app.include_router(items.router)
    app.include_router(models.router)

    add_pagination(app)
    return app