Skip to content
browser.py 2.43 KiB
Newer Older
Julien Veyssier's avatar
Julien Veyssier committed
# -*- coding: utf-8 -*-

Julien Veyssier's avatar
Julien Veyssier committed
# Copyright(C) 2015-2016 Julien Veyssier
# Copyright(C) 2016-2017 David Kremer
Julien Veyssier's avatar
Julien Veyssier committed
#
Roger Philibert's avatar
Roger Philibert committed
# This file is part of a woob module.
Julien Veyssier's avatar
Julien Veyssier committed
#
Roger Philibert's avatar
Roger Philibert committed
# This woob module is free software: you can redistribute it and/or modify
Julien Veyssier's avatar
Julien Veyssier committed
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
Roger Philibert's avatar
Roger Philibert committed
# This woob module is distributed in the hope that it will be useful,
Julien Veyssier's avatar
Julien Veyssier committed
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
Roger Philibert's avatar
Roger Philibert committed
# along with this woob module. If not, see <http://www.gnu.org/licenses/>.
from woob.browser.exceptions import BrowserHTTPNotFound
from woob.browser import LoginBrowser, need_login
from woob.browser.url import URL
from woob.browser.profiles import Wget
from woob.exceptions import BrowserIncorrectPassword
Julien Veyssier's avatar
Julien Veyssier committed

from .pages.index import HomePage, LoginPage
from .pages.torrents import TorrentPage, SearchPage, DownloadPage
Julien Veyssier's avatar
Julien Veyssier committed


__all__ = ['T411Browser']


class T411Browser(LoginBrowser):
    PROFILE = Wget()
    TIMEOUT = 30
Julien Veyssier's avatar
Julien Veyssier committed

    BASEURL = 'https://www.t411.si/'
    login = URL('/login$', LoginPage)
    search = URL(r'/torrents/search/\?search=(?P<pattern>.*)', SearchPage)
    download = URL('/telecharger-torrent/(?P<torrent_hash>[0-9a-f]{40})/(?P<torrent_name>\w+)', DownloadPage)
    torrent = URL('/torrents/(?P<torrent_id>[0-9]+)/(?P<torrent_name>.*)', TorrentPage)
Julien Veyssier's avatar
Julien Veyssier committed

    def do_login(self):
        self.home.go()
        if not self.page.logged:
            self.page.login(self.username, self.password)
            self.home.go()

Julien Veyssier's avatar
Julien Veyssier committed
            raise BrowserIncorrectPassword()

Julien Veyssier's avatar
Julien Veyssier committed
    def iter_torrents(self, pattern):
        return self.search.go(pattern=pattern).iter_torrents()
Julien Veyssier's avatar
Julien Veyssier committed

Julien Veyssier's avatar
Julien Veyssier committed
    @need_login
    def get_torrent(self, torrent):
            self.torrent.go(torrent_id=torrent.id, torrent_name=torrent.name)
            torrent = self.page.get_torrent()
            return torrent
        except BrowserHTTPNotFound:
            return

    def get_torrent_file(self, torrent):
        torrent = self.browser.get_torrent(torrent)
        if not torrent:
            return None
        resp = self.browser.open(torrent.url)
        return resp.content