Skip to content

Commit 3cec201

Browse files
committed
Updated to handle the removing of episode_id parameter.
1 parent 2a5c47f commit 3cec201

File tree

3 files changed

+36
-13
lines changed

3 files changed

+36
-13
lines changed

pytvdbapi/api.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
from pytvdbapi.show import Show
6565
from pytvdbapi.urls import mirrors, search, zap2itid, imdbid, series, episode, airdate, absolute_order, \
6666
dvd_order, default_order
67-
from pytvdbapi.utils import unicode_arguments
67+
from pytvdbapi.utils import unicode_arguments, deprecate_episode_id
6868
from pytvdbapi._compat import implements_to_string, make_bytes, make_unicode, text_type, int_types
6969

7070

@@ -384,7 +384,8 @@ def get_series(self, series_id, language, id_type='tvdb', cache=True):
384384
return Show(series_data[0], self, language, self.config, data)
385385

386386
@unicode_arguments
387-
def get_episode(self, episode_id, language, method="id", cache=True, **kwargs):
387+
@deprecate_episode_id
388+
def get_episode(self, language, method="id", cache=True, **kwargs):
388389
"""
389390
.. versionadded:: 0.4
390391
.. versionchanged:: 0.5 Added the possibility to get an episode using default, dvd, and absolute
@@ -438,12 +439,10 @@ def get_episode(self, episode_id, language, method="id", cache=True, **kwargs):
438439
"""
439440
methods = {"default": default_order, "dvd": dvd_order, "absolute": absolute_order, "id": episode}
440441

441-
logger.debug(u"Getting episode with id {0} with language {1}".format(episode_id, language))
442-
443442
if language != 'all' and language not in __LANGUAGES__:
444443
raise error.TVDBValueError(u"{0} is not a valid language".format(language))
445444

446-
context = {'episodeid': kwargs.get('episodeid', episode_id), "language": language,
445+
context = {"language": language,
447446
'mirror': self.mirrors.get_mirror(TypeMask.XML).url,
448447
'api_key': self.config['api_key']}
449448

pytvdbapi/tests/test_api.py

+6-7
Original file line numberDiff line numberDiff line change
@@ -663,15 +663,14 @@ def test_invalid_language(self):
663663
self.assertRaises(error.TVDBValueError, api.get_episode, 308834, "foo")
664664
self.assertRaises(error.TVDBValueError, api.get_episode, 308834, "")
665665

666-
def test_invalid_id(self):
667-
"""
668-
If the episode can not be found, a TVDBValueError should be raised.
669-
"""
666+
def test_missing_id(self):
667+
"""It should be possible to call get_episode without passing id as positional argument"""
670668
api = TVDB("B43FF87DE395DF56")
671669

672-
self.assertRaises(error.TVDBNotFoundError, api.get_episode, -1, "en")
673-
self.assertRaises(error.TVDBNotFoundError, api.get_episode, "foo", "en")
674-
self.assertRaises(error.TVDBNotFoundError, api.get_episode, "", "en")
670+
ep = api.get_episode("en", "id", True, episodeid=308834)
671+
672+
self.assertEqual(ep.id, 308834)
673+
self.assertEqual(ep.EpisodeName, 'Crocodile')
675674

676675
def test_episode_id_kwarg(self):
677676
"""It should be possible to load the episode passing the episode id as a kwarg"""

pytvdbapi/utils.py

+26-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525

2626
from functools import wraps
2727
from collections import MutableMapping
28-
from pytvdbapi._compat import make_unicode
28+
29+
from pytvdbapi._compat import make_unicode, int_types
30+
2931

3032
__all__ = ['unicode_arguments', 'merge', 'TransformedDictionary', 'InsensitiveDictionary']
3133

@@ -47,6 +49,29 @@ def __wrapper__(*args, **kwargs):
4749
return __wrapper__
4850

4951

52+
def deprecate_episode_id(func):
53+
"""
54+
Utility function to help deprecating the episode_id parameter without loosing backward compatibility.
55+
56+
:param func: The function to wrap
57+
:type func: A function object
58+
"""
59+
@wraps(func)
60+
def __wrapper__(*args, **kwargs):
61+
args = list(args)
62+
63+
# Check if the first argument is an int, and assume that it was the episode id
64+
if isinstance(args[1], int_types):
65+
episodeid = args[1]
66+
if 'episodeid' not in kwargs:
67+
kwargs['episodeid'] = episodeid
68+
69+
del args[1]
70+
71+
return func(*args, **kwargs)
72+
return __wrapper__
73+
74+
5075
def merge(dict1, dict2, decision=lambda x, y: y):
5176
"""
5277
:param dict1: First dictionary to merge

0 commit comments

Comments
 (0)