Skip to content

Commit 151a499

Browse files
committed
Load user creds from tmp file; Set count of requested items to 1 to resolve specific item by path; Rename gdrive query methods.
1 parent ab5e971 commit 151a499

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

dvc/remote/gdrive/__init__.py

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import os
44
import posixpath
55
import logging
6+
import uuid
67

78
from funcy import cached_property, retry, compose, decorator
89
from funcy.py3 import cat
@@ -46,6 +47,10 @@ def _wrap_pydrive_retriable(call):
4647
)
4748

4849

50+
def get_tmp_filepath():
51+
return posixpath.join(".dvc", "tmp", str(uuid.uuid4()))
52+
53+
4954
class RemoteGDrive(RemoteBASE):
5055
scheme = Schemes.GDRIVE
5156
path_cls = CloudURLInfo
@@ -74,18 +79,22 @@ def init_drive(self):
7479
"secret in DVC's config. Learn more at "
7580
"https://man.dvc.org/remote/add."
7681
)
77-
self.gdrive_user_credentials_path = self.config.get(
78-
Config.SECTION_GDRIVE_USER_CREDENTIALS_FILE,
79-
self.DEFAULT_USER_CREDENTIALS_FILE,
82+
self.gdrive_user_credentials_path = (
83+
get_tmp_filepath()
84+
if os.getenv(RemoteGDrive.GDRIVE_USER_CREDENTIALS_DATA)
85+
else self.config.get(
86+
Config.SECTION_GDRIVE_USER_CREDENTIALS_FILE,
87+
self.DEFAULT_USER_CREDENTIALS_FILE,
88+
)
8089
)
8190

8291
self.root_id = self.get_path_id(self.path_info, create=True)
8392
self.cached_dirs, self.cached_ids = self.cache_root_dirs()
8493

85-
def request_list_file(self, query):
86-
return self.drive.ListFile({"q": query, "maxResults": 1000}).GetList()
94+
def gdrive_list_file(self, query):
95+
return self.drive.ListFile({"q": query, "maxResults": 1}).GetList()
8796

88-
def request_create_folder(self, title, parent_id):
97+
def gdrive_create_folder(self, title, parent_id):
8998
item = self.drive.CreateFile(
9099
{
91100
"title": title,
@@ -96,7 +105,7 @@ def request_create_folder(self, title, parent_id):
96105
item.Upload()
97106
return item
98107

99-
def request_upload_file(
108+
def gdrive_upload_file(
100109
self, args, no_progress_bar=True, from_file="", progress_name=""
101110
):
102111
item = self.drive.CreateFile(
@@ -113,7 +122,7 @@ def upload_file(self, item, no_progress_bar, from_file, progress_name):
113122
item.content = opened_file
114123
item.Upload()
115124

116-
def request_download_file(
125+
def gdrive_download_file(
117126
self, file_id, to_file, progress_name, no_progress_bar
118127
):
119128
from dvc.progress import Tqdm
@@ -125,7 +134,7 @@ def request_download_file(
125134
if not no_progress_bar:
126135
tqdm.close()
127136

128-
def list_drive_item(self, query):
137+
def gdrive_list_item(self, query):
129138
file_list = self.drive.ListFile({"q": query, "maxResults": 1000})
130139

131140
# Isolate and decorate fetching of remote drive items in pages
@@ -137,7 +146,7 @@ def list_drive_item(self, query):
137146
def cache_root_dirs(self):
138147
cached_dirs = {}
139148
cached_ids = {}
140-
for dir1 in self.list_drive_item(
149+
for dir1 in self.gdrive_list_item(
141150
"'{}' in parents and trashed=false".format(self.root_id)
142151
):
143152
cached_dirs.setdefault(dir1["title"], []).append(dir1["id"])
@@ -189,7 +198,7 @@ def drive(self):
189198

190199
def create_drive_item(self, parent_id, title):
191200
return gdrive_retry(
192-
lambda: self.request_create_folder(title, parent_id)
201+
lambda: self.gdrive_create_folder(title, parent_id)
193202
)()
194203

195204
def get_drive_item(self, name, parents_ids):
@@ -201,7 +210,7 @@ def get_drive_item(self, name, parents_ids):
201210

202211
query += " and trashed=false and title='{}'".format(name)
203212

204-
item_list = gdrive_retry(lambda: self.request_list_file(query))()
213+
item_list = gdrive_retry(lambda: self.gdrive_list_file(query))()
205214
return next(iter(item_list), None)
206215

207216
def resolve_remote_file(self, parents_ids, path_parts, create):
@@ -260,7 +269,7 @@ def _upload(self, from_file, to_info, name, no_progress_bar):
260269
parent_id = to_info.bucket
261270

262271
gdrive_retry(
263-
lambda: self.request_upload_file(
272+
lambda: self.gdrive_upload_file(
264273
{"title": to_info.name, "parent_id": parent_id},
265274
no_progress_bar,
266275
from_file,
@@ -271,7 +280,7 @@ def _upload(self, from_file, to_info, name, no_progress_bar):
271280
def _download(self, from_info, to_file, name, no_progress_bar):
272281
file_id = self.get_path_id(from_info)
273282
gdrive_retry(
274-
lambda: self.request_download_file(
283+
lambda: self.gdrive_download_file(
275284
file_id, to_file, name, no_progress_bar
276285
)
277286
)()
@@ -290,7 +299,7 @@ def list_file_path(self, drive_file):
290299
yield drive_file["title"]
291300

292301
def list_path(self, parent_id):
293-
for file1 in self.list_drive_item(
302+
for file1 in self.gdrive_list_item(
294303
"'{}' in parents and trashed=false".format(parent_id)
295304
):
296305
for path in self.list_file_path(file1):
@@ -305,7 +314,7 @@ def all(self):
305314
)
306315

307316
query += " and trashed=false"
308-
for file1 in self.list_drive_item(query):
317+
for file1 in self.gdrive_list_item(query):
309318
parent_id = file1["parents"][0]["id"]
310319
path = posixpath.join(self.cached_ids[parent_id], file1["title"])
311320
try:

0 commit comments

Comments
 (0)