Source code for github_secrets.app

from pathlib import Path
from typing import Optional, Union

from rich import print

from github_secrets.config import SecretsAppConfig, SecretsConfig
from github_secrets.manager import SecretsManager, HasStr
from github_secrets import console_styles as sty


[docs]class GithubSecretsApp:
[docs] def __init__(self, config_path: Optional[Union[str, Path]] = None): self.config: SecretsAppConfig = SecretsAppConfig.load_or_create(config_path) self.manager = self._get_manager()
def _get_manager(self) -> SecretsManager: return SecretsManager(self.config.current_profile.config_path)
[docs] def save(self): print( f"{sty.saved()} application config at path {self.config.settings.config_location}" ) self.config.save() self.manager.save()
[docs] def create_profile(self, name: str, path: Optional[Union[str, Path]] = None) -> bool: if name == 'app': raise ValueError('app is not allowed as a profile name') if path is not None: path = Path(path) if self.config.profile_exists(name): print( f"Profile {sty.name_style(name)} " f"already exists, will not update" ) return False self.config.add_profile(name, path) if path is None: path = SecretsConfig._settings_with_overrides( config_name=name ).config_location print( f"{sty.created()} profile {sty.name_style(name)} with path {path}" ) self.save() return True
[docs] def set_profile(self, name: str) -> bool: if not self.config.profile_exists(name): print( f"Profile {sty.name_style(name)} " f"does not exist, cannot set" ) return False self.config.set_profile(name) self.manager = self._get_manager() print( f"{sty.set_()} profile {sty.name_style(name)} with path {self.config.current_profile.config_path}" ) self.save() return True
[docs] def delete_profile(self, name: str) -> bool: if not self.config.profile_exists(name): print( f"Profile {sty.name_style(name)} " f"does not exist, cannot delete" ) return False profile = self.config.get_profile(name) if self.config.current_profile == profile: print( f"Profile {sty.name_style(name)} " f"is set as current profile, cannot delete" ) return False self.config.delete_profile(name) print( f"{sty.deleted()} profile {sty.name_style(name)}" ) self.save() return True
[docs] def set_token(self, value: str): self.manager.set_token(value) self.manager.save()
[docs] def add_secret( self, name: str, value: HasStr, repository: Optional[str] = None ) -> bool: success = self.manager.add_secret(name, value, repository=repository) self.manager.save() return success
[docs] def remove_secret(self, name: str, repository: Optional[str] = None): self.manager.remove_secret(name, repository=repository) self.manager.save()
[docs] def sync_secret(self, name: str, repository: Optional[str] = None, verbose: bool = False): self.manager.sync_secret(name, repository=repository, verbose=verbose) self.manager.save()
[docs] def sync_secrets(self, repository: Optional[str] = None, verbose: bool = False): self.manager.sync_secrets(repository=repository, verbose=verbose) self.manager.save()
[docs] def bootstrap_repositories(self): self.manager.bootstrap_repositories() self.manager.save()
[docs] def add_repository(self, name: str): self.manager.add_repository(name) self.manager.save()
[docs] def remove_repository(self, name: str): self.manager.remove_repository(name) self.manager.save()
[docs] def add_exclude_repository(self, name: str): self.manager.add_exclude_repository(name) self.manager.save()
[docs] def remove_exclude_repository(self, name: str): self.manager.remove_exclude_repository(name) self.manager.save()
[docs] def record_sync_for_all_repos_and_secrets(self): self.manager.record_sync_for_all_repos_and_secrets() self.manager.save()
[docs] def reset_sync_for_all_repos_and_secrets(self): self.manager.reset_sync_for_all_repos_and_secrets() self.manager.save()
[docs] def check(self): self.manager.check()