From b6e2d6f0dc712f096661c8448be9fdea1d2fbb02 Mon Sep 17 00:00:00 2001 From: Jacob Hayes Date: Sat, 4 May 2024 12:38:00 -0400 Subject: [PATCH 1/3] GH-38575: [Python] Extend test_schema_import_c_schema_interface to check metadata --- python/pyarrow/tests/test_types.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/python/pyarrow/tests/test_types.py b/python/pyarrow/tests/test_types.py index 4f66a6f4167..01a0ad218fe 100644 --- a/python/pyarrow/tests/test_types.py +++ b/python/pyarrow/tests/test_types.py @@ -1331,10 +1331,12 @@ def __init__(self, schema): def __arrow_c_schema__(self): return self.schema.__arrow_c_schema__() - schema = pa.schema([pa.field("field_name", pa.int32())]) - wrapped_schema = Wrapper(schema) + schema = pa.schema([pa.field("field_name", pa.int32())], metadata={"a": "b"}) + assert schema.metadata == {b"a": b"b"} + wrapped_schema = Wrapper(schema) assert pa.schema(wrapped_schema) == schema + assert pa.schema(wrapped_schema, metadata={"a": "c"}).metadata == {b"a": b"c"} def test_field_import_c_schema_interface(): From 5556af61d3a48bae28701140ae0e9465f9f920af Mon Sep 17 00:00:00 2001 From: Jacob Hayes Date: Sat, 4 May 2024 12:26:35 -0400 Subject: [PATCH 2/3] GH-38575: [Python] Include metadata when creating pa.schema from PyCapsule --- python/pyarrow/types.pxi | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python/pyarrow/types.pxi b/python/pyarrow/types.pxi index 018099ae7e6..480f19c81df 100644 --- a/python/pyarrow/types.pxi +++ b/python/pyarrow/types.pxi @@ -5332,7 +5332,10 @@ def schema(fields, metadata=None): if isinstance(fields, Mapping): fields = fields.items() elif hasattr(fields, "__arrow_c_schema__"): - return Schema._import_from_c_capsule(fields.__arrow_c_schema__()) + result = Schema._import_from_c_capsule(fields.__arrow_c_schema__()) + if metadata is not None: + result = result.with_metadata(metadata) + return result for item in fields: if isinstance(item, tuple): From cf344abf52c3a1d4c0f30fc8b55a898b0ed5cf0f Mon Sep 17 00:00:00 2001 From: Joris Van den Bossche Date: Thu, 16 May 2024 17:42:21 +0200 Subject: [PATCH 3/3] small test update --- python/pyarrow/tests/test_types.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/pyarrow/tests/test_types.py b/python/pyarrow/tests/test_types.py index 01a0ad218fe..f7b6040f510 100644 --- a/python/pyarrow/tests/test_types.py +++ b/python/pyarrow/tests/test_types.py @@ -1333,9 +1333,10 @@ def __arrow_c_schema__(self): schema = pa.schema([pa.field("field_name", pa.int32())], metadata={"a": "b"}) assert schema.metadata == {b"a": b"b"} - wrapped_schema = Wrapper(schema) + assert pa.schema(wrapped_schema) == schema + assert pa.schema(wrapped_schema).metadata == {b"a": b"b"} assert pa.schema(wrapped_schema, metadata={"a": "c"}).metadata == {b"a": b"c"}