1
0
Fork 0
mirror of synced 2024-06-26 10:00:20 +12:00
bulk-downloader-for-reddit/bulkredditdownloader/site_downloaders/download_factory.py

51 lines
2.2 KiB
Python
Raw Normal View History

2021-02-11 12:09:37 +13:00
#!/usr/bin/env python3
# coding=utf-8
import re
from typing import Type
2021-03-05 16:32:24 +13:00
from bulkredditdownloader.exceptions import NotADownloadableLinkError
2021-02-11 12:09:37 +13:00
from bulkredditdownloader.site_downloaders.base_downloader import BaseDownloader
from bulkredditdownloader.site_downloaders.direct import Direct
from bulkredditdownloader.site_downloaders.erome import Erome
2021-02-15 16:53:21 +13:00
from bulkredditdownloader.site_downloaders.gallery import Gallery
2021-02-11 12:09:37 +13:00
from bulkredditdownloader.site_downloaders.gfycat import Gfycat
2021-03-01 12:51:44 +13:00
from bulkredditdownloader.site_downloaders.gif_delivery_network import GifDeliveryNetwork
2021-02-11 12:09:37 +13:00
from bulkredditdownloader.site_downloaders.imgur import Imgur
from bulkredditdownloader.site_downloaders.redgifs import Redgifs
2021-03-01 12:51:44 +13:00
from bulkredditdownloader.site_downloaders.self_post import SelfPost
from bulkredditdownloader.site_downloaders.vreddit import VReddit
from bulkredditdownloader.site_downloaders.youtube import Youtube
2021-02-11 12:09:37 +13:00
class DownloadFactory:
@staticmethod
def pull_lever(url: str) -> Type[BaseDownloader]:
2021-03-01 12:51:44 +13:00
url_beginning = r'\s*(https?://(www\.)?)'
if re.match(url_beginning + r'erome\.com.*', url):
2021-02-11 12:09:37 +13:00
return Erome
2021-03-01 12:51:44 +13:00
elif re.match(url_beginning + r'reddit\.com/gallery/.*', url):
return Gallery
elif re.match(url_beginning + r'gfycat\.', url):
return Gfycat
elif re.match(url_beginning + r'gifdeliverynetwork', url):
return GifDeliveryNetwork
2021-03-28 13:10:46 +13:00
elif re.match(url_beginning + r'imgur.*', url):
return Imgur
elif re.match(url_beginning + r'i\.imgur.*\.gifv$', url):
2021-02-11 12:09:37 +13:00
return Imgur
elif re.match(url_beginning + r'redgifs.com', url):
return Redgifs
2021-03-01 12:51:44 +13:00
elif re.match(url_beginning + r'reddit\.com/r/', url):
return SelfPost
elif re.match(url_beginning + r'v\.redd\.it', url):
return VReddit
elif re.match(url_beginning + r'youtu\.?be', url):
2021-03-01 12:51:44 +13:00
return Youtube
2021-03-28 13:10:46 +13:00
elif re.match(url_beginning + r'i\.redd\.it.*', url):
return Direct
elif re.match(url_beginning + r'.*/.*\.\w{3,4}$', url):
2021-02-11 12:09:37 +13:00
return Direct
else:
raise NotADownloadableLinkError('No downloader module exists for url {}'.format(url))