Skip to content

Commit 08384ba

Browse files
committed
[GR-74513] Raise ImportError for missing multibyte cjk codecs
1 parent ce1d381 commit 08384ba

7 files changed

Lines changed: 25 additions & 18 deletions

File tree

graalpython/com.oracle.graal.python.test/src/tests/test_codecs.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# Copyright (C) 1996-2017 Python Software Foundation
33
#
44
# Licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
5+
import importlib
56
import sys
67

78

@@ -892,6 +893,12 @@ def test_encode_dict_err_xmlcharrefreplace(self):
892893

893894
class MultibyteCodecTest(unittest.TestCase):
894895

896+
def test_missing_multibyte_codecs_raise_import_error(self):
897+
for module_name in ('_codecs_cn', '_codecs_hk', '_codecs_iso2022', '_codecs_jp', '_codecs_kr', '_codecs_tw'):
898+
with self.subTest(module_name=module_name):
899+
module = importlib.import_module(module_name)
900+
self.assertRaises(ImportError, module.getcodec, '__missing_codec__')
901+
895902
# just a smoke test
896903
def test_encode(self):
897904
import _codecs_tw

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cjkcodecs/CodecsCNModuleBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -44,11 +44,11 @@
4444
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.PyMultibyteCodec_CAPSULE_NAME;
4545
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.registerCodec;
4646
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.CreateCodecNode.createCodec;
47+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.ImportError;
4748
import static com.oracle.graal.python.nodes.BuiltinNames.J__CODECS_CN;
4849
import static com.oracle.graal.python.nodes.BuiltinNames.T__CODECS_CN;
4950
import static com.oracle.graal.python.nodes.ErrorMessages.ENCODING_NAME_MUST_BE_A_STRING;
5051
import static com.oracle.graal.python.nodes.ErrorMessages.NO_SUCH_CODEC_IS_SUPPORTED;
51-
import static com.oracle.graal.python.runtime.exception.PythonErrorType.LookupError;
5252
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
5353

