1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
|
#!/usr/bin/env python
"""Test tvnamer's EpisodeInfo file name generation
"""
import os
import datetime
from helpers import assertEquals
from tvnamer.main import TVNAMER_API_KEY
from tvnamer.compat import PY2
from tvnamer.utils import (EpisodeInfo, DatedEpisodeInfo, NoSeasonEpisodeInfo)
from test_files import files
from tvdb_api import Tvdb
def verify_name_gen(curtest, tvdb_instance):
if "seasonnumber" in curtest:
ep = EpisodeInfo(
seriesname = curtest['parsedseriesname'],
seasonnumber = curtest['seasonnumber'],
episodenumbers = curtest['episodenumbers'])
elif any([isinstance(x, datetime.date) for x in curtest['episodenumbers']]):
ep = DatedEpisodeInfo(
seriesname = curtest['parsedseriesname'],
episodenumbers = curtest['episodenumbers'])
else:
ep = NoSeasonEpisodeInfo(
seriesname = curtest['parsedseriesname'],
episodenumbers = curtest['episodenumbers'])
ep.populateFromTvdb(tvdb_instance, force_name = curtest.get("force_name"))
assert ep.seriesname is not None, "Corrected series name was none"
assert ep.episodename is not None, "Episode name was None"
assertEquals(ep.seriesname, curtest['correctedseriesname'])
assertEquals(ep.episodename, curtest['episodenames'])
def test_name_generation_on_testfiles():
# Test data stores episode names in English, language= is normally set
# via the configuration, same with search_all_languages.
if not PY2 and os.getenv("TRAVIS", "false") == "true":
# Disable caching on Travis-CI because in Python 3 it errors with:
#
# Can't pickle <class 'http.cookiejar.DefaultCookiePolicy'>: it's not the same object as http.cookiejar.DefaultCookiePolicy
cache = False
else:
cache = True
tvdb_instance = Tvdb(search_all_languages=True, language='en', cache=cache, apikey=TVNAMER_API_KEY)
for category, testcases in files.items():
for curtest in testcases:
verify_name_gen(curtest, tvdb_instance)
def test_single_episode():
"""Simple episode name, with show/season/episode/name/filename
"""
ep = EpisodeInfo(
seriesname = 'Scrubs',
seasonnumber = 1,
episodenumbers = [2],
episodename = 'My Mentor',
filename = 'scrubs.example.file.avi')
assertEquals(
ep.generateFilename(),
'Scrubs - [01x02] - My Mentor.avi')
def test_multi_episodes_continuous():
"""A two-part episode should not have the episode name repeated
"""
ep = EpisodeInfo(
seriesname = 'Stargate SG-1',
seasonnumber = 1,
episodenumbers = [1, 2],
episodename = [
'Children of the Gods (1)',
'Children of the Gods (2)'],
filename = 'stargate.example.file.avi')
assertEquals(
ep.generateFilename(),
'Stargate SG-1 - [01x01-02] - Children of the Gods (1-2).avi')
def test_episode_numeric_title():
"""An episode with a name starting with a number should not be
detected as a range
"""
ep = EpisodeInfo(
seriesname = 'Star Trek TNG',
seasonnumber = 1,
episodenumbers = [15],
episodename = [
'11001001'
],
filename = 'STTNG-S01E15-11001001.avi')
assertEquals(
ep.generateFilename(),
'Star Trek TNG - [01x15] - 11001001.avi')
def test_multi_episodes_seperate():
"""File with two episodes, but with different names
"""
ep = EpisodeInfo(
seriesname = 'Stargate SG-1',
seasonnumber = 1,
episodenumbers = [2, 3],
episodename = [
'Children of the Gods (2)',
'The Enemy Within'],
filename = 'stargate.example.file.avi')
assertEquals(
ep.generateFilename(),
'Stargate SG-1 - [01x02-03] - Children of the Gods (2), The Enemy Within.avi')
def test_simple_no_ext():
"""Simple episode with out extension
"""
ep = EpisodeInfo(
seriesname = 'Scrubs',
seasonnumber = 1,
episodenumbers = [2],
episodename = 'My Mentor',
filename = None)
assertEquals(
ep.generateFilename(),
'Scrubs - [01x02] - My Mentor')
def test_no_name():
"""Episode without a name
"""
ep = EpisodeInfo(
seriesname = 'Scrubs',
seasonnumber = 1,
episodenumbers = [2],
episodename = None,
filename = 'scrubs.example.file.avi')
assertEquals(
ep.generateFilename(),
'Scrubs - [01x02].avi')
def test_episode_no_name_no_ext():
"""EpisodeInfo with no name or extension
"""
ep = EpisodeInfo(
seriesname = 'Scrubs',
seasonnumber = 1,
episodenumbers = [2],
episodename = None,
filename = None)
assertEquals(
ep.generateFilename(),
'Scrubs - [01x02]')
def test_noseason_no_name_no_ext():
"""NoSeasonEpisodeInfo with no name or extension
"""
ep = NoSeasonEpisodeInfo(
seriesname = 'Scrubs',
episodenumbers = [2],
episodename = None,
filename = None)
assertEquals(
ep.generateFilename(),
'Scrubs - [02]')
def test_datedepisode_no_name_no_ext():
"""DatedEpisodeInfo with no name or extension
"""
ep = DatedEpisodeInfo(
seriesname = 'Scrubs',
episodenumbers = [datetime.date(2010, 11, 23)],
episodename = None,
filename = None)
assertEquals(
ep.generateFilename(),
'Scrubs - [2010-11-23]')
def test_no_series_number():
"""Episode without season number
"""
ep = NoSeasonEpisodeInfo(
seriesname = 'Scrubs',
episodenumbers = [2],
episodename = 'My Mentor',
filename = None)
assertEquals(
ep.generateFilename(),
'Scrubs - [02] - My Mentor')
def test_downcase():
"""Simple episode name, converted to lowercase
"""
ep = EpisodeInfo(
seriesname = 'Scrubs',
seasonnumber = 1,
episodenumbers = [2],
episodename = 'My Mentor',
filename = 'scrubs.example.file.avi')
assertEquals(
ep.generateFilename(lowercase = True),
'scrubs - [01x02] - my mentor.avi')
|