_decorators.py 533 Bytes
from functools import wraps

from fastapi import HTTPException
from sqlalchemy.exc import NoResultFound


def not_found(fn):
	@wraps(fn)
	def wrapper(*args, **kwargs):
		try:
			value = fn(*args, **kwargs)
		except NoResultFound as exc:
			raise HTTPException(status_code=404, detail='Not found') from exc

		if value is None:
			raise HTTPException(status_code=404, detail='Not found')

		if isinstance(value, (list, dict)) and not value:
			raise HTTPException(status_code=404, detail='Not found')

		return value

	return wrapper