Package amplee :: Package loader :: Module storage
[hide private]
[frames] | no frames]

Source Code for Module amplee.loader.storage

 1  # -*- coding: utf-8 -*- 
 2  __docformat__ = 'epytext' 
 3   
 4  import os.path 
 5   
 6  __all__ = ['init_storage'] 
 7   
 8  from amplee.loader.utils import get_value, is_present, load_callable 
 9    
10 -def init_storage(store, target='member', base_path=None):
11 res = store.xml_xpath('./amplee:storage[@target="%s"]' % target) 12 13 if not res: 14 raise ValueError("Missing '%s' target in one of the storage elements of the configuration" % target) 15 16 storage = res[0] 17 storage_type = storage.type 18 19 if storage_type == 'filesystem': 20 from amplee.storage import storefs 21 root_dir = str(storage.basepath) 22 if base_path and not os.path.isabs(root_dir): 23 root_dir = os.path.join(base_path, root_dir) 24 enable_lock = is_present(storage, 'lock') 25 encoding = get_value(storage, 'encoding', 'utf-8') 26 return storefs.FilesystemStorage(root_dir, enable_lock, encoding=encoding) 27 elif storage_type == 'subversion': 28 from amplee.storage import storesvn 29 repository_uri = str(storage.repository_uri) 30 working_copy_path = str(storage.workingcopy_path) 31 if base_path: 32 working_copy_path = os.path.join(base_path, working_copy_path) 33 username = get_value(storage, 'username', None) 34 password = get_value(storage, 'password', None) 35 return storesvn.SubversionStorage(repository_uri, working_copy_path, username, password) 36 elif storage_type == 'zodb': 37 from ZODB import DB 38 from amplee.storage import storezodb 39 fs_type = get_value(storage, 'fstype', 'filestorage') 40 if fs_type == 'filestorage': 41 from ZODB import FileStorage 42 storage_path = get_value(storage, 'fspath', '') 43 if base_path: 44 storage_path = os.path.join(base_path, storage_path) 45 db = DB(FileStorage.FileStorage(storage_path)) 46 elif fs_type == 'clientstorage': 47 from ZEO import Clientorage, Storage 48 db = DB(ClientStorage.ClientStorage(get_value(storage, 'address'))) 49 return storezodb.ZODBStorage(db, get_value(storage, 'top-level-node', '')) 50 elif storage_type == 'dejavu': 51 from amplee.storage import storedejavu 52 capitalize = is_present(storage, 'capitalize') 53 dbconf = {} 54 for childname in storage.dbconf.xml_child_elements: 55 value = storage.dbconf.xml_child_elements[childname] 56 if capitalize: 57 childname = childname.capitalize() 58 dbconf[childname] = value 59 return storedejavu.DejavuStorage(get_value(storage, 'dbtype'), dbconf) 60 elif storage_type == 's3': 61 from amplee.storage import stores3 62 aws_access_key_id = get_value(storage, 'public_key') 63 aws_secret_access_key = get_value(storage, 'private_key') 64 unique_prefix = get_value(storage, 'bucket_prefix') 65 encoding = get_value(storage, 'encoding', 'utf-8') 66 aws_key_lookup = is_present(storage, 'aws_key_lookup') 67 if aws_key_lookup: 68 aws_key_lookup = load_callable(get_value(aws_key_lookup, 'module'), 69 get_value(aws_key_lookup, 'callable'), 70 base_path) 71 aws_file_path = get_value(aws_key_lookup, 'aws-keys-path') 72 else: 73 aws_key_lookup = aws_file_path = None 74 return stores3.S3Storage(aws_access_key_id, aws_secret_access_key, 75 unique_prefix, encoding=encoding, 76 separator=separator, aws_key_lookup=aws_key_lookup, 77 aws_file_path=aws_file_path) 78 elif storage_type == 'tar': 79 from amplee.storage import storetar 80 root_dir = get_value(storage, 'basepath') 81 if base_path and not os.path.isabs(root_dir): 82 root_dir = os.path.join(base_path, root_dir) 83 compression = get_value(storage, 'compression', 'gz') 84 encoding = get_value(storage, 'encoding', 'utf-8') 85 return storetar.TarFileStorage(root_dir, compression=compression, encoding=encoding) 86 87 raise ValueError("Unknown storage type '%s'" % storage_type)
88