fix: use correct name and static/class methods on template

This commit is contained in:
Daylin Morgan 2023-06-05 14:16:12 -05:00
parent 1848a7edb5
commit e151534c01
Signed by: daylin
GPG key ID: C1E52E7DD81DF79F

View file

@ -50,7 +50,7 @@ from typing import (
from urllib.error import HTTPError from urllib.error import HTTPError
from urllib.request import urlopen from urllib.request import urlopen
__version__ = "23.5a5-11-g92da092-dev" __version__ = "23.5a5-12-g1848a7e-dev"
class Spinner: class Spinner:
@ -245,14 +245,6 @@ a = Ansi()
class Template: class Template:
description = f"""
{a.tagline()}
to create/activate a vivenv:
- from command line: `{a.style("viv -h","bold")}`
- within python script: {a.style('__import__("viv").use("typer", "rich-click")','bold')}
"""
_standalone_func = r"""def _viv_use(*pkgs, track_exe=False, name=""): _standalone_func = r"""def _viv_use(*pkgs, track_exe=False, name=""):
import hashlib, json, os, site, shutil, sys, venv # noqa import hashlib, json, os, site, shutil, sys, venv # noqa
from pathlib import Path # noqa from pathlib import Path # noqa
@ -292,20 +284,33 @@ to create/activate a vivenv:
return env return env
""" """
def noqa(self, txt: str) -> str: @staticmethod
def description(name: str) -> str:
return f"""
{a.tagline()}
to create/activate a vivenv:
- from command line: `{a.bold}{name} --help{a.end}`
- within python script: {a.style('__import__("viv").use("typer", "rich-click")','bold')}
"""
@staticmethod
def noqa(txt: str) -> str:
max_length = max(map(len, txt.splitlines())) max_length = max(map(len, txt.splitlines()))
return "\n".join((f"{line:{max_length}} # noqa" for line in txt.splitlines())) return "\n".join((f"{line:{max_length}} # noqa" for line in txt.splitlines()))
def _use_str(self, spec: List[str], standalone: bool = False) -> str: @staticmethod
def _use_str(spec: List[str], standalone: bool = False) -> str:
spec_str = ", ".join(f'"{req}"' for req in spec) spec_str = ", ".join(f'"{req}"' for req in spec)
if standalone: if standalone:
return f"""_viv_use({fill(spec_str,width=90,subsequent_indent=" ",)})""" return f"""_viv_use({fill(spec_str,width=90,subsequent_indent=" ",)})"""
else: else:
return f"""__import__("viv").use({spec_str})""" return f"""__import__("viv").use({spec_str})"""
def standalone(self, spec: List[str]) -> str: @classmethod
def standalone(cls, spec: List[str]) -> str:
func_use = "\n".join( func_use = "\n".join(
(self._standalone_func, self.noqa(self._use_str(spec, standalone=True))) (cls._standalone_func, cls.noqa(cls._use_str(spec, standalone=True)))
) )
return f""" return f"""
# AUTOGENERATED by viv (v{__version__}) # AUTOGENERATED by viv (v{__version__})
@ -313,7 +318,8 @@ to create/activate a vivenv:
{func_use} {func_use}
""" """
def _rel_import(self, local_source: Optional[Path]) -> str: @staticmethod
def _rel_import(local_source: Optional[Path]) -> str:
if not local_source: if not local_source:
raise ValueError("local source must exist") raise ValueError("local source must exist")
@ -325,29 +331,32 @@ to create/activate a vivenv:
f""".path.expanduser("{path_to_viv}")) # noqa""" f""".path.expanduser("{path_to_viv}")) # noqa"""
) )
def _absolute_import(self, local_source: Optional[Path]) -> str: @staticmethod
def _absolute_import(local_source: Optional[Path]) -> str:
if not local_source: if not local_source:
raise ValueError("local source must exist") raise ValueError("local source must exist")
path_to_viv = local_source.resolve().absolute().parent.parent path_to_viv = local_source.resolve().absolute().parent.parent
return f"""__import__("sys").path.append("{path_to_viv}") # noqa""" return f"""__import__("sys").path.append("{path_to_viv}") # noqa"""
@classmethod
def frozen_import( def frozen_import(
self, path: str, local_source: Optional[Path], spec: List[str] cls, path: str, local_source: Optional[Path], spec: List[str]
) -> str: ) -> str:
if path == "abs": if path == "abs":
imports = self._absolute_import(local_source) imports = cls._absolute_import(local_source)
elif path == "rel": elif path == "rel":
imports = self._rel_import(local_source) imports = cls._rel_import(local_source)
else: else:
imports = "" imports = ""
return f"""\ return f"""\
{imports} {imports}
{self.noqa(self._use_str(spec))} {cls.noqa(cls._use_str(spec))}
""" """
@classmethod
def shim( def shim(
self, cls,
path: str, path: str,
local_source: Optional[Path], local_source: Optional[Path],
standalone: bool, standalone: bool,
@ -355,11 +364,11 @@ to create/activate a vivenv:
bin: str, bin: str,
) -> str: ) -> str:
if standalone: if standalone:
imports = self._standalone_func imports = cls._standalone_func
elif path == "abs": elif path == "abs":
imports = self._absolute_import(local_source) imports = cls._absolute_import(local_source)
elif path == "rel": elif path == "rel":
imports = self._rel_import(local_source) imports = cls._rel_import(local_source)
else: else:
imports = "" imports = ""
return f"""\ return f"""\
@ -372,12 +381,13 @@ import subprocess
import sys import sys
if __name__ == "__main__": if __name__ == "__main__":
vivenv = {self.noqa(self._use_str(spec, standalone))} vivenv = {cls.noqa(cls._use_str(spec, standalone))}
sys.exit(subprocess.run([vivenv / "bin" / "{bin}", *sys.argv[1:]]).returncode) sys.exit(subprocess.run([vivenv / "bin" / "{bin}", *sys.argv[1:]]).returncode)
""" """
@staticmethod
def update( def update(
self, src: Optional[Path], cli: Path, local_version: str, next_version: str src: Optional[Path], cli: Path, local_version: str, next_version: str
) -> str: ) -> str:
return f""" return f"""
Update source at {a.green}{src}{a.end} Update source at {a.green}{src}{a.end}
@ -386,15 +396,17 @@ if __name__ == "__main__":
""" """
def install(self, src: Path, cli: Path) -> str: @staticmethod
def install(src: Path, cli: Path) -> str:
return f""" return f"""
Install viv.py to {a.green}{src}{a.end} Install viv.py to {a.green}{src}{a.end}
Symlink {a.bold}{src}{a.end} to {a.bold}{cli}{a.end} Symlink {a.bold}{src}{a.end} to {a.bold}{cli}{a.end}
""" """
@staticmethod
def show( def show(
self, cli: Optional[Path | str], running: Path, local: Optional[Path | str] cli: Optional[Path | str], running: Path, local: Optional[Path | str]
) -> str: ) -> str:
return ( return (
"\n".join( "\n".join(
@ -1524,7 +1536,7 @@ class Cli:
def __init__(self, viv: Viv) -> None: def __init__(self, viv: Viv) -> None:
self.viv = viv self.viv = viv
self.parser = ArgumentParser(prog=viv.name, description=t.description) self.parser = ArgumentParser(prog=viv.name, description=t.description(viv.name))
self._cmd_arg_group_map() self._cmd_arg_group_map()
self.parsers = self._make_parsers() self.parsers = self._make_parsers()
self._add_args() self._add_args()