from typing import Optional from cpl_query.exceptions import ArgumentNoneException, ExceptionArgument from cpl_query.extension.iterable_abc import IterableABC def single_query(_list: IterableABC) -> any: if _list is None: raise ArgumentNoneException(ExceptionArgument.list) if len(_list) > 1: raise Exception('Found more than one element') elif len(_list) == 0: raise Exception('Found no element') return _list[0] def single_or_default_query(_list: IterableABC) -> Optional[any]: if _list is None: raise ArgumentNoneException(ExceptionArgument.list) if len(_list) > 1: raise Exception('Index out of range') elif len(_list) == 0: return None return _list[0]