Source code for runhouse.resources.secrets.provider_secrets.github_secret

import copy
import os
from pathlib import Path

from typing import Dict

import yaml

from runhouse.resources.secrets.provider_secrets.provider_secret import ProviderSecret
from runhouse.resources.secrets.utils import _check_file_for_mismatches


[docs]class GitHubSecret(ProviderSecret): """ .. note:: To create a GitHubSecret, please use the factory method :func:`provider_secret` with ``provider="github"``. """ # values format: {"oauth_token": oath_token} _PROVIDER = "github" _DEFAULT_CREDENTIALS_PATH = "~/.config/gh/hosts.yml" @staticmethod def from_config(config: dict, dryrun: bool = False, _resolve_children: bool = True): return GitHubSecret(**config, dryrun=dryrun) def _write_to_file( self, path: str, values: Dict = None, overwrite: bool = False, write_config: bool = True, ): new_secret = copy.deepcopy(self) if not _check_file_for_mismatches( path, self._from_path(path), values, overwrite ): config = {} full_path = os.path.expanduser(path) if Path(full_path).exists(): with open(full_path, "r") as stream: config = yaml.safe_load(stream) config["github.com"] = values Path(full_path).parent.mkdir(parents=True, exist_ok=True) with open(full_path, "w") as yaml_file: yaml.dump(config, yaml_file, default_flow_style=False) if write_config: new_secret._add_to_rh_config(path) new_secret._values = None new_secret.path = path return new_secret def _from_path(self, path: str = None): config = {} if path and os.path.exists(os.path.expanduser(path)): with open(os.path.expanduser(path), "r") as stream: config = yaml.safe_load(stream) return config["github.com"] if config else {}