コード例 #1
0
ファイル: offset.py プロジェクト: amatino-code/nozomi
    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)
コード例 #2
0
ファイル: order_by.py プロジェクト: amatino-code/nozomi
    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
コード例 #3
0
    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)
コード例 #4
0
ファイル: offset.py プロジェクト: amatino-code/nozomi
    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)
コード例 #5
0
    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)
コード例 #6
0
    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')
コード例 #7
0
ファイル: order_by.py プロジェクト: amatino-code/nozomi
    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]