]>
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
29 'writeannotations': True,
30 'skip_download': True,
31 'writeinfojson': False,
36 TEST_ID
= 'gr51aVj-mLg'
37 ANNOTATIONS_FILE
= TEST_ID
+ '.annotations.xml'
38 EXPECTED_ANNOTATIONS
= ['Speech bubble', 'Note', 'Title', 'Spotlight', 'Label']
41 class TestAnnotations(unittest
.TestCase
):
46 def test_info_json(self
):
47 expected
= list(EXPECTED_ANNOTATIONS
) # Two annotations could have the same text.
48 ie
= youtube_dl
.extractor
.YoutubeIE()
49 ydl
= YoutubeDL(params
)
50 ydl
.add_info_extractor(ie
)
51 ydl
.download([TEST_ID
])
52 self
.assertTrue(os
.path
.exists(ANNOTATIONS_FILE
))
54 with io
.open(ANNOTATIONS_FILE
, 'r', encoding
='utf-8') as annof
:
55 annoxml
= xml
.etree
.ElementTree
.parse(annof
)
56 self
.assertTrue(annoxml
is not None, 'Failed to parse annotations XML')
57 root
= annoxml
.getroot()
58 self
.assertEqual(root
.tag
, 'document')
59 annotationsTag
= root
.find('annotations')
60 self
.assertEqual(annotationsTag
.tag
, 'annotations')
61 annotations
= annotationsTag
.findall('annotation')
63 # Not all the annotations have TEXT children and the annotations are returned unsorted.
65 self
.assertEqual(a
.tag
, 'annotation')
66 if a
.get('type') == 'text':
67 textTag
= a
.find('TEXT')
69 self
.assertTrue(text
in expected
) # assertIn only added in python 2.7
70 # remove the first occurrence, there could be more than one annotation with the same text
72 # We should have seen (and removed) all the expected annotation texts.
73 self
.assertEqual(len(expected
), 0, 'Not all expected annotations were found.')
76 try_rm(ANNOTATIONS_FILE
)
79 if __name__
== '__main__':