sjperkins commented on code in PR #33802: URL: https://github.com/apache/arrow/pull/33802#discussion_r1082320685
########## python/pyarrow/tests/test_cython.py: ########## @@ -163,6 +163,40 @@ def test_cython_api(tmpdir): env=subprocess_env) +@pytest.mark.cython +def test_extension_type(tmpdir): + with tmpdir.as_cwd(): + # Set up temporary workspace + pyx_file = 'extensions.pyx' + shutil.copyfile(os.path.join(here, pyx_file), + os.path.join(str(tmpdir), pyx_file)) + # Create setup.py file + setup_code = setup_template.format(pyx_file=pyx_file, + compiler_opts=compiler_opts, + test_ld_path=test_ld_path) + with open('setup.py', 'w') as f: + f.write(setup_code) + + subprocess_env = test_util.get_modified_env_with_pythonpath() + + # Compile extension module + subprocess.check_call([sys.executable, 'setup.py', + 'build_ext', '--inplace'], + env=subprocess_env) + + sys.path.insert(0, str(tmpdir)) + mod = __import__('extensions') + + uuid_type = mod._make_uuid_type() + assert uuid_type.extension_name == "uuid" + assert uuid_type.storage_type == pa.binary(16) + + array = mod._make_uuid_array() + assert array.to_pylist() == [b'abcdefghijklmno0', b'0onmlkjihgfedcba'] + assert array[0].as_py() == b'abcdefghijklmno0' + assert array[1].as_py() == b'0onmlkjihgfedcba' Review Comment: Check that we can access extension array as list and it's scalar values. ########## python/pyarrow/types.pxi: ########## @@ -836,6 +836,26 @@ cdef class BaseExtensionType(DataType): DataType.init(self, type) self.ext_type = <const CExtensionType*> type.get() + def __arrow_ext_class__(self): + """Return an extension array class to be used for building or + deserializing arrays with this extension type. + + This method should return a subclass of the ExtensionArray class. By + default, if not specialized in the extension implementation, an + extension type array will be a built-in ExtensionArray instance. + """ + return ExtensionArray Review Comment: It occurred to me that perhaps we should be generating dummy ExtensionArray classes, perhaps from the `extension_name`? However, this does seem to just work. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org