Source code for pywf_internal_proprietary.define_02_venv
# -*- coding: utf-8 -*-"""Virtualenv management related automation."""importtypingasTimportshutilimportsubprocessimportdataclassesfrom.vendor.emojiimportEmojifrom.vendor.better_pathlibimporttemp_cwdfrom.loggerimportloggerfrom.helpersimportprint_commandifT.TYPE_CHECKING:# pragma: no coverfrom.defineimportPyWf
[docs]@dataclasses.dataclassclassPyWfVenv:""" Namespace class for Virtualenv management related automation. """@logger.emoji_block(msg="Create Virtual Environment",emoji=Emoji.python,)def_create_virtualenv(self:"PyWf",real_run:bool=True,quiet:bool=False,)->bool:""" Run: .. code-block:: bash $ poetry env use python${X}.${Y} :return: a boolean flat to indicate whether a creation is performed. """ifself.dir_venv.exists():logger.info(f"{self.dir_venv} already exists, do nothing.")returnFalseelse:# Ref: https://python-poetry.org/docs/managing-environments/# note that we defined to use in-project = true in poetry.toml fileargs=[f"{self.path_bin_poetry}","config","virtualenvs.in-project","true",]ifquiet:args.append("--quiet")print_command(args)ifreal_runisTrue:subprocess.run(args,check=True)args=[f"{self.path_bin_poetry}","env","use",f"python{self.py_ver_major}.{self.py_ver_minor}",]ifquiet:args.append("--quiet")print_command(args)ifreal_runisTrue:withtemp_cwd(self.dir_project_root):subprocess.run(args,check=True)logger.info("done")returnTrue
[docs]defcreate_virtualenv(self:"PyWf",real_run:bool=True,verbose:bool=True,)->bool:# pragma: no coverwithlogger.disabled(notverbose):returnself._create_virtualenv(real_run=real_run,quiet=notverbose,)
create_virtualenv.__doc__=_create_virtualenv.__doc__@logger.emoji_block(msg="Remove Virtual Environment",emoji=Emoji.python,)def_remove_virtualenv(self:"PyWf",real_run:bool=True,quiet:bool=False,)->bool:""" Run: .. code-block:: bash $ rm -r /path/to/.venv :return: a boolean flag to indicate whether a deletion is performed. """ifself.dir_venv.exists():args=["rm","-r",f"{self.dir_venv}",]print_command(args)ifreal_run:shutil.rmtree(f"{self.dir_venv}",ignore_errors=True)logger.info(f"done! {self.dir_venv} is removed.")returnTrueelse:logger.info(f"{self.dir_venv} doesn't exists, do nothing.")returnFalse