4
1
Fork 1

Add Torrent class

This commit is contained in:
trueold89 2024-05-05 20:10:11 +03:00
parent 7e17c71610
commit e5857715e8
Signed by: trueold89
GPG Key ID: C122E85DD49E6B30
2 changed files with 58 additions and 3 deletions

View File

@ -7,6 +7,11 @@ class DirParserTypes(Enum):
class LogTypes(Enum): class LogTypes(Enum):
LOG = "Log" LOG = "LOG"
ERROR = "Error" ERROR = "ERROR"
WARN = "Warning" WARN = "WARNING"
class TorrentTypes(Enum):
MAGNET = "Magnet Link"
FILE = "Torrent File"

50
Torrent.py Normal file
View File

@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
from abc import ABCMeta, abstractmethod, abstractproperty
from TYPES import TorrentTypes
from os.path import splitext as getext
from re import match
class Torrent(object):
__metaclass__ = ABCMeta
def __init__(self, url: str):
self.url = url
if not (self.validate()):
raise ValueError
@property
@abstractmethod
def torrent_type(self) -> TorrentTypes:
pass
@abstractmethod
def validate(self) -> bool:
pass
@property
def value(self) -> str:
return self.value
class MagnetLink(Torrent):
@property
def torrent_type(self) -> TorrentTypes:
return TorrentTypes.MAGNET
def validate(self) -> bool:
pattern = r"^magnet:\?xt=urn:btih:[a-fA-F0-9]{40}.*$"
if match(pattern, self.url):
return True
class TorrentFile(Torrent):
@property
def torrent_type(self) -> TorrentTypes:
return TorrentTypes.FILE
def validate(self) -> bool:
if getext(self.url)[1].lower() == ".torrent":
return True