]>
jfr.im git - yt-dlp.git/blob - test/test_write_annotations.py
84b8f39e00a45458e3c3a37308332b97068d6e27
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
+ '.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__':