1. vaxXxa

    04.12.2010

    2 ↑
    0 ↓
    Хочу вот создать универсальный валидатор для проверки размеров рисунка при загрузке.
    Что-то типо такого:
    ImageDimensionValidator(width=150, height=300)
    Если какой-то параметр пропущен, то значит по нему не проверяется. Все это уже сделал.
    Теперь хочется сделать его универсальным, чтобы проверял не только точные размеры, но и меньше, больше, не меньше, не больше.

    Как бы Вы решали такую задачу?
    Тоесть возможные варианты: =, >, <, >=, <=, None (по умолчанию) - это отдельно для ширины и высоты.
    Вопрос: как красиво передать эти параметры валидатору?
    Может сделать, как джанго делает в фильтрах кверисета:
    ImageDimensionValidator(width__gte=150, height__gt=300)
    и т.п.?
  2. у Luke Plant подглядел забавный хак:

    class FuzzyInt(int):
        def __new__(cls, lowest, highest):
            obj = super(FuzzyInt, cls).__new__(cls, highest)
            obj.lowest = lowest
            obj.highest = highest
            return obj
    
        def __eq__(self, other):
            return other >= self.lowest and other <= self.highest
    
        def __repr__(self):
            return "[%d, %d]" % (self.lowest, self.highest)
    

    И потом уже готовый валидатор даже менять не нужно:

    ImageDimensionValidator(width=FuzzyInt(100, 200), height=300)
    

    Не уверен, правда, что это такая уж хорошая идея для API)

  3. vaxXxa

    04.12.2010

    0 ↑
    0 ↓
    Спасибо, интересно! Взял на заметку...

    Правда, думаю, что диапазон будет просто задаваться двумя валидаторами, по типу:
    validators = [ImageDimensionValidator(width__gte=100, height=300),
    ImageDimensionValidator(width__lte=200)]
    Немного, наверное, избыточно, но зато все просто и ясно.
    Какие есть еще идеи?

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.