def download(self):
    ftp = self.connect()
    try:
        size = ftp.size(filename=self.filename)
        print "Total size of {filename} is {size}".format(filename=self.filename, size=size)
        written_till_now = 0
        def handle(bytes):
            f.write(bytes)
            print "written bytes: {}".format(bytes)
        with open(self.filename, 'wb') as f:
            ftp.retrbinary('RETR {}'.format(self.filename), handle)
    except (socket.error, error_perm) as e:
        raise DownloaderException("Error in downloading file {filename}: {message}".format(filename=self.filename, message=str(e)))
    except EOFError as e:
        print "file {filename} downloaded successfully".format(filename=self.filename)
I want to keep track of the amount of data i've currently downloaded and later do some additional stuff also for every stream of data i download.
I created a handle function inside the download function.
Python ftblip.retrbinary provides the data to the given callback. In my case handle but somehow it is not executing.
Also I doubt i am not understanding the scope of variables when it comes to nested functions. In my understanding I can use variable defined in parent scope in the child scope as long as i am not modifying them.But in this case f is a object and i am not modifying it rather calling its method write. Please correct me if i am missing something.
 
    