[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