📄 uriopener.py
字号:
# Check for posts
if params=='':
sourceHandle = self.uriOpener.open(uri)
else:
sourceHandle = self.uriOpener.open(uri, params)
logFile.info("Determining which Progessbar to use....")
data = sourceHandle.info()
if data.get('Content-length'):
fileSize = int(data.get('Content-length'))
logFile.info('Using Calculated Progressbar (fileSize=' + str(fileSize) +')')
else:
fileSize = -1
logFile.info('Using Non-Calculated Progressbar')
read = 0
blocknum = 0
data = ''
while 1:
block = sourceHandle.read(self.blockSize)
if block == "":
break
read += len(block)
data = data + block
blocknum += 1
if pbEnabled:
cancelled = self.PBHandler(blocknum, self.blockSize, fileSize, uriPB, pbLine1, pbLine2)
#check to see if cancelled
if cancelled:
break
if pbEnabled:
uriPB.close()
try:
self.timerUpDown.cancel()
except:
# no timer exists
pass
sourceHandle.close()
if cancelled:
logFile.info("Opening of %s was cancelled", uri)
else:
logFile.info("Url %s was opened successfully", uri)
return data
except:
logFile.critical("Error Opening url %s", uri, exc_info=True)
if pbEnabled:
uriPB.close()
self.timerUpDown.cancel()
try:
sourceHandle.close()
except UnboundLocalError:
pass
return ""
#===============================================================================
def Header(self, uri, params=""):
logFile.info("Retreiving Header info for %s", uri)
#uri = uri
#params = params
try:
if params == "":
uriHandle = self.uriOpener.open(uri)
else:
uriHandle = self.uriOpener.open(uri, params)
data = uriHandle.info()
realUrl = uriHandle.geturl()
#logFile.debug(data)
data = data.get('Content-Type')
uriHandle.close()
logFile.debug("Header info retreived: %s for realUrl %s", data, realUrl)
return (data, realUrl)
except:
logFile.critical("Header info not retreived", exc_info=True)
return ("","")
#===============================================================================
def CookieCheck(self, cookieName):
retVal = False
for cookie in self.cj:
if cookie.name == cookieName:
logFile.debug("Found cookie: %s", cookie.name)
retVal = True
break
return retVal
#===============================================================================
def CorrectFileName(self, filename):
filename = re.sub(self.inValidCharacters,"",filename)
if len(filename)>42:
(base, ext) = os.path.splitext(filename)
baseLength = 42 - len(ext)
regex = "^.{1,%s}" % (baseLength)
base = re.compile(regex).findall(base)[-1]
filename = "%s%s" % (base, ext)
return filename
#===============================================================================
def PBHandler(self, blocknum, blocksize, totalsize, uriPB, pbLine1, pbLine2):
"""
add information to the Progressbar and returns true if it is canceled
"""
if uriPB.iscanceled()==False:
try:
retrievedsize = blocknum*blocksize
if totalsize != 0:
perc = 100*retrievedsize/totalsize
else:
perc = 0
retrievedsizeMB = 1.0*retrievedsize/self.bytesToMB
totalsizeMB = 1.0*totalsize/self.bytesToMB
if totalsize > 0:
pbLine2 = '%i%% (%.1f of %.1f MB)' % (perc, retrievedsizeMB, totalsizeMB)
animation = blocknum % len(self.pbAnimation)
uriPB.update(int(perc), pbLine1 + " - " + self.pbAnimation[animation] ,pbLine2)
return False
except:
logFile.critical("PBHandle error", exc_info=True)
return True
else:
return True
#==============================================================================
def PBEmergencyCanceler(self, *args, **kwargs):
logFile.debug("Emergency Canceller Check.....")
uriPB = kwargs["pb"]
if uriPB.iscanceled():
uriPB.close()
logFile.critical("Emerency Canceling of UriOpener")
else:
try:
self.timerUpDown.cancel()
except:
logFile.info("Emerengy Cancel timer not active. Activating")
pass
self.timerUpDown = threading.Timer(self.timerTimeOut, self.PBEmergencyCanceler, kwargs={'pb':uriPB})
self.timerUpDown.start()
return
#===============================================================================
class AsyncOpener(threading.Thread):
def __init__(self, uri, handler, blocksize, action=None, params="", filePath=""):
""" constructor, setting initial variables
"""
self.uri = uri
self.uriHandler = handler
self.params = params
self.blockSize = blocksize
self.savePath = filePath
self.isCompleted = False
self.fileSize = 0
self.blocksRead = 0
self.data = ""
if action=='open':
threading.Thread.__init__(self, name='UriOpenerThread', target=self.Open)
else:
raise Exception()
return
#===============================================================================
def Open(self):
try:
# Check for posts
if self.params=='':
sourceHandle = self.uriHandler.open(self.uri)
else:
sourceHandle = self.uriHandler.open(self.uri, self.params)
logFile.info("Determining which Progessbar to use....")
data = sourceHandle.info()
if data.get('Content-length'):
self.fileSize = int(data.get('Content-length'))
logFile.info('FileSize is known (fileSize=' + str(self.fileSize) +')')
else:
self.fileSize = -1
logFile.info('FileSize is unknown')
data = ""
#time.sleep(2)
self.blocksRead = 0
while 1:
block = sourceHandle.read(self.blockSize)
if block == "":
break
data = data + block
self.blocksRead += 1
#need a sleep to allow reading of variables
#time.sleep(0.0005)
sourceHandle.close()
self.data = data
self.isCompleted = True
except:
logFile.critical("Error Opening url %s", self.uri, exc_info=True)
try:
sourceHandle.close()
except UnboundLocalError:
pass
self.data = ""
self.isCompleted = True
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -