Skip to content

Commit f398915

Browse files
author
bajins
committed
rename
1 parent 837fd3f commit f398915

File tree

1 file changed

+124
-122
lines changed

1 file changed

+124
-122
lines changed

utils/MultipartFileUtil.py

Lines changed: 124 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
from utils import HttpUtil
1919

2020

21-
def download(url, filename, headers=HttpUtil.header):
22-
t = DownloadWorkerThread(url, filename, headers=headers)
21+
def download(url, file_name, headers=HttpUtil.header):
22+
t = DownloadWorkerThread(url, file_name, headers=headers)
2323
t.start()
2424
return t
2525

@@ -28,15 +28,15 @@ def download(url, filename, headers=HttpUtil.header):
2828
class DownloadWorkerThread(threading.Thread):
2929
thread_count = 5
3030
file_lock = threading.Lock()
31-
fileinfo_lock = threading.Lock()
31+
file_info_lock = threading.Lock()
3232

33-
def __init__(self, url, filename, headers={}, thread_count=3):
33+
def __init__(self, url, file_name, headers={}, thread_count=3):
3434
threading.Thread.__init__(self)
3535
self.content_length = self.get_content_length()
3636
self.range_manager = self.read_range_file()
37-
self.filename = filename
37+
self.filename = file_name
3838
self.url = url
39-
self.fileinfo_name = filename + ".tmp"
39+
self.file_info_name = file_name + ".tmp"
4040
self.headers = headers
4141
self.thread_count = thread_count
4242

@@ -62,23 +62,23 @@ def write_content(self, content, content_range):
6262
f.write(content)
6363
self.file_lock.release()
6464

65-
self.fileinfo_lock.acquire()
65+
self.file_info_lock.acquire()
6666
self.range_manager.set_written_range(content_range)
67-
self.fileinfo_lock.release()
67+
self.file_info_lock.release()
6868

6969
def read_next_range(self):
70-
self.fileinfo_lock.acquire()
70+
self.file_info_lock.acquire()
7171
time.sleep(0.1)
7272
r = self.range_manager.get_unwritten_range()
73-
self.fileinfo_lock.release()
73+
self.file_info_lock.release()
7474
return r
7575

