Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def copy_file(
- source, destination, queue, overwrite=True,
- progress_factory=fake_factory, progress_deleter=none_function,
- total_inc=none_function, ask_dialog=none_function,
- block_size=BLOCK_SIZE):
- """
- Copia un file.
- In realtà la parte **teorica** è effettivamente teorica.
- E' quello che a grandi linee mi aspetterei che funzionasse concettaulmente.
- A livello di codice stavo simulando la cosa con uno scriptino di test che
- è ancora sotto i ferri. Ma questo è quello che vorrei facesse la funzione
- originale.
- """
- size = getsize(source)
- progress = progress_factory(basename(source), size, widgets=[EpStatus])
- if isdir(destination):
- destination = join(destination, basename(source))
- # Inizio gestione **teorica** dei thread.
- # Recupero quello che potrebbe essere un oggetto con le info che mi servono
- qobj = queue.get()
- event = qobj.event
- # Facciamo aspettare in base all'evento, se ho ben capito una volta che
- # ho fatto il set dovrebbe dovrebbe entrare in loop fino al clear.
- # e mi aspetto che se non c'è stato un set non attenda al wait()
- event.wait()
- # Dopo il wait recuperiamo ancora l'oggetto che potrebbe essere stato
- # modificato.
- qobj = queue.get()
- # qobj.overwrite dovrebbe essere a None se non è stato utilizzato altrove.
- if qobj.overwrite is not None:
- overwrite = qobj.overwrite
- # Se la modalità di overwrite è Ask e il file esiste.
- if overwrite is Ask and os.path.exists(destination) is True:
- # imposto il flag sull'evento.
- event.set()
- # Recupero la risposta dell'overwrite dal dialoglo.
- overwrite = ask_dialog("Sovrascrivere il file %s")
- # Imposto l'overwrite nel qobject.
- qobj.overwrite = overwrite
- # Rimtto in coda.
- queue.put(qobj)
- # Pulisco il flag dell'evento.
- event.clear()
- # Fine gestione **teorica** dei thread.
- with open(source, 'rb') as src:
- if os.path.exists(destination) is False or overwrite is True:
- with open(destination, 'wb') as dest:
- while True:
- data = src.read(block_size)
- if not data:
- break
- dest.write(data)
- progress.update(dest.tell())
- else:
- progress.set_exists()
- progress.fill()
- total_inc()
- progress_deleter(progress)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement