Add downloader factory

This commit is contained in:
Serene-Arc
2021-02-11 09:09:37 +10:00
committed by Ali Parlakci
parent 358357590f
commit 81293db8e9
2 changed files with 56 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
#!/usr/bin/env python3
# coding=utf-8
import re
from typing import Type
from bulkredditdownloader.errors import NotADownloadableLinkError
from bulkredditdownloader.site_downloaders.base_downloader import BaseDownloader
from bulkredditdownloader.site_downloaders.direct import Direct
from bulkredditdownloader.site_downloaders.erome import Erome
from bulkredditdownloader.site_downloaders.gfycat import Gfycat
from bulkredditdownloader.site_downloaders.imgur import Imgur
from bulkredditdownloader.site_downloaders.redgifs import Redgifs
class DownloadFactory:
@staticmethod
def pull_lever(url: str) -> Type[BaseDownloader]:
url_beginning = r'\s*(https?://(www.)?)'
if re.match(url_beginning + r'gfycat.com.*', url):
return Gfycat
elif re.match(url_beginning + r'erome.com.*', url):
return Erome
elif re.match(url_beginning + r'imgur.*', url):
return Imgur
elif re.match(url_beginning + r'redgifs.com', url):
return Redgifs
elif re.match(url_beginning + r'[vi].redd\.it.*', url):
return Direct
else:
raise NotADownloadableLinkError('No downloader module exists for url {}'.format(url))

View File

@@ -0,0 +1,25 @@
#!/usr/bin/env python3
# coding=utf-8
import pytest
from bulkredditdownloader.site_downloaders.base_downloader import BaseDownloader
from bulkredditdownloader.site_downloaders.download_factory import DownloadFactory
from bulkredditdownloader.site_downloaders.erome import Erome
from bulkredditdownloader.site_downloaders.gfycat import Gfycat
from bulkredditdownloader.site_downloaders.imgur import Imgur
from bulkredditdownloader.site_downloaders.redgifs import Redgifs
@pytest.mark.parametrize('test_url', ('https://gfycat.com/joyfulpitifulirishterrier',
'https://gfycat.com/blaringaridjellyfish-jensen-ackles-supernatural'))
def test_factory_gfycat(test_url: str):
result = DownloadFactory.pull_lever(test_url)
assert result is Gfycat
@pytest.mark.parametrize('test_url', ('https://www.erome.com/a/bbezvaBn',
'https://www.erome.com/a/p14JFlnm'))
def test_factory_erome(test_url):
result = DownloadFactory.pull_lever(test_url)
assert result is Erome