|
6 | 6 | import re
|
7 | 7 | import json
|
8 | 8 | import requests
|
| 9 | +import logging |
9 | 10 |
|
10 | 11 | from google.auth.transport.requests import Request
|
11 | 12 | from google.oauth2 import service_account
|
|
16 | 17 | from tenacity import *
|
17 | 18 |
|
18 | 19 | from bot import parent_id, DOWNLOAD_DIR, IS_TEAM_DRIVE, INDEX_URL, \
|
19 |
| - USE_SERVICE_ACCOUNTS |
| 20 | + USE_SERVICE_ACCOUNTS, download_dict |
20 | 21 | from bot.helper.ext_utils.bot_utils import *
|
21 | 22 | from bot.helper.ext_utils.fs_utils import get_mime_type
|
22 | 23 |
|
@@ -167,7 +168,7 @@ def upload_file(self, file_path, file_name, mime_type, parent_id):
|
167 | 168 | if USE_SERVICE_ACCOUNTS:
|
168 | 169 | self.switchServiceAccount()
|
169 | 170 | LOGGER.info(f"Got: {reason}, Trying Again.")
|
170 |
| - self.upload_file(file_path, file_name, mime_type, parent_id) |
| 171 | + return self.upload_file(file_path, file_name, mime_type, parent_id) |
171 | 172 | else:
|
172 | 173 | raise err
|
173 | 174 | self._file_uploaded_bytes = 0
|
@@ -247,10 +248,37 @@ def copyFile(self, file_id, dest_id):
|
247 | 248 | if USE_SERVICE_ACCOUNTS:
|
248 | 249 | self.switchServiceAccount()
|
249 | 250 | LOGGER.info(f"Got: {reason}, Trying Again.")
|
250 |
| - self.copyFile(file_id,dest_id) |
| 251 | + return self.copyFile(file_id,dest_id) |
251 | 252 | else:
|
252 | 253 | raise err
|
253 | 254 |
|
| 255 | + @retry(wait=wait_exponential(multiplier=2, min=3, max=6), stop=stop_after_attempt(5), |
| 256 | + retry=retry_if_exception_type(HttpError), before=before_log(LOGGER, logging.DEBUG)) |
| 257 | + def getFileMetadata(self,file_id): |
| 258 | + return self.__service.files().get(supportsAllDrives=True, fileId=file_id, |
| 259 | + fields="name,id,mimeType,size").execute() |
| 260 | + |
| 261 | + @retry(wait=wait_exponential(multiplier=2, min=3, max=6), stop=stop_after_attempt(5), |
| 262 | + retry=retry_if_exception_type(HttpError), before=before_log(LOGGER, logging.DEBUG)) |
| 263 | + def getFilesByFolderId(self,folder_id): |
| 264 | + page_token = None |
| 265 | + q = f"'{folder_id}' in parents" |
| 266 | + files = [] |
| 267 | + while True: |
| 268 | + response = self.__service.files().list(supportsTeamDrives=True, |
| 269 | + includeTeamDriveItems=True, |
| 270 | + q=q, |
| 271 | + spaces='drive', |
| 272 | + pageSize=200, |
| 273 | + fields='nextPageToken, files(id, name, mimeType,size)', |
| 274 | + pageToken=page_token).execute() |
| 275 | + for file in response.get('files', []): |
| 276 | + files.append(file) |
| 277 | + page_token = response.get('nextPageToken', None) |
| 278 | + if page_token is None: |
| 279 | + break |
| 280 | + return files |
| 281 | + |
254 | 282 | def clone(self, link):
|
255 | 283 | self.transferred_size = 0
|
256 | 284 | try:
|
@@ -304,23 +332,9 @@ def clone(self, link):
|
304 | 332 | return msg
|
305 | 333 |
|
306 | 334 | def cloneFolder(self, name, local_path, folder_id, parent_id):
|
307 |
| - page_token = None |
308 |
| - q = f"'{folder_id}' in parents" |
309 |
| - files = [] |
310 | 335 | LOGGER.info(f"Syncing: {local_path}")
|
| 336 | + files = self.getFilesByFolderId(folder_id) |
311 | 337 | new_id = None
|
312 |
| - while True: |
313 |
| - response = self.__service.files().list(supportsTeamDrives=True, |
314 |
| - includeTeamDriveItems=True, |
315 |
| - q=q, |
316 |
| - spaces='drive', |
317 |
| - fields='nextPageToken, files(id, name, mimeType,size)', |
318 |
| - pageToken=page_token).execute() |
319 |
| - for file in response.get('files', []): |
320 |
| - files.append(file) |
321 |
| - page_token = response.get('nextPageToken', None) |
322 |
| - if page_token is None: |
323 |
| - break |
324 | 338 | if len(files) == 0:
|
325 | 339 | return parent_id
|
326 | 340 | for file in files:
|
|
0 commit comments