Преглед изворни кода

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)
             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):
             self.list_formats(info_dict)
             return