<reponame>Turall/example-code-2e
"""
uvicorn main:app --reload
"""

import pathlib
from unicodedata import name

from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from pydantic import BaseModel

from charindex import InvertedIndex

app = FastAPI(
    title='Mojifinder Web',
    description='Search for Unicode characters by name.',
)

class CharName(BaseModel):
    char: str
    name: str

def init(app):
    app.state.index = InvertedIndex()
    static = pathlib.Path(__file__).parent.absolute() / 'static'
    with open(static / 'form.html') as fp:
        app.state.form = fp.read()

init(app)

@app.get('/', response_class=HTMLResponse, include_in_schema=False)
def form():
    return app.state.form

@app.get('/search', response_model=list[CharName])
async def search(q: str):
    chars = app.state.index.search(q)
    return [{'char': c, 'name': name(c)} for c in chars]

"""
uvicorn main:app --reload
"""

import pathlib
from unicodedata import name

from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from pydantic import BaseModel

from charindex import InvertedIndex

app = FastAPI(
    title='Mojifinder Web',
    description='Search for Unicode characters by name.',
)

class CharName(BaseModel):
    char: str
    name: str

def init(app):
    app.state.index = InvertedIndex()
    static = pathlib.Path(__file__).parent.absolute() / 'static'
    with open(static / 'form.html') as fp:
        app.state.form = fp.read()

init(app)

@app.get('/', response_class=HTMLResponse, include_in_schema=False)
def form():
    return app.state.form

@app.get('/search', response_model=list[CharName])
async def search(q: str):
    chars = app.state.index.search(q)
    return [{'char': c, 'name': name(c)} for c in chars]
uvicorn main:app --reload