Kaynağa Gözat

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 yıl önce
ebeveyn
işleme
b3d9ef88ec
1 değiştirilmiş dosya ile 6 ekleme ve 1 silme
  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