from common import exec_command, print_message
from src.interface.python_project import (
    custom_unit_test,
    fix_pyproject_version,
    read_pyproject_toml,
)
from src.interface.python_project_with_docker import PythonProjectWithDockerInterface


class PythonApp(PythonProjectWithDockerInterface):
    """
    Classe para gerenciar o projeto Python
    """

    def __init__(self):
        super().__init__()

    def compile(self) -> None:
        pass

    def package(self):

        # Verifica se o projeto possui um arquivo pyproject.toml e se ele
        # contém as chaves necessárias para a construção do artefato.
        # Caso contrário, o processo de build do artefato é pulado e apenas a
        # imagem é construída, sem a necessidade de ajustar a versão do artefato.
        project_data = read_pyproject_toml()

        if (
            project_data
            and "project" in project_data
            and "version" in project_data["project"]
        ):
            fix_pyproject_version()

        self._push_image()

    def unit_test(self) -> None:
        """
        Executa os testes unitários
        """

        if self.buildable_project.skip_build():
            return

        custom_unit_test(source="src", python_path="src")

    def sonar_scanner(self) -> None:
        """
        Executa o sonar scanner
        """

        super().sonar_scanner()
