Author: eric.smith
Date: Sat Sep  1 12:56:01 2007
New Revision: 57866

Modified:
   python/branches/py3k/Lib/test/test_builtin.py
   python/branches/py3k/Lib/test/test_unicode.py
   python/branches/py3k/Objects/stringlib/formatter.h
   python/branches/py3k/Objects/stringlib/stringdefs.h
   python/branches/py3k/Objects/stringlib/unicodedefs.h
   python/branches/py3k/Python/bltinmodule.c
Log:
Changed to use 'U' argument to PyArg_ParseTuple, instead of manually checking 
for unicode objects.

Modified: python/branches/py3k/Lib/test/test_builtin.py
==============================================================================
--- python/branches/py3k/Lib/test/test_builtin.py       (original)
+++ python/branches/py3k/Lib/test/test_builtin.py       Sat Sep  1 12:56:01 2007
@@ -525,10 +525,15 @@
                 return str(self.x) + format_spec
 
         # class that returns a bad type from __format__
-        class H:
+        class B:
             def __format__(self, format_spec):
                 return 1.0
 
+        # class that is derived from string, used
+        #  as a format spec
+        class C(str):
+            pass
+
         self.assertEqual(format(3, ''), '3')
         self.assertEqual(format(A(3), 'spec'), '3spec')
 
@@ -550,7 +555,10 @@
         empty_format_spec(None)
 
         # TypeError because self.__format__ returns the wrong type
-        self.assertRaises(TypeError, format, H(), "")
+        self.assertRaises(TypeError, format, B(), "")
+
+        # make sure we can take a subclass of str as a format spec
+        self.assertEqual(format(0, C('10')), '         0')
 
     def test_getattr(self):
         import sys

Modified: python/branches/py3k/Lib/test/test_unicode.py
==============================================================================
--- python/branches/py3k/Lib/test/test_unicode.py       (original)
+++ python/branches/py3k/Lib/test/test_unicode.py       Sat Sep  1 12:56:01 2007
@@ -581,9 +581,6 @@
         self.assertRaises(ValueError, format, "", "-")
         self.assertRaises(ValueError, "{0:=s}".format, '')
 
-        # check that __format__ returns a string
-        #self.assertRaises(TypeError, "{0}".format, H())
-
     def test_formatting(self):
         string_tests.MixinStrUnicodeUserStringTest.test_formatting(self)
         # Testing Unicode formatting strings...

Modified: python/branches/py3k/Objects/stringlib/formatter.h
==============================================================================
--- python/branches/py3k/Objects/stringlib/formatter.h  (original)
+++ python/branches/py3k/Objects/stringlib/formatter.h  Sat Sep  1 12:56:01 2007
@@ -768,12 +768,8 @@
     PyObject *result = NULL;
     InternalFormatSpec format;
 
-    if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
+    if (!PyArg_ParseTuple(args, STRINGLIB_PARSE_CODE ":__format__", 
&format_spec))
         goto done;
-    if (!STRINGLIB_CHECK(format_spec)) {
-        PyErr_SetString(PyExc_TypeError, STRINGLIB_TYPE_NAME " object 
required");
-        goto done;
-    }
 
     /* check for the special case of zero length format spec, make
        it equivalent to str(value) */
@@ -843,12 +839,8 @@
     PyObject *tmp = NULL;
     InternalFormatSpec format;
 
-    if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
-        goto done;
-    if (!STRINGLIB_CHECK(format_spec)) {
-        PyErr_SetString(PyExc_TypeError, STRINGLIB_TYPE_NAME " object 
required");
+    if (!PyArg_ParseTuple(args, STRINGLIB_PARSE_CODE ":__format__", 
&format_spec))
         goto done;
-    }
 
     /* check for the special case of zero length format spec, make
        it equivalent to str(value) */
@@ -917,12 +909,8 @@
     PyObject *tmp = NULL;
     InternalFormatSpec format;
 
-    if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
-        goto done;
-    if (!STRINGLIB_CHECK(format_spec)) {
-        PyErr_SetString(PyExc_TypeError, STRINGLIB_TYPE_NAME " object 
required");
+    if (!PyArg_ParseTuple(args, STRINGLIB_PARSE_CODE ":__format__", 
&format_spec))
         goto done;
-    }
 
     /* check for the special case of zero length format spec, make
        it equivalent to str(value) */

Modified: python/branches/py3k/Objects/stringlib/stringdefs.h
==============================================================================
--- python/branches/py3k/Objects/stringlib/stringdefs.h (original)
+++ python/branches/py3k/Objects/stringlib/stringdefs.h Sat Sep  1 12:56:01 2007
@@ -8,6 +8,7 @@
 
 #define STRINGLIB_CHAR           char
 #define STRINGLIB_TYPE_NAME      "string"
+#define STRINGLIB_PARSE_CODE     "S"
 #define STRINGLIB_EMPTY          string_empty
 #define STRINGLIB_ISDECIMAL(x)   ((x >= '0') && (x <= '9'))
 #define STRINGLIB_TODECIMAL(x)   (STRINGLIB_ISDECIMAL(x) ? (x - '0') : -1)

Modified: python/branches/py3k/Objects/stringlib/unicodedefs.h
==============================================================================
--- python/branches/py3k/Objects/stringlib/unicodedefs.h        (original)
+++ python/branches/py3k/Objects/stringlib/unicodedefs.h        Sat Sep  1 
12:56:01 2007
@@ -8,6 +8,7 @@
 
 #define STRINGLIB_CHAR           Py_UNICODE
 #define STRINGLIB_TYPE_NAME      "unicode"
+#define STRINGLIB_PARSE_CODE     "U"
 #define STRINGLIB_EMPTY          unicode_empty
 #define STRINGLIB_ISDECIMAL      Py_UNICODE_ISDECIMAL
 #define STRINGLIB_TODECIMAL      Py_UNICODE_TODECIMAL

Modified: python/branches/py3k/Python/bltinmodule.c
==============================================================================
--- python/branches/py3k/Python/bltinmodule.c   (original)
+++ python/branches/py3k/Python/bltinmodule.c   Sat Sep  1 12:56:01 2007
@@ -293,7 +293,7 @@
                         goto done;
         }
 
-        if (!PyArg_ParseTuple(args, "O|O:format", &value, &spec))
+        if (!PyArg_ParseTuple(args, "O|U:format", &value, &spec))
                goto done;
 
         /* initialize the default value */
_______________________________________________
Python-3000-checkins mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000-checkins

Reply via email to