5454
import java.util.List;
@@ -134,7 +134,7 @@ static Object getcodec(Object encoding,
134134

135135
MultibyteCodec codec = findCodec(CODEC_LIST, asUTF8Node.execute(inliningTarget, encoding), isEqual);
136136
if (codec == null) {
137-
throw raiseNode.raise(inliningTarget, LookupError, NO_SUCH_CODEC_IS_SUPPORTED);
137+
throw raiseNode.raise(inliningTarget, ImportError, NO_SUCH_CODEC_IS_SUPPORTED);
138138
}
139139

140140
PyCapsule codecobj = PFactory.createCapsuleJavaName(language, codec, PyMultibyteCodec_CAPSULE_NAME);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cjkcodecs/CodecsHKModuleBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -44,11 +44,11 @@
4444
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.PyMultibyteCodec_CAPSULE_NAME;
4545
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.registerCodec;
4646
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.CreateCodecNode.createCodec;
47+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.ImportError;
4748
import static com.oracle.graal.python.nodes.BuiltinNames.J__CODECS_HK;
4849
import static com.oracle.graal.python.nodes.BuiltinNames.T__CODECS_HK;
4950
import static com.oracle.graal.python.nodes.ErrorMessages.ENCODING_NAME_MUST_BE_A_STRING;
5051
import static com.oracle.graal.python.nodes.ErrorMessages.NO_SUCH_CODEC_IS_SUPPORTED;
51-
import static com.oracle.graal.python.runtime.exception.PythonErrorType.LookupError;
5252
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
5353

5454
import java.util.List;
@@ -126,7 +126,7 @@ static Object getcodec(Object encoding,
126126

127127
MultibyteCodec codec = findCodec(CODEC_LIST, asUTF8Node.execute(inliningTarget, encoding), isEqual);
128128
if (codec == null) {
129-
throw raiseNode.raise(inliningTarget, LookupError, NO_SUCH_CODEC_IS_SUPPORTED);
129+
throw raiseNode.raise(inliningTarget, ImportError, NO_SUCH_CODEC_IS_SUPPORTED);
130130
}
131131

132132
PyCapsule codecobj = PFactory.createCapsuleJavaName(language, codec, PyMultibyteCodec_CAPSULE_NAME);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cjkcodecs/CodecsISO2022ModuleBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -44,11 +44,11 @@
4444
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.PyMultibyteCodec_CAPSULE_NAME;
4545
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.registerCodec;
4646
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.CreateCodecNode.createCodec;
47+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.ImportError;
4748
import static com.oracle.graal.python.nodes.BuiltinNames.J__CODECS_ISO2022;
4849
import static com.oracle.graal.python.nodes.BuiltinNames.T__CODECS_ISO2022;
4950
import static com.oracle.graal.python.nodes.ErrorMessages.ENCODING_NAME_MUST_BE_A_STRING;
5051
import static com.oracle.graal.python.nodes.ErrorMessages.NO_SUCH_CODEC_IS_SUPPORTED;
51-
import static com.oracle.graal.python.runtime.exception.PythonErrorType.LookupError;
5252
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
5353

5454
import java.util.List;
@@ -136,7 +136,7 @@ static Object getcodec(Object encoding,
136136

137137
MultibyteCodec codec = findCodec(CODEC_LIST, asUTF8Node.execute(inliningTarget, encoding), isEqual);
138138
if (codec == null) {
139-
throw raiseNode.raise(inliningTarget, LookupError, NO_SUCH_CODEC_IS_SUPPORTED);
139+
throw raiseNode.raise(inliningTarget, ImportError, NO_SUCH_CODEC_IS_SUPPORTED);
140140
}
141141

142142
PyCapsule codecobj = PFactory.createCapsuleJavaName(language, codec, PyMultibyteCodec_CAPSULE_NAME);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cjkcodecs/CodecsJPModuleBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -44,11 +44,11 @@
4444
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.PyMultibyteCodec_CAPSULE_NAME;
4545
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.registerCodec;
4646
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.CreateCodecNode.createCodec;
47+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.ImportError;
4748
import static com.oracle.graal.python.nodes.BuiltinNames.J__CODECS_JP;
4849
import static com.oracle.graal.python.nodes.BuiltinNames.T__CODECS_JP;
4950
import static com.oracle.graal.python.nodes.ErrorMessages.ENCODING_NAME_MUST_BE_A_STRING;
5051
import static com.oracle.graal.python.nodes.ErrorMessages.NO_SUCH_CODEC_IS_SUPPORTED;
51-
import static com.oracle.graal.python.runtime.exception.PythonErrorType.LookupError;
5252
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
5353

5454
import java.util.List;
@@ -158,7 +158,7 @@ static Object getcodec(Object encoding,
158158

159159
MultibyteCodec codec = findCodec(CODEC_LIST, asUTF8Node.execute(inliningTarget, encoding), isEqual);
160160
if (codec == null) {
161-
throw raiseNode.raise(inliningTarget, LookupError, NO_SUCH_CODEC_IS_SUPPORTED);
161+
throw raiseNode.raise(inliningTarget, ImportError, NO_SUCH_CODEC_IS_SUPPORTED);
162162
}
163163

164164
PyCapsule codecobj = PFactory.createCapsuleJavaName(language, codec, PyMultibyteCodec_CAPSULE_NAME);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cjkcodecs/CodecsKRModuleBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -44,11 +44,11 @@
4444
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.PyMultibyteCodec_CAPSULE_NAME;
4545
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.registerCodec;
4646
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.CreateCodecNode.createCodec;
47+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.ImportError;
4748
import static com.oracle.graal.python.nodes.BuiltinNames.J__CODECS_KR;
4849
import static com.oracle.graal.python.nodes.BuiltinNames.T__CODECS_KR;
4950
import static com.oracle.graal.python.nodes.ErrorMessages.ENCODING_NAME_MUST_BE_A_STRING;
5051
import static com.oracle.graal.python.nodes.ErrorMessages.NO_SUCH_CODEC_IS_SUPPORTED;
51-
import static com.oracle.graal.python.runtime.exception.PythonErrorType.LookupError;
5252
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
5353

5454
import java.util.List;
@@ -131,7 +131,7 @@ static Object getcodec(Object encoding,
131131

132132
MultibyteCodec codec = findCodec(CODEC_LIST, asUTF8Node.execute(inliningTarget, encoding), isEqual);
133133
if (codec == null) {
134-
throw raiseNode.raise(inliningTarget, LookupError, NO_SUCH_CODEC_IS_SUPPORTED);
134+
throw raiseNode.raise(inliningTarget, ImportError, NO_SUCH_CODEC_IS_SUPPORTED);
135135
}
136136

137137
PyCapsule codecobj = PFactory.createCapsuleJavaName(language, codec, PyMultibyteCodec_CAPSULE_NAME);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cjkcodecs/CodecsTWModuleBuiltins.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -44,11 +44,11 @@
4444
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.PyMultibyteCodec_CAPSULE_NAME;
4545
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.registerCodec;
4646
import static com.oracle.graal.python.builtins.modules.cjkcodecs.MultibytecodecModuleBuiltins.CreateCodecNode.createCodec;
47+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.ImportError;
4748
import static com.oracle.graal.python.nodes.BuiltinNames.J__CODECS_TW;
4849
import static com.oracle.graal.python.nodes.BuiltinNames.T__CODECS_TW;
4950
import static com.oracle.graal.python.nodes.ErrorMessages.ENCODING_NAME_MUST_BE_A_STRING;
5051
import static com.oracle.graal.python.nodes.ErrorMessages.NO_SUCH_CODEC_IS_SUPPORTED;
51-
import static com.oracle.graal.python.runtime.exception.PythonErrorType.LookupError;
5252
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
5353

5454
import java.util.List;
@@ -126,7 +126,7 @@ static Object getcodec(Object encoding,
126126

127127
MultibyteCodec codec = findCodec(CODEC_LIST, asUTF8Node.execute(inliningTarget, encoding), isEqual);
128128
if (codec == null) {
129-
throw raiseNode.raise(inliningTarget, LookupError, NO_SUCH_CODEC_IS_SUPPORTED);
129+
throw raiseNode.raise(inliningTarget, ImportError, NO_SUCH_CODEC_IS_SUPPORTED);
130130
}
131131

132132
PyCapsule codecobj = PFactory.createCapsuleJavaName(language, codec, PyMultibyteCodec_CAPSULE_NAME);

0 commit comments

Comments
 (0)