"""Flask Request Utils. Utils for parsing request values. """ from collections import namedtuple import flask from vectororder.constants import pagination Pagination = namedtuple("Pagination", ["offset", "limit"]) def get_pagination(request: flask.Request) -> Pagination: """Parse pagination information. Args: request (Flask.request): The request object. Returns: Pagination (namedtuple): pagination information. """ page_offset = request.args.get("page_offset") or pagination.PAGE_OFFSET_DEFAULT page_offset = _get_int(page_offset, pagination.PAGE_OFFSET_DEFAULT) page_limit = request.args.get("page_limit") or pagination.PAGE_LIMIT_DEFAULT page_limit = _get_int(page_limit, pagination.PAGE_LIMIT_DEFAULT) return Pagination(page_offset, page_limit) def _get_int(value: int | str, default_value: int) -> int: """Convert value to int. Args: value (str or int): The value to convert to int. default_value (int): The default value to use if value cannot be converted. Returns: int: value converted to int. """ try: result = int(value) if result < 0: raise ValueError return result except ValueError: return default_value