Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b176d40

Browse files
committed
Issue #23280: Fix docstrings for binascii.(un)hexlify
1 parent 5a494f6 commit b176d40

3 files changed

Lines changed: 103 additions & 6 deletions

File tree

Lib/test/test_binascii.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,9 @@ def test_hex(self):
162162
self.assertRaises(binascii.Error, binascii.a2b_hex, t[:-1])
163163
self.assertRaises(binascii.Error, binascii.a2b_hex, t[:-1] + b'q')
164164

165-
self.assertEqual(binascii.hexlify(b'a'), b'61')
165+
# Confirm that b2a_hex == hexlify and a2b_hex == unhexlify
166+
self.assertEqual(binascii.hexlify(self.type2test(s)), t)
167+
self.assertEqual(binascii.unhexlify(self.type2test(t)), u)
166168

167169
def test_qp(self):
168170
# A test for SF bug 534347 (segfaults without the proper fix)

Modules/binascii.c

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,6 +1147,20 @@ binascii_b2a_hex_impl(PyModuleDef *module, Py_buffer *data)
11471147
return retval;
11481148
}
11491149

1150+
/*[clinic input]
1151+
binascii.hexlify = binascii.b2a_hex
1152+
1153+
Hexadecimal representation of binary data.
1154+
1155+
The return value is a bytes object.
1156+
[clinic start generated code]*/
1157+
1158+
static PyObject *
1159+
binascii_hexlify_impl(PyModuleDef *module, Py_buffer *data)
1160+
/*[clinic end generated code: output=6098440091fb61dc input=2e3afae7f083f061]*/
1161+
{
1162+
return binascii_b2a_hex_impl(module, data);
1163+
}
11501164

11511165
static int
11521166
to_int(int c)
@@ -1221,6 +1235,21 @@ binascii_a2b_hex_impl(PyModuleDef *module, Py_buffer *hexstr)
12211235
return NULL;
12221236
}
12231237

1238+
/*[clinic input]
1239+
binascii.unhexlify = binascii.a2b_hex
1240+
1241+
Binary data of hexadecimal representation.
1242+
1243+
hexstr must contain an even number of hex digits (upper or lower case).
1244+
[clinic start generated code]*/
1245+
1246+
static PyObject *
1247+
binascii_unhexlify_impl(PyModuleDef *module, Py_buffer *hexstr)
1248+
/*[clinic end generated code: output=17cec7544499803e input=dd8c012725f462da]*/
1249+
{
1250+
return binascii_a2b_hex_impl(module, hexstr);
1251+
}
1252+
12241253
static int table_hex[128] = {
12251254
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
12261255
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
@@ -1535,10 +1564,8 @@ static struct PyMethodDef binascii_module_methods[] = {
15351564
BINASCII_B2A_HQX_METHODDEF
15361565
BINASCII_A2B_HEX_METHODDEF
15371566
BINASCII_B2A_HEX_METHODDEF
1538-
{"unhexlify", (PyCFunction)binascii_a2b_hex, METH_VARARGS,
1539-
binascii_a2b_hex__doc__},
1540-
{"hexlify", (PyCFunction)binascii_b2a_hex, METH_VARARGS,
1541-
binascii_b2a_hex__doc__},
1567+
BINASCII_HEXLIFY_METHODDEF
1568+
BINASCII_UNHEXLIFY_METHODDEF
15421569
BINASCII_RLECODE_HQX_METHODDEF
15431570
BINASCII_RLEDECODE_HQX_METHODDEF
15441571
BINASCII_CRC_HQX_METHODDEF

Modules/clinic/binascii.c.h

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,40 @@ binascii_b2a_hex(PyModuleDef *module, PyObject *args)
367367
return return_value;
368368
}
369369

370+
PyDoc_STRVAR(binascii_hexlify__doc__,
371+
"hexlify($module, data, /)\n"
372+
"--\n"
373+
"\n"
374+
"Hexadecimal representation of binary data.\n"
375+
"\n"
376+
"The return value is a bytes object.");
377+
378+
#define BINASCII_HEXLIFY_METHODDEF \
379+
{"hexlify", (PyCFunction)binascii_hexlify, METH_VARARGS, binascii_hexlify__doc__},
380+
381+
static PyObject *
382+
binascii_hexlify_impl(PyModuleDef *module, Py_buffer *data);
383+
384+
static PyObject *
385+
binascii_hexlify(PyModuleDef *module, PyObject *args)
386+
{
387+
PyObject *return_value = NULL;
388+
Py_buffer data = {NULL, NULL};
389+
390+
if (!PyArg_ParseTuple(args,
391+
"y*:hexlify",
392+
&data))
393+
goto exit;
394+
return_value = binascii_hexlify_impl(module, &data);
395+
396+
exit:
397+
/* Cleanup for data */
398+
if (data.obj)
399+
PyBuffer_Release(&data);
400+
401+
return return_value;
402+
}
403+
370404
PyDoc_STRVAR(binascii_a2b_hex__doc__,
371405
"a2b_hex($module, hexstr, /)\n"
372406
"--\n"
@@ -402,6 +436,40 @@ binascii_a2b_hex(PyModuleDef *module, PyObject *args)
402436
return return_value;
403437
}
404438

439+
PyDoc_STRVAR(binascii_unhexlify__doc__,
440+
"unhexlify($module, hexstr, /)\n"
441+
"--\n"
442+
"\n"
443+
"Binary data of hexadecimal representation.\n"
444+
"\n"
445+
"hexstr must contain an even number of hex digits (upper or lower case).");
446+
447+
#define BINASCII_UNHEXLIFY_METHODDEF \
448+
{"unhexlify", (PyCFunction)binascii_unhexlify, METH_VARARGS, binascii_unhexlify__doc__},
449+
450+
static PyObject *
451+
binascii_unhexlify_impl(PyModuleDef *module, Py_buffer *hexstr);
452+
453+
static PyObject *
454+
binascii_unhexlify(PyModuleDef *module, PyObject *args)
455+
{
456+
PyObject *return_value = NULL;
457+
Py_buffer hexstr = {NULL, NULL};
458+
459+
if (!PyArg_ParseTuple(args,
460+
"O&:unhexlify",
461+
ascii_buffer_converter, &hexstr))
462+
goto exit;
463+
return_value = binascii_unhexlify_impl(module, &hexstr);
464+
465+
exit:
466+
/* Cleanup for hexstr */
467+
if (hexstr.obj)
468+
PyBuffer_Release(&hexstr);
469+
470+
return return_value;
471+
}
472+
405473
PyDoc_STRVAR(binascii_a2b_qp__doc__,
406474
"a2b_qp($module, /, data, header=False)\n"
407475
"--\n"
@@ -475,4 +543,4 @@ binascii_b2a_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs)
475543

476544
return return_value;
477545
}
478-
/*[clinic end generated code: output=68e2bcc6956b6213 input=a9049054013a1b77]*/
546+
/*[clinic end generated code: output=e46d29f8c9adae7e input=a9049054013a1b77]*/

0 commit comments

Comments
 (0)