Source code for berhoel.django.media_ooimport.console.serie

#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""Convert for Series.
"""

# Standard library imports.
from collections import namedtuple

# First party library imports.
from berhoel.helper import count_with_msg
from berhoel.django.media.models import (
    Seen,
    Person,
    Season,
    Series,
    Purchase,
    SeriesEpisode,
)

# Local library imports.
from ._helper import get_media

__date__ = "2022/08/13 17:23:24 hoel"
__author__ = "Berthold Höllmann"
__copyright__ = "Copyright © 2020 by Berthold Höllmann"
__credits__ = ["Berthold Höllmann"]
__maintainer__ = "Berthold Höllmann"
__email__ = "berhoel@gmail.com"

SerieRow = namedtuple(
    "SerieRow",
    (
        "date",
        "season",
        "episode",
        "disk",
        "index",
        "diskset",
        "info",
        "desc",
        "dvd_link",
    ),
)


[docs]class Serie: "Represent series on import" index = None
[docs] def __init__(self, table): """ """ self.table = table self.name = table.name self.is_active = not table.hidden if Serie.index is None: set_ = Series.objects.filter().order_by("-order_no") Serie.index = 1 if not set_ else set_[0].order_no Serie.index += 1
[docs] def process(self) -> None: "Process Series information" rows = zip(self.table.rows, count_with_msg(f"Importing '{self.name}', line")) row, _ = next(rows) title, *_ = row.cells try: name, url = title.text, title.url except IndexError: if self.name not in {"Spejbl & Hurvinek", "Lucky Luke"}: raise series = Series.objects.create(title=name, imdb_url=url, order_no=Serie.index) # skip one row _ = next(rows) media = None for row, _ in rows: row = (row.cells[:8] + row.cells[9:])[:9] if len(row) < 9: break data = SerieRow(*row) # Season season = data.season.int if season is None: continue diskset = data.diskset.float if (diskset is not None) and int(diskset) != diskset: sub_season = round((diskset - int(diskset)) * 10) else: sub_season = None # Media if data.dvd_link is not None and data.dvd_link.text is not None: media, _ = get_media( media=data.dvd_link, index=data.disk.text, name=name, # data.info.text, season=season, subseason=sub_season, ) season, _ = Season.objects.get_or_create(series=series, season=season) # Episode episode = data.episode.float if int(episode) == episode: sub_episode = None episode = int(episode) else: sub_episode = round((episode - int(episode)) * 10) episode = int(episode) episode_name, imdb_url = data.info.text, data.info.url index = None if data.index is None else data.index.int desc = None if data.desc is None else data.desc.text series_episode, _ = SeriesEpisode.objects.get_or_create( title=episode_name, medium=media, imdb_url=imdb_url, dvd_index=index, season=season, episode=episode, sub_episode=sub_episode, desc=desc, ) # Seen date = data.date.date if date is not None: Seen.objects.create(date=date, watch_item=series_episode) if ( data.dvd_link.text is not None and data.dvd_link.link is None and data.dvd_link.float > 0.0 ): vendor, _ = Person.objects.get_or_create(name=row.season.text) purchase = Purchase.objects.create( date=row.date.date, price=row.dvd_link.float, vendor=vendor ) purchase.media.set([media]) purchase.save()
# Local Variables: # mode: python # compile-command: "poetry run tox" # time-stamp-pattern: "30/__date__ = \"%:y/%02m/%02d %02H:%02M:%02S %u\"" # End: