diff --git a/TODOs.md b/TODOs.md index 291b737..3c98425 100644 --- a/TODOs.md +++ b/TODOs.md @@ -1,7 +1,8 @@ ## Things to work on -| | | -|:--------------------------------------------|---------------:| -| Parallelize app object creation. |
  • [ ]
  • | -| Parallelize app patching. |
  • [ ]
  • | -| Ability to provide local patching resources |
  • [X]
  • | +| | | +|:------------------------------------------------------|---------------:| +| Parallelize app object creation. |
  • [ ]
  • | +| Parallelize app patching. |
  • [ ]
  • | +| Ability to provide local patching resources |
  • [X]
  • | +| Ability to provide changelog repo in update_changelog |
  • [ ]
  • | diff --git a/scripts/status_check.py b/scripts/status_check.py index 253bb71..3eeeaba 100644 --- a/scripts/status_check.py +++ b/scripts/status_check.py @@ -10,7 +10,7 @@ from google_play_scraper.exceptions import GooglePlayScraperException from src.exceptions import APKMirrorScrapperFailure from src.patches import Patches -from src.utils import handle_response +from src.utils import handle_github_response not_found_icon = "https://img.icons8.com/bubbles/500/android-os.png" headers = { @@ -105,7 +105,7 @@ def generate_markdown_table(data: List[List[str]]) -> str: def main() -> None: repo_url = "https://api.revanced.app/v2/patches/latest" response = requests.get(repo_url) - handle_response(response) + handle_github_response(response) parsed_data = response.json() compatible_packages = parsed_data["patches"] diff --git a/src/downloader/download.py b/src/downloader/download.py index 4f40a71..c0e560b 100644 --- a/src/downloader/download.py +++ b/src/downloader/download.py @@ -12,7 +12,7 @@ from src.config import RevancedConfig from src.downloader.utils import implement_method from src.exceptions import PatchingFailed from src.patches import Patches -from src.utils import handle_response +from src.utils import handle_github_response class Downloader(object): @@ -54,7 +54,7 @@ class Downloader(object): stream=True, headers=headers, ) - handle_response(response) + handle_github_response(response) total = int(response.headers.get("content-length", 0)) bar = tqdm( desc=file_name, diff --git a/src/downloader/github.py b/src/downloader/github.py index 30e494a..fb8a014 100644 --- a/src/downloader/github.py +++ b/src/downloader/github.py @@ -8,7 +8,7 @@ from loguru import logger from src.config import RevancedConfig from src.downloader.download import Downloader -from src.utils import handle_response, update_changelog +from src.utils import handle_github_response, update_changelog class Github(Downloader): @@ -35,7 +35,7 @@ class Github(Downloader): logger.debug("Using personal access token") headers["Authorization"] = f"token {self.config.personal_access_token}" response = requests.get(repo_url, headers=headers) - handle_response(response) + handle_github_response(response) if repo_name == "revanced-patches": download_url = response.json()["assets"][1]["browser_download_url"] else: @@ -78,7 +78,7 @@ class Github(Downloader): if config.personal_access_token: headers["Authorization"] = f"token {config.personal_access_token}" response = requests.get(api_url, headers=headers) - handle_response(response) + handle_github_response(response) assets = response.json()["assets"] try: filter_pattern = re.compile(asset_filter) diff --git a/src/parser.py b/src/parser.py index 4db166c..7532b5f 100644 --- a/src/parser.py +++ b/src/parser.py @@ -15,6 +15,14 @@ from src.utils import possible_archs class Parser(object): """Revanced Parser.""" + CLI_JAR = "-jar" + APK_ARG = "-a" + PATCHES_ARG = "-b" + INTEGRATIONS_ARG = "-m" + OUTPUT_ARG = "-o" + KEYSTORE_ARG = "--keystore" + OPTIONS_ARG = "--options" + def __init__(self, patcher: Patches, config: RevancedConfig) -> None: self._PATCHES: List[str] = [] self._EXCLUDED: List[str] = [] @@ -78,19 +86,19 @@ class Parser(object): :param app: Name of the app """ args = [ - "-jar", + self.CLI_JAR, app.resource["cli"], - "-a", + self.APK_ARG, f"{app.app_name}.apk", - "-b", + self.PATCHES_ARG, app.resource["patches"], - "-m", + self.INTEGRATIONS_ARG, app.resource["integrations"], - "-o", + self.OUTPUT_ARG, app.get_output_file_name(), - "--keystore", + self.KEYSTORE_ARG, app.keystore_name, - "--options", + self.OPTIONS_ARG, "options.json", ] if app.experiment: diff --git a/src/patches.py b/src/patches.py index 6161229..3d479d4 100644 --- a/src/patches.py +++ b/src/patches.py @@ -1,6 +1,5 @@ """Revanced Patches.""" import json -import os from typing import Any, Dict, List, Tuple from loguru import logger @@ -64,18 +63,10 @@ class Patches(object): """Return supported apps.""" return Patches._revanced_app_ids - def scrap_patches(self, file_name: str) -> Any: - """Scrap Patches.""" - if os.path.exists(file_name): - with open(file_name) as f: - patches = json.load(f) - return patches - raise PatchesJsonFailed() - - # noinspection DuplicatedCode def fetch_patches(self, config: RevancedConfig, app: APP) -> None: """Function to fetch all patches.""" - patches = self.scrap_patches( + patch_loader = PatchLoader() + patches = patch_loader.load_patches( f'{config.temp_folder}/{app.resource["patches_json"]}' ) for app_name in (self.revanced_app_ids[x][1] for x in self.revanced_app_ids): @@ -121,7 +112,6 @@ class Patches(object): pass return patches, version - # noinspection IncorrectFormatting def include_exclude_patch( self, app: APP, parser: Any, patches: List[Dict[str, str]] ) -> None: @@ -164,3 +154,17 @@ class Patches(object): recommended_version = app.app_version app.set_recommended_version(recommended_version, experiment) return total_patches + + +class PatchLoader: + """Patch Loader.""" + + @staticmethod + def load_patches(file_name: str) -> Any: + """Load patches from a file.""" + try: + with open(file_name) as f: + patches = json.load(f) + return patches + except FileNotFoundError: + raise PatchesJsonFailed() diff --git a/src/utils.py b/src/utils.py index d94c0cc..ad3f723 100644 --- a/src/utils.py +++ b/src/utils.py @@ -27,18 +27,20 @@ def update_changelog(name: str, response: Dict[str, str]) -> None: publish_time = f"**Published at** -
    {response['published_at']}" footer = f"
    Change logs generated by [Docker Py Revanced]({parent_repo})\n" collapse_end = "" - change_log = ( - collapse_start - + release_version - + change_log - + publish_time - + footer - + collapse_end + change_log = "".join( + [ + collapse_start, + release_version, + change_log, + publish_time, + footer, + collapse_end, + ] ) file1.write(change_log) -def handle_response(response: Response) -> None: +def handle_github_response(response: Response) -> None: """Handle Get Request Response.""" response_code = response.status_code if response_code != 200: @@ -50,21 +52,21 @@ def handle_response(response: Response) -> None: def slugify(string: str) -> str: """Converts a string to a slug format.""" # Convert to lowercase - string = string.lower() + modified_string = string.lower() # Remove special characters - string = re.sub(r"[^\w\s-]", "", string) + modified_string = re.sub(r"[^\w\s-]", "", modified_string) # Replace spaces with dashes - string = re.sub(r"\s+", "-", string) + modified_string = re.sub(r"\s+", "-", modified_string) # Remove consecutive dashes - string = re.sub(r"-+", "-", string) + modified_string = re.sub(r"-+", "-", modified_string) # Remove leading and trailing dashes - string = string.strip("-") + modified_string = modified_string.strip("-") - return string + return modified_string def check_java(dry_run: bool) -> None: @@ -95,10 +97,11 @@ def extra_downloads(config: RevancedConfig) -> None: url, file_name = extra.split("@") file_name_without_extension, file_extension = os.path.splitext(file_name) - if file_extension.lower() == ".apk": - new_file_name = f"{file_name_without_extension}-output{file_extension}" - else: - raise ValueError("Only .apk extensions are allowed.") + if file_extension.lower() != ".apk": + logger.info(f"Only .apk extensions are allowed {file_name}.") + continue + + new_file_name = f"{file_name_without_extension}-output{file_extension}" APP.download(url, config, assets_filter=".*apk", file_name=new_file_name) except (ValueError, IndexError): logger.info(