У меня есть пользовательский декоратор в flask API. Я выполняю некоторые проверки и затем вызываю функцию API, а затем получаю ответ от функции API в декораторе, который затем возвращается. Мне интересно, является ли хорошей / плохой практикой возвращать ответ от декоратора.
Я видел декоратор after_request
, который также возвращает ответ, поэтому мне интересно, может ли то же самое это можно сделать с помощью специального декоратора.
Пожалуйста, смотрите код ниже:
Декоратор:
def process_in_progress(process_name, auto_release=True):
def wrapper(func):
@functools.wraps(func)
def process_wrapper(*args, **kwargs):
try:
process_status = util.get_value_from_app_metadata(PROCESS_IN_PROGRESS)
if process_status is not None:
return Response(response=responses.response_process_in_progress(process_status), status=409)
logger.info('Setting process_in_progress')
db.insert_app_metadata(PROCESS_IN_PROGRESS, process_name)
response = func(*args, **kwargs)
if auto_release:
process_status = util.get_value_from_app_metadata(PROCESS_IN_PROGRESS)
if process_status is not None and process_status == process_name:
logger.info('Freeing up process_in_progress : ' + process_name)
db.delete_from_app_metadata(PROCESS_IN_PROGRESS)
return response
except Exception as e:
logger.exception(e)
return Response(response=GENERIC_RESPONSES['internal_server_error'], status=500)
return process_wrapper
return wrapper
API-функция:
@api.route("/api/v1/...", methods=['POST'])
@process_in_progress(process_name=PROCESS_KEY)
def my_api_function():
try:
perfor_some_action()
return Response(response=responses.API_RESPONSES['success'], status=200)
except Exception as e:
logger.exception(e)
return Response(response=responses.API_RESPONSES['exception'], status=500)
Пожалуйста, дайте мне знать, если есть какие-то путаницы. Спасибо