import os import posixpath import configobj from dvc.main import main from dvc.repo import Repo from dvc.tree.gdrive import GDriveTree def test_relative_user_credentials_file_config_setting(tmp_dir, dvc): # CI sets it to test GDrive, here we want to test the work with file system # based, regular credentials if os.getenv(GDriveTree.GDRIVE_CREDENTIALS_DATA): del os.environ[GDriveTree.GDRIVE_CREDENTIALS_DATA] credentials = os.path.join("secrets", "credentials.json") # GDriveTree.credentials_location helper checks for file existence, # create the file tmp_dir.gen(credentials, "{'token': 'test'}") remote_name = "gdrive" assert ( main(["remote", "add", "-d", remote_name, "gdrive://root/test"]) == 0 ) assert ( main( [ "remote", "modify", remote_name, "gdrive_user_credentials_file", credentials, ] ) == 0 ) # We need to load repo again to test updates to the config str_path = os.fspath(tmp_dir) repo = Repo(str_path) # Check that in config we got the path relative to the config file itself # Also, we store posix path even on Windows config = configobj.ConfigObj(repo.config.files["repo"]) assert config[f'remote "{remote_name}"'][ "gdrive_user_credentials_file" ] == posixpath.join("..", "secrets", "credentials.json") # Check that in the remote itself we got an absolute path remote = repo.cloud.get_remote(remote_name) assert os.path.normpath(remote.tree.credentials_location) == os.path.join( str_path, credentials )