class SwiftFileServer(object): """ Swift File server """ def __init__(self, region_name): # self.cfg = cfg.CONF self.region_name = region_name # self.authurl = self.cfg.FileSvc.authurl # self.auth_version = self.cfg.FileSvc.auth_version # self.user = self.cfg.FileSvc.user # self.key = self.cfg.FileSvc.key # self.tenant_name = self.cfg.FileSvc.tenant_name # self.container_name = self.cfg.FileSvc.container_name # self.temp_url_key = self.cfg.FileSvc.temp_url_key # self.temp_url_key_2 = self.cfg.FileSvc.temp_url_key_2 # self.chosen_temp_url_key = self.cfg.FileSvc.chosen_temp_url_key # self.authurl='http://10.204.248.50:35357/v2.0' self.authurl = 'http://10.204.248.228:35357/v2.0' self.auth_version = '2.0' self.user = '******' self.key = 'passw0rd' self.tenant_name = 'admin' self.temp_url_key = 'mykey' self.temp_url_key_2 = 'mykey2' self.chosen_temp_url_key = 'temp_url_key' self.container_name = 'mycontainer' self.storageurl = None self.swift_conn = None def connect_to_swift(self): """ return connect to swift fileserver """ for i in range(RETRY_CNT): i += 1 try: self.__init_swift_fileserver() break except Exception as err: print( '[Try %d/%d ]: Connecting swift fileserver failed. %s %s', i, RETRY_CNT, err, traceback.format_exc()) if i == RETRY_CNT: raise def __init_swift_fileserver(self): try: options = { 'authurl': self.authurl, 'user': self.user, 'key': self.key, 'auth_version': self.auth_version, 'tenant_name': self.tenant_name, 'insecure': True, 'timeout': CONN_TIMEOUT, 'os_options': { 'region_name': self.region_name } } headers = { 'Temp-URL-Key': self.temp_url_key, 'Temp-URL-Key-2': self.temp_url_key_2 } print_opts = copy.deepcopy(options) print_opts['key'] = '<password stripped>' self.swift_conn = Connection(**options) self.swift_conn.post_account(headers) self.swift_conn.put_container(self.container_name) self.storageurl = self.swift_conn.get_auth()[0] print('swift-file-server: Connected. options %s storageurl %s', print_opts, self.storageurl) except Exception as err: print('swift-file-server: Connect FAILED %s options %s', err, print_opts) raise def upload_file(self, fpath, fname=None, expires=3600): """ upload the file in 'filepath' on to the file server and return a temporary url for the users to download """ if not self.swift_conn: self.connect_to_swift() if fname is None: fname = os.path.basename(fpath) finp = open(fpath, 'rb') try: self.swift_conn.put_object(container=self.container_name, obj=fname, contents=finp) print('swift-file-server: Uploading file %s ... [OK]', fname) except Exception as err: logging.error( 'swift-file-server: Unable to upload the file %s: %s', fname, err) raise # return self.get_temp_download_url(fname,expires) def get_temp_download_url(self, fname, expires): """ return the temporary download url """ file_uri = '%s/%s/%s' % (self.storageurl, self.container_name, fname) file_path = urlparse(file_uri).path key = getattr(self, self.chosen_temp_url_key) try: temp_url = generate_temp_url(file_path, expires, key, 'GET') except Exception as err: logging.error( 'swift-file-server: Generating temp url for %s failed %s', fname, err) raise download_url = self.storageurl.replace( urlparse(self.storageurl).path, temp_url) print('swift-file-server: Temporary download URL for file %s: %s', fname, download_url) return download_url def delete_file(self, fpath): """ Delete the file from the file server """ fname = os.path.basename(fpath) try: self.swift_conn.delete_object(container=self.container_name, obj=fname) print('swift-file-server: Deleting file %s ... [OK]', fname) except Exception as err: print( 'swift-file-server: Deleting file %s ... [FAIL]: %s %s (IGNORED) ', fname, err, traceback.format_exc()) def getObjectContent(self, filename): return self.swift_conn.get_object(container=self.container_name, obj=filename)
class SwiftFileServer(object): """ Swift File server """ def __init__(self, region_name): # self.cfg = cfg.CONF self.region_name = region_name # self.authurl = self.cfg.FileSvc.authurl # self.auth_version = self.cfg.FileSvc.auth_version # self.user = self.cfg.FileSvc.user # self.key = self.cfg.FileSvc.key # self.tenant_name = self.cfg.FileSvc.tenant_name # self.container_name = self.cfg.FileSvc.container_name # self.temp_url_key = self.cfg.FileSvc.temp_url_key # self.temp_url_key_2 = self.cfg.FileSvc.temp_url_key_2 # self.chosen_temp_url_key = self.cfg.FileSvc.chosen_temp_url_key # self.authurl='http://10.204.248.50:35357/v2.0' self.authurl = 'http://10.204.248.228:35357/v2.0' self.auth_version='2.0' self.user='******' self.key='passw0rd' self.tenant_name='admin' self.temp_url_key= 'mykey' self.temp_url_key_2='mykey2' self.chosen_temp_url_key= 'temp_url_key' self.container_name= 'mycontainer' self.storageurl = None self.swift_conn = None def connect_to_swift(self): """ return connect to swift fileserver """ for i in range(RETRY_CNT): i += 1 try: self.__init_swift_fileserver() break except Exception as err: print('[Try %d/%d ]: Connecting swift fileserver failed. %s %s', i, RETRY_CNT, err, traceback.format_exc()) if i == RETRY_CNT: raise def __init_swift_fileserver(self): try: options = { 'authurl': self.authurl, 'user': self.user, 'key': self.key, 'auth_version': self.auth_version, 'tenant_name': self.tenant_name, 'insecure': True, 'timeout': CONN_TIMEOUT, 'os_options': {'region_name': self.region_name}} headers = {'Temp-URL-Key': self.temp_url_key, 'Temp-URL-Key-2': self.temp_url_key_2 } print_opts = copy.deepcopy(options) print_opts['key'] = '<password stripped>' self.swift_conn = Connection(**options) self.swift_conn.post_account(headers) self.swift_conn.put_container(self.container_name) self.storageurl = self.swift_conn.get_auth()[0] print ('swift-file-server: Connected. options %s storageurl %s', print_opts, self.storageurl) except Exception as err: print('swift-file-server: Connect FAILED %s options %s', err, print_opts) raise def upload_file(self, fpath, fname=None,expires=3600): """ upload the file in 'filepath' on to the file server and return a temporary url for the users to download """ if not self.swift_conn: self.connect_to_swift() if fname is None: fname = os.path.basename(fpath) finp = open(fpath, 'rb') try: self.swift_conn.put_object( container=self.container_name, obj=fname, contents=finp) print ('swift-file-server: Uploading file %s ... [OK]', fname) except Exception as err: logging.error( 'swift-file-server: Unable to upload the file %s: %s', fname, err) raise # return self.get_temp_download_url(fname,expires) def get_temp_download_url(self, fname, expires): """ return the temporary download url """ file_uri = '%s/%s/%s' % (self.storageurl, self.container_name, fname) file_path = urlparse(file_uri).path key = getattr(self, self.chosen_temp_url_key) try: temp_url = generate_temp_url(file_path, expires, key, 'GET') except Exception as err: logging.error( 'swift-file-server: Generating temp url for %s failed %s', fname, err) raise download_url = self.storageurl.replace( urlparse(self.storageurl).path, temp_url) print( 'swift-file-server: Temporary download URL for file %s: %s', fname, download_url) return download_url def delete_file(self, fpath): """ Delete the file from the file server """ fname = os.path.basename(fpath) try: self.swift_conn.delete_object( container=self.container_name, obj=fname) print('swift-file-server: Deleting file %s ... [OK]', fname) except Exception as err: print( 'swift-file-server: Deleting file %s ... [FAIL]: %s %s (IGNORED) ', fname, err, traceback.format_exc()) def getObjectContent(self, filename): return self.swift_conn.get_object(container=self.container_name, obj=filename)