from __future__ import print_function from obs import ObsClient, LogConf, CreateBucketHeader, Grantee, Grant, StorageClass, Owner, Group, Permission, ACL from obs import Versions, Expiration, DateTime, NoncurrentVersionExpiration, Rule, Lifecycle, RedirectAllRequestTo from obs import IndexDocument, ErrorDocument, Condition, Redirect, RoutingRule, WebsiteConfiguration, Logging, TagInfo from obs import CorsRule, FilterRule, TopicConfiguration, EventType, Notification, ListMultipartUploadsRequest, Object from obs import DeleteObjectsRequest, CompletePart, CompleteMultipartUploadRequest, PutObjectHeader, AppendObjectHeader from obs import AppendObjectContent, GetObjectRequest, GetObjectHeader, RestoreTier, CopyObjectHeader AK = '*** Provide your Access Key ***' SK = '*** Provide your Secret Key ***' server = 'https://your-endpoint' bucketName = 'my-obs-bucket-demo' # create ObsClient instance obsClient = ObsClient(access_key_id=AK, secret_access_key=SK, server=server) bucketClient = obsClient.bucketClient(bucketName) # init log def initLog(): obsClient.initLog(LogConf('../log.conf'), 'obsclient') # create bucket def CreateBucket(): headers = CreateBucketHeader(aclControl='public-read', storageClass=StorageClass.WARM) resp = bucketClient.createBucket(header=headers) print('common msg:status:', resp.status, ',errorCode:', resp.errorCode, ',errorMessage:', resp.errorMessage, ',resHeader:', resp.header)
if project["name"] == "ae-ad-1": project_id = project["id"] # get token for project token = get_token(domain_name, project_id, user=user, password=password) # get ak/sk credentials credentials = create_temporary_ak_sk(token) AK = credentials["access"] SK = credentials["secret"] # Constructs a obs client instance with your account for accessing OBS obs_client = ObsClient(access_key_id=AK, secret_access_key=SK, server=server) bucket_client = obs_client.bucketClient(bucket_name) # TODO create OBS folders (not working) base_folder = f"{uid}/" obs_client.putContent(bucket_name, base_folder) resp = obs_client.getObjectMetadata(bucket_name, base_folder) print('Size of the empty folder ' + base_folder + ' is ' + str(dict(resp.header).get('content-length'))) code_folder = f"{base_folder}code/" obs_client.putContent(bucket_name, code_folder) data_folder = f"{base_folder}data/" obs_client.putContent(bucket_name, data_folder) model_folder = f"{base_folder}model/" obs_client.putContent(bucket_name, model_folder)
class bucket(): def __init__(self, access_key_id=None, secret_access_key=None, server=None, bucketName=None): # 创建ObsClient实例 self.base_folder = "/" if access_key_id == None or secret_access_key == None or server == None: print( "# ----- Error invalid OBS server config please check parameter of obs server" ) exit(0) else: self.obsClient = ObsClient(access_key_id=access_key_id, secret_access_key=secret_access_key, server=server) if bucketName != None: self.bucketName = bucketName self.bucketClient = self.obsClient.bucketClient(bucketName) print( "# ---------------------------------------------------------------------------- #" ) print( "# Bucket ToolKit #" ) print( "# ---------------------------------------------------------------------------- #" ) print("# ----access key (AK) : ", access_key_id) print("# ----secret key (SK): ", secret_access_key) print("# ----server : ", server) print("# ----bucket name : ", bucketName) print("# ----root : ", self.base_folder) print( "# ---------------------------------------------------------------------------- #" ) def getBucketMetadata(self): print('Getting bucket metadata\n') #resp = obsClient.getBucketMetadata(bucketName, origin='http://www.b.com', requestHeaders='Authorization1') resp = self.bucketClient.getBucketMetadata( origin='http://www.b.com', requestHeaders='Authorization1') print('storageClass:', resp.body.storageClass) print('accessContorlAllowOrigin:', resp.body.accessContorlAllowOrigin) print('accessContorlMaxAge:', resp.body.accessContorlMaxAge) print('accessContorlExposeHeaders:', resp.body.accessContorlExposeHeaders) print('accessContorlAllowMethods:', resp.body.accessContorlAllowMethods) print('accessContorlAllowHeaders:', resp.body.accessContorlAllowHeaders) print('Deleting bucket CORS\n') resp = self.bucketClient.deleteBucketCors() print('status' + str(resp.status)) return resp def upload(self, remote_path, local_path): self.obsClient.putFile(self.bucketName, remote_path, local_path) # print("# ===== Uploading ",local_path," ===to : ",remote_path) def download(self, key, download): # print("# ===== Downloading ",key," === to :",download) self.obsClient.getObject(self.bucketName, key, downloadPath=download) def cd(self, folder_key): self.base_folder = folder_key print("# ===== Base Folder", self.base_folder) def delete(self, key): print('# ===== Deleting object ' + key + '\n') self.obsClient.deleteObject(self.bucketName, key) def check(self, key): """ The Sync will overwrite by default. We need check """ assert not self.obsClient.getObject( self.bucketName, key )["status"] < 300, "\n# ===== ERROR : \n# ===== bucket : ({bucketname})\n# ===== key : ({key}) & local upload flow try to overwrite same key".format( bucketname=self.bucketName, key=key) # def mkdir(self,dir): # pass def ls(self, show_item_count=10): print("# ===== list ({path}): ".format(path=self.base_folder)) # resp = self.obsClient.listObjects(self.bucketName) if self.base_folder == "/": resp = self.obsClient.listObjects(self.bucketName) else: resp = self.obsClient.listObjects(self.bucketName, self.base_folder) keylist = [] print("# ===== object count : ", len(resp.body.contents)) for content in resp.body.contents[:show_item_count]: keylist.append(content.key) print(' |--- : ' + content.key + ' etag[' + content.etag + ']') return keylist