forked from OrudoCA/qBitDownload-Bot
Add TorrentAPI server abstract class
- Add TorrentFromServer type class - Add TorrentListBuilder builder pattern class - Add TorrentAPI abstract interface
This commit is contained in:
parent
ed324557c8
commit
6e4959e918
|
@ -6,7 +6,7 @@
|
|||
|
||||
from abc import ABC, abstractmethod
|
||||
from tubot.static.abc import IValidatable
|
||||
from tubot.torrent.types import TorrentTypes
|
||||
from tubot.torrent.types import TorrentTypes, ServerTypes
|
||||
|
||||
|
||||
class TorrentObj(IValidatable, ABC):
|
||||
|
@ -34,3 +34,49 @@ class TorrentObj(IValidatable, ABC):
|
|||
"""
|
||||
self.content = content
|
||||
self.dest = destination
|
||||
|
||||
|
||||
class TorrentAPI(IValidatable, ABC):
|
||||
"""
|
||||
Abstract class of torrent-server API's
|
||||
"""
|
||||
|
||||
_atype: ServerTypes # Server type propery
|
||||
|
||||
def __init__(self) -> None:
|
||||
if self._atype is None:
|
||||
raise NotImplementedError("Torrent Server type not implemented")
|
||||
|
||||
async def upload(self, torrent: TorrentObj) -> None:
|
||||
"""
|
||||
Adds the torrent to a queue on the server
|
||||
|
||||
:param torrent: TorrenObject type (file, magnet, etc.)
|
||||
"""
|
||||
match torrent.torrent_type:
|
||||
case TorrentTypes.File:
|
||||
await self.upload_file(torrent)
|
||||
case TorrentTypes.Magnet:
|
||||
await self.upload_magnet(torrent)
|
||||
case TorrentTypes.URL:
|
||||
await self.upload_url(torrent)
|
||||
|
||||
@abstractmethod
|
||||
async def upload_file(self, torrent) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
async def upload_magnet(self, torrent) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
async def upload_url(self, torrent) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
async def torrent_list(self) -> str:
|
||||
"""
|
||||
Returns PlainString with current torrent queue
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
############################
|
||||
|
||||
# Imports
|
||||
from collections.abc import Iterable
|
||||
from enum import Enum
|
||||
|
||||
|
||||
|
@ -16,3 +17,43 @@ class TorrentTypes(Enum):
|
|||
File = ".torrent file"
|
||||
Magnet = "torrent magnet link"
|
||||
URL = "http(s) link to .torrent file"
|
||||
|
||||
|
||||
class ServerTypes(Enum):
|
||||
"""
|
||||
Types of Torrent servers API's
|
||||
"""
|
||||
|
||||
|
||||
class TorrentFromServer(object):
|
||||
|
||||
name: str
|
||||
state: str
|
||||
percent: float
|
||||
|
||||
def __init__(self, name: str, state: str, percent: float) -> None:
|
||||
self.name = name
|
||||
self.state = state
|
||||
self.percent = percent
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"*Torrent:* {self.name}\n*State:* {self.state}\n*Progress:* {self.percent}"
|
||||
|
||||
|
||||
class TorrentListBuilder(object):
|
||||
"""
|
||||
Torrent list type
|
||||
"""
|
||||
|
||||
collection: list
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.collection = []
|
||||
|
||||
def append(self, torrent_data: Iterable) -> "TorrentListBuilder":
|
||||
item = TorrentFromServer(*torrent_data)
|
||||
self.collection.append(item)
|
||||
return self
|
||||
|
||||
def __str__(self) -> str:
|
||||
return "\n---\n".join(self.collection)
|
||||
|
|
Loading…
Reference in New Issue