Я использую Google Drive API для поиска внутри папки с именем «Пользователи», а затем сохраняю имена файлов, которые находятся в этой папке в списке. В Django каждый раз, когда я обновляю sh страницу, которая запускает эту функцию Google API, добавляется список имен файлов. Ex. 1-е исполнение
files_in_users = ['1','2','3','4','5']
та же страница обновляется снова
files_in_users = ['1','2','3','4','5','1','2','3','4','5']
И это происходит каждый раз, когда я обновляю sh страницу. Я даже пытался перезагрузить сервер, но в списке всегда есть избыточные данные. Я также использовал функцию list.clear()
в конце выполнения. Почему это происходит? Есть ли какой-то кэш, который мне нужно удалять после каждого выполнения?
Код:
#GET ID OF USER FOLDER FROM DRIVE
drive_users_id = get_user_file_id(service)
# GET THE FILES IN USER FOLDER FROM DRIVE
flow_of_users_file = service.files().list(q=" '{0}' in parents ".format(drive_users_id),spaces ='drive').execute()
for i in flow_of_users_file['files']:
files_in_user_folder.append(i['name'])
print('files in drive are :', files_in_user_folder)
После печати flow_of_users_file
, который имеет тип словаря, я мог видеть, что есть избыточные данные в некоторые файлы добавляются каждый раз, когда я выполняю эту строку
VIEWS.PY
def datapage(request):
#all_data = Userdata.objects.all()
files_in_user_folder = []
#DRIVE API SETTINGS
creds = None
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('drive', 'v3', credentials=creds)
#GET ID OF USER FOLDER FROM DRIVE
drive_users_id = get_user_file_id(service)
# GET THE FILES IN USER FOLDER FROM
flow_of_users_file = service.files().list(q=" '{0}' in parents ".format(drive_users_id),spaces ='drive').execute()
print(type(flow_of_users_file))
for i in flow_of_users_file['files']:
files_in_user_folder.append(i['name'])
# FILES IN LOCAL FOLDER CALLED 'user_output_files'
files_in_local_folder = os.listdir(settings.BASE_DIR+'/users_output_files/')
print('files in drive are :', files_in_user_folder)
print('files in local folder are :',files_in_local_folder)
#CHECK IF ANY FILE UPDATES EXIST
z = list(set(files_in_user_folder)-set(files_in_local_folder))
#Checking if the local files have been generated
if len(files_in_local_folder) == 0:
print("No local files exist creating everything")
for folder in flow_of_users_file['files']:
name_of_folder = folder['name']
if not os.path.exists(settings.BASE_DIR+'/users_output_files/'+str(name_of_folder)):
print('No file does not exist')
os.mkdir(settings.BASE_DIR+'/users_output_files/'+str(name_of_folder))
folder_mime_type = folder['mimeType']
if folder_mime_type == 'application/vnd.google-apps.folder':
flow_of_file = service.files().list(q=" '{0}' in parents ".format(folder['id']),spaces ='drive').execute()
for file in flow_of_file['files']:
print('The contents of folder {0} are {1}'.format(name_of_folder, file['name'] ))
response = service.files().get_media(fileId = file['id']).execute()
print(type(response))
data = json.loads(response)
converter_xls(name_of_folder, file['name'],data )