Reputation: 33
I am a newbie in RESTful API...
so I am trying to deploy two servers (client and model). The main idea is :
Currently, I am strugling with the client server part, how to do a post to another server ?
# Define a flask app
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="./templates")
origins = ["*"]
methods = ["*"]
headers = ["*"]
app.add_middleware(
CORSMiddleware,
allow_origins = origins,
allow_credentials = True,
allow_methods = methods,
allow_headers = headers
)
@app.get('/', response_class=HTMLResponse)
def root(request: Request):
return templates.TemplateResponse("index.html", {"request": request})
#render_template('index.html')
#here the client will upload his image to the server
#and then encrypt it in the same button
@app.post('/encrypt', status_code=200)
async def upload_img(f: UploadFile = File(...)):
ret = {}
logger.debug(f)
#base_path = "uploads"
# filename = "predict.jpg"
f.filename = "predict.jpg"
base_path = os.path.dirname(__file__)
file_path = os.path.join(base_path, 'uploads',secure_filename(f.filename))
os.makedirs(base_path, exist_ok=True)
try:
with open(file_path, "wb") as buffer:
shutil.copyfileobj(f.file, buffer)
except Exception as e:
print("Error: {}".format(str(e)))
image_info = {"filename": f.filename, "image": f}
#preprocess image
plain_input = load_input(f)
#create a public context and drop sk
ctx, sk = create_ctx()
#encrypt
enc_input = prepare_input(ctx, plain_input)
enc_input_serialize = enc_input.serialize()
# la tu dois faire un post au serveur
return sk
class inference_param(BaseModel):
context : bytes
enc_input : bytes
@app.post("/data") #send data to the model server
async def send_data(data : inference_param):
return data
Upvotes: 3
Views: 1372
Reputation: 7260
Since your endpoint is asynchronous you can use the asynchronous HTTP library like aiohttp or httpx to make the request.
If you don't want your clients of the client server to wait until the image is uploaded you can also use Background Tasks.
Upvotes: 3