diff options
| -rw-r--r-- | test/test_utils.py | 15 | ||||
| -rw-r--r-- | youtube_dl/utils.py | 20 | 
2 files changed, 33 insertions, 2 deletions
diff --git a/test/test_utils.py b/test/test_utils.py index 5a2ae4a1e..724346886 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -42,6 +42,7 @@ from youtube_dl.utils import (      ohdave_rsa_encrypt,      OnDemandPagedList,      orderedSet, +    parse_age_limit,      parse_duration,      parse_filesize,      parse_count, @@ -432,6 +433,20 @@ class TestUtil(unittest.TestCase):              url_basename('http://media.w3.org/2010/05/sintel/trailer.mp4'),              'trailer.mp4') +    def test_parse_age_limit(self): +        self.assertEqual(parse_age_limit(None), None) +        self.assertEqual(parse_age_limit(False), None) +        self.assertEqual(parse_age_limit('invalid'), None) +        self.assertEqual(parse_age_limit(0), 0) +        self.assertEqual(parse_age_limit(18), 18) +        self.assertEqual(parse_age_limit(21), 21) +        self.assertEqual(parse_age_limit(22), None) +        self.assertEqual(parse_age_limit('18'), 18) +        self.assertEqual(parse_age_limit('18+'), 18) +        self.assertEqual(parse_age_limit('PG-13'), 13) +        self.assertEqual(parse_age_limit('TV-14'), 14) +        self.assertEqual(parse_age_limit('TV-MA'), 17) +      def test_parse_duration(self):          self.assertEqual(parse_duration(None), None)          self.assertEqual(parse_duration(False), None) diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index ddbfcd2f1..c50238ba1 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -1984,11 +1984,27 @@ US_RATINGS = {  } +TV_PARENTAL_GUIDELINES = { +    'TV-Y': 0, +    'TV-Y7': 7, +    'TV-G': 0, +    'TV-PG': 0, +    'TV-14': 14, +    'TV-MA': 17, +} + +  def parse_age_limit(s): -    if s is None: +    if type(s) == int: +        return s if 0 <= s <= 21 else None +    if not isinstance(s, compat_basestring):          return None      m = re.match(r'^(?P<age>\d{1,2})\+?$', s) -    return int(m.group('age')) if m else US_RATINGS.get(s) +    if m: +        return int(m.group('age')) +    if s in US_RATINGS: +        return US_RATINGS[s] +    return TV_PARENTAL_GUIDELINES.get(s)  def strip_jsonp(code):  | 
