From 28a0b733f1325954dcdc61c6e092b6d476a5911b Mon Sep 17 00:00:00 2001 From: Jeongseop Lim Date: Fri, 30 Oct 2026 03:23:35 +0900 Subject: [PATCH] Name the _csv reader and writer types like CPython The types were registered under the names Reader and Writer, so type(csv.reader([])) printed as . In CPython the types are named reader and writer and are exposed in _csv under the aliases Reader and Writer. Rename them, keep the module name, and add the aliases. Signed-off-by: Jeongseop Lim --- .../com.oracle.graal.python.test/src/tests/test_csv.py | 9 +++++++++ .../graal/python/builtins/PythonBuiltinClassType.java | 4 ++-- .../python/builtins/modules/csv/CSVModuleBuiltins.java | 4 +++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/graalpython/com.oracle.graal.python.test/src/tests/test_csv.py b/graalpython/com.oracle.graal.python.test/src/tests/test_csv.py index cc226c7679..0ab59379f3 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/test_csv.py +++ b/graalpython/com.oracle.graal.python.test/src/tests/test_csv.py @@ -46,6 +46,15 @@ class TestUnicodeCharacters(unittest.TestCase): def test_builtin_type_as_dialect(self): self.assertIsInstance(csv.reader(re.ASCII, int), type(csv.reader([]))) + def test_reader_writer_type_names(self): + import _csv + self.assertIs(type(csv.reader([])), _csv.Reader) + self.assertEqual(_csv.Reader.__name__, 'reader') + self.assertEqual(_csv.Reader.__module__, '_csv') + with TemporaryFile("w") as fileobj: + self.assertIs(type(csv.writer(fileobj)), _csv.Writer) + self.assertEqual(_csv.Writer.__name__, 'writer') + def test_read_utf_32_delimiter(self): test_data = ['a\U0001F642b'] reader = csv.reader(test_data, delimiter="\U0001F642") diff --git a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/PythonBuiltinClassType.java b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/PythonBuiltinClassType.java index 6585f85507..e185eec3cb 100644 --- a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/PythonBuiltinClassType.java +++ b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/PythonBuiltinClassType.java @@ -1314,8 +1314,8 @@ def takewhile(predicate, iterable): // csv CSVDialect("Dialect", PythonObject, newBuilder().publishInModule("_csv").basetype().slots(CSVDialectBuiltins.SLOTS)), - CSVReader("Reader", PythonObject, newBuilder().publishInModule("_csv").basetype().disallowInstantiation().slots(CSVReaderBuiltins.SLOTS)), - CSVWriter("Writer", PythonObject, newBuilder().publishInModule("_csv").basetype().disallowInstantiation()), + CSVReader("reader", PythonObject, newBuilder().moduleName("_csv").basetype().disallowInstantiation().slots(CSVReaderBuiltins.SLOTS)), + CSVWriter("writer", PythonObject, newBuilder().moduleName("_csv").basetype().disallowInstantiation()), // codecs PEncodingMap("EncodingMap", PythonObject, newBuilder().disallowInstantiation()), diff --git a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/csv/CSVModuleBuiltins.java b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/csv/CSVModuleBuiltins.java index 1e0513e8d5..f933d8c448 100644 --- a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/csv/CSVModuleBuiltins.java +++ b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/csv/CSVModuleBuiltins.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2026, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * The Universal Permissive License (UPL), Version 1.0 @@ -121,6 +121,8 @@ public void initialize(Python3Core core) { addBuiltinConstant("QUOTE_STRINGS", QUOTE_STRINGS.ordinal()); addBuiltinConstant("QUOTE_NOTNULL", QUOTE_NOTNULL.ordinal()); addBuiltinConstant(T__DIALECTS, PFactory.createDict(core.getLanguage())); + addBuiltinConstant("Reader", PythonBuiltinClassType.CSVReader); + addBuiltinConstant("Writer", PythonBuiltinClassType.CSVWriter); super.initialize(core); }