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", | |
) | |
) | |