Я пишу API функций Azure со множеством разных конечных точек со схожим внутренним поведением. Одним из основных шагов в каждой конечной точке является взятие каждого голого POST и анализ всех без исключения аргументов (поступающих в виде словаря) в пользовательский объект запроса, который я определяю, который в дальнейшем можно использовать для любого поведения функции. Каждый объект запроса ожидает, что в данных запроса будут присутствовать определенные ключи, и я вызываю исключения внутри объекта, чтобы направить поток программы в основной функции на ранний ответ с кодом ошибки.
Мой основной объект Вопрос в том, что мне нужно повторно использовать эти блоки try...кроме в каждой функции, поскольку я хочу, чтобы ответы были одинаковыми. Есть ли способ абстрагировать это до одного многоразового блока?Это пример того, как будет выглядеть одна конечная точка:
from requests import ShowUsersRequest
def my_endpoint(req: azure.functions.HttpRequest):
try:
wrapped_request = ShowUsersRequest(req)
except KeyError:
return func.HttpResponse('Request missing argument(s)', status_code=400)
except ValueError as e:
return func.HttpResponse(f'One or more request arguments was of invalid type. {e.args[0]}', status_code=400)
... # rest of function continues
И как будет выглядеть объект запроса:
# requests.py
class ShowUsersRequest:
def __init__(self, req: func.HttpRequest) -> None:
# KeyErrors would arise from a missing key in the params dict
self.identifier = req.params['account_identifier']
self.client_code = int(req.params['client_code'])
# raise ValueError to represent some kind of validation problem
if self.client_code < 0:
raise ValueError('Client code must be non-negative')
Подробнее здесь: https://stackoverflow.com/questions/786 ... -early-fun
Есть ли чистый способ обработки повторного использования try... кроме блоков, которые вызывают ранний возврат функции? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
WPF: В чем разница между try...finally и try..catch..finally в WPF, MVVM? [закрыто]
Anonymous » » в форуме C# - 0 Ответы
- 43 Просмотры
-
Последнее сообщение Anonymous
-