示例#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
示例#2
0
    def upload(self):
        ''' 普通上传 '''
        try:
            self.mutex.lock()
            self.state = RunnableState.RUNNING

            s = SCSBucket(self.bucketName)
            with FileWithCallback(self.filePath, 'rb',
                                  self.uploadCallBack) as fileWithCallback:
                scsResponse = s.putFileByHeaders(
                    '%s%s' % (self.prefix, os.path.basename(self.filePath)),
                    fileWithCallback)
                self.response = scsResponse
        except SCSError, e:
            print e
            self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
            if isinstance(e, ManualCancel):  #手动取消
                self.state = RunnableState.DID_CANCELED
                self.response._responseBody = u'手动取消'
                self.emitter.emit(
                    QtCore.SIGNAL(
                        "fileUploadDidCanceled(PyQt_PyObject,PyQt_PyObject)"),
                    self, e.msg)
            else:
                self.state = RunnableState.DID_FAILED
                self.response._responseBody = e.data
                self.emitter.emit(
                    QtCore.SIGNAL(
                        "fileUploadDidFailed(PyQt_PyObject,PyQt_PyObject)"),
                    self, e.msg)
            return
示例#3
0
def update_file_acl():
    s = SCSBucket('test11')
    acl = {}
    acl[ACL.ACL_GROUP_ANONYMOUSE] = [ACL.ACL_READ]
    acl[ACL.ACL_GROUP_CANONICAL] = [ACL.ACL_READ_ACP,ACL.ACL_WRITE_ACP]
    
    s.update_acl('sss.txt', acl)
示例#4
0
文件: app.py 项目: SundaeCHX/Sundae
def blog():
    sinastorage.setDefaultAppInfo(
        '***********************', '*************************************')
    s = SCSBucket('sundae')
    url1 = s.make_url_authed('picture/beijing.jpg')
    url2 = s.make_url_authed('picture/ziti.png')
    return render_template('blog.html', url0=url1, url1=url2)
示例#5
0
 def fun(_time_out):
     if self.lis is not None:
         self.lis = []
     bucket = SCSBucket(BUCKET_NAME, timeout=_time_out)
     items_generator = bucket.listdir(prefix='haoc/nodes/', limit=10000)
     access_key = HaocUtils.Config.get_ak()
     for item in items_generator:
         common_name = item[0][11:]
         local_name = "%s/data/%s/nodes/%s" % (
             HaocUtils.get_root_path(), access_key, common_name)
         if self.lis is not None:
             if common_name[-1] == '/' or common_name[-4:] == '.nod':
                 self.lis.append(common_name)
         if common_name[-1] == '/':
             if not os.path.exists(local_name):
                 os.makedirs(local_name)
         elif common_name[-4:]:
             if os.path.exists(local_name):
                 lt = int(os.path.getmtime("%s.nod" % local_name[:-4]))
                 ct = int(
                     bucket.info(
                         "%s.nod" %
                         item[0][:-4]).get('metadata').get('lmt'))
                 # Compare local file modified time with cloud file modified time
                 if lt < ct:
                     open(local_name, "w").close()
                     if is_manual_sync:
                         print "Updated: %s" % common_name
             else:
                 if not os.path.exists(os.path.dirname(local_name)):
                     os.makedirs(os.path.dirname(local_name))
                 open(local_name, "w").close()
                 if is_manual_sync:
                     print "Created: %s" % common_name
示例#6
0
文件: app.py 项目: SundaeCHX/Sundae
def html_form():
    sinastorage.setDefaultAppInfo(
        '***********************', '*************************************')
    s = SCSBucket('eggtart')
    url = s.make_url_authed('picture/bj1.gif')
    whuurl = s.make_url_authed('picture/whu.jpg')
    return render_template('html_form.html', url=url, url1=whuurl)
 def test_put_file_relax(self):
     scs = SCSBucket(self.bucket_name)
     try:
         scs.put_bucket('public-read-write')
     except:
         self.fail('create bucket:%s is failed'%self.bucket_name)
          
     scs.put(self.object_key, 'fileContent...fileContent...fileContent...fileContent...fileContent...')
      
     orign_file_metaResult = scs.meta(self.object_key)
      
     canned_acl = 'public-read-write'                #快捷ACL
     metadata = {}                                   #自定义文件属性信息
     metadata['author'] = 'dage'
     metadata['home'] = 'tianjin'
     metadata['age'] = '18'
     mimetype = 'text/plain'
     scs.put_relax(key=self.object_key+'_relax', sina_sha1=orign_file_metaResult['Content-SHA1'], 
                   s_sina_length=orign_file_metaResult['Size'], acl=canned_acl, 
                   metadata=metadata, mimetype=mimetype)
      
     relax_file_aclInfo = scs.acl_info(self.object_key+'_relax')
     self.assertTrue(ACL.ACL_GROUP_ANONYMOUSE in relax_file_aclInfo['ACL'], 'The acl dose not contains GRPS000000ANONYMOUSE group')
     self.assertTrue(ACL.ACL_READ in relax_file_aclInfo['ACL'][ACL.ACL_GROUP_ANONYMOUSE], 'The acl GRPS000000ANONYMOUSE group hasn\'t read right')
     self.assertTrue(ACL.ACL_WRITE in relax_file_aclInfo['ACL'][ACL.ACL_GROUP_ANONYMOUSE], 'The acl GRPS000000ANONYMOUSE group hasn\'t write right')
      
     relax_file_info = scs.info(self.object_key+'_relax')
     #assert metadata
     self.assertEqual(metadata['author'], relax_file_info['metadata']['author'], 'The response metadata[\'author\'] is not match')
     self.assertEqual(metadata['home'], relax_file_info['metadata']['home'], 'The response metadata[\'home\'] is not match')
     self.assertEqual(metadata['age'], relax_file_info['metadata']['age'], 'The response metadata[\'age\'] is not match')
     #assert content-type
     self.assertEqual(mimetype, relax_file_info['headers']['content-type'], 'The response content-type is not match')
示例#8
0
    def __init__(self, host, accesskey, secretkey, bucket_name, remote_dir):
        self.host = host
        self.bucket_name = bucket_name
        self.remote_dir = remote_dir

        sinastorage.setDefaultAppInfo(accesskey, secretkey)
        self.handler = SCSBucket(self.bucket_name)
示例#9
0
def copy_file():
    s = SCSBucket('asdasdasdasd')
    """
        注意:
        source    必须从bucket开始,如:'/cloud0/aaa.txt'
    """
    s.copy('/asdasdasdasd/aaaa.txt', 'aaaa22111.txt')
示例#10
0
文件: app.py 项目: SundaeCHX/Sundae
def who():
    sinastorage.setDefaultAppInfo(
        '***********************', '*************************************')
    s = SCSBucket('sundae')
    url1 = s.make_url_authed('picture/who.png')
    url0 = s.make_url_authed('picture/bj1.gif')
    url2 = s.make_url_authed('picture/i.png')
    return render_template('who.html', url0=url0, url1=url1, url2=url2)
示例#11
0
def listFile(bucketName):
	Files = []
	s = SCSBucket(bucketName)
	files = s.listdir()
	for i in files:
		#i = (name, isPrefix, sha1, expiration_time, modify, owner, md5, content_type, size)
		Files.append(i)
	return Files
 def test_list_bucket(self):
     scs = SCSBucket()
     bucket_gen = scs.list_buckets()
     self.assertTrue(bucket_gen is not None, 'List bucket result is None')
     for bucket in bucket_gen:
         bucketStr = str(bucket)
         self.assertTrue(bucket[0] is not None, 'bucket:%s name is None'%bucketStr)
         self.assertTrue(bucket[1] is not None, 'bucket:%s CreationDate is None'%bucketStr)
 def test_remove_bucket(self):
     scs = SCSBucket(self.bucket_name)
     scs.put_bucket()
       
     try:
         scs.delete_bucket()
     except:
         self.fail('Remove bucket:%s is failed'%self.bucket_name)
示例#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:
                    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
示例#15
0
def listBucket():
	Buckets = []
	s = SCSBucket()
	buckets_generator = s.list_buckets()
	for bucket in buckets_generator:
		bucketName = bucket[0]
		bMeta = SCSBucket(bucketName).meta()
		Buckets.append(bMeta)
	return Buckets
示例#16
0
 def rename(self, com, time_out):
     old_cloud_name = "haoc/nodes/%s" % com.old_name
     new_cloud_name = "haoc/nodes/%s" % com.new_name
     bucket = SCSBucket(BUCKET_NAME, timeout=time_out)
     try:
         if new_cloud_name[-1] == '/':
             bucket.copy(source="/%s/%s" % (BUCKET_NAME, old_cloud_name),
                         key=new_cloud_name)
             del bucket[old_cloud_name]
         else:
             shall_do = True
             if self.from_agenda:
                 try:
                     bucket["%s.nod" % new_cloud_name]
                 except sinastorage.bucket.KeyNotFound:
                     pass
                 else:
                     info = bucket.info("%s.nod" % new_cloud_name)
                     ct = float(info.get('metadata').get('lmt'))
                     if com.op_time < ct:
                         shall_do = False
             if shall_do:
                 bucket.copy(source="/%s/%s.nod" %
                             (BUCKET_NAME, old_cloud_name),
                             key="%s.nod" % new_cloud_name)
                 del bucket["%s.nod" % old_cloud_name]
                 bucket.copy(source="/%s/%s.hlp" %
                             (BUCKET_NAME, old_cloud_name),
                             key="%s.hlp" % new_cloud_name)
                 del bucket["%s.hlp" % old_cloud_name]
     except sinastorage.bucket.KeyNotFound:
         pass
 def test_copy_file(self):
     scs = SCSBucket(self.bucket_name)
     try:
         scs.put_bucket('public-read-write')
     except:
         self.fail('create bucket:%s is failed'%self.bucket_name)
           
     scs.putFile(self.object_key, self.local_file_name)
       
     canned_acl = 'public-read'                #快捷ACL
     metadata = {}                             #自定义文件属性信息
     metadata['author'] = 'copied'
     metadata['home'] = 'beijing'
     metadata['age'] = '189'
     mimetype = 'text/plain'
     scs.copy(source='/'+self.bucket_name+'/'+self.object_key, 
              key=self.object_key+'_copied', acl=canned_acl, 
              metadata=metadata, mimetype=mimetype)
       
     copied_file_aclInfo = scs.acl_info(self.object_key+'_copied')
     self.assertTrue(ACL.ACL_GROUP_ANONYMOUSE in copied_file_aclInfo['ACL'], 'The acl dose not contains GRPS000000ANONYMOUSE group')
     self.assertTrue(ACL.ACL_READ in copied_file_aclInfo['ACL'][ACL.ACL_GROUP_ANONYMOUSE], 'The acl GRPS000000ANONYMOUSE group hasn\'t read right')
       
     copied_file_info = scs.info(self.object_key+'_copied')
     #assert metadata
     self.assertEqual(metadata['author'], copied_file_info['metadata']['author'], 'The response metadata[\'author\'] is not match')
     self.assertEqual(metadata['home'], copied_file_info['metadata']['home'], 'The response metadata[\'home\'] is not match')
     self.assertEqual(metadata['age'], copied_file_info['metadata']['age'], 'The response metadata[\'age\'] is not match')
     #assert content-type
     self.assertEqual(mimetype, copied_file_info['headers']['content-type'], 'The response content-type is not match')
    def test_update_file_meta(self):
        scs = SCSBucket(self.bucket_name)
        try:
            scs.put_bucket('public-read-write')
        except:
            self.fail('create bucket:%s is failed'%self.bucket_name)
        content = u'this is a file content text!!'
        scs.put(self.object_key, content)
          
        canned_acl = 'public-read-write'                #快捷ACL
        metadata = {}                                   #自定义文件属性信息
        metadata['author'] = 'dage'
        metadata['home'] = 'tianjin'
        metadata['age'] = '18'
        mimetype = 'text/plain'
        scs.update_meta(self.object_key, metadata=metadata, acl=canned_acl, mimetype=mimetype)
      
        file_info = scs.info(self.object_key)
        #assert metadata
        self.assertEqual(metadata['author'], file_info['metadata']['author'], 'The response metadata[\'author\'] is not match')
        self.assertEqual(metadata['home'], file_info['metadata']['home'], 'The response metadata[\'home\'] is not match')
        self.assertEqual(metadata['age'], file_info['metadata']['age'], 'The response metadata[\'age\'] is not match')
        #assert content-type
#         print file_info['headers']
#TODO:服务器问题         self.assertEqual(mimetype, file_info['headers']['content-type'], 'The response content-type is not match')
        #acl
        file_aclInfo = scs.acl_info(self.object_key)
        self.assertTrue(ACL.ACL_GROUP_ANONYMOUSE in file_aclInfo['ACL'], 'The acl dose not contains GRPS000000ANONYMOUSE group')
        self.assertTrue(ACL.ACL_READ in file_aclInfo['ACL'][ACL.ACL_GROUP_ANONYMOUSE], 'The acl GRPS000000ANONYMOUSE group hasn\'t read right')
        self.assertTrue(ACL.ACL_WRITE in file_aclInfo['ACL'][ACL.ACL_GROUP_ANONYMOUSE], 'The acl GRPS000000ANONYMOUSE group hasn\'t write right')
示例#19
0
class Storage(object):

    def __init__(self, accessKey, secretKey, bucketName, bucketUrl):
        sinastorage.setDefaultAppInfo(accessKey, secretKey)
        self.s = SCSBucket(bucketName)
        self.bucketUrl = bucketUrl

    def saveImage(self, path):
        name = str(time.strftime('%Y%m%d/%H:%M:%S.jpg'))
        self.s.putFile(name, path, acl='public-read')
        return self.bucketUrl % name
 def test_create_bucket_with_acl(self):
     scs = SCSBucket(self.bucket_name)
     try:
         scs.put_bucket('public-read-write')
     except:
         self.fail('create bucket:%s is failed'%self.bucket_name)
           
     metaResult = scs.meta()
     self.assertTrue(ACL.ACL_GROUP_ANONYMOUSE in metaResult['ACL'], 'The bucket:%s acl dose not contains GRPS000000ANONYMOUSE group'%self.bucket_name)
     self.assertTrue(ACL.ACL_READ in metaResult['ACL'][ACL.ACL_GROUP_ANONYMOUSE], 'The bucket:%s acl GRPS000000ANONYMOUSE group hasn\'t read right'%self.bucket_name)
     self.assertTrue(ACL.ACL_WRITE in metaResult['ACL'][ACL.ACL_GROUP_ANONYMOUSE], 'The bucket:%s acl GRPS000000ANONYMOUSE group hasn\'t write right'%self.bucket_name)
示例#21
0
def upload(f,bucketName,localDir,ss=0,fl=0):
	f = f.strip('/')
	s = SCSBucket(bucketName)
	failed = None
	try:
		result = s.putFile(f,localDir+f)
		print f+' upload success.'
		ss += 1
	except Exception,e:
		fl += 1
		failed = f
示例#22
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
示例#23
0
def obj_upload(data, fileTag):

    """ Upload photo by object. """

    sinastorage.setDefaultAppInfo(API_KEY, API_SECRET)
    s = SCSBucket('sharephotos')
    path = time.ctime().replace(' ', '_')
    # if '/' in file name there will be problems
    filename = fileTag[:6] + '_' + path + '.jpg'  # use jpg temporary
    scs_response = s.put(filename, data)
    s.update_acl(filename, acl)
    url = s.make_url(filename)   # get url of image in the storage
    return url
示例#24
0
 def run(self):
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         s = SCSBucket(self.bucketName)
         scsResponse = s.update_acl(self.key, self.acl)
         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("UpdateFileACLDidFailed(PyQt_PyObject,PyQt_PyObject)"), self, e.msg)
         return
示例#25
0
 def run(self):
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         s = SCSBucket(self.bucketName)
         self.response =  s.put_bucket()
         self.response.close()
     except SCSError, e:
         self.state = RunnableState.DID_FAILED
         self.emitter.emit(QtCore.SIGNAL("CreateBucketDidFailed(PyQt_PyObject,PyQt_PyObject)"), self, e.msg)
         self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
         self.response._responseBody = e.data
         return
示例#26
0
def url_upload(imgSrc='http://www.w3school.com.cn/i/site_photoref.jpg'):

    """ Upload photo by url. """

    sinastorage.setDefaultAppInfo(API_KEY, API_SECRET)
    s = SCSBucket('sharephotos')
    data = urllib2.urlopen(imgSrc).read()
    path = imgSrc.split('/')[2] + '/%s__' % time.ctime()
    # if '/' in file name there will be problems
    filename = path + imgSrc.replace('/', '_')
    scs_response = s.put(filename, data)
    s.update_acl(filename, acl)
    url = s.make_url(filename)   # get url of image in the storage
    return url
 def test_update_file_acl(self):
     scs = SCSBucket(self.bucket_name)
     try:
         scs.put_bucket('public-read-write')
     except:
         self.fail('create bucket:%s is failed'%self.bucket_name)
     content = u'this is a file content text!!'
     canned_acl = 'private'                #快捷ACL
     scs.put(key=self.object_key, data=content, acl=canned_acl)
       
     #设置ACL
     acl = {}
     acl[ACL.ACL_GROUP_ANONYMOUSE] = [ACL.ACL_READ, ACL.ACL_WRITE, ACL.ACL_READ_ACP]
     acl[ACL.ACL_GROUP_CANONICAL] = [ACL.ACL_READ_ACP,ACL.ACL_WRITE_ACP, ACL.ACL_READ]
     user_id = 'SINA0000001001AABBCC'
     acl[user_id] = [ACL.ACL_WRITE, ACL.ACL_READ]
     scs.update_acl(self.object_key, acl)
     #assert
     file_aclInfo = scs.acl_info(self.object_key)
     #ACL_GROUP_ANONYMOUSE
     self.assertTrue(ACL.ACL_GROUP_ANONYMOUSE in file_aclInfo['ACL'], 'The acl dose not contains GRPS000000ANONYMOUSE group')
     self.assertTrue(ACL.ACL_READ in file_aclInfo['ACL'][ACL.ACL_GROUP_ANONYMOUSE], 'The acl GRPS000000ANONYMOUSE group hasn\'t read right')
     self.assertTrue(ACL.ACL_WRITE in file_aclInfo['ACL'][ACL.ACL_GROUP_ANONYMOUSE], 'The acl GRPS000000ANONYMOUSE group hasn\'t write right')
     self.assertTrue(ACL.ACL_READ_ACP in file_aclInfo['ACL'][ACL.ACL_GROUP_ANONYMOUSE], 'The acl GRPS000000ANONYMOUSE group hasn\'t read_acp right')
     #ACL_GROUP_CANONICAL
     self.assertTrue(ACL.ACL_GROUP_CANONICAL in file_aclInfo['ACL'], 'The acl dose not contains GRPS0000000CANONICAL group')
     self.assertTrue(ACL.ACL_READ in file_aclInfo['ACL'][ACL.ACL_GROUP_CANONICAL], 'The acl GRPS0000000CANONICAL group hasn\'t read right')
     self.assertTrue(ACL.ACL_WRITE_ACP in file_aclInfo['ACL'][ACL.ACL_GROUP_CANONICAL], 'The acl GRPS0000000CANONICAL group hasn\'t write_acp right')
     self.assertTrue(ACL.ACL_READ_ACP in file_aclInfo['ACL'][ACL.ACL_GROUP_CANONICAL], 'The acl GRPS0000000CANONICAL group hasn\'t read_acp right')
     #user_id
     self.assertTrue(user_id in file_aclInfo['ACL'], 'The acl dose not contains user_id group')
     self.assertTrue(ACL.ACL_READ in file_aclInfo['ACL'][user_id], 'The acl user_id group hasn\'t read right')
     self.assertTrue(ACL.ACL_WRITE in file_aclInfo['ACL'][user_id], 'The acl user_id group hasn\'t write right')
示例#28
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
 def test_get_bucket_meta(self):
     scs = SCSBucket(self.bucket_name)
     try:
         scs.put_bucket('public-read-write')
     except:
         self.fail('create bucket:%s is failed'%self.bucket_name)
           
     metaResult = scs.meta()
     self.assertTrue(ACL.ACL_GROUP_ANONYMOUSE in metaResult['ACL'], 'The bucket:%s acl dose not contains GRPS000000ANONYMOUSE group'%self.bucket_name)
     self.assertTrue(ACL.ACL_READ in metaResult['ACL'][ACL.ACL_GROUP_ANONYMOUSE], 'The bucket:%s acl GRPS000000ANONYMOUSE group hasn\'t read right'%self.bucket_name)
     self.assertTrue(ACL.ACL_WRITE in metaResult['ACL'][ACL.ACL_GROUP_ANONYMOUSE], 'The bucket:%s acl GRPS000000ANONYMOUSE group hasn\'t write right'%self.bucket_name)
       
     self.assertEqual(self.bucket_name, metaResult['Project'], 'The metaResult[\'Project\'] is not equal %s'%self.bucket_name)
     self.assertTrue(metaResult['Owner'] is not None, 'The metaResult[\'Owner\'] is None')
     self.assertTrue(metaResult['Last-Modified'] is not None, 'The metaResult[\'Last-Modified\'] is None')
示例#30
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
示例#31
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
示例#32
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
示例#33
0
        def fun():
            cloud_path = "haoc/nodes/%s" % self.path
            bucket = SCSBucket(BUCKET_NAME)
            # info = bucket.info(cloud_path)
            total_size = 0
            response = bucket[cloud_path]
            CHUNK = 16 * 1024
            download_size = 0
            with open(local_path, 'wb') as fp:
                while True:
                    chunk = response.read(CHUNK)
                    if download_size == 0:
                        total_size = long(response.info().dict.get(
                            'content-length', 0))
                    download_size += CHUNK
                    self.progress_bar.set_progress(download_size, total_size)
                    if not chunk:
                        break
                    fp.write(chunk)

            if os.path.exists("%s.hlp" % local_path[:-4]):
                response = bucket["%s.hlp" % cloud_path[:-4]]
                with open("%s.hlp" % local_path[:-4], 'wb') as fp:
                    while True:
                        chunk = response.read(CHUNK)
                        if not chunk:
                            break
                        fp.write(chunk)
示例#34
0
 def run(self):
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         s = SCSBucket(self.bucketName)
         self.response = s.put_bucket()
         self.response.close()
     except SCSError, e:
         self.state = RunnableState.DID_FAILED
         self.emitter.emit(
             QtCore.SIGNAL(
                 "CreateBucketDidFailed(PyQt_PyObject,PyQt_PyObject)"),
             self, e.msg)
         self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
         self.response._responseBody = e.data
         return
示例#35
0
 def run(self):
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         s = SCSBucket(self.bucketName)
         scsResponse = s.update_acl(self.key, self.acl)
         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(
                 "UpdateFileACLDidFailed(PyQt_PyObject,PyQt_PyObject)"),
             self, e.msg)
         return
示例#36
0
文件: app.py 项目: SundaeCHX/Sundae
def signin_form():
    global opener, cookie, handler
    sinastorage.setDefaultAppInfo(
        '***********************', '*************************************')
    s = SCSBucket('eggtart')
    user_Agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586'
    headers = {"User-Agent": user_Agent}
    url0 = 'http://210.42.121.132/servlet/GenImg'
    cookie = cookielib.CookieJar()
    handler = urllib2.HTTPCookieProcessor(cookie)
    opener = urllib2.build_opener(handler)
    req0 = urllib2.Request(url0, headers=headers)
    response = opener.open(req0)
    s.put('picture/123.jpg', response.read())
    url = s.make_url_authed('picture/123.jpg')
    return render_template('signin_test.html', pic=url)
示例#37
0
def push(dirname):
    '''
    把dirname文件夹下所有文件都以相同的结构同步到sae云存储中
    比如,在dirname下有如下文件:
        dirname/a/test.txt
        dirname/test.txt
    推送到sae的云存储中的文件结构就是:
        /a/test.txt
        /test.txt
    注意空文件夹不推送
    '''
    akey = os.environ['SAE_STORAGE_ACCESS_KEY']
    skey = os.environ['SAE_STORAGE_SECRET_KEY']
    bucketname = os.environ['SAE_BUCKET_NAME']
    sinastorage.setDefaultAppInfo(akey, skey)
    bucket = SCSBucket(bucketname, secure=False)
    fpaths = []
    for root, dirs, files in os.walk(dirname):
        ps = splitpath(root)
        visible = True
        for p in ps:
            if p.startswith('.'):
                visible = False
        if not visible:
            continue
        del ps[0]
        for f in files:
            local_fpath = os.path.join(root, f)
            ps.append(f)
            fpath = pathjoin(*ps)
            print('check :' + fpath)
            fpaths.append(fpath)
            # if not fpath.startswith(PATH_SPLITER):
            #     fpath =PATH_SPLITER+fpath
            if file_exist(bucket, fpath):
                meta = bucket.meta(fpath)
                sae_sha1 = ['Content-SHA1']
                fdata = open(local_fpath, 'rb').read()
                if len(fdata) == 0 and meta['Size'] == 0:
                    pass
                else:
                    sha1 = hashlib.sha1()
                    sha1.update(fdata)
                    if sae_sha1 != sha1.hexdigest():
                        bucket.putFile(fpath, local_fpath)
            else:
                bucket.putFile(fpath, local_fpath)
    sae_files = bucket.listdir(prefix='')
    for f in sae_files:
        #f=(name, isPrefix, sha1, expiration_time, modify, owner, md5, content_type, size)
        localf = os.path.join(dirname, f[0])
        print('expecting local: ', localf)
        if f[0] not in fpaths and not os.path.isfile(localf):
            print('del ' + f[0])
            del bucket[f[0]]
        else:
            print('has ' + f[0])
示例#38
0
    def fun(_time_out, _access_key, _secret_key):
        sinastorage.setDefaultAppInfo(_access_key, _secret_key)

        already_exist = False
        all_b = SCSBucket(timeout=_time_out)
        buckets_generator = all_b.list_buckets()
        for bucket in buckets_generator:
            if bucket[0] == BUCKET_NAME:
                already_exist = True
        if not already_exist:
            new_bucket = SCSBucket(BUCKET_NAME, timeout=_time_out)
            new_bucket.put_bucket()
            new_bucket.put('haoc/', '')
示例#39
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
示例#40
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
示例#41
0
def get_file():
    s = SCSBucket('asdasdasdasd')
    response = s['a/asdf/新建 文本文档.txt']
    CHUNK = 16 * 1024
    with open('111', 'wb') as fp:
        while True:
            chunk = response.read(CHUNK)
            if not chunk: break
            fp.write(chunk)
示例#42
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
示例#43
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
示例#44
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
示例#45
0
文件: app.py 项目: SundaeCHX/Sundae
def register():
    sinastorage.setDefaultAppInfo(
        '***********************', '*************************************')
    s = SCSBucket('sundae')
    username = request.form['username']
    try:
        response = s[r'password/'+username+'.txt']
    except BaseException, e:
        password = request.form['password']
        password1 = request.form['password1']
        if password == password1:
            password = password+username+'Sundae'
            md5 = hashlib.md5()
            md5.update(password.encode('utf-8'))
            pwd = md5.hexdigest()
            s.put(r'password/'+username+'.txt', pwd)
            return '<h3>注册成功,感谢您的支持!</h3>'
        else:
            return '''
示例#46
0
 def fun(_time_out):
     f = None
     try:
         ice_b = SCSBucket(BUCKET_NAME, timeout=_time_out)
         response = ice_b['user/name']
         f = StringIO(response.read())
         return f.read()
     finally:
         if f is not None:
             f.close()
示例#47
0
def list_bucket_files():
    s = SCSBucket('test11')
    files_generator = s.listdir()#delimiter='/')
    print '-----list_bucket_files---------'
    print '-----detail---------'
    print ('truncated : %r\n'
    'marker:%r\n'
    'prefix:%r\n'
    'delimiter:%r\n'
    'contents_quantity:%r\n'
    'common_prefixes_quantity:%r\n'
    'next_marker:%r'%(files_generator.truncated, 
                      files_generator.marker,
                      files_generator.prefix,
                      files_generator.delimiter,
                      files_generator.contents_quantity,
                      files_generator.common_prefixes_quantity,
                      files_generator.next_marker))
    print '-----file list---------'
示例#48
0
文件: app.py 项目: SundaeCHX/Sundae
def chuan():
    sinastorage.setDefaultAppInfo(
        '***********************', '*************************************')
    s = SCSBucket('eggtart')
    url = s.make_url_authed('picture/bj1.gif')
    url0 = s.make_url_authed('picture/q3.JPG')
    url1 = s.make_url_authed('picture/q4.JPG')
    url2 = s.make_url_authed('picture/q7.jpg')
    url3 = s.make_url_authed('picture/q2.jpg')
    url4 = s.make_url_authed('picture/q1.jpg')
    url5 = s.make_url_authed('picture/q8.jpg')
    url6 = s.make_url_authed('picture/q5.JPG')
    url7 = s.make_url_authed('picture/q0.jpg')
    url8 = s.make_url_authed('picture/q6.jpg')
    url9 = s.make_url_authed('picture/whu.jpg')
    return render_template('cycle.html', url=url, url0=url0, url1=url1, url2=url2, url3=url3, url4=url4, url5=url5, url6=url6, url7=url7, url8=url8, whuurl=url9,)
示例#49
0
文件: app.py 项目: SundaeCHX/Sundae
def qing():
    sinastorage.setDefaultAppInfo(
        '***********************', '*************************************')
    s = SCSBucket('eggtart')
    url = s.make_url_authed('picture/bj1.gif')
    url0 = s.make_url_authed('picture/c4.jpg')
    url1 = s.make_url_authed('picture/c5.jpg')
    url2 = s.make_url_authed('picture/c6.jpg')
    url3 = s.make_url_authed('picture/c8.jpg')
    url4 = s.make_url_authed('picture/c0.jpg')
    url5 = s.make_url_authed('picture/c1.jpg')
    url6 = s.make_url_authed('picture/c7.jpg')
    url7 = s.make_url_authed('picture/c2.jpg')
    url8 = s.make_url_authed('picture/c3.jpg')
    url9 = s.make_url_authed('picture/whu.jpg')
    return render_template('cycle.html', url=url, url0=url0, url1=url1, url2=url2, url3=url3, url4=url4, url5=url5, url6=url6, url7=url7, url8=url8, whuurl=url9,)
示例#50
0
 def delete(self, com, time_out):
     cloud_path = "haoc/nodes/%s" % com.path
     bucket = SCSBucket(BUCKET_NAME, timeout=time_out)
     if cloud_path[-1] == '/':
         del bucket[cloud_path]
     else:
         shall_do = True
         if self.from_agenda:
             try:
                 bucket["%s.nod" % cloud_path]
             except sinastorage.bucket.KeyNotFound:
                 return
             else:
                 info = bucket.info("%s.nod" % cloud_path)
                 ct = HaocUtils.utc_to_local_stamp(info['modify'])
                 if com.op_time < ct:
                     shall_do = False
         if shall_do:
             del bucket["%s.nod" % cloud_path]
             del bucket["%s.hlp" % cloud_path]
示例#51
0
文件: app.py 项目: SundaeCHX/Sundae
def hello():
    sinastorage.setDefaultAppInfo(
        '***********************', '*************************************')
    s = SCSBucket('eggtart')
    pcurl = s.make_url_authed('picture/computer.png')
    phoneurl = s.make_url_authed('picture/phone.png')
    blogurl = s.make_url_authed('picture/blog.png')
    whuurl = s.make_url_authed('picture/whu.jpg')
    cycleurl = s.make_url_authed('picture/cycle.JPG')
    return render_template('home.html', url1=pcurl, url2=phoneurl, url3=blogurl, url4=whuurl, url5=cycleurl)
示例#52
0
 def upload(self):
     ''' 普通上传 '''
     try:
         self.mutex.lock()
         self.state = RunnableState.RUNNING
         
         s = SCSBucket(self.bucketName)
         self.fileWithCallback = FileWithCallback(self.filePath, 'rb', self.uploadCallBack)
         scsResponse = s.putFileByHeaders('%s%s'%(self.prefix,os.path.basename(self.filePath)), self.fileWithCallback)
         self.response =  scsResponse
     except SCSError, e:
         self.response = SCSResponse(e.urllib2Request, e.urllib2Response)
         if isinstance(e, ManualCancel):     #手动取消
             self.state = RunnableState.DID_CANCELED
             self.response._responseBody = u'手动取消'
             self.emitter.emit(QtCore.SIGNAL("fileUploadDidCanceled(PyQt_PyObject,PyQt_PyObject)"), self, e.msg)
         else:
             self.state = RunnableState.DID_FAILED
             self.response._responseBody = e.data
             self.emitter.emit(QtCore.SIGNAL("fileUploadDidFailed(PyQt_PyObject,PyQt_PyObject)"), self, e.msg)
         return
 def test_get_file_meta(self):
     scs = SCSBucket(self.bucket_name)
     try:
         scs.put_bucket('public-read-write')
     except:
         self.fail('create bucket:%s is failed'%self.bucket_name)
       
     metadata = {}                                   #自定义文件属性信息
     metadata['author'] = 'dage'
     metadata['home'] = 'tianjin'
     metadata['age'] = '18'
     mimetype = 'text/plain'
       
     scs.putFile(key=self.object_key, filePath=self.local_file_name,
                 metadata=metadata, mimetype=mimetype)
           
     metaResult = scs.meta(self.object_key)
       
     self.assertEqual(self.object_key, metaResult['File-Name'], 'The meta[\'File-Name\'] is not equals '+self.object_key)
     self.assertEqual(mimetype, metaResult['Type'], 'The meta[\'Type\'] is not equals '+mimetype)
     self.assertTrue(metaResult['Content-SHA1'] is not None, 'The meta[\'Content-SHA1\'] is None')
     self.assertTrue(metaResult['Content-MD5'] is not None, 'The meta[\'Content-MD5\'] is None')
     self.assertTrue(metaResult['Owner'] is not None, 'The meta[\'Owner\'] is None')
       
     self.assertTrue('x-amz-meta-author' in metaResult['File-Meta'], 'File-Meta dose not contains x-amz-meta-author key')
     self.assertEqual(metadata['author'], metaResult['File-Meta']['x-amz-meta-author'], 'The metaResult[\'File-Meta\'][\'x-amz-meta-author\'] value is not match')
     self.assertTrue('x-amz-meta-home' in metaResult['File-Meta'], 'File-Meta dose not contains x-amz-meta-home key')
     self.assertEqual(metadata['home'], metaResult['File-Meta']['x-amz-meta-home'], 'The metaResult[\'File-Meta\'][\'x-amz-meta-home\'] value is not match')
     self.assertTrue('x-amz-meta-age' in metaResult['File-Meta'], 'File-Meta dose not contains x-amz-meta-age key')
     self.assertEqual(metadata['age'], metaResult['File-Meta']['x-amz-meta-age'], 'The metaResult[\'File-Meta\'][\'x-amz-meta-age\'] value is not match')
示例#54
0
文件: app.py 项目: SundaeCHX/Sundae
def blog_signin():
    username = request.form['username']
    password = request.form['password']+username+'Sundae'
    md5 = hashlib.md5()
    md5.update(password.encode('utf-8'))
    pwd = md5.hexdigest()
    sinastorage.setDefaultAppInfo(
        '***********************', '*************************************')
    s = SCSBucket('sundae')
    try:
        response = s[r'password/'+username+'.txt']
    except BaseException, e:
        return   '''
示例#55
0
def storeImage(imgSrc):
    sinastorage.setDefaultAppInfo("1cjfyo5kQPdnsI3cUc6W", "a3c139370a3509f269331930515729747573aa10")
    djBucket = SCSBucket("dj-images")  # not dj_images
    acl = {}  # Access control list
    acl[ACL.ACL_GROUP_ANONYMOUSE] = [ACL.ACL_READ]

    data = urllib2.urlopen(imgSrc).read()
    path = imgSrc.split("/")[2] + "/"
    # if '/' in file name there will be problems
    filename = path + imgSrc.replace("/", "@")
    scsResponse = djBucket.put(filename, data)  # upload the file
    stUrl = djBucket.make_url(filename)  # get url of image in the storage
    djBucket.update_acl(filename, acl)  # set acl for the file

    # save infomation to sql
    try:
        imgstorage.objects.get_or_create(original_url=imgSrc, storage_url=stUrl)
    except:
        print "insert into mysql error"
        pass  # solve this later

    return stUrl
 def tearDown(self):
     scs = SCSBucket(self.bucket_name)
     if scs.exist() :
         try:
             file_gen = scs.listdir()
             for item in file_gen:
                 if not item[1]:
                     scs.delete(item[0])
             scs.delete_bucket()
         except Exception as err:
             self.fail('empty bucket failed.Error is %s'%err)
 def test_delete_file(self):
     scs = SCSBucket(self.bucket_name)
     try:
         scs.put_bucket('public-read-write')
     except:
         self.fail('create bucket:%s is failed'%self.bucket_name)
           
     content = u'this is a file content text!!'
     scs.put(self.object_key, content)
       
     try:
         scs.delete(self.object_key)
     except:
         self.fail('Delete file is failed')