[pypy-commit] pypy py3k-update: hg merge default

rlamy pypy.commits at gmail.com
Thu Apr 28 12:40:05 EDT 2016


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: py3k-update
Changeset: r84015:d9916a3b8cf3
Date: 2016-04-28 17:38 +0100
http://bitbucket.org/pypy/pypy/changeset/d9916a3b8cf3/

Log:	hg merge default

diff --git a/TODO b/TODO
--- a/TODO
+++ b/TODO
@@ -1,3 +1,2 @@
-* python setup.py install in numpy does not somehow tell setuptools
-  it's installed (I bet it's about the py27 tag)
 * reduce size of generated c code from slot definitions in slotdefs.
+* remove broken DEBUG_REFCOUNT from pyobject.py
diff --git a/lib-python/2.7/distutils/cmd.py b/lib-python/2.7/distutils/cmd.py
--- a/lib-python/2.7/distutils/cmd.py
+++ b/lib-python/2.7/distutils/cmd.py
@@ -298,8 +298,16 @@
         src_cmd_obj.ensure_finalized()
         for (src_option, dst_option) in option_pairs:
             if getattr(self, dst_option) is None:
-                setattr(self, dst_option,
-                        getattr(src_cmd_obj, src_option))
+                try:
+                    setattr(self, dst_option,
+                            getattr(src_cmd_obj, src_option))
+                except AttributeError:
+                    # This was added after problems with setuptools 18.4.
+                    # It seems that setuptools 20.9 fixes the problem.
+                    # But e.g. on Ubuntu 14.04 with /usr/bin/virtualenv
+                    # if I say "virtualenv -p pypy venv-pypy" then it
+                    # just installs setuptools 18.4 from some cache...
+                    pass
 
 
     def get_finalized_command(self, command, create=1):
diff --git a/pypy/module/cpyext/cdatetime.py b/pypy/module/cpyext/cdatetime.py
--- a/pypy/module/cpyext/cdatetime.py
+++ b/pypy/module/cpyext/cdatetime.py
@@ -15,6 +15,7 @@
      ('DateTimeType', PyTypeObjectPtr),
      ('TimeType', PyTypeObjectPtr),
      ('DeltaType', PyTypeObjectPtr),
+     ('TZInfoType', PyTypeObjectPtr),
      ))
 
 @cpython_api([], lltype.Ptr(PyDateTime_CAPI))
@@ -40,6 +41,10 @@
     datetimeAPI.c_DeltaType = rffi.cast(
         PyTypeObjectPtr, make_ref(space, w_type))
 
+    w_type = space.getattr(w_datetime, space.wrap("tzinfo"))
+    datetimeAPI.c_TZInfoType = rffi.cast(
+        PyTypeObjectPtr, make_ref(space, w_type))
+
     return datetimeAPI
 
 PyDateTime_DateStruct = lltype.ForwardReference()
@@ -87,6 +92,7 @@
 make_check_function("PyDate_Check", "date")
 make_check_function("PyTime_Check", "time")
 make_check_function("PyDelta_Check", "timedelta")
+make_check_function("PyTZInfo_Check", "tzinfo")
 
 # Constructors
 
diff --git a/pypy/module/cpyext/include/datetime.h b/pypy/module/cpyext/include/datetime.h
--- a/pypy/module/cpyext/include/datetime.h
+++ b/pypy/module/cpyext/include/datetime.h
@@ -11,6 +11,7 @@
     PyTypeObject *DateTimeType;
     PyTypeObject *TimeType;
     PyTypeObject *DeltaType;
+    PyTypeObject *TZInfoType;
 } PyDateTime_CAPI;
 
 PyAPI_DATA(PyDateTime_CAPI*) PyDateTimeAPI;
@@ -36,6 +37,10 @@
     PyObject_HEAD
 } PyDateTime_DateTime;
 
+typedef struct {
+    PyObject_HEAD
+} PyDateTime_TZInfo;
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/pypy/module/cpyext/test/test_cpyext.py b/pypy/module/cpyext/test/test_cpyext.py
--- a/pypy/module/cpyext/test/test_cpyext.py
+++ b/pypy/module/cpyext/test/test_cpyext.py
@@ -256,11 +256,15 @@
 class AppTestCpythonExtensionBase(LeakCheckingTest):
 
     def setup_class(cls):
