from enum import Enum
from magnetto import MagnettoMisuseError
[документация]class Category(Enum):
"""Фильтр по категориям (если указанный фильтр не поддерживается трекером,
то трекер не выполняет поиск)
"""
UNDEFINED = 0
FILMS = 1
TV_SERIES = 2
CARTOONS = 3
MUSICS = 4
BOOKS = 5
AUDIOBOOKS = 6
GAMES = 7
PROGRAMS = 8
[документация]class Resolution(Enum):
"""Фильтр по разрешениям для фильмов
Attributes:
HD: 720p
FULLHD: 1080p
ULTRA_HD: 4k
"""
HD = "720p"
FULL_HD = "1080p"
ULTRA_HD = "2160p"
[документация]class Source(Enum):
"""Фильтры по качеству источника
"""
TV_RIP = "TVRIP,TV-RIP,SDTV-RIP,SAT-RIP,SATRIP,HDTV-RIP,HDTVRIP"
WEB_DL_RIP = "WEB-DL,WEBRIP"
HD_RIP = "HDDVD-RIP,HDDVD-RIP,HDRIP,HD-RIP"
BD_RIP = "BLU_RAY,BLURAY,BD-RIP,BDRIP"
VHS_RIP = "VHS-RIP,VHSRIP"
DVD_RIP = "DVDRIP,DVD-RIP"
CAM_RIP = "CAMRIP,CAM-RIP"
[документация]class Order(Enum):
"""Фильтр для вызова Api методов. Указывает вид сортировки.
Attributes:
DESC: По убыванию
ASC: По возрастанию
"""
DESC = 1
ASC = 2
[документация]class OrderBy(Enum):
"""Фильтр для вызова Api методов. Указывает колонку для сортировки.
Attributes:
CREATE: Дата создания
NAME: Название темы
DOWNLOADS: Количество скачиваний
SEEDER: Количество сидеров
LEECHER: Количество личей
SIZE: Размер
"""
CREATE = 1
NAME = 2
DOWNLOADS = 3
SEEDERS = 4
LEECHERS = 5
SIZE = 6
[документация]class Registered(Enum):
"""Дата регистрации раздачи
"""
TODAY = 1
YESTERDAY = 2
FOR_3_DAYS = 3
FOR_WEEK = 4
FOR_MONTH = 5
FOR_YEAR = 6
[документация]class TypeRelease(Enum):
"""Тип раздачи (для сохранения рейтинга на трекерах)
Attributes:
SILVER: засчитывается половина рейтинга
GOLD: рейтинг не считается
"""
SILVER = 1
GOLD = 2
[документация]class Size(Enum):
"""Размер раздачи (в основном применим для фильмов).
Attributes:
TINY: меньше 1.3ГБ
SMALL: 1.3ГБ - 2.2ГБ
MEDIUM: 2.2ГБ - 4.0ГБ
BIG: 4.0ГБ - 9.5ГБ
LARGE: 9.5ГБ - 25ГБ
HUGE: 25ГБ и выше
"""
TINY = 1
SMALL = 2
MEDIUM = 3
BIG = 4
LARGE = 5
HUGE = 6
[документация]class Year:
"""Даты выхода содержимого раздачи (фильм, игра...)
"""
[документация] def __init__(self, year):
if not str(year).isdigit():
raise MagnettoMisuseError("year must be digit")
self.year = str(year)
def __str__(self):
return str(self.year)
[документация]class NoZeroSeeders:
"""Фильтр исключает из конечной выборки раздачи с 0 сидерами
"""
pass
[документация]class NoWords:
"""Фильтр исключает из конечной выборки раздачи данными словами
"""
[документация] def __init__(self, *argv):
"""
Attributes:
argv (List[str]): Слова для исключения из выдачи
"""
self.argv = []
for arg in argv:
self.argv.append(arg.lower())
def __contains__(self, str):
for arg in self.argv:
if arg in str.lower():
return True
[документация]class NoEqualSize:
"""Исключение раздач с одинаковым размером. По умолчанию разрешается
расхождение в размере не более 10%.
"""
[документация] def __init__(self, size=10):
"""
Attributes:
size (int): Допустимый процент разброса по размеру
"""
if size <= 0 or size >= 100:
raise MagnettoMisuseError("Arg must be int (0 < x < 100)")
self.size = size
def __int__(self):
return int(self.size)