| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | import osfrom unittest.mock import MagicMockimport pytestfrom _pytest.monkeypatch import MonkeyPatchfrom qcloud_cos import CosS3Client  # type: ignorefrom qcloud_cos.streambody import StreamBody  # type: ignorefrom tests.unit_tests.oss.__mock.base import (    get_example_bucket,    get_example_data,    get_example_filename,    get_example_filepath,)class MockTencentCosClass:    def __init__(self, conf, retry=1, session=None):        self.bucket_name = get_example_bucket()        self.key = get_example_filename()        self.content = get_example_data()        self.filepath = get_example_filepath()        self.resp = {            "ETag": "ee8de918d05640145b18f70f4c3aa602",            "Server": "tencent-cos",            "x-cos-hash-crc64ecma": 16749565679157681890,            "x-cos-request-id": "NWU5MDNkYzlfNjRiODJhMDlfMzFmYzhfMTFm****",        }    def put_object(self, Bucket, Body, Key, EnableMD5=False, **kwargs):  # noqa: N803        assert Bucket == self.bucket_name        assert Key == self.key        assert Body == self.content        return self.resp    def get_object(self, Bucket, Key, KeySimplifyCheck=True, **kwargs):  # noqa: N803        assert Bucket == self.bucket_name        assert Key == self.key        mock_stream_body = MagicMock(StreamBody)        mock_raw_stream = MagicMock()        mock_stream_body.get_raw_stream.return_value = mock_raw_stream        mock_raw_stream.read.return_value = self.content        mock_stream_body.get_stream_to_file = MagicMock()        def chunk_generator(chunk_size=2):            for i in range(0, len(self.content), chunk_size):                yield self.content[i : i + chunk_size]        mock_stream_body.get_stream.return_value = chunk_generator(chunk_size=4096)        return {"Body": mock_stream_body}    def object_exists(self, Bucket, Key):  # noqa: N803        assert Bucket == self.bucket_name        assert Key == self.key        return True    def delete_object(self, Bucket, Key, **kwargs):  # noqa: N803        assert Bucket == self.bucket_name        assert Key == self.key        self.resp.update({"x-cos-delete-marker": True})        return self.respMOCK = os.getenv("MOCK_SWITCH", "false").lower() == "true"@pytest.fixturedef setup_tencent_cos_mock(monkeypatch: MonkeyPatch):    if MOCK:        monkeypatch.setattr(CosS3Client, "__init__", MockTencentCosClass.__init__)        monkeypatch.setattr(CosS3Client, "put_object", MockTencentCosClass.put_object)        monkeypatch.setattr(CosS3Client, "get_object", MockTencentCosClass.get_object)        monkeypatch.setattr(CosS3Client, "object_exists", MockTencentCosClass.object_exists)        monkeypatch.setattr(CosS3Client, "delete_object", MockTencentCosClass.delete_object)    yield    if MOCK:        monkeypatch.undo()
 |