Skip to content
module.py 2.6 KiB
Newer Older
hydrargyrum's avatar
hydrargyrum committed
# -*- coding: utf-8 -*-

# Copyright(C) 2017      Vincent A
#
# This file is part of a weboob module.
# This weboob module is free software: you can redistribute it and/or modify
hydrargyrum's avatar
hydrargyrum 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.
#
# This weboob module is distributed in the hope that it will be useful,
hydrargyrum's avatar
hydrargyrum 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
# along with this weboob module. If not, see <http://www.gnu.org/licenses/>.
hydrargyrum's avatar
hydrargyrum committed

from __future__ import unicode_literals


from weboob.browser.exceptions import ClientError, HTTPNotFound
from weboob.capabilities.gallery import CapGallery, BaseGallery, BaseImage, Thumbnail
hydrargyrum's avatar
hydrargyrum committed
from weboob.tools.backend import Module, BackendConfig
hydrargyrum's avatar
hydrargyrum committed
from weboob.tools.compat import urlparse
hydrargyrum's avatar
hydrargyrum committed
from weboob.tools.value import Value

from .browser import TumblrBrowser


__all__ = ['TumblrModule']


class TumblrModule(Module, CapGallery):
    NAME = 'tumblr'
    DESCRIPTION = 'images in tumblr blogs'
    MAINTAINER = 'Vincent A'
    EMAIL = 'dev@indigo.re'
    LICENSE = 'AGPLv3+'
Romain Bignon's avatar
Romain Bignon committed
    VERSION = '1.6'
    CONFIG = BackendConfig(Value('url', label='URL of the tumblr', regexp='https?://.+'))
hydrargyrum's avatar
hydrargyrum committed

    BROWSER = TumblrBrowser

    def create_default_browser(self):
        return self.create_browser(self.url())

    def url(self):
        return self.config['url'].get()
hydrargyrum's avatar
hydrargyrum committed

    def get_gallery(self, _id):
        title, icon = self.browser.get_title_icon()
        if icon:
            icon = Thumbnail(icon)
        return BaseGallery(_id, title=title, url=self.url(), thumbnail=icon)

    def search_galleries(self, pattern, sortby=CapGallery.SEARCH_RELEVANCE):
        pattern = pattern.lower()
        url = self.url()
        if pattern in url or pattern in self.browser.get_title_icon()[0].lower():
            yield self.get_gallery(urlparse(url).netloc)
hydrargyrum's avatar
hydrargyrum committed

    def iter_gallery_images(self, gallery):
        for img in self.browser.iter_images(gallery):
            yield img

    def fill_img(self, img, fields):
        if 'data' in fields:
            try:
                img.data = self.browser.open(img.url).content
            except (ClientError, HTTPNotFound):
                img.data = b''
        if 'thumbnail' in fields and img.thumbnail:
            self.fill_img(img.thumbnail, ('data',))
hydrargyrum's avatar
hydrargyrum committed

    OBJECTS = {
        BaseImage: fill_img,
        BaseGallery: fill_img,