Skip to content

Commit

Permalink
refactoring complete; all tests are passing
Browse files Browse the repository at this point in the history
  • Loading branch information
oussjarrousse committed Apr 21, 2024
1 parent cbe43f4 commit f44965f
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 56 deletions.
126 changes: 71 additions & 55 deletions pytest_minio_mock/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,70 @@ def list_versions(self):
)
return versions_list

def remove_object(self, version_id, versioning: VersioningConfig):
"""
Returns
nothing
"""
try:
if versioning.status == OFF:
if version_id:
if version_id in self.versions:
del self.versions[version_id]
else:
raise RuntimeError("This should not happen")
return
except Exception as e:
logging.error("remove_object(): Exception")
logging.error(e)
raise e
try:
if versioning.status == ENABLED:
if version_id:
if version_id not in self.versions:
# version_id does not exist
# nothing to do
return
else:
latest_obj = self.get_latest()
del self.versions[version_id]
if version_id == latest_obj.version_id:
obj = list(self.versions.values())[0]
obj.is_latest = True
else: # version_id is False
latest_obj = self.get_latest()
if latest_obj.is_delete_marker:
# nothing to do
return

version_id = str(uuid4())

obj = MockMinioObjectVersion(
object_name=self.object_name,
data=b"",
version_id=version_id,
is_delete_marker=True,
is_latest=True,
)
self.put_object_version(version_id=obj.version_id, obj=obj)
return
elif versioning.status == SUSPENDED:
if version_id:
latest_obj = self.get_latest()
del self.versions[version_id]
if version_id == latest_obj.version_id:
obj = list(self.versions.values())[0]
obj.is_latest = True
else:
latest_obj = self.get_latest()
latest_obj.is_delete_marker = True
else:
raise Exception("unexpected")
except Exception as e:
logging.error("remove_object(): Exception")
logging.error(e)
raise


class MockMinioBucket:
"""
Expand Down Expand Up @@ -383,63 +447,13 @@ def remove_object(self, object_name, version_id=None):
return
try:
if self.versioning.status == OFF:
if version_id:
if version_id in self.objects[object_name]:
del self.objects[object_name][version_id]
else:
if not version_id:
del self.objects[object_name]
return
except Exception as e:
logging.error("remove_object(): Exception")
logging.error(e)
raise e

try:
if self.versioning.status == ENABLED:
if version_id:
if version_id not in self.objects[object_name]:
# version_id does not exist
# nothing to do
return
else:
latest_obj = self.objects[object_name].get_latest()
del self.objects[object_name][version_id]
if version_id == latest_obj.version_id:
obj = list(self.objects[object_name].values())[0]
obj.is_latest = True

else: # version_id is False
#
latest_obj = self.objects[object_name].get_latest()
if latest_obj.is_delete_marker:
# nothing to do
return

self._put_object(
bucket_name=bucket_name,
object_name=object_name,
data=b"",
length=0,
is_delete_marker=True,
)
return
elif self.versioning.status == SUSPENDED:
if version_id:
latest_obj = self.objects[object_name].get_latest()
del self.objects[object_name][version_id]
if version_id == latest_obj.version_id:
obj = list(self.objects[object_name].values())[0]
obj.is_latest = True

else:
latest_obj = self.objects[object_name].get_latest()
latest_obj.is_delete_marker = True
else:
raise Exception("unexpected")
return self.objects[object_name].remove_object(version_id, self.versioning)

except Exception as e:
logging.error("remove_object(): Exception")
logging.error(self.buckets)
logging.error(e)
raise

Expand All @@ -465,8 +479,8 @@ def get_object(self, object_name, version_id):
message=e.message,
response=e.response,
resource=f"/{self.bucket_name}/{object_name}",
host_id=e._host_id,
request_id=e.request_id,
host_id=None,
request_id=None,
code=e.code,
bucket_name=self.bucket_name,
object_name=object_name,
Expand Down Expand Up @@ -1203,7 +1217,9 @@ def remove_object(self, bucket_name, object_name, version_id=None):
None: The method has no return value but indicates successful removal.
"""
self._health_check()
return self.buckets[bucket_name].remove_object(object_name, version_id=None)
return self.buckets[bucket_name].remove_object(
object_name, version_id=version_id
)


@pytest.fixture
Expand Down
2 changes: 1 addition & 1 deletion tests/test_minio_mock.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ def test_removing_object_version_with_versionning_enabled(minio_mock):
objects = list(client.list_objects(bucket_name, object_name, include_version=True))
assert len(objects) == 1
assert objects[0].version_id == last_version
assert objects[0].is_latest is True
assert objects[0].is_latest == "true"

client.fput_object(bucket_name, object_name, file_path)
objects = list(client.list_objects(bucket_name, object_name, include_version=True))
Expand Down

0 comments on commit f44965f

Please sign in to comment.