| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | from collections.abc import Generatorfrom flask import Flaskfrom obs import ObsClientfrom extensions.storage.base_storage import BaseStorageclass HuaweiStorage(BaseStorage):    """Implementation for huawei obs storage."""    def __init__(self, app: Flask):        super().__init__(app)        app_config = self.app.config        self.bucket_name = app_config.get("HUAWEI_OBS_BUCKET_NAME")        self.client = ObsClient(            access_key_id=app_config.get("HUAWEI_OBS_ACCESS_KEY"),            secret_access_key=app_config.get("HUAWEI_OBS_SECRET_KEY"),            server=app_config.get("HUAWEI_OBS_SERVER"),        )    def save(self, filename, data):        self.client.putObject(bucketName=self.bucket_name, objectKey=filename, content=data)    def load_once(self, filename: str) -> bytes:        data = self.client.getObject(bucketName=self.bucket_name, objectKey=filename)["body"].response.read()        return data    def load_stream(self, filename: str) -> Generator:        def generate(filename: str = filename) -> Generator:            response = self.client.getObject(bucketName=self.bucket_name, objectKey=filename)["body"].response            yield from response.read(4096)        return generate()    def download(self, filename, target_filepath):        self.client.getObject(bucketName=self.bucket_name, objectKey=filename, downloadPath=target_filepath)    def exists(self, filename):        res = self._get_meta(filename)        if res is None:            return False        return True    def delete(self, filename):        self.client.deleteObject(bucketName=self.bucket_name, objectKey=filename)    def _get_meta(self, filename):        res = self.client.getObjectMetadata(bucketName=self.bucket_name, objectKey=filename)        if res.status < 300:            return res        else:            return None
 |