mirror of
https://github.com/lrnselfreliance/wrolpi.git
synced 2026-10-26 19:01:39 -04:00
commit1663e1be9eAuthor: Roland <roland@learningselfreliance.com> Date: Thu Dec 30 19:37:25 2021 -0700 Setting downloader to video when a channel schedules it's videos for download. commita6811f9e87Author: Roland <roland@learningselfreliance.com> Date: Thu Dec 30 19:33:27 2021 -0700 Setting channel downloader when spreading channel downloads. commitb63c8f132aAuthor: Roland <roland@learningselfreliance.com> Date: Thu Dec 30 19:28:53 2021 -0700 Fixing DownloadManager.kill commit120ce7cd2cAuthor: Roland <roland@learningselfreliance.com> Date: Thu Dec 30 19:10:12 2021 -0700 Fixing OTP api urls. commitd3b985241bAuthor: Roland <roland@learningselfreliance.com> Date: Thu Dec 30 19:07:48 2021 -0700 Channel Cancel button does not submit form. commit9d1a0ecd55Author: Roland <roland@learningselfreliance.com> Date: Thu Dec 30 19:00:53 2021 -0700 A Channel without an existing Download cannot be downloaded. commite7c920f382Author: Roland <roland@learningselfreliance.com> Date: Thu Dec 30 18:41:02 2021 -0700 Fixing typing. commitd56c8fde24Author: Roland <roland@learningselfreliance.com> Date: Thu Dec 30 18:36:02 2021 -0700 Testing bad downloader param. commite3c57ef674Author: Roland <roland@learningselfreliance.com> Date: Thu Dec 30 18:31:35 2021 -0700 Adding __json__ to Downloader for sending them to the FE. Hiding ChannelDownloader because it will be handled specifically. commit047b507119Author: Roland <roland@learningselfreliance.com> Date: Thu Dec 30 18:20:37 2021 -0700 Downloader can be specified by the user. commit4a169ba43cAuthor: Roland <roland@learningselfreliance.com> Date: Tue Dec 28 18:37:30 2021 -0700 Download info a set in create_downloads. commit8778d53fa1Author: Roland <roland@learningselfreliance.com> Date: Tue Dec 28 18:21:43 2021 -0700 Fixing Download.info_json name. commitb28bacfd5bAuthor: Roland <roland@learningselfreliance.com> Date: Tue Dec 28 18:17:53 2021 -0700 Downloader names are in the class, not in the init. commitf5ce952da0Author: Roland <roland@learningselfreliance.com> Date: Tue Dec 28 18:07:42 2021 -0700 Download info can be saved during the download process and can be used by the Downloader.
125 lines
3.6 KiB
Python
125 lines
3.6 KiB
Python
import pathlib
|
|
import shutil
|
|
from uuid import uuid4
|
|
|
|
import mock
|
|
import pytest
|
|
|
|
from modules.videos.channel.lib import spread_channel_downloads
|
|
from modules.videos.downloader import VideoDownloader, ChannelDownloader
|
|
from modules.videos.models import Channel, Video
|
|
from wrolpi.common import sanitize_link
|
|
from wrolpi.downloader import DownloadFrequency, DownloadManager
|
|
from wrolpi.vars import PROJECT_DIR
|
|
|
|
|
|
@pytest.fixture
|
|
def simple_channel(test_session, test_directory) -> Channel:
|
|
"""
|
|
Get a Channel with the minimum properties. This Channel has no download!
|
|
"""
|
|
channel = Channel(
|
|
directory=test_directory,
|
|
name='Simple Channel',
|
|
url='https://example.com/channel1',
|
|
download_frequency=None, # noqa
|
|
link='simplechannel',
|
|
)
|
|
test_session.add(channel)
|
|
test_session.commit()
|
|
return channel
|
|
|
|
|
|
@pytest.fixture
|
|
def channel_factory(test_session, test_directory):
|
|
"""
|
|
Create a random Channel with a directory, but no frequency.
|
|
"""
|
|
|
|
def _():
|
|
name = str(uuid4())
|
|
directory = test_directory / name
|
|
directory.mkdir()
|
|
channel = Channel(
|
|
directory=directory, # noqa
|
|
name=name,
|
|
url=f'https://example.com/{name}',
|
|
download_frequency=None, # noqa
|
|
link=sanitize_link(name),
|
|
)
|
|
test_session.add(channel)
|
|
test_session.commit()
|
|
return channel
|
|
|
|
return _
|
|
|
|
|
|
@pytest.fixture
|
|
def download_channel(test_session, test_directory) -> Channel:
|
|
"""
|
|
Get a test Channel that has a download frequency.
|
|
"""
|
|
# Add a frequency to the test channel, then give it a download.
|
|
channel = Channel(
|
|
directory=test_directory,
|
|
name='Download Channel',
|
|
url='https://example.com/channel1',
|
|
download_frequency=DownloadFrequency.weekly,
|
|
link='downloadchannel',
|
|
)
|
|
test_session.add(channel)
|
|
test_session.commit()
|
|
spread_channel_downloads()
|
|
return channel
|
|
|
|
|
|
@pytest.fixture
|
|
def simple_video(test_session, test_directory, simple_channel) -> Video:
|
|
"""
|
|
A Video with a video file whose channel is the Simple Channel.
|
|
"""
|
|
video_path = test_directory / 'simple_video.mp4'
|
|
video_path.touch()
|
|
video = Video(video_path=video_path, channel_id=simple_channel.id)
|
|
test_session.add(video)
|
|
test_session.commit()
|
|
video = test_session.query(Video).filter_by(id=video.id).one()
|
|
return video
|
|
|
|
|
|
@pytest.fixture
|
|
def video_file(test_directory) -> pathlib.Path:
|
|
destination = test_directory / f'{uuid4()}.mp4'
|
|
shutil.copy(PROJECT_DIR / 'test/big_buck_bunny_720p_1mb.mp4', destination)
|
|
|
|
yield destination
|
|
|
|
destination.unlink()
|
|
|
|
|
|
@pytest.fixture
|
|
def video_factory(test_session, test_directory):
|
|
def _(channel_id: int = None):
|
|
title = str(uuid4())
|
|
path = str(test_directory / f'{title}.mp4')
|
|
video = Video(video_path=path, title=title, channel_id=channel_id, source_id=title)
|
|
test_session.add(video)
|
|
return video
|
|
|
|
return _
|
|
|
|
|
|
@pytest.fixture
|
|
def video_download_manager(test_download_manager) -> DownloadManager:
|
|
"""
|
|
Get a DownloadManager ready to download Videos and Channels.
|
|
"""
|
|
channel_downloader = ChannelDownloader()
|
|
video_downloader = VideoDownloader(priority=40)
|
|
|
|
test_download_manager.register_downloader(channel_downloader)
|
|
test_download_manager.register_downloader(video_downloader)
|
|
|
|
with mock.patch('modules.videos.downloader.YDL.extract_info') as mock_extract_info: # prevent real downloads
|
|
mock_extract_info.side_effect = Exception('You must patch modules.videos.downloader.YDL.extract_info!')
|
|
yield test_download_manager
|