import sys
if sys.version_info >= (3, 0):
class_type = type
else:
from new import classobj
class_type = classobj
# Borrowed from https://github.com/karan/TPB and modified.
# Props to Karan.
[docs]class ConstantType(type):
"""
Tree representation metaclass for class attributes. Metaclass is extended
to all child classes too.
"""
def __new__(cls, clsname, bases, dct):
"""
Extend metaclass to all class attributes too.
"""
attrs = {}
for name, attr in dct.items():
if isinstance(attr, class_type):
# substitute attr with a new class with Constants as
# metaclass making it possible to spread this same method
# to all child classes
attr = ConstantType(
attr.__name__, attr.__bases__, attr.__dict__)
attrs[name] = attr
return super(ConstantType, cls).__new__(cls, clsname, bases, attrs)
def __repr__(cls):
"""
Tree representation of class attributes. Child classes are also
represented.
"""
str_representation = '{0}: {1}\n'.format(cls.__name__, cls.value)
for name in dir(cls):
if not name.startswith('_'):
attr = getattr(cls, name)
output = repr(attr)
if not isinstance(attr, ConstantType):
output = '{0}: {1}'.format(name, output)
# indent all child attrs
str_representation += '\n'.join([' ' * 4 + line
for line in output.splitlines()]) + '\n'
return str_representation
def __str__(cls):
return repr(cls)
@property
def value(cls):
try:
return cls.__value__
except:
return None
@property
def is_child(cls):
return cls.value is None
Constants = ConstantType('Constants', (object,), {})
# END OF COPIED
class SearchBy(Constants):
ALL = 0
TORRENT_NAMES_ONLY = 1
class SortBy(Constants):
DATE = '' # default
class COMPLETED:
ASCENDING = 'c'
DESCENDING = 'C'
class LEECHERS:
ASCENDING = 'l'
DESCENDING = 'L'
class SEEDERS:
ASCENDING = 's'
DESCENDING = 'S'
class SIZE:
ASCENDING = 'b'
DESCENDING = 'B'
class Category(Constants):
class ALL:
__value__ = 0
ALL = 0
class APPLICATIONS:
__value__ = 5
ALL = 0
ANDROID = 284
IOS = 277 # original Iphone / Ipod touch
LINUX = 2
MAC = 3
MOBILE_PHONE = 118
PALM = 5
POCKET_PC = 4
WINDOWS = 1
class AUDIO_BOOKS:
__value__ = 17
ALL = 0
ACTION = 140
ADVENTURE = 139
BIOGRAPHY = 301
CHILDRENS = 142
COMPUTERS_AND_TECHNOLOGY = 157
CONTEMPORARY = 143
COOKING = 315
CRAFTS_AND_HOBBIES = 302
EDUCATIONAL = 158
EDUCATIONAL2 = 303 # duplicate in their filters. No idea what's for yet.
FANTASY = 144
FICTION = 304
GENERAL = 145
HISTORY = 305
HORROR = 146
HUMOR = 147
LITERARY = 148
MAGAZINE = 307
MAINSTREAM = 149
MEDICINE_AND_HEALTH = 308
MYSTERY_AND_SUSPENSE = 150
NEWSPAPER = 309
NONFICTION = 310
OTHER = 231
PARANORMAL = 151
RELIGION = 311
ROMANCE = 152
RPG = 312
SCI_FI = 153
SELF_HELP = 141
SUSPENSE = 154
TEXTBOOK = 313
THRILLER = 155
WESTERN = 156
YOUNG_ADULT = 314
class BOOKS:
__value__ = 11
ALL = 0
ACTION_AND_ADVENTURE = 119
BIOGRAPHY = 288
CHILDRENS = 122
COMPUTERS_AND_TECHNOLOGY = 137
CONTEMPORARY = 123
COOKING = 316
CRAFTS_AND_HOBBIES = 289
EDUCATIONAL = 138
FANTASY = 124
FICTION = 291
GENERAL = 125
HISTORY = 293
HORROR = 126
HUMOR = 127
LITERARY = 128
MAGAZINE = 263
MAINSTREAM = 129
MEDICINE_AND_HEALTH = 295
MYSTERY_AND_SUSPENSE = 130
NEWSPAPER = 264
NONFICTION = 297
OTHER = 230
PARANORMAL = 131
RELIGION = 298
ROMANCE = 132
RPG = 260
SCI_FI = 133
SELF_HELP = 121
SUSPENSE = 134
TEXTBOOK = 299
THRILLER = 135
WESTERN = 136
YOUNG_ADULT = 300
class COMICS:
__value__ = 10
ALL = 0
ACTION_AND_ADVENTURE = 159 # Action/Adventure in site, but here it's kept for consistency with Books.ACTION_AND_ADVENTURE
CRIME = 227
DRAMA = 160
FANTASY = 223
HISTORICAL_FICTION = 228
HORROR = 224
ILLUSTRATED_NOVEL = 161
MANGA = 285
OTHER = 229
REAL_LIFE = 226
SCI_FI = 225
SUPER_HERO = 222
class GAMES:
__value__ = 4
ALL = 0
DOS = 177
DREAMCAST = 176
EMULATORS = 178
GAMEBOY = 167
GAMECUBE = 175
LINUX = 162
MAC = 163
MOBILE_PHONE = 168
NINTENDO_DS = 261
PALM = 164
PLAYSTATION_1 = 170
PLAYSTATION_2 = 171
PLAYSTATION_3 = 172
POCKET_PC = 165
PSP = 169
PSP_PSX = 274
WII = 271
WINDOWS = 166
XBOX = 173
XBOX_360 = 174
class JAPANESE_ANIME:
__value__ = 9
ALL = 0
ACTION = 111
ADVENTURE = 220
COMEDY = 112
DRAMA = 113
FANTASY = 114
HORROR = 115
OTHER = 221
ROMANCE = 117
SCI_FI = 116
class MISCELLANEOUS:
__value__ = 6
class MOVIES:
__value__ = 1
ALL = 0
ACTION = 6
ADVENTURE = 7
ANIMATION = 8
BIOGRAPHY = 9
COMEDY = 10
CONCERTS = 180
CRIME = 181
DOCUMENTARY = 11
DRAMA = 12
FAMILY = 13
FANTASY = 14
FILM_NOIR = 15
HORROR = 17
MUSICAL = 18
MYSTERY = 19
OTHER = 65
ROMANCE = 20
SCI_FI = 21
SHORT_FILM = 22
SPORTS = 23
THRILLER = 24
TRAILERS = 182
WAR = 25
WESTERN = 26
class MUSIC:
__value__ = 2
ALL = 0
ALTERNATIVE = 183
BLUEGRASS = 265
BLUES = 34
CHILDRENS = 280
CHRISTIAN = 185
CLASSICAL = 27
COMEDY = 186
CONTEMPORARY_AFRICAN = 44
COUNTRY = 36
DANCE_DISCO = 39
DRUM_AND_BASS = 282
ELECTRO_TECHNO = 37
FOLK = 269
GOSPEL = 28
GRUNGE = 275
HIPHOP_RAP = 43
INDIE = 266
INDUSTRIAL = 38
JAZZ = 29
JPOP = 184
LATIN_AMERICAN = 30
MELODIC = 40
METAL = 35
OTHER = 63
POP = 31
PUNK = 42
RADIO_SHOW = 286
REGGAE = 41
RHYTHM_AND_BLUES = 33
ROCK = 32
SOUL = 188
SOUNDTRACK = 190
TRANCE = 191
TRIP_HOP = 278
class MUSIC_VIDEOS:
__value__ = 13
ALL = 0
ALTERNATIVE = 251
BLUEGRASS = 268
BLUES = 239
CHILDRENS = 281
CHRISTIAN = 253
CLASSICAL = 232
COMEDY = 254
CONTEMPORARY_AFRICAN = 249
COUNTRY = 241
DANCE_DISCO = 244
DRUM_AND_BASS = 283
ELECTRO_TECHNO = 242
FOLK = 270
GOSPEL = 233
GRUNGE = 276
HIPHOP_RAP = 248
INDIE = 267
INDUSTRIAL = 243
JAZZ = 234
JPOP = 252
LATIN_AMERICAN = 235
MELODIC = 245
METAL = 240
OTHER = 250
POP = 236
PUNK = 247
REGGAE = 246
RHYTHM_AND_BLUES = 238
ROCK = 237
SOUL = 255
SOUNDTRACK = 257
TRANCE = 258
TRIP_HOP = 279
class PICTURES:
__value__ = 8
ALL = 0
ART = 66
COMMERCIAL = 67
GLAMOUR = 69
OTHER = 73
PHOTOJOURNALISM = 68
SNAPSHOTS = 70
SPORTS = 71
WILDLIFE = 72
class TV:
__value__ = 3
ALL = 0
ACTION = 192
ADVENTURE = 193
BIOGRAPHY = 195
CARTOONS = 194
COMEDY = 196
CONCERTS = 213
CRIME = 214
DOCUMENTARY = 197
DRAMA = 198
FAMILY = 199
FANTASY = 200
FILM_NOIR = 201
HORROR = 203
MUSICAL = 202
MYSTERY = 204
OTHER = 212
REALITY = 262
ROMANCE = 205
SCI_FI = 206
SHORT_FILM = 207
SPORTS = 208
TALK_SHOW = 259
THRILLER = 209
TRAILERS = 215
WAR = 210
WESTERN = 211
class Language(Constants):
ALL = 0
ARABIC = 19
BULGARIAN = 20
CHINESE = 12
CROATIAN = 14
CZECH = 13
DANISH = 11
ENGLISH = 1
ESTONIAN = 32
FARSI = 29
FINNISH = 33
FRENCH = 3
GERMAN = 22
GREEK = 24
HEBREW = 23
HINDI = 31
HUNGARIAN = 15
ITALIAN = 4
class Quality(Constants):
ALL = 0
class AUDIO_BOOKS:
AAC = 42
MP3_128KBPS = 50
MP3_192KBPS = 49
MP3_256KBPS = 47
MP3_64KBPS = 51
MP3_OVER_256KBPS = 44
MP3_VARIABLE = 48
MPC = 43
OGG = 46
OTHER = 45
class GAMES:
FULL_GAME = 28
GAME_RIP = 29
class JAPANESE_ANIME:
DVD = 34
HD = 70
IPOD = 56
OTHER = 36
PSP = 58
TV = 33
VHS = 35
class MOVIES:
BLURAY = 72
BLURAY_3D = 71
CAM = 3
DVD_FULL = 11
DVD_RIP = 9
HD_1080 = 68
HD_720P = 66
IPOD = 53
KVCD_DVDRIP = 64
KVCD_OTHER = 65
OTHER = 23
PSP = 60
REMUX = 73
SCREENER_DVD = 7
SCREENER_VHS = 6
TV_RIP = 8
VCD_SVCD = 21
VHS_RIP = HD_1080
class MUSIC:
AAC = 18
LOSSLESS = 62
MP3_128KBPS = 13
MP3_192KBPS = 14
MP3_256KBPS = 16
MP3_64KBPS = 12
MP3_OVER_256KBPS = 20
MP3_SURROUND = 67
MP3_VARIABLE = 15
MPC = 19
OGG = 17
OTHER = 22
WMA = 63
class MUSIC_VIDEOS:
DVD = 40
IPOD = 57
OTHER = 41
PSP = 61
TV = 38
VHS = 39
class PICTURES:
HIGH_RESOLUTION = 30
LOW_RESOLUTION = 31
MIXED = 32
class TV:
DVD = 26
HD = 69
IPOD = 54
OTHER = 55
PSP = 59
TV = 24
VHS = 25
class State(Constants):
BOTH = 2
SEEDED = 0
UNSEEDED = 1
class TrackedBy(Constants):
BOTH = 2
DEMONOID = 0
EXTERNAL = 1