7676
def read_range_file(self):
77-
self.fileinfo_lock.acquire()
77+
self.file_info_lock.acquire()
7878
manager = None
79-
if os.path.exists(self.fileinfo_name):
80-
print("read filename ", self.fileinfo_name)
81-
manager = DownloadWorkerThread.FileInfoManager(self.fileinfo_name, url=self.url)
79+
if os.path.exists(self.file_info_name):
80+
print("read filename ", self.file_info_name)
81+
manager = DownloadWorkerThread.FileInfoManager(self.file_info_name, url=self.url)
8282
self.content_length = manager.get_total_length()
8383
if self.url.strip() == "":
8484
self.url = manager.url_in_file
@@ -87,9 +87,9 @@ def read_range_file(self):
8787
print("create filename_info length:", str(self.content_length))
8888
with open(self.filename, "wb+") as f:
8989
f.seek(self.content_length)
90-
manager = DownloadWorkerThread.FileInfoManager(self.fileinfo_name, url=self.url,
90+
manager = DownloadWorkerThread.FileInfoManager(self.file_info_name, url=self.url,
9191
filesize=self.content_length)
92-
self.fileinfo_lock.release()
92+
self.file_info_lock.release()
9393
return manager
9494

9595
def get_content_length(self):
@@ -106,7 +106,7 @@ def range_worker(self, download_worker):
106106
while True:
107107
content_range = download_worker.read_next_range()
108108
if content_range == 0:
109-
os.remove(self.fileinfo_name)
109+
os.remove(self.file_info_name)
110110
print(self.filename + " finished")
111111
break
112112
headers = download_worker.headers
@@ -127,114 +127,116 @@ def range_worker(self, download_worker):
127127
print("Downloading " + download_worker.url + " error. Now Exit Thread.")
128128
return
129129

130-
class FileInfoManager():
131-
url_in_file = ""
132-
writing_range = []
133-
written_range = []
134-
unwritten_range = []
135-
136-
def __init__(self, filename, url="", file_size=0):
137-
self.filename = filename
138-
if not os.path.exists(filename):
139-
with open(filename, "w") as f:
140-
f.write("unwritten_range=[(0," + str(file_size) + ")]\r\n")
141-
f.write("writing_range=[]\r\n")
142-
f.write("written_range=[]\r\n")
143-
f.write("url_in_file=" + url)
144-
self.unwritten_range.append((0, file_size))
145-
self.url_in_file = url
146-
else:
147-
with open(filename, "r") as f:
148-
for l in f.readlines():
149-
typ = l.split("=")[0]
150-
if typ == "writing_range":
151-
typ = "unwritten_range"
152-
elif typ == "url_in_file":
153-
if url.strip() == "":
154-
self.url_in_file = l.split("=")[1]
155-
else:
156-
self.url_in_file = url
130+
131+
def _concat(intervals, new_interval):
132+
if len(intervals) == 0:
133+
return [new_interval]
134+
response = [new_interval]
135+
for interval in intervals:
136+
i = response.pop()
137+
if interval[0] == interval[1]:
138+
continue
139+
if i[0] > interval[1]:
140+
response.append(interval)
141+
response.append(i)
142+
elif i[1] < interval[0]:
143+
response.append(i)
144+
response.append(interval)
145+
else:
146+
response.append((min(i[0], interval[0]), max(i[1], interval[1])))
147+
return response
148+
149+
150+
class FileInfoManager:
151+
url_in_file = ""
152+
writing_range = []
153+
written_range = []
154+
unwritten_range = []
155+
156+
def __init__(self, file_name, url="", file_size=0):
157+
self.filename = file_name
158+
if not os.path.exists(file_name):
159+
with open(file_name, "w") as f:
160+
f.write("unwritten_range=[(0," + str(file_size) + ")]\r\n")
161+
f.write("writing_range=[]\r\n")
162+
f.write("written_range=[]\r\n")
163+
f.write("url_in_file=" + url)
164+
self.unwritten_range.append((0, file_size))
165+
self.url_in_file = url
166+
else:
167+
with open(file_name, "r") as f:
168+
for l in f.readlines():
169+
typ = l.split("=")[0]
170+
if typ == "writing_range":
171+
typ = "unwritten_range"
172+
elif typ == "url_in_file":
173+
if url.strip() == "":
174+
self.url_in_file = l.split("=")[1]
175+
else:
176+
self.url_in_file = url
177+
continue
178+
for tup in l.split("=")[1][1:-3].split('),'):
179+
if tup == "":
157180
continue
158-
for tup in l.split("=")[1][1:-3].split('),'):
159-
if tup == "":
160-
continue
161-
if tup.find("(") != 0:
162-
tup = tup[tup.find("("):]
163-
if tup.find(")") != 0:
164-
tup = tup[:tup.find(")")]
165-
getattr(self, typ).append((int(tup.split(",")[0][1:]), int(tup.split(",")[1])))
166-
167-
def get_total_length(self):
168-
if len(self.unwritten_range) > 0:
169-
return self.unwritten_range[-1][1]
170-
elif len(self.writing_range) > 0:
171-
return self.writing_range[-1][1]
172-
elif len(self.written_range) > 0:
173-
return self.written_range[-1][1]
181+
if tup.find("(") != 0:
182+
tup = tup[tup.find("("):]
183+
if tup.find(")") != 0:
184+
tup = tup[:tup.find(")")]
185+
getattr(self, typ).append((int(tup.split(",")[0][1:]), int(tup.split(",")[1])))
186+
187+
def get_total_length(self):
188+
if len(self.unwritten_range) > 0:
189+
return self.unwritten_range[-1][1]
190+
elif len(self.writing_range) > 0:
191+
return self.writing_range[-1][1]
192+
elif len(self.written_range) > 0:
193+
return self.written_range[-1][1]
194+
return 0
195+
196+
def _save_to_file(self):
197+
with open(self.filename, "w") as f:
198+
f.write("writing_range=" + str(self.writing_range) + "\r\n")
199+
f.write("unwritten_range=" + str(self.unwritten_range) + "\r\n")
200+
f.write("written_range=" + str(self.written_range) + "\r\n")
201+
f.write("url_in_file=" + self.url_in_file)
202+
203+
def _splice(self, intervals, new_interval):
204+
if len(intervals) == 0:
205+
return []
206+
intervals = _concat(intervals, (0, 0))
207+
response = []
208+
for interval in intervals:
209+
if interval[0] == interval[1]:
210+
continue
211+
if interval[0] > new_interval[1]:
212+
response.append(interval)
213+
elif interval[1] < new_interval[0]:
214+
response.append(interval)
215+
else:
216+
max_range = (min(interval[0], new_interval[0]), max(interval[1], new_interval[1]))
217+
if max_range != new_interval:
218+
left = (min(max_range[0], new_interval[0]), max(max_range[0], new_interval[0]))
219+
right = (min(max_range[1], new_interval[1]), max(max_range[1], new_interval[1]))
220+
if left[0] != left[1]:
221+
response.append(left)
222+
if right[0] != right[1]:
223+
response.append(right)
224+
return response
225+
226+
def get_unwritten_range(self, size=1024 * 1024):
227+
if len(self.unwritten_range) == 0:
174228
return 0
229+
r = self.unwritten_range[0]
230+
r = (r[0], min(r[0] + size, r[1]))
231+
self.unwritten_range = self._splice(self.unwritten_range, r)
232+
self.writing_range = _concat(self.writing_range, r)
233+
self._save_to_file()
234+
return r
175235

176-
def _save_to_file(self):
177-
with open(self.filename, "w") as f:
178-
f.write("writing_range=" + str(self.writing_range) + "\r\n")
179-
f.write("unwritten_range=" + str(self.unwritten_range) + "\r\n")
180-
f.write("written_range=" + str(self.written_range) + "\r\n")
181-
f.write("url_in_file=" + self.url_in_file)
182-
183-
def _splice(self, intervals, new_interval):
184-
if len(intervals) == 0:
185-
return []
186-
intervals = self._concat(intervals, (0, 0))
187-
response = []
188-
for interval in intervals:
189-
if interval[0] == interval[1]:
190-
continue
191-
if interval[0] > new_interval[1]:
192-
response.append(interval)
193-
elif interval[1] < new_interval[0]:
194-
response.append(interval)
195-
else:
196-
max_range = (min(interval[0], new_interval[0]), max(interval[1], new_interval[1]))
197-
if max_range != new_interval:
198-
left = (min(max_range[0], new_interval[0]), max(max_range[0], new_interval[0]))
199-
right = (min(max_range[1], new_interval[1]), max(max_range[1], new_interval[1]))
200-
if left[0] != left[1]:
201-
response.append(left)
202-
if right[0] != right[1]:
203-
response.append(right)
204-
return response
205-
206-
def _concat(self, intervals, new_interval):
207-
if len(intervals) == 0:
208-
return [new_interval]
209-
response = [new_interval]
210-
for interval in intervals:
211-
i = response.pop()
212-
if interval[0] == interval[1]:
213-
continue
214-
if i[0] > interval[1]:
215-
response.append(interval)
216-
response.append(i)
217-
elif i[1] < interval[0]:
218-
response.append(i)
219-
response.append(interval)
220-
else:
221-
response.append((min(i[0], interval[0]), max(i[1], interval[1])))
222-
return response
223-
224-
def get_unwritten_range(self, size=1024 * 1024):
225-
if len(self.unwritten_range) == 0:
226-
return 0
227-
r = self.unwritten_range[0]
228-
r = (r[0], min(r[0] + size, r[1]))
229-
self.unwritten_range = self._splice(self.unwritten_range, r)
230-
self.writing_range = self._concat(self.writing_range, r)
231-
self._save_to_file()
232-
return r
233-
234-
def set_written_range(self, content_range):
235-
self.writing_range = self._splice(self.writing_range, content_range)
236-
self.written_range = self._concat(self.written_range, content_range)
237-
self._save_to_file()
236+
def set_written_range(self, content_range):
237+
self.writing_range = self._splice(self.writing_range, content_range)
238+
self.written_range = _concat(self.written_range, content_range)
239+
self._save_to_file()
238240

239241

240242
# t = DownloadWorkerThread(r'http://a3.kuaihou.com/ruanjian/ucdnb.zip', 'd:\\ucdnb.zip', header)

0 commit comments

Comments
 (0)