Source code for pi_portal.installation.installer

"""Installs the end user's Pi Portal configuration."""

import logging
from typing import List

from pi_portal.modules.configuration.logging import installer
from .steps import (
    StepConfigureLogzIo,
    StepEnsureRoot,
    StepInitializeDataPaths,
    StepInitializeEtc,
    StepInitializeLogging,
    StepInstallConfigFile,
    StepKillMotion,
    StepKillSupervisor,
    StepRenderConfiguration,
    StepStartSupervisor,
)
from .steps.bases import base_step


[docs]class Installer: """Installs the end user's pi_portal configuration.""" steps: List[base_step.StepBase] config_file_path: str logger_name: str = "Installer" logger_level: int = logging.INFO def __init__(self, config_file_path: str) -> None: self.log = logging.getLogger(self.logger_name) logger_configuration = installer.InstallerLoggerConfiguration() logger_configuration.configure(self.log) self.config_file_path = config_file_path self.log.setLevel(self.logger_level) self.steps = self._configure_steps() def _configure_steps(self) -> List[base_step.StepBase]: return [ StepEnsureRoot(self.log), StepKillMotion(self.log), StepKillSupervisor(self.log), StepInitializeDataPaths(self.log), StepInitializeEtc(self.log), StepInitializeLogging(self.log), StepRenderConfiguration(self.log), StepInstallConfigFile(self.log, self.config_file_path), StepConfigureLogzIo(self.log), StepStartSupervisor(self.log), ]
[docs] def install(self) -> None: """Installs the end user's pi_portal configuration.""" self.log.info("Beginning installation ...") for step in self.steps: step.invoke() self.log.info("Installation complete.")