aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey M․ <dstftw@gmail.com>2016-08-07 20:45:18 +0700
committerSergey M․ <dstftw@gmail.com>2016-08-07 20:45:18 +0700
commita8795327cae2bfce299d770039db40a3ac4df2e3 (patch)
treeebf3425e92819d7d38434f6ed96d7faeb46469f7
parentd34995a9e3f596c4dd80178d99f7bd8dbc748e2b (diff)
downloadyoutube-dl-a8795327cae2bfce299d770039db40a3ac4df2e3.tar.xz
[utils] Add support TV Parental Guidelines ratings in parse_age_limit
-rw-r--r--test/test_utils.py15
-rw-r--r--youtube_dl/utils.py20
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):