2 # -*- coding: iso-8859-1 -*-
10 # We should ignore SIGPIPE when using pycurl.NOSIGNAL - see
11 # the libcurl tutorial for more info.
14 from signal import SIGPIPE, SIG_IGN
15 signal.signal(signal.SIGPIPE, signal.SIG_IGN)
21 def __init__(self, uri):
24 win.set_title("PycURL progress")
26 vbox = GtkVBox(spacing=5)
27 vbox.set_border_width(10)
28 win.vbox.pack_start(vbox)
29 win.set_default_size(200, 20)
31 label = GtkLabel("Downloading %s" % uri)
32 label.set_alignment(0, 0.5)
33 vbox.pack_start(label, expand=FALSE)
35 pbar = GtkProgressBar()
39 win.connect("destroy", self.close_app)
40 win.connect("delete_event", self.close_app)
42 def progress(self, download_t, download_d, upload_t, upload_d):
45 self.round = self.round + 0.1
46 if self.round >= 1.0: self.round = 0.0
48 self.round = float(download_d) / float(download_t)
49 self.pbar.update(self.round)
57 def close_app(self, *args):
62 class Test(threading.Thread):
63 def __init__(self, url, target_file, progress):
64 threading.Thread.__init__(self)
65 self.target_file = target_file
66 self.progress = progress
67 self.curl = pycurl.Curl()
68 self.curl.setopt(pycurl.URL, url)
69 self.curl.setopt(pycurl.WRITEDATA, self.target_file)
70 self.curl.setopt(pycurl.FOLLOWLOCATION, 1)
71 self.curl.setopt(pycurl.NOPROGRESS, 0)
72 self.curl.setopt(pycurl.PROGRESSFUNCTION, self.progress)
73 self.curl.setopt(pycurl.MAXREDIRS, 5)
74 self.curl.setopt(pycurl.NOSIGNAL, 1)
79 self.target_file.close()
80 self.progress(1.0, 1.0, 0, 0)
83 # Check command line args
85 print "Usage: %s <URL> <filename>" % sys.argv[0]
88 # Make a progress bar window
89 p = ProgressBar(sys.argv[1])
90 # Start thread for fetching url
91 Test(sys.argv[1], open(sys.argv[2], 'wb'), p.progress).start()
92 # Enter the GTK mainloop