Edge case coverage
Cover edge cases that shouldn't ever happen but probably will sometime. Also included Imgur changes to cover similar situations of malformed/redirected links.
This commit is contained in:
@@ -25,7 +25,7 @@ class DownloadFactory:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def pull_lever(url: str) -> Type[BaseDownloader]:
|
def pull_lever(url: str) -> Type[BaseDownloader]:
|
||||||
sanitised_url = DownloadFactory.sanitise_url(url)
|
sanitised_url = DownloadFactory.sanitise_url(url)
|
||||||
if re.match(r'(i\.)?imgur.*\.gif.+$', sanitised_url):
|
if re.match(r'imgur\.com', sanitised_url):
|
||||||
return Imgur
|
return Imgur
|
||||||
elif re.match(r'(i\.)?(redgifs|gifdeliverynetwork)', sanitised_url):
|
elif re.match(r'(i\.)?(redgifs|gifdeliverynetwork)', sanitised_url):
|
||||||
return Redgifs
|
return Redgifs
|
||||||
@@ -40,8 +40,6 @@ class DownloadFactory:
|
|||||||
return Gallery
|
return Gallery
|
||||||
elif re.match(r'gfycat\.', sanitised_url):
|
elif re.match(r'gfycat\.', sanitised_url):
|
||||||
return Gfycat
|
return Gfycat
|
||||||
elif re.match(r'(m\.)?imgur.*', sanitised_url):
|
|
||||||
return Imgur
|
|
||||||
elif re.match(r'reddit\.com/r/', sanitised_url):
|
elif re.match(r'reddit\.com/r/', sanitised_url):
|
||||||
return SelfPost
|
return SelfPost
|
||||||
elif re.match(r'(m\.)?youtu\.?be', sanitised_url):
|
elif re.match(r'(m\.)?youtu\.?be', sanitised_url):
|
||||||
|
|||||||
@@ -41,10 +41,11 @@ class Imgur(BaseDownloader):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_data(link: str) -> dict:
|
def _get_data(link: str) -> dict:
|
||||||
link = link.rstrip('?')
|
try:
|
||||||
if re.match(r'(?i).*\.gif.+$', link):
|
imgur_id = re.match(r'.*/(.*?)(\..{0,})?$', link).group(1)
|
||||||
link = link.replace('i.imgur', 'imgur')
|
link = f'https://imgur.com/a/{imgur_id}'
|
||||||
link = re.sub('(?i)\\.gif.+$', '', link)
|
except AttributeError:
|
||||||
|
raise SiteDownloaderError(f'Could not extract Imgur ID from {link}')
|
||||||
|
|
||||||
res = Imgur.retrieve_url(link, cookies={'over18': '1', 'postpagebeta': '0'})
|
res = Imgur.retrieve_url(link, cookies={'over18': '1', 'postpagebeta': '0'})
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class Redgifs(BaseDownloader):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_link(url: str) -> set[str]:
|
def _get_link(url: str) -> set[str]:
|
||||||
try:
|
try:
|
||||||
redgif_id = re.match(r'.*/(.*?)(\..{3,})?$', url).group(1)
|
redgif_id = re.match(r'.*/(.*?)(\..{0,})?$', url).group(1)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
raise SiteDownloaderError(f'Could not extract Redgifs ID from {url}')
|
raise SiteDownloaderError(f'Could not extract Redgifs ID from {url}')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user