| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | import osimport posixpathfrom unittest.mock import MagicMockimport pytestfrom _pytest.monkeypatch import MonkeyPatchfrom oss2 import Bucket  # type: ignorefrom oss2.models import GetObjectResult, PutObjectResult  # type: ignorefrom tests.unit_tests.oss.__mock.base import (    get_example_bucket,    get_example_data,    get_example_filename,    get_example_filepath,    get_example_folder,)class MockResponse:    def __init__(self, status, headers, request_id):        self.status = status        self.headers = headers        self.request_id = request_idclass MockAliyunOssClass:    def __init__(        self,        auth,        endpoint,        bucket_name,        is_cname=False,        session=None,        connect_timeout=None,        app_name="",        enable_crc=True,        proxies=None,        region=None,        cloudbox_id=None,        is_path_style=False,        is_verify_object_strict=True,    ):        self.bucket_name = get_example_bucket()        self.key = posixpath.join(get_example_folder(), get_example_filename())        self.content = get_example_data()        self.filepath = get_example_filepath()        self.resp = MockResponse(            200,            {                "etag": "ee8de918d05640145b18f70f4c3aa602",                "x-oss-version-id": "CAEQNhiBgMDJgZCA0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY0****",            },            "request_id",        )    def put_object(self, key, data, headers=None, progress_callback=None):        assert key == self.key        assert data == self.content        return PutObjectResult(self.resp)    def get_object(self, key, byte_range=None, headers=None, progress_callback=None, process=None, params=None):        assert key == self.key        get_object_output = MagicMock(GetObjectResult)        get_object_output.read.return_value = self.content        return get_object_output    def get_object_to_file(        self, key, filename, byte_range=None, headers=None, progress_callback=None, process=None, params=None    ):        assert key == self.key        assert filename == self.filepath    def object_exists(self, key, headers=None):        assert key == self.key        return True    def delete_object(self, key, params=None, headers=None):        assert key == self.key        self.resp.headers["x-oss-delete-marker"] = True        return self.respMOCK = os.getenv("MOCK_SWITCH", "false").lower() == "true"@pytest.fixturedef setup_aliyun_oss_mock(monkeypatch: MonkeyPatch):    if MOCK:        monkeypatch.setattr(Bucket, "__init__", MockAliyunOssClass.__init__)        monkeypatch.setattr(Bucket, "put_object", MockAliyunOssClass.put_object)        monkeypatch.setattr(Bucket, "get_object", MockAliyunOssClass.get_object)        monkeypatch.setattr(Bucket, "get_object_to_file", MockAliyunOssClass.get_object_to_file)        monkeypatch.setattr(Bucket, "object_exists", MockAliyunOssClass.object_exists)        monkeypatch.setattr(Bucket, "delete_object", MockAliyunOssClass.delete_object)    yield    if MOCK:        monkeypatch.undo()
 |