#9418: first step of moving private string methods to _string module.
This commit is contained in:
parent
268e4d4cf3
commit
66c221e993
|
@ -14,6 +14,8 @@ printable -- a string containing all ASCII characters considered printable
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import _string
|
||||||
|
|
||||||
# Some strings for ctype-style character classification
|
# Some strings for ctype-style character classification
|
||||||
whitespace = ' \t\n\r\v\f'
|
whitespace = ' \t\n\r\v\f'
|
||||||
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
|
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
|
||||||
|
@ -170,8 +172,8 @@ class Template(metaclass=_TemplateMetaclass):
|
||||||
# The hard parts are reused from the C implementation. They're exposed as "_"
|
# The hard parts are reused from the C implementation. They're exposed as "_"
|
||||||
# prefixed methods of str.
|
# prefixed methods of str.
|
||||||
|
|
||||||
# The overall parser is implemented in str._formatter_parser.
|
# The overall parser is implemented in _string.formatter_parser.
|
||||||
# The field name parser is implemented in str._formatter_field_name_split
|
# The field name parser is implemented in _string.formatter_field_name_split
|
||||||
|
|
||||||
class Formatter:
|
class Formatter:
|
||||||
def format(self, format_string, *args, **kwargs):
|
def format(self, format_string, *args, **kwargs):
|
||||||
|
@ -251,7 +253,7 @@ class Formatter:
|
||||||
# if field_name is not None, it is looked up, formatted
|
# if field_name is not None, it is looked up, formatted
|
||||||
# with format_spec and conversion and then used
|
# with format_spec and conversion and then used
|
||||||
def parse(self, format_string):
|
def parse(self, format_string):
|
||||||
return format_string._formatter_parser()
|
return _string.formatter_parser(format_string)
|
||||||
|
|
||||||
|
|
||||||
# given a field_name, find the object it references.
|
# given a field_name, find the object it references.
|
||||||
|
@ -260,7 +262,7 @@ class Formatter:
|
||||||
# used_args: a set of which args have been used
|
# used_args: a set of which args have been used
|
||||||
# args, kwargs: as passed in to vformat
|
# args, kwargs: as passed in to vformat
|
||||||
def get_field(self, field_name, args, kwargs):
|
def get_field(self, field_name, args, kwargs):
|
||||||
first, rest = field_name._formatter_field_name_split()
|
first, rest = _string.formatter_field_name_split(field_name)
|
||||||
|
|
||||||
obj = self.get_value(first, args, kwargs)
|
obj = self.get_value(first, args, kwargs)
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,9 @@ What's New in Python 3.2 Beta 1?
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #9418: Moved private string methods ``_formatter_parser`` and
|
||||||
|
``_formatter_field_name_split`` into a new ``_string`` module.
|
||||||
|
|
||||||
- Issue #9992: Remove PYTHONFSENCODING environment variable.
|
- Issue #9992: Remove PYTHONFSENCODING environment variable.
|
||||||
|
|
||||||
Library
|
Library
|
||||||
|
|
|
@ -29,6 +29,7 @@ extern PyObject* PyInit_imp(void);
|
||||||
extern PyObject* PyInit_gc(void);
|
extern PyObject* PyInit_gc(void);
|
||||||
extern PyObject* PyInit__ast(void);
|
extern PyObject* PyInit__ast(void);
|
||||||
extern PyObject* _PyWarnings_Init(void);
|
extern PyObject* _PyWarnings_Init(void);
|
||||||
|
extern PyObject* PyInit__string(void);
|
||||||
|
|
||||||
struct _inittab _PyImport_Inittab[] = {
|
struct _inittab _PyImport_Inittab[] = {
|
||||||
|
|
||||||
|
@ -54,6 +55,9 @@ struct _inittab _PyImport_Inittab[] = {
|
||||||
/* This lives in _warnings.c */
|
/* This lives in _warnings.c */
|
||||||
{"_warnings", _PyWarnings_Init},
|
{"_warnings", _PyWarnings_Init},
|
||||||
|
|
||||||
|
/* This lives in Objects/unicodeobject.c */
|
||||||
|
{"_string", PyInit__string},
|
||||||
|
|
||||||
/* Sentinel */
|
/* Sentinel */
|
||||||
{0, 0}
|
{0, 0}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1180,7 +1180,7 @@ static PyTypeObject PyFormatterIter_Type = {
|
||||||
describing the parsed elements. It's a wrapper around
|
describing the parsed elements. It's a wrapper around
|
||||||
stringlib/string_format.h's MarkupIterator */
|
stringlib/string_format.h's MarkupIterator */
|
||||||
static PyObject *
|
static PyObject *
|
||||||
formatter_parser(STRINGLIB_OBJECT *self)
|
formatter_parser(PyObject *ignored, STRINGLIB_OBJECT *self)
|
||||||
{
|
{
|
||||||
formatteriterobject *it;
|
formatteriterobject *it;
|
||||||
|
|
||||||
|
@ -1315,7 +1315,7 @@ static PyTypeObject PyFieldNameIter_Type = {
|
||||||
field_name_split. The iterator it returns is a
|
field_name_split. The iterator it returns is a
|
||||||
FieldNameIterator */
|
FieldNameIterator */
|
||||||
static PyObject *
|
static PyObject *
|
||||||
formatter_field_name_split(STRINGLIB_OBJECT *self)
|
formatter_field_name_split(PyObject *ignored, STRINGLIB_OBJECT *self)
|
||||||
{
|
{
|
||||||
SubString first;
|
SubString first;
|
||||||
Py_ssize_t first_idx;
|
Py_ssize_t first_idx;
|
||||||
|
|
|
@ -8968,8 +8968,6 @@ static PyMethodDef unicode_methods[] = {
|
||||||
{"zfill", (PyCFunction) unicode_zfill, METH_VARARGS, zfill__doc__},
|
{"zfill", (PyCFunction) unicode_zfill, METH_VARARGS, zfill__doc__},
|
||||||
{"format", (PyCFunction) do_string_format, METH_VARARGS | METH_KEYWORDS, format__doc__},
|
{"format", (PyCFunction) do_string_format, METH_VARARGS | METH_KEYWORDS, format__doc__},
|
||||||
{"__format__", (PyCFunction) unicode__format__, METH_VARARGS, p_format__doc__},
|
{"__format__", (PyCFunction) unicode__format__, METH_VARARGS, p_format__doc__},
|
||||||
{"_formatter_field_name_split", (PyCFunction) formatter_field_name_split, METH_NOARGS},
|
|
||||||
{"_formatter_parser", (PyCFunction) formatter_parser, METH_NOARGS},
|
|
||||||
{"maketrans", (PyCFunction) unicode_maketrans,
|
{"maketrans", (PyCFunction) unicode_maketrans,
|
||||||
METH_VARARGS | METH_STATIC, maketrans__doc__},
|
METH_VARARGS | METH_STATIC, maketrans__doc__},
|
||||||
{"__sizeof__", (PyCFunction) unicode__sizeof__, METH_NOARGS, sizeof__doc__},
|
{"__sizeof__", (PyCFunction) unicode__sizeof__, METH_NOARGS, sizeof__doc__},
|
||||||
|
@ -10170,6 +10168,36 @@ PyUnicode_AsUnicodeCopy(PyObject *object)
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* A _string module, to export formatter_parser and formatter_field_name_split
|
||||||
|
to the string.Formatter class implemented in Python. */
|
||||||
|
|
||||||
|
static PyMethodDef _string_methods[] = {
|
||||||
|
{"formatter_field_name_split", (PyCFunction) formatter_field_name_split,
|
||||||
|
METH_O, PyDoc_STR("split the argument as a field name")},
|
||||||
|
{"formatter_parser", (PyCFunction) formatter_parser,
|
||||||
|
METH_O, PyDoc_STR("parse the argument as a format string")},
|
||||||
|
{NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct PyModuleDef _string_module = {
|
||||||
|
PyModuleDef_HEAD_INIT,
|
||||||
|
"_string",
|
||||||
|
PyDoc_STR("string helper module"),
|
||||||
|
0,
|
||||||
|
_string_methods,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
PyMODINIT_FUNC
|
||||||
|
PyInit__string(void)
|
||||||
|
{
|
||||||
|
return PyModule_Create(&_string_module);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -62,6 +62,7 @@ extern PyObject* PyInit__io(void);
|
||||||
extern PyObject* PyInit__pickle(void);
|
extern PyObject* PyInit__pickle(void);
|
||||||
extern PyObject* PyInit_atexit(void);
|
extern PyObject* PyInit_atexit(void);
|
||||||
extern PyObject* _PyWarnings_Init(void);
|
extern PyObject* _PyWarnings_Init(void);
|
||||||
|
extern PyObject* PyInit__string(void);
|
||||||
|
|
||||||
/* tools/freeze/makeconfig.py marker for additional "extern" */
|
/* tools/freeze/makeconfig.py marker for additional "extern" */
|
||||||
/* -- ADDMODULE MARKER 1 -- */
|
/* -- ADDMODULE MARKER 1 -- */
|
||||||
|
@ -147,6 +148,7 @@ struct _inittab _PyImport_Inittab[] = {
|
||||||
{"builtins", NULL},
|
{"builtins", NULL},
|
||||||
{"sys", NULL},
|
{"sys", NULL},
|
||||||
{"_warnings", _PyWarnings_Init},
|
{"_warnings", _PyWarnings_Init},
|
||||||
|
{"_string", PyInit__string},
|
||||||
|
|
||||||
{"_io", PyInit__io},
|
{"_io", PyInit__io},
|
||||||
{"_pickle", PyInit__pickle},
|
{"_pickle", PyInit__pickle},
|
||||||
|
|
Loading…
Reference in New Issue