Source code for seriesmarker.persistence.factory.banner_factory

#==============================================================================
# -*- coding: utf-8 -*-
#
# Copyright (C) 2013 - 2016 Tobias Röttger <toroettg@gmail.com>
#
# This file is part of SeriesMarker.
#
# SeriesMarker is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3 as
# published by the Free Software Foundation.
#
# SeriesMarker is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with SeriesMarker.  If not, see <http://www.gnu.org/licenses/>.
#==============================================================================

from seriesmarker.persistence.database import db_remove_banner
from seriesmarker.persistence.factory.base_factory import BaseFactory
from seriesmarker.persistence.model.banner import Banner
from seriesmarker.persistence.model.banner_extra import BannerExtra

[docs]class BannerFactory(BaseFactory): """Factory to create banner objects from TheTVDB data.""" @staticmethod
[docs] def new_banner(banner_type, banners, update=None, season=None): """Picks a banner from a list of pytvdbapi-banners and creates a persistable object of it. :param banner_type: The type of banner to pick, possible options are: 'series' (landscape), 'poster' and 'season'. :type banner_type: string :param banners: The banners related to a series or season, retrieved by pytvdbapi. :type banners: list :param update: The banner object to replace with a new banner. :type update: :class:`.Banner` :param season: Parameter can be omitted unless 'season' is given as banner type. Describes the number of the season to pick a banner for. :type season: :class:`int` :returns: The picked :class:`.Banner`, or None if no one matched. .. todo:: Convert banner_type to Enum, as soon as Python supports it (probably 3.4). """ pytvdb_banners = [banner for banner in banners if banner.BannerType == banner_type] if banner_type == "season": pytvdb_banners = [banner for banner in pytvdb_banners if banner.Season == season] if len(pytvdb_banners) > 0: return BannerFactory._new_banner(pytvdb_banners[0], update) # TODO intelligent banner choice
@staticmethod
[docs] def _new_banner(pytvdb_banner, update=None): """Creates a persistable banner object from TheTVDB data. :param pytvdb_banner: The data to create the banner from. :type pytvdb_banner: :class:`pytvdbapi.banner.Banner` :param update: The banner to replace with the created one. :type update: :class:`.Banner` :returns: The newly created :class:`.Banner` instance. """ if update != None and update.id != pytvdb_banner.id: db_remove_banner(update) update = None if update == None: banner = Banner() banner.id = pytvdb_banner.id else: banner = update banner.banner_path = pytvdb_banner.BannerPath banner.banner_type = pytvdb_banner.BannerType banner.banner_type2 = pytvdb_banner.BannerType2 banner.language = pytvdb_banner.Language banner.rating = -1 if pytvdb_banner.Rating is "" else pytvdb_banner.Rating banner.rating_count = pytvdb_banner.RatingCount if banner.extra == None: banner.extra = BannerExtra() banner.extra.banner_url = pytvdb_banner.banner_url return banner