from sqlalchemy import nullslast, asc, desc from utils.exceptions import ValidationError def sorting_expression(sort_keys: dict, sorting_option: str): sort = sorting_option sort_dir = asc if sort.startswith("-"): sort = sort[1:] sort_dir = desc valid_options = ", ".join([k for k in sort_keys.keys()]) if not sort or sort not in valid_options: raise ValidationError(f"Invalid sort criterion. Valid options are: {valid_options}.") return map(lambda x: nullslast(sort_dir(x)), sort_keys[sort])