def get_obj_stores(self, obj_type): try: if self.obj_stores[obj_type]: return self.obj_stores[obj_type] except KeyError: raise RuntimeError('unknown obj_type ' + obj_type) for bend in self.json_cfg: storage_id = bend['storage_id'] crypto = self.seafile_cfg.get_seaf_crypto() compressed = obj_type == 'fs' if bend[obj_type]['backend'] == 'fs': obj_dir = os.path.join(bend[obj_type]['dir'], 'storage', obj_type) self.obj_stores[obj_type][storage_id] = SeafObjStoreFS(compressed, obj_dir, crypto) elif bend[obj_type]['backend'] == 'swift': from seafobj.backends.swift import SeafObjStoreSwift swift_conf = get_swift_conf_from_json(bend[obj_type]) self.obj_stores[obj_type][storage_id] = SeafObjStoreSwift(compressed, swift_conf, crypto) elif bend[obj_type]['backend'] == 's3': from seafobj.backends.s3 import SeafObjStoreS3 s3_conf = get_s3_conf_from_json(bend[obj_type]) self.obj_stores[obj_type][storage_id] = SeafObjStoreS3(compressed, s3_conf, crypto) else: raise InvalidConfigError('Unknown backend type: %s.' % bend[obj_type]['backend']) if bend.has_key('is_default') and bend['is_default']==True: if self.obj_stores[obj_type].has_key('__default__'): raise InvalidConfigError('Only one default backend can be set.') self.obj_stores[obj_type]['__default__'] = self.obj_stores[obj_type][storage_id] return self.obj_stores[obj_type]
def get_obj_store(self, obj_type): '''Return an implementation of SeafileObjStore''' cfg = self.seafile_cfg.get_config_parser() try: section = self.obj_section_map[obj_type] except KeyError: raise RuntimeError('unknown obj_type ' + obj_type) if cfg.has_option(section, 'name'): backend_name = cfg.get(section, 'name') else: backend_name = 'fs' compressed = obj_type == 'fs' if backend_name == 'fs': obj_dir = os.path.join(self.seafile_cfg.get_seafile_storage_dir(), obj_type) return SeafObjStoreFS(compressed, obj_dir) elif backend_name == 's3': # We import s3 backend here to avoid depenedency on boto for users # not using s3 from seafobj.backends.s3 import SeafObjStoreS3 s3_conf = get_s3_conf(cfg, section) return SeafObjStoreS3(compressed, s3_conf) elif backend_name == 'ceph': # We import ceph backend here to avoid depenedency on rados for # users not using rados from seafobj.backends.ceph import SeafObjStoreCeph ceph_conf = get_ceph_conf(cfg, section) return SeafObjStoreCeph(compressed, ceph_conf) else: raise InvalidConfigError('unknown %s backend "%s"' % (obj_type, backend_name))