import errno import os from fastapi import HTTPException from src.core.result import ResultTypeEnum, Result from src.core.ydl import VideoDownloader from src.exceptions.download_exceptions import SiteNotImplementedException class BaseParser: BASE_ENCODING = 'utf-8' BASE_DIR = None def __init__(self, params: dict): self.params = params def video_download(self): ydl_opts = { "format": self.params["format"], "merge_output_format": self.params["merge_output_format"], 'outtmpl': self.params["outtmpl"], "quiet": True } downloader = VideoDownloader(link=self.params["link"], ydl_opts=ydl_opts) video_info = downloader.get_info() if os.path.exists( os.path.join(os.getcwd() + f"Youtube/{video_info['id']}_{video_info['width']}.{video_info['ext']}") ): return Result(result_type=ResultTypeEnum.EXIST) try: downloader.ydl_opts["quiet"] = False result = downloader.download() return result except SiteNotImplementedException as ex: raise HTTPException( status_code=400, detail=ex.message ) def make_sure_path_exists(self,): try: os.makedirs(self.BASE_DIR) except OSError as exception: if exception.errno != errno.EEXIST: raise