Exemplo n.º 1
0
    def run(self):
        try:
            self.mutex.lock()
            self.state = RunnableState.RUNNING
            s = SCSBucket(self.bucketName)
            if self.key.rfind('/') == len(self.key)-1 :
                m = (("prefix", smart_str(self.key)),
                     ("delimiter", '/'),
                     ("max-keys", 5),
                     ("formatter","json"))
                args = dict((str(k), str(v)) for (k, v) in m if v is not None)
                response = s.send(s.request(key='', args=args))
                files_generator = SCSListing.parse(response)
                
                if files_generator.contents_quantity > 0 or files_generator.common_prefixes_quantity > 0 :
                    for item in files_generator:
                        if cmp(item[0],self.key) != 0:
                            self.emitter.emit(QtCore.SIGNAL("DeleteObjectForbidden(PyQt_PyObject,PyQt_PyObject)"), self, u'不能删除非空目录(前缀) ')
                            return
            
#             s = SCSBucket(self.bucketName)
            self.response = s.send(s.request(method="DELETE", key=self.key))
        except SCSError, e:
            self.state = RunnableState.DID_FAILED
            self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
            self.response._responseBody = e.data
            self.emitter.emit(QtCore.SIGNAL("DeleteObjectDidFailed(PyQt_PyObject,PyQt_PyObject)"), self, e.msg)
            return
Exemplo n.º 2
0
    def run(self):
        try:
            self.mutex.lock()
            self.state = RunnableState.RUNNING
            s = SCSBucket(self.bucketName)
            #             if self.key.rfind('/') == len(self.key)-1 :
            #                 m = (("prefix", smart_str(self.key)),
            #                      ("delimiter", '/'),
            #                      ("max-keys", 5),
            #                      ("formatter","json"))
            #                 args = dict((str(k), str(v)) for (k, v) in m if v is not None)
            #                 response = s.send(s.request(key='', args=args))
            #                 files_generator = SCSListing.parse(response)
            #
            #                 if files_generator.contents_quantity > 0 or files_generator.common_prefixes_quantity > 0 :
            #                     for item in files_generator:
            #                         if cmp(item[0],self.key) != 0:
            #                             self.emitter.emit(QtCore.SIGNAL("DeleteObjectForbidden(PyQt_PyObject,PyQt_PyObject)"), self, u'不能删除非空目录(前缀) ')
            #                             return

            #             s = SCSBucket(self.bucketName)

            if self.key.endswith('/') is not True:  #文件
                self.response = s.send(s.request(method="DELETE",
                                                 key=self.key))
            else:  #目录
                m = (("prefix", smart_str(self.key)), ("formatter", "json"))
                args = dict((str(k), str(v)) for (k, v) in m if v is not None)
                response = s.send(s.request(key='', args=args))
                files_generator = SCSListing.parse(response)
                ''' 根据bucketName获取bucket下得所有文件 '''
                #name, isPrefix, sha1, expiration_time, modify, owner, md5, content_type, size
                for item in files_generator:
                    fileNameStr = item[0]
                    if not item[1]:
                        self.response = s.send(
                            s.request(method="DELETE", key=fileNameStr))

        except SCSError, e:
            self.state = RunnableState.DID_FAILED
            self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
            self.response._responseBody = e.data
            self.emitter.emit(
                QtCore.SIGNAL(
                    "DeleteObjectDidFailed(PyQt_PyObject,PyQt_PyObject)"),
                self, e.msg)
            return
Exemplo n.º 3
0
    def run(self):
        try:
            self.mutex.lock()
            self.state = RunnableState.RUNNING
            s = SCSBucket(self.bucketName)
#             self.response = s[self.key]

            headers = {}
            ''' 若文件存在,则received等于已下载的文件大小 '''
            if os.path.exists(self.tmpFilePath):
                self.received = os.stat(self.tmpFilePath).st_size
                headers['If-Range'] = u'"%s"'%self.fileMD5
                headers['Range'] = u'bytes=%d-'%self.received
            
            self.response = s.send(s.request(key=self.key,headers=headers))
            
            statusCode = getattr(self.response.urllib2Response, "code", None)
            responseHeaders = dict(self.response.urllib2Response.info())
            if statusCode == 200:
                if "content-length" in responseHeaders:
                    self.total = long(responseHeaders["content-length"])
                else:
                    raise ValueError("Content-Length not returned!!")
            elif statusCode == 206:
                ''' 用于断点续传时获取文件总大小 '''
                if "content-range" in responseHeaders:
                    content_range = responseHeaders["content-range"]
                    self.total = long(content_range[content_range.rfind('/')+1:])
                else:
                    raise ValueError("Content-Length not returned!!")
            
            lastTimestamp = time.time()
            CHUNK = 16 * 1024
            _received_tmp = 0              #内部临时变量
            with open(self.tmpFilePath, 'ab') as fp:
                while True:
                    if self.isAbort:
                        self.state = RunnableState.DID_CANCELED
                        self.response._responseBody = u'手动取消'
                        self.emitter.emit(QtCore.SIGNAL("DownloadObjectDidCanceled(PyQt_PyObject)"), self)
                        return
                    
                    chunk = self.response.read(CHUNK)
                    if not chunk: break
                    fp.write(chunk)
                    
                    _received_tmp += len(chunk)
                    if time.time() - lastTimestamp >= 1.0:
                        self.downloadCallBack(_received_tmp)
                        lastTimestamp = time.time()
                        _received_tmp = 0
            
        except SCSError, e:
            self.state = RunnableState.DID_FAILED
            self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
            self.response._responseBody = e.data
            self.emitter.emit(QtCore.SIGNAL("DownloadObjectDidFailed(PyQt_PyObject,PyQt_PyObject)"), self, e.msg)
            return
Exemplo n.º 4
0
 def run(self):
     s = SCSBucket(self.bucketName)
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         self.response = s.send(s.request(method="DELETE", key=None))
     except SCSError, e:
         self.state = RunnableState.DID_FAILED
         self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
         self.response._responseBody = e.data
         self.emitter.emit(QtCore.SIGNAL("DeleteBucketRunnableDidFailed(PyQt_PyObject,PyQt_PyObject)"), self, e.msg)
         return
Exemplo n.º 5
0
 def run(self):
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         s = SCSBucket(self.bucketName)
         self.response = s.send(s.request(method="GET", key=None, subresource='meta'))
         metaResult = json.loads(self.response.read())
         self.response.close()
     except SCSError, e:
         self.state = RunnableState.DID_FAILED
         self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
         self.response._responseBody = e.data
         self.emitter.emit(QtCore.SIGNAL("BucketInfoDidFailed(PyQt_PyObject,PyQt_PyObject)"), self, e.msg)
         return
Exemplo n.º 6
0
 def run(self):
     s = SCSBucket(self.bucketName)
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         self.response = s.send(s.request(method="DELETE", key=None))
     except SCSError, e:
         self.state = RunnableState.DID_FAILED
         self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
         self.response._responseBody = e.data
         self.emitter.emit(
             QtCore.SIGNAL(
                 "DeleteBucketRunnableDidFailed(PyQt_PyObject,PyQt_PyObject)"
             ), self, e.msg)
         return
Exemplo n.º 7
0
 def run(self):
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         s = SCSBucket()
         self.response = s.send(s.request(key=''))
         bucketJsonObj = json.loads(self.response.read())
         self.response.close()
         self.buckets = bucketJsonObj['Buckets']
     except SCSError, e:
         self.state = RunnableState.DID_FAILED
         self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
         self.response._responseBody = e.data
         self.emitter.emit(QtCore.SIGNAL("ListBucketRunnableDidFailed(PyQt_PyObject,PyQt_PyObject)"), self, e.msg)
         return
Exemplo n.º 8
0
 def run(self):
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         s = SCSBucket(self.bucketName)
         scsResponse = s.send(s.request(method="HEAD", key=self.key))
         info = info_dict(dict(scsResponse.urllib2Response.info()))
         scsResponse.close()
         self.response =  scsResponse
     except SCSError, e:
         self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
         self.response._responseBody = e.data
         self.state = RunnableState.DID_FAILED
         self.emitter.emit(QtCore.SIGNAL("fileInfoDidFailed(PyQt_PyObject,PyQt_PyObject)"), self, e.msg)
         return
Exemplo n.º 9
0
 def run(self):
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         s = SCSBucket(self.bucketName)
         self.response = s.send(
             s.request(method="GET", key=None, subresource='meta'))
         metaResult = json.loads(self.response.read())
         self.response.close()
     except SCSError, e:
         self.state = RunnableState.DID_FAILED
         self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
         self.response._responseBody = e.data
         self.emitter.emit(
             QtCore.SIGNAL(
                 "BucketInfoDidFailed(PyQt_PyObject,PyQt_PyObject)"), self,
             e.msg)
         return
Exemplo n.º 10
0
 def run(self):
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         s = SCSBucket()
         self.response = s.send(s.request(key=''))
         bucketJsonObj = json.loads(self.response.read())
         self.response.close()
         self.buckets = bucketJsonObj['Buckets']
     except SCSError, e:
         self.state = RunnableState.DID_FAILED
         self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
         self.response._responseBody = e.data
         self.emitter.emit(
             QtCore.SIGNAL(
                 "ListBucketRunnableDidFailed(PyQt_PyObject,PyQt_PyObject)"
             ), self, e.msg)
         return
Exemplo n.º 11
0
 def run(self):
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         s = SCSBucket(self.bucketName)
         scsResponse = s.send(s.request(method="HEAD", key=self.key))
         info = info_dict(dict(scsResponse.urllib2Response.info()))
         scsResponse.close()
         self.response = scsResponse
     except SCSError, e:
         self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
         self.response._responseBody = e.data
         self.state = RunnableState.DID_FAILED
         self.emitter.emit(
             QtCore.SIGNAL(
                 "fileInfoDidFailed(PyQt_PyObject,PyQt_PyObject)"), self,
             e.msg)
         return
Exemplo n.º 12
0
 def run(self):
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         s = SCSBucket(self.bucketName)
         m = (("prefix", smart_str(self.prefix)), ("marker", self.marker),
              ("max-keys", self.limit), ("delimiter", self.delimiter),
              ("formatter", "json"))
         args = dict((str(k), str(v)) for (k, v) in m if v is not None)
         self.response = s.send(s.request(key='', args=args))
         self.files_generator = SCSListing.parse(self.response)
     except SCSError, e:
         self.state = RunnableState.DID_FAILED
         self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
         self.response._responseBody = e.data
         self.emitter.emit(
             QtCore.SIGNAL("ListDirDidFailed(PyQt_PyObject,PyQt_PyObject)"),
             self, e.msg)
         return
Exemplo n.º 13
0
 def run(self):
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         s = SCSBucket(self.bucketName)
         m = (("prefix", smart_str(self.prefix)),
              ("marker", self.marker),
              ("max-keys", self.limit),
              ("delimiter", self.delimiter),
              ("formatter","json"))
         args = dict((str(k), str(v)) for (k, v) in m if v is not None)
         self.response = s.send(s.request(key='', args=args))
         self.files_generator = SCSListing.parse(self.response)
     except SCSError, e:
         self.state = RunnableState.DID_FAILED
         self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
         self.response._responseBody = e.data
         self.emitter.emit(QtCore.SIGNAL("ListDirDidFailed(PyQt_PyObject,PyQt_PyObject)"), self, e.msg)
         return
Exemplo n.º 14
0
    def run(self):
        try:
            self.mutex.lock()
            self.state = RunnableState.RUNNING
            s = SCSBucket(self.bucketName)
            #             self.response = s[self.key]

            headers = {}
            ''' 若文件存在,则received等于已下载的文件大小 '''
            if os.path.exists(self.tmpFilePath):
                self.received = os.stat(self.tmpFilePath).st_size
                headers['If-Range'] = u'"%s"' % self.fileMD5
                headers['Range'] = u'bytes=%d-' % self.received

            self.response = s.send(s.request(key=self.key, headers=headers))

            statusCode = getattr(self.response.urllib2Response, "code", None)
            responseHeaders = dict(self.response.urllib2Response.info())
            if statusCode == 200:
                if "content-length" in responseHeaders:
                    self.total = long(responseHeaders["content-length"])
                else:
                    self.total = 0
            elif statusCode == 206:
                ''' 用于断点续传时获取文件总大小 '''
                if "content-range" in responseHeaders:
                    content_range = responseHeaders["content-range"]
                    self.total = long(content_range[content_range.rfind('/') +
                                                    1:])
                else:
                    #                     raise ValueError("Content-Length not returned!!")
                    self.state = RunnableState.DID_FAILED
                    self.response._responseBody = u'Content-Length not returned!!'
                    self.emitter.emit(
                        QtCore.SIGNAL(
                            "DownloadObjectDidFailed(PyQt_PyObject,PyQt_PyObject)"
                        ), self, self.response._responseBody)
                    return

            lastTimestamp = time.time()
            CHUNK = 16 * 1024
            _received_tmp = 0  #内部临时变量
            with open(self.tmpFilePath, 'ab') as fp:
                while True:
                    if self.isAbort:
                        self.state = RunnableState.DID_CANCELED
                        self.response._responseBody = u'手动取消'
                        self.emitter.emit(
                            QtCore.SIGNAL(
                                "DownloadObjectDidCanceled(PyQt_PyObject)"),
                            self)
                        return

                    chunk = self.response.read(CHUNK)
                    if not chunk: break
                    fp.write(chunk)

                    _received_tmp += len(chunk)
                    if time.time() - lastTimestamp >= 1.0:
                        self.downloadCallBack(_received_tmp)
                        lastTimestamp = time.time()
                        _received_tmp = 0

        except SCSError, e:
            self.state = RunnableState.DID_FAILED
            self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
            self.response._responseBody = e.data
            self.emitter.emit(
                QtCore.SIGNAL(
                    "DownloadObjectDidFailed(PyQt_PyObject,PyQt_PyObject)"),
                self, e.msg)
            return