File size: 5,192 Bytes
97f04a9 cd0bfbf 97f04a9 24c3a19 97f04a9 328e22b 82321d6 328e22b 97f04a9 328e22b 82321d6 328e22b 97f04a9 f9962fa 82321d6 f9962fa 82321d6 78b647b 82321d6 ca1059b 78b647b 82321d6 78b647b f9962fa 328e22b 82321d6 97f04a9 82321d6 97f04a9 82321d6 328e22b 97f04a9 328e22b 97f04a9 328e22b 97f04a9 24c3a19 328e22b 24c3a19 328e22b 24c3a19 82321d6 24c3a19 82321d6 24c3a19 82321d6 328e22b 24c3a19 328e22b 24c3a19 328e22b 24c3a19 82321d6 24c3a19 82321d6 24c3a19 82321d6 328e22b 24c3a19 b2aa04f cc30577 328e22b 25de36d 24c3a19 328e22b 25de36d 24c3a19 328e22b 25de36d 24c3a19 328e22b 25de36d 24c3a19 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# -*- coding: utf-8 -*-
import random
from unittest import mock
from pytube import request
from pytube import Stream
def test_filesize(cipher_signature, mocker):
mocker.patch.object(request, "get")
request.get.return_value = {"content-length": "6796391"}
assert cipher_signature.streams.first().filesize == 6796391
def test_default_filename(cipher_signature):
expected = "PSY - GANGNAM STYLE(๊ฐ๋จ์คํ์ผ) MV.mp4"
stream = cipher_signature.streams.first()
assert stream.default_filename == expected
def test_title(cipher_signature):
expected = "PSY - GANGNAM STYLE(๊ฐ๋จ์คํ์ผ) M/V"
stream = cipher_signature.streams.first()
assert stream.title == expected
expected = "PSY - GANGNAM STYLE(๊ฐ๋จ์คํ์ผ)"
stream.player_config_args = {
"player_response": {"videoDetails": {"title": expected}},
}
assert stream.title == expected
expected = "Unknown YouTube Video Title"
stream.player_config_args = {}
assert stream.title == expected
def test_download(cipher_signature, mocker):
mocker.patch.object(request, "get")
request.get.side_effect = [
{"content-length": "16384"},
{"content-length": "16384"},
iter([str(random.getrandbits(8 * 1024))]),
]
with mock.patch("pytube.streams.open", mock.mock_open(), create=True):
stream = cipher_signature.streams.first()
stream.download()
def test_progressive_streams_return_includes_audio_track(cipher_signature):
stream = cipher_signature.streams.filter(progressive=True).first()
assert stream.includes_audio_track
def test_progressive_streams_return_includes_video_track(cipher_signature):
stream = cipher_signature.streams.filter(progressive=True).first()
assert stream.includes_video_track
def test_on_progress_hook(cipher_signature, mocker):
callback_fn = mock.MagicMock()
cipher_signature.register_on_progress_callback(callback_fn)
mocker.patch.object(request, "get")
request.get.side_effect = [
{"content-length": "16384"},
{"content-length": "16384"},
iter([str(random.getrandbits(8 * 1024))]),
]
with mock.patch("pytube.streams.open", mock.mock_open(), create=True):
stream = cipher_signature.streams.first()
stream.download()
assert callback_fn.called
args, _ = callback_fn.call_args
assert len(args) == 4
stream, _, _, _ = args
assert isinstance(stream, Stream)
def test_on_complete_hook(cipher_signature, mocker):
callback_fn = mock.MagicMock()
cipher_signature.register_on_complete_callback(callback_fn)
mocker.patch.object(request, "get")
request.get.side_effect = [
{"content-length": "16384"},
{"content-length": "16384"},
iter([str(random.getrandbits(8 * 1024))]),
]
with mock.patch("pytube.streams.open", mock.mock_open(), create=True):
stream = cipher_signature.streams.first()
stream.download()
assert callback_fn.called
def test_author(cipher_signature):
expected = "Test author"
cipher_signature.player_config_args = {
"player_response": {"videoDetails": {"author": expected}}
}
assert cipher_signature.author == expected
expected = "unknown"
cipher_signature.player_config_args = {}
assert cipher_signature.author == expected
def test_thumbnail_when_in_details(cipher_signature):
expected = "some url"
cipher_signature.player_config_args = {
"player_response": {
"videoDetails": {"thumbnail": {"thumbnails": [{"url": expected}]}}
}
}
assert cipher_signature.thumbnail_url == expected
def test_thumbnail_when_not_in_details(cipher_signature):
expected = "https://img.youtube.com/vi/9bZkp7q19f0/maxresdefault.jpg"
cipher_signature.player_config_args = {}
assert cipher_signature.thumbnail_url == expected
def test_repr_for_audio_streams(cipher_signature):
stream = str(cipher_signature.streams.filter(only_audio=True).first())
expected = (
'<Stream: itag="140" mime_type="audio/mp4" abr="128kbps" '
'acodec="mp4a.40.2" progressive="False" type="audio">'
)
assert stream == expected
def test_repr_for_video_streams(cipher_signature):
stream = str(cipher_signature.streams.filter(only_video=True).first())
expected = (
'<Stream: itag="137" mime_type="video/mp4" res="1080p" fps="30fps" '
'vcodec="avc1.640028" progressive="False" type="video">'
)
assert stream == expected
def test_repr_for_progressive_streams(cipher_signature):
stream = str(cipher_signature.streams.filter(progressive=True).first())
expected = (
'<Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" '
'vcodec="avc1.42001E" acodec="mp4a.40.2" progressive="True" type="video">'
)
assert stream == expected
def test_repr_for_adaptive_streams(cipher_signature):
stream = str(cipher_signature.streams.filter(adaptive=True).first())
expected = (
'<Stream: itag="137" mime_type="video/mp4" res="1080p" fps="30fps" '
'vcodec="avc1.640028" progressive="False" type="video">'
)
assert stream == expected
|