Source code for sonarqube.models.projects

"""Pydantic models for Projects API.

This module provides models for the /api/projects endpoints including
creating, searching, and managing projects.

Example:
    Using project models::

        from sonarqube.models.projects import ProjectSearchResponse

        response = client.projects.search(q="backend")
        for project in response.components:
            print(project.name)
"""

from __future__ import annotations

from typing import Any, Optional

from pydantic import Field

from sonarqube.models.base import SonarQubeModel
from sonarqube.models.common import Paging


[docs] class ProjectComponent(SonarQubeModel): """A project component in search results. Attributes: key: Unique project key. name: Project display name. qualifier: Component qualifier (TRK for projects). visibility: Project visibility. last_analysis_date: Date of last analysis. revision: Last analysis revision. managed: Whether the project is managed. Example: >>> component = ProjectComponent( ... key="my-project", name="My Project", qualifier="TRK", visibility="private" ... ) """ key: str = Field(description="Unique project key") name: str = Field(description="Project display name") qualifier: str = Field(default="TRK", description="Component qualifier") visibility: Optional[str] = Field( default=None, description="Project visibility (public/private)", ) last_analysis_date: Optional[str] = Field( default=None, alias="lastAnalysisDate", description="Date of last analysis", ) revision: Optional[str] = Field( default=None, description="Last analysis revision", ) managed: Optional[bool] = Field( default=None, description="Whether the project is managed", ) is_favorite: Optional[bool] = Field( default=None, alias="isFavorite", description="Whether the project is marked as favorite", ) tags: Optional[list[str]] = Field( default=None, description="Project tags", ) needs_issue_sync: Optional[bool] = Field( default=None, alias="needIssueSync", description="Whether the project needs issue sync", )
[docs] class ProjectSearchResponse(SonarQubeModel): """Response from searching projects. Attributes: paging: Paging information. components: List of project components. Example: >>> response = client.projects.search(q="backend") >>> print(f"Found {response.paging.total} projects") >>> for project in response.components: ... print(project.name) """ paging: Paging = Field(description="Paging information") components: list[ProjectComponent] = Field( default_factory=list, description="List of project components", )
[docs] class ProjectCreateResponse(SonarQubeModel): """Response from creating a project. Attributes: project: The created project. Example: >>> response = client.projects.create(name="My Project", project="my-project") >>> print(response.project.key) """ project: ProjectComponent = Field(description="The created project")
[docs] class ExportFindingsResponse(SonarQubeModel): """Response from exporting findings. Attributes: export_date: Date of the export. findings: List of findings. """ export_date: Optional[str] = Field( default=None, alias="exportDate", description="Date of the export", ) findings: Optional[list[dict[str, Any]]] = Field( default=None, description="List of findings", )
[docs] class LicenseUsageResponse(SonarQubeModel): """Response from getting license usage. Attributes: lines_of_code: Total lines of code. """ lines_of_code: Optional[int] = Field( default=None, alias="linesOfCode", description="Total lines of code", )