Skip to content

Commit e4ecc60

Browse files
JaskaranSMlzzy12
authored andcommitted
Optimize Clone implementation
1 parent 0e5c5ca commit e4ecc60

File tree

2 files changed

+36
-21
lines changed

2 files changed

+36
-21
lines changed

bot/helper/mirror_utils/upload_utils/gdriveTools.py

+32-18
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import re
77
import json
88
import requests
9+
import logging
910

1011
from google.auth.transport.requests import Request
1112
from google.oauth2 import service_account
@@ -16,7 +17,7 @@
1617
from tenacity import *
1718

1819
from bot import parent_id, DOWNLOAD_DIR, IS_TEAM_DRIVE, INDEX_URL, \
19-
USE_SERVICE_ACCOUNTS
20+
USE_SERVICE_ACCOUNTS, download_dict
2021
from bot.helper.ext_utils.bot_utils import *
2122
from bot.helper.ext_utils.fs_utils import get_mime_type
2223

@@ -167,7 +168,7 @@ def upload_file(self, file_path, file_name, mime_type, parent_id):
167168
if USE_SERVICE_ACCOUNTS:
168169
self.switchServiceAccount()
169170
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)
171172
else:
172173
raise err
173174
self._file_uploaded_bytes = 0
@@ -247,10 +248,37 @@ def copyFile(self, file_id, dest_id):
247248
if USE_SERVICE_ACCOUNTS:
248249
self.switchServiceAccount()
249250
LOGGER.info(f"Got: {reason}, Trying Again.")
250-
self.copyFile(file_id,dest_id)
251+
return self.copyFile(file_id,dest_id)
251252
else:
252253
raise err
253254

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+
254282
def clone(self, link):
255283
self.transferred_size = 0
256284
try:
@@ -304,23 +332,9 @@ def clone(self, link):
304332
return msg
305333

306334
def cloneFolder(self, name, local_path, folder_id, parent_id):
307-
page_token = None
308-
q = f"'{folder_id}' in parents"
309-
files = []
310335
LOGGER.info(f"Syncing: {local_path}")
336+
files = self.getFilesByFolderId(folder_id)
311337
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
324338
if len(files) == 0:
325339
return parent_id
326340
for file in files:

bot/modules/clone.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
from telegram.ext import CommandHandler, run_async
1+
from telegram.ext import CommandHandler
22
from bot.helper.mirror_utils.upload_utils.gdriveTools import GoogleDriveHelper
33
from bot.helper.telegram_helper.message_utils import *
44
from bot.helper.telegram_helper.filters import CustomFilters
55
from bot.helper.telegram_helper.bot_commands import BotCommands
6+
from bot.helper.ext_utils.bot_utils import new_thread
67
from bot import dispatcher
78

89

9-
@run_async
10+
@new_thread
1011
def cloneNode(update,context):
1112
args = update.message.text.split(" ",maxsplit=1)
1213
if len(args) > 1:
@@ -17,7 +18,7 @@ def cloneNode(update,context):
1718
deleteMessage(context.bot,msg)
1819
sendMessage(result,context.bot,update)
1920
else:
20-
sendMessage("Provide G-Drive Shareable Link to Clone.",bot,update)
21+
sendMessage("Provide G-Drive Shareable Link to Clone.",context.bot,update)
2122

2223
clone_handler = CommandHandler(BotCommands.CloneCommand,cloneNode,filters=CustomFilters.authorized_chat | CustomFilters.authorized_user)
2324
dispatcher.add_handler(clone_handler)

0 commit comments

Comments
 (0)