def test_metadata_write(storage): fs = AzureBlobFileSystem(account_name=storage.account_name, connection_string=CONN_STR) fs.mkdir("test_metadata_write") data = b"0123456789" metadata = {"meta": "data"} # standard blob type with fs.open("test_metadata_write/file.txt", "wb", metadata=metadata) as f: f.write(data) info = fs.info("test_metadata_write/file.txt") assert info["metadata"] == metadata metadata_changed_on_write = {"meta": "datum"} with fs.open("test_metadata_write/file.txt", "wb", metadata=metadata_changed_on_write) as f: f.write(data) info = fs.info("test_metadata_write/file.txt") assert info["metadata"] == metadata_changed_on_write # append blob type new_metadata = {"data": "meta"} with fs.open("test_metadata_write/append-file.txt", "ab", metadata=metadata) as f: f.write(data) # try change metadata on block appending with fs.open("test_metadata_write/append-file.txt", "ab", metadata=new_metadata) as f: f.write(data) info = fs.info("test_metadata_write/append-file.txt") # azure blob client doesn't seem to support metadata mutation when appending blocks # lets be sure this behavior doesn't change as this would imply # a potential breaking change assert info["metadata"] == metadata # getxattr / setxattr assert fs.getxattr("test_metadata_write/file.txt", "meta") == "datum" fs.setxattrs("test_metadata_write/file.txt", metadata="data2") assert fs.getxattr("test_metadata_write/file.txt", "metadata") == "data2" assert fs.info("test_metadata_write/file.txt")["metadata"] == { "metadata": "data2" } # empty file and nested directory with fs.open("test_metadata_write/a/b/c/nested-file.txt", "wb", metadata=metadata) as f: f.write(b"") assert fs.getxattr("test_metadata_write/a/b/c/nested-file.txt", "meta") == "data" fs.setxattrs("test_metadata_write/a/b/c/nested-file.txt", metadata="data2") assert fs.info( "test_metadata_write/a/b/c/nested-file.txt")["metadata"] == { "metadata": "data2" } fs.rmdir("test_metadata_write")
def test_info(storage): fs = AzureBlobFileSystem(account_name=storage.account_name, connection_string=CONN_STR) container_info = fs.info("data") assert container_info == {"name": "data/", "type": "directory", "size": 0} container2_info = fs.info("data/root") assert container2_info == { "name": "data/root/", "type": "directory", "size": 0 } dir_info = fs.info("data/root/c") assert dir_info == {"name": "data/root/c/", "type": "directory", "size": 0} file_info = fs.info("data/root/a/file.txt") assert file_info == { "name": "data/root/a/file.txt", "type": "file", "size": 10 }
def test_info(storage): fs = AzureBlobFileSystem( account_name=storage.account_name, connection_string=CONN_STR ) container_info = fs.info("data") assert_blob_equals( container_info, { "name": "data", "type": "directory", "size": None, "deleted": None, "last_modified": storage.insert_time, "metadata": None, }, ) container2_info = fs.info("data/root") assert_blob_equals( container2_info, {"name": "data/root", "type": "directory", "size": None} ) dir_info = fs.info("data/root/c") assert_blob_equals( dir_info, {"name": "data/root/c", "type": "directory", "size": None} ) file_info = fs.info("data/root/a/file.txt") assert_blob_equals( file_info, { "name": "data/root/a/file.txt", "size": 10, "type": "file", "archive_status": None, "deleted": None, "creation_time": storage.insert_time, "last_modified": storage.insert_time, "deleted_time": None, "last_accessed_on": None, "remaining_retention_days": None, "tag_count": None, "tags": None, "metadata": {}, "content_settings": { "content_type": "application/octet-stream", "content_encoding": None, "content_language": None, "content_md5": bytearray( b"x\x1e^$]i\xb5f\x97\x9b\x86\xe2\x8d#\xf2\xc7" ), "content_disposition": None, "cache_control": None, }, }, ) file_with_meta_info = fs.info("data/root/d/file_with_metadata.txt") assert_blob_equals( file_with_meta_info, { "name": "data/root/d/file_with_metadata.txt", "size": 10, "type": "file", "archive_status": None, "deleted": None, "creation_time": storage.insert_time, "last_modified": storage.insert_time, "deleted_time": None, "last_accessed_on": None, "remaining_retention_days": None, "tag_count": None, "tags": None, "metadata": {"meta": "data"}, "content_settings": { "content_type": "application/octet-stream", "content_encoding": None, "content_language": None, "content_md5": bytearray( b"x\x1e^$]i\xb5f\x97\x9b\x86\xe2\x8d#\xf2\xc7" ), "content_disposition": None, "cache_control": None, }, }, )