-        cls.space.getbuiltinmodule("cpyext")
+        space = cls.space
+        space.getbuiltinmodule("cpyext")
+        # 'import os' to warm up reference counts
+        w_import = space.builtin.getdictvalue(space, '__import__')
+        space.call_function(w_import, space.wrap("os"))
         #state = cls.space.fromcache(RefcountState) ZZZ
         #state.non_heaptypes_w[:] = []
         if not cls.runappdirect:
-            cls.w_runappdirect = cls.space.wrap(cls.runappdirect)
+            cls.w_runappdirect = space.wrap(cls.runappdirect)
 
     def setup_method(self, func):
         @gateway.unwrap_spec(name=str)
diff --git a/pypy/module/cpyext/test/test_datetime.py b/pypy/module/cpyext/test/test_datetime.py
--- a/pypy/module/cpyext/test/test_datetime.py
+++ b/pypy/module/cpyext/test/test_datetime.py
@@ -72,6 +72,16 @@
         date = datetime.datetime.fromtimestamp(0)
         assert space.unwrap(space.str(w_date)) == str(date)
 
+    def test_tzinfo(self, space, api):
+        w_tzinfo = space.appexec(
+            [], """():
+            from datetime import tzinfo
+            return tzinfo()
+        """)
+        assert api.PyTZInfo_Check(w_tzinfo)
+        assert api.PyTZInfo_CheckExact(w_tzinfo)
+        assert not api.PyTZInfo_Check(space.w_None)
+
 class AppTestDatetime(AppTestCpythonExtensionBase):
     def test_CAPI(self):
         module = self.import_extension('foo', [
@@ -82,11 +92,12 @@
                      PyErr_SetString(PyExc_RuntimeError, "No PyDateTimeAPI");
                      return NULL;
                  }
-                 return PyTuple_Pack(4,
+                 return PyTuple_Pack(5,
                                      PyDateTimeAPI->DateType,
                                      PyDateTimeAPI->DateTimeType,
                                      PyDateTimeAPI->TimeType,
-                                     PyDateTimeAPI->DeltaType);
+                                     PyDateTimeAPI->DeltaType,
+                                     PyDateTimeAPI->TZInfoType);
              """),
             ("clear_types", "METH_NOARGS",
              """
@@ -94,6 +105,7 @@
                  Py_DECREF(PyDateTimeAPI->DateTimeType);
                  Py_DECREF(PyDateTimeAPI->TimeType);
                  Py_DECREF(PyDateTimeAPI->DeltaType);
+                 Py_DECREF(PyDateTimeAPI->TZInfoType);
                  Py_RETURN_NONE;
              """
              )
@@ -102,5 +114,6 @@
         assert module.get_types() == (datetime.date,
                                       datetime.datetime,
                                       datetime.time,
-                                      datetime.timedelta)
+                                      datetime.timedelta,
+                                      datetime.tzinfo)
         module.clear_types()
diff --git a/pypy/module/operator/app_operator.py b/pypy/module/operator/app_operator.py
--- a/pypy/module/operator/app_operator.py
+++ b/pypy/module/operator/app_operator.py
@@ -5,7 +5,6 @@
 equivalent to x+y.
 '''
 
-import types
 
 
 def countOf(a,b):
diff --git a/pypy/module/operator/test/test_operator.py b/pypy/module/operator/test/test_operator.py
--- a/pypy/module/operator/test/test_operator.py
+++ b/pypy/module/operator/test/test_operator.py
@@ -32,7 +32,8 @@
         a.z = 'Z'
 
         assert operator.attrgetter('x','z','y')(a) == ('X', 'Z', 'Y')
-        raises(TypeError, operator.attrgetter, ('x', (), 'y'))
+        e = raises(TypeError, operator.attrgetter, ('x', (), 'y'))
+        assert str(e.value) == "attribute name must be a string, not 'tuple'"
 
         data = list(map(str, range(20)))
         assert operator.itemgetter(2,10,5)(data) == ('2', '10', '5')


More information about the pypy-commit mailing list