-
Notifications
You must be signed in to change notification settings - Fork 1
/
recover.py
108 lines (81 loc) · 3.55 KB
/
recover.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import threading
import time
from apiclient import errors
import os
import credentials_mgr
import datas
import util
import git_manager
def recover():
while True:
time.sleep(5)
lines = []
with open('./recover_list.txt', 'r') as f:
lines = f.readlines()
if len(lines) <= 0:
continue
print('recovering start...')
credentials = lines[0].strip()
group_name = util.extract_grouping_name(credentials)
group_alphabet = group_name[:-1]
group_info = None
for g in datas.credentials_list:
if group_alphabet == g.get_group_alphabet():
group_info = g
break
origin_cre_info = None
recover_cre_info = None
if group_info:
for cre in group_info.credentials_list:
print(cre.get_credentials_name())
if cre.get_state() == datas.CredentialsInfo.STATE_USABLE:
origin_cre_info = cre
if cre.get_credentials_name() == credentials:
recover_cre_info = cre
if (origin_cre_info == None) or (recover_cre_info == None):
continue
store = credentials_mgr.get_storage(origin_cre_info.get_user_id())
service_o = credentials_mgr.get_service(store)
store = credentials_mgr.get_storage(recover_cre_info.get_user_id())
service_r = credentials_mgr.get_service(store)
all_origin_files = credentials_mgr.retrieve_all_files(service_o)
recover_files = credentials_mgr.retrieve_all_files(service_r)
origin_jigsaw_folder_id = ''
for file in all_origin_files:
if file['title'] == 'jigsaw':
origin_jigsaw_folder_id = file['id']
break
origin_children_folder_dic = credentials_mgr.get_children_folder(all_origin_files, origin_jigsaw_folder_id)
recover_jigsaw_folder_info = None
for file in recover_files:
if file['title'] == 'jigsaw':
recover_jigsaw_folder_info = file
break
if recover_jigsaw_folder_info == None:
recover_jigsaw_folder_info = credentials_mgr.create_public_folder(service_r, 'jigsaw')
recover_children_folder_dic = {}
for folder_name in origin_children_folder_dic.values():
folder_info = credentials_mgr.create_public_folder(service_r, folder_name, recover_jigsaw_folder_info['id'])
recover_children_folder_dic[folder_info['title']] = folder_info['id']
for file in all_origin_files:
parent_folder_id = file['parents'][0]['id']
if parent_folder_id in origin_children_folder_dic:
folder_name = origin_children_folder_dic[parent_folder_id]
file_name = folder_name + '_' + file['title']
file_path_name = './recover_files/'+ file_name
#download
credentials_mgr.download_file(service_o, file['id'],file_path_name )
#upload
credentials_mgr.upload_file(service_r, recover_children_folder_dic[folder_name], file_name, file['mimeType'], file_path_name)
recover_cre_info.set_usable_state()
group_info.compute_group_state()
lines.pop(0)
with open('./recover_list.txt', 'w') as f:
f.write('')
for str in lines:
f.write(str)
git_manager.recover_add()
def start_threading():
threading.Timer(1.0, recover).start()
if __name__ == '__main__':
recover()