[utils] Fix js_to_json
authorPhilipp Hagemeister <phihag@phihag.de>
Tue, 30 Sep 2014 05:56:24 +0000 (07:56 +0200)
committerPhilipp Hagemeister <phihag@phihag.de>
Tue, 30 Sep 2014 22:08:28 +0000 (00:08 +0200)
test/test_utils.py
youtube_dl/utils.py

index 97551ce9c0338665e9f48cdf3e2e6bd1660a1503..113aa44b2e5c319040ebde225a0f9298c766ec31 100644 (file)
@@ -44,6 +44,7 @@ from youtube_dl.utils import (
     limit_length,
     escape_rfc3986,
     escape_url,
+    js_to_json,
 )
 
 
@@ -331,5 +332,14 @@ class TestUtil(unittest.TestCase):
         )
         self.assertEqual(escape_url('http://vimeo.com/56015672#at=0'), 'http://vimeo.com/56015672#at=0')
 
+    def test_js_to_json(self):
+        inp = '''{
+                'clip':{'provider':'pseudo'}
+        }'''
+        self.assertEqual(js_to_json(inp), '''{
+                "clip":{"provider":"pseudo"}
+        }''')
+        json.loads(js_to_json(inp))
+
 if __name__ == '__main__':
     unittest.main()
index f05747097738b806fcc383136fac6e34078f2f72..59851a8c05f15fd4b635702925bc3a2d5360eeea 100644 (file)
@@ -673,6 +673,8 @@ class ExtractorError(Exception):
             expected = True
         if video_id is not None:
             msg = video_id + ': ' + msg
+        if cause:
+            msg += u' (caused by %r)' % cause
         if not expected:
             msg = msg + u'; please report this issue on https://yt-dl.org/bug . Be sure to call youtube-dl with the --verbose flag and include its complete output. Make sure you are using the latest version; type  youtube-dl -U  to update.'
         super(ExtractorError, self).__init__(msg)
@@ -1598,7 +1600,9 @@ def js_to_json(code):
             ([{,]\s*)
             ("[^"]*"|\'[^\']*\'|[a-z0-9A-Z]+)
             (:\s*)
-            ([0-9.]+|true|false|"[^"]*"|\'[^\']*\'|\[|\{)
+            ([0-9.]+|true|false|"[^"]*"|\'[^\']*\'|
+                (?=\[|\{)
+            )
         ''', fix_kv, code)
     res = re.sub(r',(\s*\])', lambda m: m.group(1), res)
     return res