File size: 3,234 Bytes
49627f0 ccd4117 49627f0 d68bda8 49627f0 328e22b d2c119a 328e22b 82321d6 328e22b d68bda8 d2c119a 328e22b d68bda8 ccd4117 328e22b d68bda8 328e22b ccd4117 328e22b ccd4117 d68bda8 328e22b d68bda8 328e22b 2f4cd16 67e6144 2f4cd16 ee0deb6 2f4cd16 7f436b1 d156421 ee0deb6 d156421 e0b8c49 d68bda8 e0b8c49 d68bda8 |
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 |
# -*- coding: utf-8 -*-
"""Reusable dependency injected testing components."""
import gzip
import json
import os
from unittest import mock
import pytest
from pytube import YouTube
def load_playback_file(filename):
"""Load a gzip json playback file."""
cur_fp = os.path.realpath(__file__)
cur_dir = os.path.dirname(cur_fp)
fp = os.path.join(cur_dir, "mocks", filename)
with gzip.open(fp, "rb") as fh:
content = fh.read().decode("utf-8")
return json.loads(content)
@mock.patch('pytube.request.urlopen')
def load_and_init_from_playback_file(filename, mock_urlopen):
"""Load a gzip json playback file and create YouTube instance."""
pb = load_playback_file(filename)
# Mock the responses to YouTube
mock_url_open_object = mock.Mock()
mock_url_open_object.read.side_effect = [
pb['watch_html'].encode('utf-8'),
pb['vid_info_raw'].encode('utf-8'),
pb['js'].encode('utf-8')
]
mock_urlopen.return_value = mock_url_open_object
return YouTube(pb["url"])
@pytest.fixture
def cipher_signature():
"""Youtube instance initialized with video id 2lAe1cqCOXo."""
filename = "yt-video-2lAe1cqCOXo-html.json.gz"
return load_and_init_from_playback_file(filename)
@pytest.fixture
def presigned_video():
"""Youtube instance initialized with video id QRS8MkLhQmM."""
filename = "yt-video-QRS8MkLhQmM-html.json.gz"
return load_and_init_from_playback_file(filename)
@pytest.fixture
def age_restricted():
"""Youtube instance initialized with video id irauhITDrsE."""
filename = "yt-video-irauhITDrsE-html.json.gz"
return load_playback_file(filename)
@pytest.fixture
def private():
"""Youtube instance initialized with video id m8uHb5jIGN8."""
filename = "yt-video-m8uHb5jIGN8-html.json.gz"
return load_playback_file(filename)
@pytest.fixture
def missing_recording():
"""Youtube instance initialized with video id 5YceQ8YqYMc."""
filename = "yt-video-5YceQ8YqYMc-html.json.gz"
return load_playback_file(filename)
@pytest.fixture
def playlist_html():
"""Youtube playlist HTML loaded on 2020-01-25 from
https://www.youtube.com/playlist?list=PLzMcBGfZo4-mP7qA9cagf68V06sko5otr"""
file_path = os.path.join(
os.path.dirname(os.path.realpath(__file__)),
"mocks",
"playlist.html.gz",
)
with gzip.open(file_path, "rb") as f:
return f.read().decode("utf-8")
@pytest.fixture
def playlist_long_html():
"""Youtube playlist HTML loaded on 2020-01-25 from
https://www.youtube.com/playlist?list=PLzMcBGfZo4-mP7qA9cagf68V06sko5otr"""
file_path = os.path.join(
os.path.dirname(os.path.realpath(__file__)),
"mocks",
"playlist_long.html.gz",
)
with gzip.open(file_path, "rb") as f:
return f.read().decode("utf-8")
@pytest.fixture
def stream_dict():
"""Youtube instance initialized with video id WXxV9g7lsFE."""
file_path = os.path.join(
os.path.dirname(os.path.realpath(__file__)),
"mocks",
"yt-video-WXxV9g7lsFE-html.json.gz",
)
with gzip.open(file_path, "rb") as f:
content = json.loads(f.read().decode("utf-8"))
return content['watch_html']
|