]>
Raphaƫl G. Git Repositories - youtubedl/blob - test/test_write_annotations.py
   3 from __future__ 
import unicode_literals
 
   5 # Allow direct execution 
   9 sys
.path
.insert(0, os
.path
.dirname(os
.path
.dirname(os
.path
.abspath(__file__
)))) 
  11 from test
.helper 
import get_params
, try_rm
 
  16 import xml
.etree
.ElementTree
 
  18 import youtube_dl
.YoutubeDL
 
  19 import youtube_dl
.extractor
 
  22 class YoutubeDL(youtube_dl
.YoutubeDL
): 
  23     def __init__(self
, *args
, **kwargs
): 
  24         super(YoutubeDL
, self
).__init
__(*args
, **kwargs
) 
  25         self
.to_stderr 
= self
.to_screen
 
  28     'writeannotations': True, 
  29     'skip_download': True, 
  30     'writeinfojson': False, 
  35 TEST_ID 
= 'gr51aVj-mLg' 
  36 ANNOTATIONS_FILE 
= TEST_ID 
+ '.flv.annotations.xml' 
  37 EXPECTED_ANNOTATIONS 
= ['Speech bubble', 'Note', 'Title', 'Spotlight', 'Label'] 
  40 class TestAnnotations(unittest
.TestCase
): 
  45     def test_info_json(self
): 
  46         expected 
= list(EXPECTED_ANNOTATIONS
)  # Two annotations could have the same text. 
  47         ie 
= youtube_dl
.extractor
.YoutubeIE() 
  48         ydl 
= YoutubeDL(params
) 
  49         ydl
.add_info_extractor(ie
) 
  50         ydl
.download([TEST_ID
]) 
  51         self
.assertTrue(os
.path
.exists(ANNOTATIONS_FILE
)) 
  53         with io
.open(ANNOTATIONS_FILE
, 'r', encoding
='utf-8') as annof
: 
  54             annoxml 
= xml
.etree
.ElementTree
.parse(annof
) 
  55         self
.assertTrue(annoxml 
is not None, 'Failed to parse annotations XML') 
  56         root 
= annoxml
.getroot() 
  57         self
.assertEqual(root
.tag
, 'document') 
  58         annotationsTag 
= root
.find('annotations') 
  59         self
.assertEqual(annotationsTag
.tag
, 'annotations') 
  60         annotations 
= annotationsTag
.findall('annotation') 
  62         # Not all the annotations have TEXT children and the annotations are returned unsorted. 
  64             self
.assertEqual(a
.tag
, 'annotation') 
  65             if a
.get('type') == 'text': 
  66                 textTag 
= a
.find('TEXT') 
  68                 self
.assertTrue(text 
in expected
)  # assertIn only added in python 2.7 
  69                 # remove the first occurance, there could be more than one annotation with the same text 
  71         # We should have seen (and removed) all the expected annotation texts. 
  72         self
.assertEqual(len(expected
), 0, 'Not all expected annotations were found.') 
  75         try_rm(ANNOTATIONS_FILE
) 
  77 if __name__ 
== '__main__':