Обёртка для генератора, для фильтрации в стиле django ORM
a = Magic(range(100))
a.filter(__gt=3).filter(__lte=5).or(__lt=20, __gt=17).not(__eq=15)
Работает лениво и распаковывается только при попытке проитерировать по объекту
Поддерживает методы:
filter - цепочка фильтров работает как and. Если в filter передано несколько аргументов, они работают как and.
or - условия альтернативно всему, что ранее было накоплено в объекте. Несколько условий внутри одного or объедияются как and.
not - условие отрицания всему, что ранее было накоплено в объекте. Несколько аргументов работают как and
Для запуска тестов
python -m unittest tests/tests.py