#9418: first step of moving private string methods to _string module.

This commit is contained in:
Georg Brandl 2010-10-14 07:04:07 +00:00
parent 268e4d4cf3
commit 66c221e993
6 changed files with 47 additions and 8 deletions

View File

@ -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)

View File

@ -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

View File

@ -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}
}; };

View File

@ -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;

View File

@ -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

View File

@ -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},