From 6de1ddadf521077f6f57355c86aba0e13a2fb3e5 Mon Sep 17 00:00:00 2001 From: Rob de Wit Date: Thu, 30 Dec 2021 19:45:50 +0100 Subject: [PATCH] fs.gdrive: Fix GDRIVE_CREDENTIALS_DATA for service accounts `_validate_config()` had a bug: it would not take into account that Google Drive credentials can also be passed using `GDRIVE_CREDENTIALS_DATA` as documented here [1]. This patches the validation logic to also accept this environment variable as a means to provide service account credentials. Before, commands like `dvc push` would exit with: ``` ERROR: failed to push data to the cloud - To use service account, set `gdrive_service_account_json_file_path`, and optionally`gdrive_service_account_user_email` in DVC config Learn more at ``` [1]: https://dvc.org/doc/user-guide/setup-google-drive-remote#authorization Co-authored-by: Laurens Duijvesteijn --- dvc/fs/gdrive.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dvc/fs/gdrive.py b/dvc/fs/gdrive.py index 3198ad028..3bc09d885 100644 --- a/dvc/fs/gdrive.py +++ b/dvc/fs/gdrive.py @@ -109,11 +109,14 @@ class GDriveFileSystem(FSSpecWrapper): # pylint:disable=abstract-method if ( self._use_service_account and not self._service_account_json_file_path + and "GDRIVE_CREDENTIALS_DATA" not in os.environ ): raise DvcException( "To use service account, set " "`gdrive_service_account_json_file_path`, and optionally" "`gdrive_service_account_user_email` in DVC config\n" + "You can also provide these using the GDRIVE_CREDENTIALS_DATA" + "environment variable.\n" "Learn more at {}".format( format_link("https://man.dvc.org/remote/modify") )