diff --git a/modules/piratebay/backend.py b/modules/piratebay/backend.py index 7d7a8ef2..4383e421 100644 --- a/modules/piratebay/backend.py +++ b/modules/piratebay/backend.py @@ -17,15 +17,15 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from weboob.capabilities.torrent import ICapTorrent +from weboob.capabilities.torrent import ICapTorrent, MagnetOnly from weboob.tools.backend import BaseBackend +from weboob.capabilities.base import NotAvailable from .browser import PiratebayBrowser __all__ = ['PiratebayBackend'] - class PiratebayBackend(BaseBackend, ICapTorrent): NAME = 'piratebay' MAINTAINER = 'Julien Veyssier' @@ -46,6 +46,8 @@ class PiratebayBackend(BaseBackend, ICapTorrent): if not torrent: return None + if torrent.url is NotAvailable and torrent.magnet: + raise MagnetOnly(torrent.magnet) return self.browser.openurl(torrent.url.encode('utf-8')).read() def iter_torrents(self, pattern): diff --git a/modules/piratebay/pages/torrents.py b/modules/piratebay/pages/torrents.py index 926360d3..555f8d78 100644 --- a/modules/piratebay/pages/torrents.py +++ b/modules/piratebay/pages/torrents.py @@ -98,7 +98,7 @@ class TorrentPage(BasePage): leech = ch.text prev_child_txt = ch.text elif div.attrib.get('class', '') == 'nfo': - description = div.getchildren()[0].text + description = div.getchildren()[0].text.strip() torrent = Torrent(id, title) torrent.url = url or NotAvailable torrent.magnet = magnet diff --git a/modules/piratebay/test.py b/modules/piratebay/test.py index 0363b51f..ca01336c 100644 --- a/modules/piratebay/test.py +++ b/modules/piratebay/test.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright(C) 2010-2011 Julien Veyssier +# Copyright(C) 2010-2012 Julien Veyssier, Laurent Bachelier # # This file is part of weboob. # @@ -18,11 +18,25 @@ # along with weboob. If not, see . from weboob.tools.test import BackendTest +from weboob.capabilities.torrent import MagnetOnly + +from random import choice class PiratebayTest(BackendTest): BACKEND = 'piratebay' def test_torrent(self): - l = list(self.backend.iter_torrents('debian')) - if len(l) > 0: - self.backend.get_torrent_file(l[0].id) + # try something popular so we sometimes get a magnet-only torrent + l = list(self.backend.iter_torrents('ubuntu linux')) + if len(l): + torrent = choice(l) + full_torrent = self.backend.get_torrent(torrent.id) + assert torrent.name + assert full_torrent.name == torrent.name + # I assume descriptions can be empty + assert isinstance(full_torrent.description, basestring) + try: + assert self.backend.get_torrent_file(torrent.id) + except MagnetOnly, e: + assert e.magnet.startswith('magnet:') + assert e.magnet == full_torrent.magnet