Source code for geochemistrypi.start_dash_pipeline

import os

import uvicorn
from auth import router as auth_router
from auth import sql_models as auth_models
from data_mining import router as data_mining_router
from data_mining.dash_pipeline import dash_pipeline
from database import engine
from dotenv import load_dotenv
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.middleware.wsgi import WSGIMiddleware
from fastapi.openapi.utils import get_openapi

# Load environment variables
load_dotenv()

# Create tables in database
auth_models.Base.metadata.create_all(bind=engine)

# Create FastAPI app
app = FastAPI()

# Add routers
app.include_router(data_mining_router.router)
app.include_router(auth_router.router)

# Get the allowed origins from the environment
allowed_origins = os.getenv("ALLOWED_ORIGINS", "").split(",")

# Add CORS middleware
app.add_middleware(
    CORSMiddleware,
    allow_origins=allowed_origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)


[docs] @app.get("/", tags=["root"]) async def read_root() -> dict: return {"message": "Welcome to Geochemistry Pi!"}
# Add Dash app dash_prefix = os.getenv("DASH_REQUESTS_PATHNAME_PREFIX", "/dash/") dash_app = dash_pipeline(requests_pathname_prefix=dash_prefix) app.mount(dash_prefix, WSGIMiddleware(dash_app.server)) api_docs = """ Geochemistry π is a Python framework for data-driven geochemistry discovery. It provides an extendable tool and one-stop shop for geochemical data analysis on tabular data. ### Authentication This API uses OAuth2 with password flow, so you will need to create a user first by using the `/auth/register` endpoint. After creating a user, you can login using the `/auth/login` endpoint to get an access token. You can then use the access token to access the other endpoints. When clicking on the `Authorize` button, enter the following credentials: username: registered email address <br> password: registered password """
[docs] def custom_openapi(): # Override OpenAPI schema to change field name in Swagger UI if app.openapi_schema: return app.openapi_schema openapi_schema = get_openapi( title="Geochemistry Pi", version="0.2.1", description=api_docs, routes=app.routes, ) # openapi_schema["info"]["x-logo"] = { # "url": "https://raw.githubusercontent.com/GeochemistryPi/geochemistrypi/master/docs/logo.png" # } app.openapi_schema = openapi_schema return app.openapi_schema
# Override OpenAPI schema app.openapi = custom_openapi if __name__ == "__main__": backend_host = os.getenv("BACKEND_HOST", "0.0.0.0") backend_port = int(os.getenv("BACKEND_PORT", 8000)) # Run the app uvicorn.run("start_dash_pipeline:app", host=backend_host, port=backend_port, reload=True)