I'm trying to learn how to use the Fast API library. I'm trying to accept an array in the post using frozenset as the docs states, but it doesn't seem to work.
import logging
from fastapi import FastAPI, BackgroundTasks
from worker.celery_app import celery_app
log = logging.getLogger(__name__)
app = FastAPI()
def celery_on_message(body):
"""
Logs the initiation of the endpoint
"""
log.warn(body)
def background_on_message(task):
"""
logs the function when it is added to queue
"""
log.warn(task.get(on_message=celery_on_message, propagate=False))
@app.get("/")
async def root(stocks: frozenset, background_task: BackgroundTasks):
"""
:param stocks: stocks to be analyzed
:param background_task: initiate the tasks queue
:type background_task: starlette.background.BackgroundTasks
:return:
"""
task_name = None
# set correct task name based on the way you run the example
log.log(level=1, msg=f'{stocks}')
task_name = "app.app.worker.celery_worker.compute_stock_indicators"
task = celery_app.send_task(task_name, args=[stocks])
background_task.add_task(background_on_message, task)
return {"message": "Stocks analyzed"}
When I'm using the swagger docs to send a request:
curl -X GET "http://127.0.0.1:8000/?stocks=wix&stocks=amzn" -H "accept: application/json"
the response is:
{
"detail": [
{
"loc": [
"query",
"stocks"
],
"msg": "value is not a valid frozenset",
"type": "type_error.frozenset"
}
]
}