diff --git a/.actions/assistant.py b/.actions/assistant.py index 0c6b567885a2c..ce253a96c4c21 100644 --- a/.actions/assistant.py +++ b/.actions/assistant.py @@ -1,8 +1,9 @@ import os import re +import shutil from itertools import chain +from os.path import dirname, isfile from pathlib import Path -from pprint import pprint from typing import Dict, List, Optional, Sequence, Tuple import pkg_resources @@ -65,6 +66,7 @@ def _replace_imports(lines: List[str], mapping: List[Tuple[str, str]]) -> List[s def copy_replace_imports( source_dir: str, source_imports: List[str], target_imports: List[str], target_dir: Optional[str] = None ) -> None: + """Copy package content with import adjustments.""" print(f"Replacing imports: {locals()}") assert len(source_imports) == len(target_imports), ( "source and target imports must have the same length, " @@ -75,19 +77,27 @@ def copy_replace_imports( ls = _retrieve_files(source_dir) for fp in ls: - if fp.endswith(".py") or not fp.endswith(".pyc"): - with open(fp, encoding="utf-8") as fo: - try: - lines = fo.readlines() - except UnicodeDecodeError: - # a binary file, skip - print(f"Skipped replacing imports for {fp}") - continue - lines = _replace_imports(lines, list(zip(source_imports, target_imports))) - fp_new = fp.replace(source_dir, target_dir) - os.makedirs(os.path.dirname(fp_new), exist_ok=True) - with open(fp_new, "w", encoding="utf-8") as fo: - fo.writelines(lines) + fp_new = fp.replace(source_dir, target_dir) + _, ext = os.path.splitext(fp) + if ext in (".png", ".jpg", ".ico"): + os.makedirs(dirname(fp_new), exist_ok=True) + if not isfile(fp_new): + shutil.copy(fp, fp_new) + continue + elif ext in (".pyc",): + continue + # Try to parse everything else + with open(fp, encoding="utf-8") as fo: + try: + lines = fo.readlines() + except UnicodeDecodeError: + # a binary file, skip + print(f"Skipped replacing imports for {fp}") + continue + lines = _replace_imports(lines, list(zip(source_imports, target_imports))) + os.makedirs(os.path.dirname(fp_new), exist_ok=True) + with open(fp_new, "w", encoding="utf-8") as fo: + fo.writelines(lines) def create_mirror_package(source_dir: str, package_mapping: Dict[str, str]) -> None: @@ -129,7 +139,7 @@ def _prune_packages(req_file: str, packages: Sequence[str]) -> None: req = list(pkg_resources.parse_requirements(ln_))[0] if req.name not in packages: final.append(line) - pprint(final) + print(final) path.write_text("\n".join(final)) @staticmethod @@ -147,7 +157,7 @@ def replace_oldest_ver(requirement_fnames: Sequence[str] = REQUIREMENT_FILES_ALL def copy_replace_imports( source_dir: str, source_import: str, target_import: str, target_dir: Optional[str] = None ) -> None: - """Recursively replace imports in given folder.""" + """Copy package content with import adjustments.""" source_imports = source_import.strip().split(",") target_imports = target_import.strip().split(",") copy_replace_imports(source_dir, source_imports, target_imports, target_dir=target_dir)