Source code for sirepo.pkcli.devtools

import os
import sys
import re
import subprocess
from pykern import pkunit
from pykern import pksetup
from pykern import pkio
from pykern.pkdebug import pkdp

_RENAMER_EXCLUDE_FILES = re.compile(
    f".*{pkunit.WORK_DIR_SUFFIX}/"
    + r"|.*(_console\.py)|^venv/"
    + r"|^run/"
    + r"|__pycache__/ "
    + r"|\/js\/ext"
    + r"|^.*\.(git|cache)|node_modules"
    + r"|^.*\.(sdds|bun|png|jpg|woff|eot|ttf|tif|gif|ico|h5m|zip|log|db|csv|h5|stl|dat|log|npy|pyc|paramOpt|gz|woff2)$"
)


[docs] def rename_app(old_app_name, new_app_name): _Renamer(old_app_name, new_app_name).rename()
class _Renamer: def __init__(self, old_app_name, new_app_name): self.old_app_name = old_app_name self.new_app_name = new_app_name self.exclude_files = _RENAMER_EXCLUDE_FILES def _iterate(self, rename_function, dirs=False): for f in pkio.walk_tree("./"): if self._exclude(f, dirs): continue rename_function(f) def _rename_paths(self): # rename base and dirnames self._iterate(self._rename_file) self._iterate(self._rename_dir, dirs=True) def _rename_file(self, file_path): if self.old_app_name in file_path.basename: d = str(file_path.dirname) b = str(file_path.basename) os.rename( str(file_path), d + "/" + b.replace(self.old_app_name, self.new_app_name), ) def _rename_dir(self, file_path): if self.old_app_name in file_path.dirname: self._dir(str(file_path.dirname)) def _dir(self, dir): if os.path.exists(dir): t = "" for piece in dir.split("/"): t += f"/{piece}" if self.old_app_name in piece: break os.rename(t, t.replace(self.old_app_name, self.new_app_name)) def _rename_references(self): self._replace_references() self._raise_for_references() def _exclude(self, file, dirs): return re.search(self.exclude_files, pkio.py_path().bestrelpath(file)) def _replace_references(self): for f in pkio.walk_tree("./"): if self._exclude(f, False): continue with pkio.open_text(f) as t: t = t.read() self._replace(f, t) def _replace(self, file, text): if re.search(re.compile(self.old_app_name), text): # TODO (gurhar1133): re.sub instead? pkio.write_text( file, text.replace( self.old_app_name, self.new_app_name, ) .replace( self.old_app_name.title(), self.new_app_name.title(), ) .replace( self.old_app_name.upper(), self.new_app_name.upper(), ), ) def _raise_for_references(self): o = ( subprocess.check_output( [ "grep", "-r", "-i", "-I", "--exclude-dir='.pytest_cache'", "--exclude='./x.py'", "--exclude-dir='sirepo.egg-info'", f"{self.old_app_name}", ] ) .decode("utf-8") .split("\n")[:-1] ) r = [] for line in o: if not re.search(self.exclude_files, line.split(":")[0]): r.append(line) if len(r) > 0: m = "\n".join(r) raise AssertionError( f"{m}\n{len(r)} REFERENCES TO {self.old_app_name} FOUND" ) def rename(self): self._rename_paths() self._rename_references()