Source code for pjkm.core.tasks.install.pdm_install

"""Install task: run pdm install in the generated project."""

from __future__ import annotations

import subprocess

from pjkm.core.engine.task_context import TaskContext
from pjkm.core.models.task import Phase, TaskResult
from pjkm.core.tasks.base import BaseTask


[docs] class PdmInstallTask(BaseTask): """Runs `pdm install` in the generated project directory."""
[docs] id = "pdm_install"
[docs] phase = Phase.INSTALL
[docs] depends_on = []
[docs] description = "Install project dependencies with PDM"
[docs] def should_run(self, ctx: TaskContext) -> bool: return ctx.platform.has_tool("pdm") and (ctx.project_dir / "pyproject.toml").exists()
[docs] def execute(self, ctx: TaskContext) -> TaskResult: if ctx.config.dry_run: return self.success_result(message="PDM install completed (dry run)") try: subprocess.run( ["pdm", "install"], cwd=ctx.project_dir, capture_output=True, check=True, text=True, timeout=120, ) return self.success_result(message="PDM install completed") except subprocess.CalledProcessError as exc: return self.failure_result(f"pdm install failed: {exc.stderr[:500]}") except subprocess.TimeoutExpired: return self.failure_result("pdm install timed out after 120s")