diff --git a/pyproject.toml b/pyproject.toml index 3e5d6d7..103539a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,6 +31,12 @@ requires-python = ">= 3.11" [tool.hatch.version] path = "spcd/__init__.py" +[tool.pydoclint] +allow-init-docstring = true +quiet = true +skip-checking-short-docstrings = false +style = "sphinx" + [tool.ruff] line-length = 80 diff --git a/readme.md b/readme.md index df9ea36..bee7dab 100644 --- a/readme.md +++ b/readme.md @@ -286,6 +286,7 @@ Handle project workflows in a unified way: * automate versions fetching * gource, xvfb, xauth * handle openh264 repositories +* link from workspace to actions root * rpm fusion * tex * translate to french diff --git a/spcd/__init__.py b/spcd/__init__.py index fbb64e7..0df38c4 100644 --- a/spcd/__init__.py +++ b/spcd/__init__.py @@ -26,10 +26,13 @@ def clone_project_branch() -> None: split() log.info(project) split() - log.info(f"""\ -{project.url} + log.info( + """\ +%s ↓ -""") +""", + project.url, + ) run( "git", "clone", @@ -66,6 +69,8 @@ def install_python_packages() -> None: "hatch", "mypy", "pelican", + "pydoclint", + "pylint", "pytest", "ruff", "sphinx", @@ -82,12 +87,12 @@ def list_environment_variables() -> None: step("List environment variables") for variable, value in sorted(projects.environment.items()): if variable not in ["SPCD", "SPCD_SSH_KEY"]: - log.info(f"{variable} = {value}") + log.info("%s = %s", variable, value) else: - log.info(f"{variable}") + log.info("%s", variable) -def main(main: str) -> None: +def main(main_file: str) -> None: """Entry point to initialize environment or run a specific command.""" paths = environ["PATH"].split(pathsep) if env.SPCD_PYTHON_VENV_BINARIES not in paths: @@ -98,7 +103,7 @@ def main(main: str) -> None: list_environment_variables() clone_project_branch() set_ssh() - install_commands(main) + install_commands(main_file) install_python_packages() else: f = getattr(cmd, name.replace("-", "_")) diff --git a/spcd/project.py b/spcd/project.py index 709d554..c295d57 100644 --- a/spcd/project.py +++ b/spcd/project.py @@ -27,7 +27,7 @@ ROOT = [ class Project: """Current project.""" - def __init__(self: Project, projects: Projects) -> None: + def __init__(self, projects: Projects) -> None: """Set projects, branch, name, root & url.""" self.projects = projects # branch @@ -45,7 +45,11 @@ class Project: # url self.url = add_url_path(projects.url, self.name) - def __str__(self: Project) -> str: + def __repr__(self) -> str: + """Represent project.""" + return f"Project(projects={self.projects!r})" + + def __str__(self) -> str: """List branch, name, root & url.""" return f"""\ branch = {self.branch} diff --git a/spcd/projects.py b/spcd/projects.py index c1f2403..c64e3b3 100644 --- a/spcd/projects.py +++ b/spcd/projects.py @@ -20,7 +20,7 @@ SERVER_URL = [ class Projects: """Other projects.""" - def __init__(self: Projects) -> None: + def __init__(self) -> None: """Set environment, group, name & url.""" self.environment = os.environ # group, name @@ -34,8 +34,20 @@ class Projects: if value := self.environment.get(variable, None): self.url = add_url_path(value, self.group) - def __str__(self: Projects) -> str: - """List group, name & url.""" + def __repr__(self) -> str: + """Represent projects. + + :return: representation + :rtype: str + """ + return "Projects()" + + def __str__(self) -> str: + """List group, name & url. + + :return: string + :rtype: str + """ return f"""\ group = {self.group} name = {self.name} diff --git a/spcd/shell.py b/spcd/shell.py index f9f9b33..0a587e7 100644 --- a/spcd/shell.py +++ b/spcd/shell.py @@ -3,3 +3,8 @@ import importlib env = importlib.import_module("env") + +try: + STEP = int(env.SPCD_STEP) +except AttributeError: + STEP = 1 diff --git a/spcd/util.py b/spcd/util.py index a77691a..73a5309 100644 --- a/spcd/util.py +++ b/spcd/util.py @@ -7,18 +7,31 @@ from urllib.parse import urlparse, urlunparse from rwx import fs from rwx.log import stream as log +from spcd import shell from spcd.shell import env def add_url_path(url: str, extra_path: str) -> str: - """Append an extra segment to an existing URL.""" + """Append an extra segment to an existing URL. + + :param url: base URL + :type url: str + :param extra_path: path to append + :type extra_path: str + :return: new URL + :rtype: str + """ parts = urlparse(url) parts = parts._replace(path=str(Path(parts.path) / extra_path)) return urlunparse(parts) def browse(root: Path) -> None: - """Frame the browsing of a root directory in the log output.""" + """Frame the browsing of a root directory in the log output. + + :param root: directory to browse + :type root: Path + """ paths = [] for directory, _, files in os.walk(root): for file in files: @@ -33,7 +46,11 @@ def browse(root: Path) -> None: def cat(file: Path) -> None: - """Frame the content of a file in the log output.""" + """Frame the content of a file in the log output. + + :param file: file to read the content from + :type file: Path + """ text = str(file) frame(text) log.info(fs.read_file_text(file).rstrip()) @@ -41,13 +58,21 @@ def cat(file: Path) -> None: def frame(text: str) -> None: - """Open a new frame in the log output.""" - log.info(f"{env.SPCD_OPEN}{text}") + """Open a new frame in the log output. + + :param text: text to start the frame with + :type text: str + """ + log.info("%s%s", env.SPCD_OPEN, text) def shut(text: str) -> None: - """Close current frame in the log output.""" - log.info(f"{env.SPCD_SHUT}{text}") + """Close current frame in the log output. + + :param text: text to shut the frame with + :type text: str + """ + log.info("%s%s", env.SPCD_SHUT, text) def split() -> None: @@ -56,8 +81,12 @@ def split() -> None: def step(text: str) -> None: - """Increment the step number of the current build process.""" - env.SPCD_STEP += 1 + """Increment the step number of the current build process. + + :param text: text to display + :type text: str + """ + shell.STEP += 1 log.info(env.SPCD_DOWN) - log.info(f"{env.SPCD_VERT} {env.SPCD_STEP} {text}") + log.info("%s %s %s", env.SPCD_VERT, shell.STEP, text) log.info(env.SPCD___UP)