Skip to content

Projects

ProjectNamespace for the project.project model, accessed as client.projects.

projects

Project (project.project) operations for Vodoo.

ProjectNamespace

ProjectNamespace(client: OdooClient)

Bases: GeneratedProjectNamespace

Namespace for custom project.project workflows.

Source code in src/vodoo/_domain.py
def __init__(self, client: OdooClient) -> None:
    self._client = client

resolve_project_id

resolve_project_id(project: int | str) -> int

Resolve a project ID or exact project name to an ID.

Source code in src/vodoo/projects.py
def resolve_project_id(self, project: int | str) -> int:
    """Resolve a project ID or exact project name to an ID."""
    numeric_id = _numeric_project_id(project)
    if numeric_id is not None:
        return numeric_id

    assert isinstance(project, str)
    candidates = self._client.search_read(
        self._model,
        domain=[("name", "=ilike", project)],
        fields=["id", "name"],
        order="id",
    )
    return _resolved_project_name(candidates, project)

milestones

milestones(project: int | str) -> list[dict[str, Any]]

List milestones for a project ID or exact project name.

Source code in src/vodoo/projects.py
def milestones(self, project: int | str) -> list[dict[str, Any]]:
    """List milestones for a project ID or exact project name."""
    project_id = self.resolve_project_id(project)
    return self._client.search_read(
        "project.milestone",
        domain=[("project_id", "=", project_id)],
        fields=MILESTONE_FIELDS,
        order="deadline, id",
    )

create_milestone

create_milestone(project: int | str, name: str, deadline: str) -> int

Create a milestone for a project ID or exact project name.

Source code in src/vodoo/projects.py
def create_milestone(self, project: int | str, name: str, deadline: str) -> int:
    """Create a milestone for a project ID or exact project name."""
    project_id = self.resolve_project_id(project)
    return self._client.create(
        "project.milestone",
        {"project_id": project_id, "name": name, "deadline": deadline},
    )

display_stages

display_stages(stages: list[dict[str, Any]]) -> None

Deprecated compatibility shim for CLI stage rendering.

Source code in src/vodoo/projects.py
def display_stages(stages: list[dict[str, Any]]) -> None:
    """Deprecated compatibility shim for CLI stage rendering."""
    from vodoo.cli.display import display_stages as render

    render(stages)