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)