def from_arguments(cls: Type[T], arguments: QueryString, min_value: int = 0) -> T: magnitude = arguments.parse_int(key='offset', min_value=min_value) return cls(magnitude)
def optionally_many_from_arguments( cls: Type[T], arguments: QueryString, available: Optional[Dict[str, T]] = None, key: str = 'order_by', fallback_to: Optional[T] = None) -> Optional[List[T]]: if available is None: if not isinstance(cls.available, dict): raise RuntimeError('implement .available order by values') available = cls.available values = arguments.parse_string(key).split(',') if values is None or len(values) < 1: return fallback_to parsed: List[T] = [] for term in values: if term not in available.keys(): raise BadRequest('Invalid {k} value. Valid values: {v}'.format( k=key, v=', '.join(available.keys()))) parsed.append(available[term]) continue return parsed
def from_arguments(cls: Type[T], arguments: QueryString, max_length: int = 64, min_length: int = 3, key: str = 'fragment') -> T: fragment = arguments.parse_string(key=key, max_length=max_length, min_length=min_length, allow_whitespace=True) return cls(fragment)
def optionally_from_arguments( cls: Type[T], arguments: QueryString, min_value: int = 0, fallback_value: Optional[int] = 0) -> Optional[T]: magnitude = arguments.optionally_parse_int(key='offset', min_value=min_value) if magnitude is not None: return cls(magnitude) if fallback_value is None: return None return cls(fallback_value)
def optionally_from_arguments(cls: Type[T], arguments: QueryString, max_length: int = 64, min_length: int = 3, fallback_to_wildcard: bool = False, key='fragment') -> Optional[T]: fragment = arguments.optionally_parse_string(key=key, max_length=max_length, min_length=min_length, allow_whitespace=True) if fragment is None and fallback_to_wildcard is False: return None if fragment is None and fallback_to_wildcard is True: return cls.with_wildcard() return cls(fragment)
def from_arguments(cls: Type[T], arguments: QueryString, default_to_descending: bool = False) -> T: order = arguments.optionally_parse_string(key='order', max_length=32) if order is None: if default_to_descending is False: raise BadRequest( 'Supply order=[ascending|descending] parameter') return cls(True) if order.lower() == 'ascending': return cls(True) if order.lower() == 'descending': return cls(False) raise BadRequest('Acceptable `order` values: ascending, descending')
def optionally_from_arguments( cls: Type[T], arguments: QueryString, available: Optional[Dict[str, T]] = None, key: str = 'order_by', fallback_to: Optional[T] = None) -> Optional[T]: if available is None: if not isinstance(cls.available, dict): raise RuntimeError('implement .available order by values') available = cls.available term = arguments.optionally_parse_string(key) if term is None: return fallback_to if term not in available.keys(): raise BadRequest('Invalid {k} value. Valid values: {v}'.format( k=key, v=', '.join(available.keys()))) return available[term]