from fastapi import FastAPI, Response from escpos.printer import Dummy, Network import sys import json from pydantic import BaseModel from time import sleep app = FastAPI( title="Print Server FastAPI", description="Server that receive request for printing", version="0.0.1" ) class Info(BaseModel): content : str address : str def imprimir_ticket_de_prueba(data, address): d = data # Crea una instancia de la impresora ficticia printer = Network(str(address)) printer = Dummy() # Establece el tamaño de la fuente y otros formatos de impresión printer.set(font='a', align='center', bold=True, height=2, width=2) # Imprime el encabezado printer.text('========================\n') printer.set(align='center', bold=False, height=6, width=6) text = 'MESA: ' + str(d['table'] + "\n\n") printer.text(text) printer.set(align='left', height=6, width=6) for line in d["lines"]: if line['type'] != 'title': text = line['product'] +" "+str(line['quantity'])+"\n" printer.text(text) else: printer.set(align='left', bold=True, height=8, width=8) printer.text("\nPIZZA COMBINADA\n") # Corta el papel (solo para impresoras que soportan esta función) printer.cut() # Obtiene el contenido del ticket de prueba ticket_contenido = printer.output # Imprime el contenido en la consola sys.stdout.write(ticket_contenido.decode('utf-8')) @app.post("/order_kitchen") def print_ticket_file_kitchen(info : Info): print(info) info = dict(info) data = info["content"] data = json.loads(data.replace("'", "\"")) imprimir_ticket_de_prueba(data) message = "!Impresión Realizada!" return Response(content=message, status_code=200) @app.post("/order_bar") def print_ticket_file_bar(info : Info): info = dict(info) data = info["content"] data = json.loads(data.replace("'", "\"")) imprimir_ticket_de_prueba(data) message = "!Impresión Realizada!" return Response(content=message, status_code=200)