From b2023cc5fe4ab890160dc547484ec98c23cd8e53 Mon Sep 17 00:00:00 2001 From: Nikhil Badyal <59223300+nikhilbadyal@users.noreply.github.com> Date: Tue, 22 Aug 2023 22:19:01 +0530 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20Output=20app=20dl=20(#301)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 4 +++- src/app.py | 1 + src/downloader/apkmirror.py | 14 ++++++++------ src/downloader/apkpure.py | 6 +++--- src/downloader/apksos.py | 8 ++++---- src/downloader/download.py | 18 +++++++++--------- src/downloader/github.py | 6 +++--- src/downloader/uptodown.py | 10 +++++----- 8 files changed, 36 insertions(+), 31 deletions(-) diff --git a/main.py b/main.py index 95da132..b0de6e4 100644 --- a/main.py +++ b/main.py @@ -34,7 +34,9 @@ def main() -> None: downloader = DownloaderFactory.create_downloader( app=app.app_name, patcher=patcher, config=config ) - app.download_file_name = downloader.download(app.app_version, app.app_name) + app.download_file_name, app.download_dl = downloader.download( + app.app_version, app.app_name + ) logger.info(app) parser.patch_app(app) except AppNotFound as e: diff --git a/src/app.py b/src/app.py index a602ef2..3922798 100644 --- a/src/app.py +++ b/src/app.py @@ -40,6 +40,7 @@ class APP(object): f"{app_name}_ARCHS_TO_BUILD".upper(), config.global_archs_to_build ) self.download_file_name = None + self.download_dl = None self.download_patch_resources(config) def get_output_file_name(self) -> str: diff --git a/src/downloader/apkmirror.py b/src/downloader/apkmirror.py index a7c734f..954074a 100644 --- a/src/downloader/apkmirror.py +++ b/src/downloader/apkmirror.py @@ -1,5 +1,5 @@ """Downloader Class.""" -from typing import Any, Dict +from typing import Any, Dict, Tuple import requests from bs4 import BeautifulSoup, Tag @@ -14,7 +14,7 @@ from src.utils import bs4_parser, contains_any_word, request_header class ApkMirror(Downloader): """Files downloader.""" - def _extract_force_download_link(self, link: str, app: str) -> str: + def _extract_force_download_link(self, link: str, app: str) -> Tuple[str, str]: """Extract force download link.""" notes_divs = self._extracted_search_div(link, "tab-pane") apk_type = self._extracted_search_div(link, "apkm-badge").get_text() @@ -26,12 +26,12 @@ class ApkMirror(Downloader): ): file_name = f"{app}.{extension}" self._download(APK_MIRROR_BASE_URL + possible_link["href"], file_name) - return file_name + return file_name, APK_MIRROR_BASE_URL + possible_link["href"] raise APKMirrorAPKDownloadFailure( f"Unable to extract force download for {app}", url=link ) - def extract_download_link(self, page: str, app: str) -> str: + def extract_download_link(self, page: str, app: str) -> Tuple[str, str]: """Function to extract the download link from apkmirror html page. :param page: Url of the page @@ -93,7 +93,9 @@ class ApkMirror(Downloader): soup = BeautifulSoup(r.text, bs4_parser) return soup.find(class_=search_class) - def specific_version(self, app: str, version: str, main_page: str = "") -> str: + def specific_version( + self, app: str, version: str, main_page: str = "" + ) -> Tuple[str, str]: """Function to download the specified version of app from apkmirror. :param app: Name of the application @@ -109,7 +111,7 @@ class ApkMirror(Downloader): download_page = self.get_download_page(main_page) return self.extract_download_link(download_page, app) - def latest_version(self, app: str, **kwargs: Any) -> str: + def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]: """Function to download whatever the latest version of app from apkmirror. diff --git a/src/downloader/apkpure.py b/src/downloader/apkpure.py index 66b26af..b6d9a45 100644 --- a/src/downloader/apkpure.py +++ b/src/downloader/apkpure.py @@ -1,5 +1,5 @@ """APK Pure Downloader Class.""" -from typing import Any +from typing import Any, Tuple from src.downloader.download import Downloader from src.downloader.sources import apk_sources @@ -9,7 +9,7 @@ from src.patches import Patches class ApkPure(Downloader): """Files downloader.""" - def latest_version(self, app: str, **kwargs: Any) -> str: + def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]: """Function to download whatever the latest version of app from apkmirror. @@ -20,4 +20,4 @@ class ApkPure(Downloader): download_url = apk_sources[app].format(package_name) file_name = f"{app}.apk" self._download(download_url, file_name) - return file_name + return file_name, download_url diff --git a/src/downloader/apksos.py b/src/downloader/apksos.py index 7b6982e..7e4b315 100644 --- a/src/downloader/apksos.py +++ b/src/downloader/apksos.py @@ -1,5 +1,5 @@ """APK SOS Downloader Class.""" -from typing import Any +from typing import Any, Tuple import requests from bs4 import BeautifulSoup @@ -13,7 +13,7 @@ from src.utils import bs4_parser, request_header class ApkSos(Downloader): """Files downloader.""" - def extract_download_link(self, page: str, app: str) -> str: + def extract_download_link(self, page: str, app: str) -> Tuple[str, str]: """Function to extract the download link from apkmirror html page. :param page: Url of the page @@ -27,10 +27,10 @@ class ApkSos(Downloader): if possible_link.get("href"): file_name = f"{app}.apk" self._download(possible_link["href"], file_name) - return file_name + return file_name, possible_link["href"] raise APKSosAPKDownloadFailure(f"Unable to download {app}", url=page) - def latest_version(self, app: str, **kwargs: Any) -> str: + def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]: """Function to download whatever the latest version of app from apkmirror. diff --git a/src/downloader/download.py b/src/downloader/download.py index b2a5e3e..217a41f 100644 --- a/src/downloader/download.py +++ b/src/downloader/download.py @@ -72,11 +72,11 @@ class Downloader(object): self._QUEUE.put((perf_counter() - start, file_name)) logger.debug(f"Downloaded {file_name}") - def extract_download_link(self, page: str, app: str) -> str: + def extract_download_link(self, page: str, app: str) -> Tuple[str, str]: """Extract download link from web page.""" raise NotImplementedError(implement_method) - def specific_version(self, app: str, version: str) -> str: + def specific_version(self, app: str, version: str) -> Tuple[str, str]: """Function to download the specified version of app from apkmirror. :param app: Name of the application @@ -85,7 +85,7 @@ class Downloader(object): """ raise NotImplementedError(implement_method) - def latest_version(self, app: str, **kwargs: Any) -> str: + def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]: """Function to download the latest version of app. :param app: Name of the application @@ -123,22 +123,22 @@ class Downloader(object): base_name, _ = os.path.splitext(filename) return base_name + new_extension - def download(self, version: str, app: str, **kwargs: Any) -> str: + def download(self, version: str, app: str, **kwargs: Any) -> Tuple[str, str]: """Public function to download apk to patch. :param version: version to download :param app: App to download """ if self.config.dry_run: - return "" + return "", "" if app in self.config.existing_downloaded_apks: logger.debug(f"Will not download {app} -v{version} from the internet.") - return app + return app, f"local://{app}" if version and version != "latest": - file_name = self.specific_version(app, version) + file_name, app_dl = self.specific_version(app, version) else: - file_name = self.latest_version(app, **kwargs) - return self.convert_to_apk(file_name) + file_name, app_dl = self.latest_version(app, **kwargs) + return self.convert_to_apk(file_name), app_dl def direct_download(self, dl: str, file_name: str) -> None: """Download from DL.""" diff --git a/src/downloader/github.py b/src/downloader/github.py index 3fbc973..e8fd320 100644 --- a/src/downloader/github.py +++ b/src/downloader/github.py @@ -15,7 +15,7 @@ from src.utils import handle_request_response, update_changelog class Github(Downloader): """Files downloader.""" - def latest_version(self, app: str, **kwargs: Dict[str, str]) -> str: + def latest_version(self, app: str, **kwargs: Dict[str, str]) -> Tuple[str, str]: """Function to download files from GitHub repositories. :param app: App to download @@ -25,7 +25,7 @@ class Github(Downloader): logger.debug( f"Skipping download of {app}. File already exists or dry running." ) - return app + return app, f"local://{app}" owner = str(kwargs["owner"]) repo_name = str(kwargs["name"]) repo_url = f"https://api.github.com/repos/{owner}/{repo_name}/releases/latest" @@ -43,7 +43,7 @@ class Github(Downloader): download_url = response.json()["assets"][0]["browser_download_url"] update_changelog(f"{owner}/{repo_name}", response.json()) self._download(download_url, file_name=app) - return app + return app, download_url @staticmethod def _extract_repo_owner_and_tag(url: str) -> Tuple[str, str, str]: diff --git a/src/downloader/uptodown.py b/src/downloader/uptodown.py index ea02676..3e1e546 100644 --- a/src/downloader/uptodown.py +++ b/src/downloader/uptodown.py @@ -1,5 +1,5 @@ """Upto Down Downloader.""" -from typing import Any +from typing import Any, Tuple import requests from bs4 import BeautifulSoup @@ -14,7 +14,7 @@ from src.utils import bs4_parser, request_header class UptoDown(Downloader): """Files downloader.""" - def extract_download_link(self, page: str, app: str) -> str: + def extract_download_link(self, page: str, app: str) -> Tuple[str, str]: r = requests.get(page, headers=request_header, allow_redirects=True, timeout=60) soup = BeautifulSoup(r.text, bs4_parser) soup = soup.find(id="detail-download-button") @@ -25,9 +25,9 @@ class UptoDown(Downloader): ) file_name = f"{app}.apk" self._download(download_url, file_name) - return file_name + return file_name, download_url - def specific_version(self, app: str, version: str) -> str: + def specific_version(self, app: str, version: str) -> Tuple[str, str]: """Function to download the specified version of app from apkmirror. :param app: Name of the application @@ -51,6 +51,6 @@ class UptoDown(Downloader): ) return self.extract_download_link(download_url, app) - def latest_version(self, app: str, **kwargs: Any) -> str: + def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]: page = f"{apk_sources[app]}/download" return self.extract_download_link(page, app)