🥅 Exception handling (#290)

This commit is contained in:
Nikhil Badyal
2023-08-17 21:09:42 +05:30
committed by GitHub
parent 5bffa4c79c
commit 02e550585c
11 changed files with 105 additions and 35 deletions
+16 -6
View File
@@ -7,7 +7,7 @@ from loguru import logger
from scripts.status_check import headers
from src.downloader.download import Downloader
from src.exceptions import AppNotFound
from src.exceptions import APKMirrorAPKDownloadFailure, APKMirrorAPKNotFound
from src.utils import apkmirror_status_check, bs4_parser
@@ -25,7 +25,9 @@ class ApkMirror(Downloader):
return self._download(
self.config.apk_mirror + possible_link["href"], f"{app}.apk"
)
raise AppNotFound(f"Unable to download apk from {link}")
raise APKMirrorAPKDownloadFailure(
f"Unable to extract force download for {app}", url=link
)
def extract_download_link(self, main_page: str, app: str) -> None:
"""Function to extract the download link from apkmirror html page.
@@ -49,7 +51,9 @@ class ApkMirror(Downloader):
self.config.apk_mirror + final_download_link, app
)
else:
raise AppNotFound(f"Unable to download apk from {main_page}")
raise APKMirrorAPKDownloadFailure(
f"Unable to extract link from {app} version list", url=main_page
)
def get_download_page(self, main_page: str) -> str:
"""Function to get the download page in apk_mirror.
@@ -67,7 +71,9 @@ class ApkMirror(Downloader):
sub_url = row.find(class_="accent_color")["href"]
break
if not sub_url:
raise AppNotFound("Unable to download apk from APKMirror.")
raise APKMirrorAPKDownloadFailure(
"Unable to extract download page", url=main_page
)
return f"{self.config.apk_mirror}{sub_url}"
@staticmethod
@@ -75,7 +81,11 @@ class ApkMirror(Downloader):
"""Extract search div."""
r = requests.get(url, headers=headers)
if r.status_code != 200:
raise AppNotFound(f"Unable to connect with {url} on ApkMirror.")
raise APKMirrorAPKDownloadFailure(
f"Unable to connect with {url} on ApkMirror. Are you blocked by APKMirror or abused apkmirror "
f"?.Reason - {r.text}",
url=url,
)
soup = BeautifulSoup(r.text, bs4_parser)
return soup.find(class_=search_class)
@@ -108,4 +118,4 @@ class ApkMirror(Downloader):
f"Trying to download {app}'s latest version({version}) from apkmirror"
)
return self.specific_version(app, version)
raise AppNotFound("App not found on apkmirror.")
raise APKMirrorAPKNotFound("App not found on apkmirror.")
+2 -8
View File
@@ -4,7 +4,7 @@ from typing import Any
from loguru import logger
from src.downloader.download import Downloader
from src.exceptions import AppNotFound
from src.patches import Patches
class ApkPure(Downloader):
@@ -17,13 +17,7 @@ class ApkPure(Downloader):
:param app: Name of the application
:return: Version of downloaded apk
"""
package_name = None
for package, app_tuple in self.patcher.revanced_app_ids.items():
if app_tuple[0] == app:
package_name = package
if not package_name:
logger.info("Unable to download from apkpure")
raise AppNotFound()
package_name = Patches.get_package_name(app)
download_url = f"https://d.apkpure.com/b/APK/{package_name}?version=latest"
self._download(download_url, f"{app}.apk")
logger.debug(f"Downloaded {app} apk from apk_pure_downloader in rt")
+2 -2
View File
@@ -6,7 +6,7 @@ from bs4 import BeautifulSoup
from scripts.status_check import headers
from src.downloader.download import Downloader
from src.exceptions import AppNotFound
from src.exceptions import APKSosAPKDownloadFailure
from src.utils import bs4_parser
@@ -26,7 +26,7 @@ class ApkSos(Downloader):
for possible_link in possible_links:
if possible_link.get("href"):
return self._download(possible_link["href"], f"{app}.apk")
raise AppNotFound("Unable to download apk from apk_combo")
raise APKSosAPKDownloadFailure(f"Unable to download {app}", url=page)
def latest_version(self, app: str, **kwargs: Any) -> None:
"""Function to download whatever the latest version of app from
+2 -2
View File
@@ -10,7 +10,7 @@ from tqdm import tqdm
from src.config import RevancedConfig
from src.downloader.utils import implement_method
from src.exceptions import PatchingFailed
from src.exceptions import DownloadFailure
from src.patches import Patches
from src.utils import handle_github_response
@@ -37,7 +37,7 @@ class Downloader(object):
def _download(self, url: str, file_name: str) -> None:
if not url:
raise PatchingFailed("No download to download")
raise DownloadFailure("No url provided to download")
if self.file_status_check(
self.config.temp_folder.joinpath(file_name), self.config.dry_run, url
):
+4 -2
View File
@@ -8,7 +8,7 @@ from loguru import logger
from src.config import RevancedConfig
from src.downloader.download import Downloader
from src.exceptions import PatchingFailed
from src.exceptions import DownloadFailure
from src.utils import handle_github_response, update_changelog
@@ -84,7 +84,9 @@ class Github(Downloader):
try:
filter_pattern = re.compile(asset_filter)
except re.error as e:
raise PatchingFailed("Invalid regex pattern provided.") from e
raise DownloadFailure(
f"Invalid regex {asset_filter} pattern provided."
) from e
for asset in assets:
assets_url = asset["browser_download_url"]
assets_name = asset["name"]
+7 -3
View File
@@ -7,7 +7,7 @@ from loguru import logger
from scripts.status_check import headers
from src.downloader.download import Downloader
from src.exceptions import AppNotFound
from src.exceptions import UptoDownAPKDownloadFailure
from src.utils import bs4_parser
@@ -20,7 +20,9 @@ class UptoDown(Downloader):
soup = soup.find(id="detail-download-button")
download_url = soup.get("data-url")
if not download_url:
raise AppNotFound("Unable to download from uptodown.")
raise UptoDownAPKDownloadFailure(
f"Unable to download {app} from uptodown.", url=page
)
self._download(download_url, f"{app}.apk")
logger.debug(f"Downloaded {app} apk from upto_down_downloader in rt")
@@ -45,7 +47,9 @@ class UptoDown(Downloader):
download_url = version_item["data-url"]
break
if download_url is None:
raise AppNotFound(f"Unable to get download url for {app}")
raise UptoDownAPKDownloadFailure(
f"Unable to download {app} from uptodown.", url=url
)
self.extract_download_link(download_url, app)
logger.debug(f"Downloaded {app} apk from upto_down_downloader in rt")