mirror of https://github.com/jumpserver/jumpserver
78 lines
1.9 KiB
Python
78 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
|
|
from .base import ObjectStorage, LogStorage
|
|
|
|
|
|
class MultiObjectStorage(ObjectStorage):
|
|
|
|
def __init__(self, configs):
|
|
self.configs = configs
|
|
self.storage_list = []
|
|
self.init_storage_list()
|
|
|
|
def init_storage_list(self):
|
|
from . import get_object_storage
|
|
if isinstance(self.configs, dict):
|
|
configs = self.configs.values()
|
|
else:
|
|
configs = self.configs
|
|
|
|
for config in configs:
|
|
try:
|
|
storage = get_object_storage(config)
|
|
self.storage_list.append(storage)
|
|
except Exception:
|
|
pass
|
|
|
|
def upload(self, src, target):
|
|
success = []
|
|
msg = []
|
|
|
|
for storage in self.storage_list:
|
|
ok, err = storage.upload(src, target)
|
|
success.append(ok)
|
|
msg.append(err)
|
|
|
|
return success, msg
|
|
|
|
def download(self, src, target):
|
|
success = False
|
|
msg = None
|
|
|
|
for storage in self.storage_list:
|
|
try:
|
|
if not storage.exists(src):
|
|
continue
|
|
ok, msg = storage.download(src, target)
|
|
if ok:
|
|
success = True
|
|
msg = ''
|
|
break
|
|
except:
|
|
pass
|
|
return success, msg
|
|
|
|
def delete(self, path):
|
|
success = True
|
|
msg = None
|
|
|
|
for storage in self.storage_list:
|
|
try:
|
|
if storage.exists(path):
|
|
ok, msg = storage.delete(path)
|
|
if not ok:
|
|
success = False
|
|
except:
|
|
pass
|
|
return success, msg
|
|
|
|
def exists(self, path):
|
|
for storage in self.storage_list:
|
|
try:
|
|
if storage.exists(path):
|
|
return True
|
|
except:
|
|
pass
|
|
return False
|