Skip to content

Instantly share code, notes, and snippets.

@ilkermanap
Created December 13, 2016 12:05
Show Gist options
  • Save ilkermanap/960b01045eaaa3db34ccbbac7a855291 to your computer and use it in GitHub Desktop.
Save ilkermanap/960b01045eaaa3db34ccbbac7a855291 to your computer and use it in GitHub Desktop.
Parcali dosya cekimi / Downloading files in chunks.
class Durum:
def __init__(self, app = QtGui.QApplication, widget=None):
self.app = app
self.widget = widget
def guncelle(self, mesaj):
if type(self.widget) is QtGui.QListWidget:
self.widget.addItem(mesaj)
if type(self.widget) is QtGui.QLabel:
self.widget.setText(mesaj)
if type(self.widget) is QtGui.QLineEdit:
self.widget.setText(mesaj)
self.app.processEvents()
def download_file(url, fname, csize=5000000, durum=None):
basla = datetime.now()
# NOTE the stream=True parameter
start = None
if os.path.isfile(fname) is True:
start = os.stat(fname).st_size - 1
else:
start = 0
f = open(fname,"wb")
f.close()
cekilen = 0
r = requests.get(url, stream=True, verify=False )
finish = int(r.headers['content-length'])
boy = finish
for st in range(start, finish, csize):
if st + csize < finish:
end = st + csize
else:
end = finish
q = None
status = False
while status is False:
try:
if st == 0:
st = -1
q = requests.get(url, verify=False, headers = { "range" : "bytes=%d-%d" % (st +1, end)})
status = (q.status_code == 206)
except:
status = False
if durum is not None:
durum.guncelle("Dosya cekmede problem.. Yeniden deniyoruz")
time.sleep(10)
cekilen += csize
f = open(fname, "a+b")
f.write(q.content)
f.close()
zaman = datetime.now()
sure = (zaman - basla).total_seconds()
if sure > 0:
hiz = cekilen / sure
kalan_sure = (finish - st) / hiz
sa = 0
dk = kalan_sure / 60
sn = kalan_sure % 60
if dk > 60:
sa = dk / 60
dk = dk % 60
kln = "%02d:%02d:%02d" % (sa, dk, sn)
if durum is not None:
durum.guncelle("%.2f MB dosyanin %.2f MB'i cekildi, hiz %.2f MB/sn , kalan sure %s"
% (boy / 1048576.0, cekilen / 1048576.0, hiz / 1048576.0, kln))
if durum is not None:
durum.guncelle("Yedek geri alma islemi bitti")
return fname
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment