Spaces:
Running
Running
| from typing import Optional | |
| from fastapi import Request, Response | |
| from pydantic.color import Color | |
| from hibiapi.api.qrcode import ( | |
| COLOR_BLACK, | |
| COLOR_WHITE, | |
| Config, | |
| HostUrl, | |
| QRCodeLevel, | |
| QRInfo, | |
| ReturnEncode, | |
| ) | |
| from hibiapi.utils.routing import SlashRouter | |
| from hibiapi.utils.temp import TempFile | |
| QR_CALLBACK_TEMPLATE = ( | |
| r"""function {fun}(){document.write('<img class="qrcode" src="{url}"/>');}""" | |
| ) | |
| __mount__, __config__ = "qrcode", Config | |
| router = SlashRouter(tags=["QRCode"]) | |
| async def qrcode_api( | |
| request: Request, | |
| *, | |
| text: str, | |
| size: int = 200, | |
| logo: Optional[HostUrl] = None, | |
| encode: ReturnEncode = ReturnEncode.raw, | |
| level: QRCodeLevel = QRCodeLevel.MEDIUM, | |
| bgcolor: Color = COLOR_BLACK, | |
| fgcolor: Color = COLOR_WHITE, | |
| fun: str = "qrcode", | |
| ): | |
| qr = await QRInfo.new( | |
| text, size=size, logo=logo, level=level, bgcolor=bgcolor, fgcolor=fgcolor | |
| ) | |
| qr.url = TempFile.to_url(request, qr.path) # type:ignore | |
| """function {fun}(){document.write('<img class="qrcode" src="{url}"/>');}""" | |
| return ( | |
| qr | |
| if encode == ReturnEncode.json | |
| else Response( | |
| content=qr.json(), | |
| media_type="application/json", | |
| headers={"Location": qr.url}, | |
| status_code=302, | |
| ) | |
| if encode == ReturnEncode.raw | |
| else Response( | |
| content=f"{fun}({qr.json()})", | |
| media_type="text/javascript", | |
| ) | |
| if encode == ReturnEncode.jsc | |
| else Response( | |
| content="function " | |
| + fun | |
| + '''(){document.write('<img class="qrcode" src="''' | |
| + qr.url | |
| + """"/>');}""", | |
| media_type="text/javascript", | |
| ) | |
| ) | |