from sanic import response, Blueprint from sanic.request import Request from api.common import validate_doc, logger, json_response, wrol_mode_check from api.db import get_db_context from api.errors import UnknownDirectory from api.videos.channel.lib import get_minimal_channels, delete_channel, update_channel, get_channel, create_channel from api.videos.common import check_for_channel_conflicts, \ get_relative_to_media_directory, make_media_directory from api.videos.schema import ChannelsResponse, ChannelResponse, JSONErrorResponse, ChannelPostRequest, \ ChannelPostResponse, ChannelPutRequest, SuccessResponse channel_bp = Blueprint('Channel', url_prefix='/channels') logger = logger.getChild(__name__) @channel_bp.get('/') @validate_doc( summary='Get a list of all Channels', produces=ChannelsResponse, ) async def get_channels(_: Request): channels = await get_minimal_channels() return response.json({'channels': channels}) @channel_bp.route('/<link:string>', methods=['GET', 'OPTIONS']) @validate_doc( summary='Get a Channel',
from typing import Tuple, List from sqlalchemy import or_ from sqlalchemy.orm import Session from sqlalchemy.orm.exc import NoResultFound from youtube_dl import YoutubeDL from api.common import logger, today, ProgressReporter from api.db import get_db_context, get_db_curs from .captions import process_captions from .common import get_downloader_config, get_absolute_media_path, add_video_to_skip_list from .models import Video, Channel from ..errors import UnknownChannel, ChannelURLEmpty from ..vars import UNRECOVERABLE_ERRORS logger = logger.getChild(__name__) ydl_logger = logger.getChild('youtube-dl') YDL = YoutubeDL() YDL.params['logger'] = ydl_logger YDL.add_default_info_extractors() def update_channel(channel=None, link: str = None): """ Connect to the Channel's host website and pull a catalog of all videos. Insert any new videos into the DB. It is expected that any missing videos will be downloaded later. """ with get_db_context() as (engine, session): if not channel: