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')
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')
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])
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)
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')
def get_file_meta(): s = SCSBucket('test11') metaDict = s.meta('InstoreApp.ipa') print metaDict
def get_bucket_meta(): s = SCSBucket('test11') metaDict = s.meta() print metaDict