This is an automated email from the ASF dual-hosted git repository. github-merge-queue[bot] pushed a commit to branch gh-readonly-queue/main/pr-4296-e9f7f6b43dcefa9ccbd02be47d71e630921e54dd in repository https://gitbox.apache.org/repos/asf/iceberg-python.git
commit 2549061f904af87f85e1201f1bd6dc3ab2f1ba2c Author: Javier de la Torre <[email protected]> AuthorDate: Mon Nov 9 17:30:23 2026 +0000 Avro: read a file without avro.codec as uncompressed (#4296) The Avro specification makes null the default codec. PyIceberg fell back to the Iceberg table property default (gzip), which is not an Avro codec name, so it raised 'Unsupported codec: gzip' on manifests written without the entry (iceberg-rust writes them so). --- pyiceberg/avro/file.py | 7 +++---- tests/avro/test_file.py | 6 ++++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/pyiceberg/avro/file.py b/pyiceberg/avro/file.py index 3184e3950..4b23c30ac 100644 --- a/pyiceberg/avro/file.py +++ b/pyiceberg/avro/file.py @@ -88,11 +88,10 @@ class AvroFileHeader(Record): """Get the file's compression codec algorithm from the file's metadata. In the case of a null codec, we return a None indicating that we - don't need to compress/decompress. + don't need to compress/decompress. A file without the avro.codec + entry is uncompressed: the Avro specification makes "null" the default. """ - from pyiceberg.table import TableProperties - - codec_name = self.meta.get(AVRO_CODEC_KEY, TableProperties.WRITE_AVRO_COMPRESSION_DEFAULT) + codec_name = self.meta.get(AVRO_CODEC_KEY, "null") if codec_name not in KNOWN_CODECS: raise ValueError(f"Unsupported codec: {codec_name}") diff --git a/tests/avro/test_file.py b/tests/avro/test_file.py index 6cc190c33..12d1af2ce 100644 --- a/tests/avro/test_file.py +++ b/tests/avro/test_file.py @@ -71,6 +71,12 @@ def get_null_compressor() -> None: assert header.compression_codec() is None +def test_missing_codec_is_null() -> None: + # the Avro specification: a file without avro.codec is uncompressed (iceberg-rust writes such manifests) + header = AvroFileHeader(bytes(0), {}, bytes(16)) + assert header.compression_codec() is None + + def test_unknown_codec() -> None: header = AvroFileHeader(bytes(0), {"avro.codec": "unknown"}, bytes(16))
