瀏覽代碼

YoutubeDL: only set the ‘formats’ field of the info_dict if it was already set before

It caused a circular reference error, when trying to dump it to json (for example with the test video for myvideo.de or any other video without formats)
Jaime Marquínez Ferrándiz 11 年之前
父節點
當前提交
b3d9ef88ec
共有 1 個文件被更改,包括 6 次插入1 次删除
  1. 6 1
      youtube_dl/YoutubeDL.py

+ 6 - 1
youtube_dl/YoutubeDL.py

@@ -688,7 +688,12 @@ class YoutubeDL(object):
                         ext_ord)
                         ext_ord)
             formats = sorted(formats, key=_free_formats_key)
             formats = sorted(formats, key=_free_formats_key)
 
 
-        info_dict['formats'] = formats
+        if formats[0] is not info_dict: 
+            # only set the 'formats' fields if the original info_dict list them
+            # otherwise we end up with a circular reference, the first (and unique)
+            # element in the 'formats' field in info_dict is info_dict itself, 
+            # wich can't be exported to json
+            info_dict['formats'] = formats
         if self.params.get('listformats', None):
         if self.params.get('listformats', None):
             self.list_formats(info_dict)
             self.list_formats(info_dict)
             return
             return