X Tutup
Skip to content

Commit a57dfd0

Browse files
committed
Issue python#21488: Add support of keyword arguments for codecs.encode and codecs.decode
1 parent f7667e3 commit a57dfd0

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

Lib/test/test_codecs.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1596,6 +1596,12 @@ def test_decode(self):
15961596
self.assertEqual(codecs.decode(b'abc'), 'abc')
15971597
self.assertRaises(UnicodeDecodeError, codecs.decode, b'\xff', 'ascii')
15981598

1599+
# test keywords
1600+
self.assertEqual(codecs.decode(obj=b'\xe4\xf6\xfc', encoding='latin-1'),
1601+
'\xe4\xf6\xfc')
1602+
self.assertEqual(codecs.decode(b'[\xff]', 'ascii', errors='ignore'),
1603+
'[]')
1604+
15991605
def test_encode(self):
16001606
self.assertEqual(codecs.encode('\xe4\xf6\xfc', 'latin-1'),
16011607
b'\xe4\xf6\xfc')
@@ -1604,6 +1610,12 @@ def test_encode(self):
16041610
self.assertEqual(codecs.encode('abc'), b'abc')
16051611
self.assertRaises(UnicodeEncodeError, codecs.encode, '\xffff', 'ascii')
16061612

1613+
# test keywords
1614+
self.assertEqual(codecs.encode(obj='\xe4\xf6\xfc', encoding='latin-1'),
1615+
b'\xe4\xf6\xfc')
1616+
self.assertEqual(codecs.encode('[\xff]', 'ascii', errors='ignore'),
1617+
b'[]')
1618+
16071619
def test_register(self):
16081620
self.assertRaises(TypeError, codecs.register)
16091621
self.assertRaises(TypeError, codecs.register, 42)

Modules/_codecsmodule.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,15 @@ a ValueError. Other possible values are 'ignore', 'replace' and\n\
8989
codecs.register_error that can handle ValueErrors.");
9090

9191
static PyObject *
92-
codec_encode(PyObject *self, PyObject *args)
92+
codec_encode(PyObject *self, PyObject *args, PyObject *kwargs)
9393
{
94+
static char *kwlist[] = {"obj", "encoding", "errors", NULL};
9495
const char *encoding = NULL;
9596
const char *errors = NULL;
9697
PyObject *v;
9798

98-
if (!PyArg_ParseTuple(args, "O|ss:encode", &v, &encoding, &errors))
99+
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|ss:encode", kwlist,
100+
&v, &encoding, &errors))
99101
return NULL;
100102

101103
if (encoding == NULL)
@@ -116,13 +118,15 @@ as well as any other name registered with codecs.register_error that is\n\
116118
able to handle ValueErrors.");
117119

118120
static PyObject *
119-
codec_decode(PyObject *self, PyObject *args)
121+
codec_decode(PyObject *self, PyObject *args, PyObject *kwargs)
120122
{
123+
static char *kwlist[] = {"obj", "encoding", "errors", NULL};
121124
const char *encoding = NULL;
122125
const char *errors = NULL;
123126
PyObject *v;
124127

125-
if (!PyArg_ParseTuple(args, "O|ss:decode", &v, &encoding, &errors))
128+
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|ss:decode", kwlist,
129+
&v, &encoding, &errors))
126130
return NULL;
127131

128132
if (encoding == NULL)
@@ -1120,9 +1124,9 @@ static PyMethodDef _codecs_functions[] = {
11201124
register__doc__},
11211125
{"lookup", codec_lookup, METH_VARARGS,
11221126
lookup__doc__},
1123-
{"encode", codec_encode, METH_VARARGS,
1127+
{"encode", (PyCFunction)codec_encode, METH_VARARGS|METH_KEYWORDS,
11241128
encode__doc__},
1125-
{"decode", codec_decode, METH_VARARGS,
1129+
{"decode", (PyCFunction)codec_decode, METH_VARARGS|METH_KEYWORDS,
11261130
decode__doc__},
11271131
{"escape_encode", escape_encode, METH_VARARGS},
11281132
{"escape_decode", escape_decode, METH_VARARGS},

0 commit comments

Comments
 (0)
X Tutup