Изменение перечислений и спецификации OpenAPI во время выполненияPython

Программы на Python
Ответить
Anonymous
 Изменение перечислений и спецификации OpenAPI во время выполнения

Сообщение Anonymous »

У меня есть приложение FastAPI, передающее данные в другие системы. Эти данные классифицированы (для примера) по разным производителям автомобилей (например, VW, Skoda, ...). В нашем приложении есть класс, который просматривает нашу файловую базу и проверяет, какие производители доступны в данный момент, и генерирует при запуске FastAPI соответствующие модели перечисления. Эти модели затем используются в качестве объявления параметров (и, следовательно, в openAPI.json), так что производителей можно выбирать в раскрывающемся меню пользовательского интерфейса SwaggerUI/OpenAPI.
Я хочу иметь возможность периодически «перезагружать/перезагружать» файловую базу, поскольку я постоянно добавляю в набор данных новых производителей. Однако мне всегда нужно перезапускать FastAPI, иначе модели не будут генерироваться заново.
Ниже вы найдете отрывок моего кода.

Код: Выделить всё

class carHandler:

...

def getCarModel(self, type) -> list:
tempArr = []
for manufacturer in self.manufacturers:
if ((manufacturer.type in type or type == ["all"]):
tempArr.append((manufacturer.name, manufacturer.name))
tempArrSorted = sorted(tempArr, key=lambda x: x[0])
return enum.Enum(f'Available {type}', dict(tempArrSorted))

cH = carHandler()
allowedTruckModel = cH.getCarModel(["trucks"])

...

@self.get("/manufacturer/{name}", tags=["api"])
async def get_truck_manufacturer_information(name: allowedTruckModel) -> models.outputModel:
return endpoint_logic.get_manufacturer(name)
Вот что я пробовал до сих пор:

[*]напрямую использовать вызов функции в качестве параметра, например,
Вот что я пробовал:

напрямую использовать вызов функции в качестве параметра, например,
р>

Код: Выделить всё

async def get_truck_manufacturer_information(name: cH.getCarModel(["trucks"]))
результат

Код: Выделить всё

Call expression not allowed in type expressionPylancereportInvalidTypeForm
[*]обновите разрешенную модельTruckModel, которая не распространяется на FastAPI.

[*]Посмотрел возможность перезапуска/обновления FastAPI:

Код: Выделить всё

@self.get("/updateCH", include_in_schema=False)
async def updateCH(request: Request):
cH.update()
reloadKeys()
updateModels()
request.app.openapi_schema = None
request.app.setup()
return f"success"
На приложение не повлияло.



Подробнее здесь: https://stackoverflow.com/questions/791 ... at-runtime
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»