Spaces:
Paused
Paused
import os | |
import posixpath | |
from unittest.mock import MagicMock | |
import pytest | |
from _pytest.monkeypatch import MonkeyPatch | |
from oss2 import Bucket | |
from oss2.models import GetObjectResult, PutObjectResult | |
from 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_id | |
class 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.resp | |
MOCK = os.getenv("MOCK_SWITCH", "false").lower() == "true" | |
def 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() | |