-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfileprogressadapter.py
More file actions
46 lines (35 loc) · 1.19 KB
/
Copy pathfileprogressadapter.py
File metadata and controls
46 lines (35 loc) · 1.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from __future__ import division
from twisted.internet import reactor
import os
from twisted.web.client import FileBodyProducer
class ProgressAdapter():
def __init__(self,producer,onProgress,size):
self.producer = producer
self.length = producer.length
self.onProgress = onProgress
self.sizeProcessed = 0
self.sizeTotal = size
def startProducing(self, consumer):
self.consumer = consumer
self.sizeProcessed = 0
return self.producer.startProducing(self)
def stopProducing(self):
self.producer.stopProducing()
def pauseProducing(self):
self.producer.pauseProducing()
def resumeProducing(self):
self.producer.resumeProducing()
def registerProducer(self,producer, streaming):
self.length = self.producer.length
self.sizeProcessed = 0
self.consumer.registerProducer(self, streaming)
def unregisterProducer(self):
self.consumer.unregisterProducer()
def write(self,data):
self.sizeProcessed += len(data)
self.onProgress(self.sizeProcessed / self.sizeTotal)
self.consumer.write(data)
class FileProgressProducer(ProgressAdapter):
def __init__(self,fil,onProgress):
f = open(fil,"r")
ProgressAdapter.__init__(self,FileBodyProducer(f),onProgress,os.path.getsize(fil))