diff --git a/bindings/python/src/metadata.rs b/bindings/python/src/metadata.rs index 418b11d2f8a6..bf3da45208b9 100644 --- a/bindings/python/src/metadata.rs +++ b/bindings/python/src/metadata.rs @@ -91,11 +91,27 @@ impl Metadata { pub fn mode(&self) -> EntryMode { EntryMode(self.0.mode()) } + /// Last modified time #[getter] pub fn last_modified(&self) -> Option> { self.0.last_modified() } + pub fn __repr__(&self) -> String { + let last_modified_str = match self.0.last_modified() { + Some(dt) => dt.format("%Y-%m-%dT%H:%M:%S").to_string(), + None => "None".to_string(), + }; + + format!( + "Metadata(mode={}, content_length={}, content_type={}, last_modified={}, etag={})", + self.0.mode(), + self.0.content_length(), + self.0.content_type().unwrap_or("None"), + last_modified_str, + self.0.etag().unwrap_or("None"), + ) + } } #[pyclass(module = "opendal")] diff --git a/bindings/python/tests/test_write.py b/bindings/python/tests/test_write.py index b80059791dbb..230e3f7d1f91 100644 --- a/bindings/python/tests/test_write.py +++ b/bindings/python/tests/test_write.py @@ -36,6 +36,16 @@ def test_sync_write(service_name, operator, async_operator): assert metadata.mode.is_file() assert metadata.content_length == size + last_modified = ( + metadata.last_modified.strftime("%Y-%m-%dT%H:%M:%S") + if metadata.last_modified + else None + ) + assert ( + repr(metadata) + == f"Metadata(mode=file, content_length={metadata.content_length}, content_type={metadata.content_type}, last_modified={last_modified}, etag={metadata.etag})" + ) + operator.delete(filename) @@ -51,6 +61,16 @@ def test_sync_write_path(service_name, operator, async_operator): assert metadata.mode.is_file() assert metadata.content_length == size + last_modified = ( + metadata.last_modified.strftime("%Y-%m-%dT%H:%M:%S") + if metadata.last_modified + else None + ) + assert ( + repr(metadata) + == f"Metadata(mode=file, content_length={metadata.content_length}, content_type={metadata.content_type}, last_modified={last_modified}, etag={metadata.etag})" + ) + operator.delete(filename)