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