summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTres Seaver <tseaver@palladion.com>2016-11-15 14:04:50 -0500
committerTres Seaver <tseaver@palladion.com>2016-11-15 14:04:50 -0500
commit53246e53624b0ed24cabbd6a819008e2bf1e6540 (patch)
tree5c1a6d91f5d0127af607a0f1deec58ca6e49820a
parent88c34a3ebb649ad19e5521df47cbc11c1374d2a9 (diff)
downloadzope-interface-60-fix_c_optimizations-py3k.tar.gz
Fix C optimizations broken on Py3k.60-fix_c_optimizations-py3k
- The bare import of '_zope_c_optimizations' prevented them from being used. - After enabling them via absolute imports, they would fail due to http://bugs.python.org/issue15657. Fixes #60.
-rw-r--r--CHANGES.rst4
-rw-r--r--src/zope/interface/_zope_interface_coptimizations.c9
-rw-r--r--src/zope/interface/adapter.py4
-rw-r--r--src/zope/interface/declarations.py16
-rw-r--r--src/zope/interface/interface.py6
5 files changed, 26 insertions, 13 deletions
diff --git a/CHANGES.rst b/CHANGES.rst
index 217afed..b4840ba 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,7 +4,9 @@ Changes
4.3.3 (unreleased)
------------------
-- Nothing changed yet.
+- Fix C optimizations broken on Py3k. See the Python bug at:
+ http://bugs.python.org/issue15657
+ (https://github.com/zopefoundation/zope.interface/issues/60)
4.3.2 (2016-09-05)
diff --git a/src/zope/interface/_zope_interface_coptimizations.c b/src/zope/interface/_zope_interface_coptimizations.c
index b2088ee..e7b9517 100644
--- a/src/zope/interface/_zope_interface_coptimizations.c
+++ b/src/zope/interface/_zope_interface_coptimizations.c
@@ -25,6 +25,15 @@
#define Py_TYPE(o) ((o)->ob_type)
#endif
+#if PY_MAJOR_VERSION >= 3
+#define PY3K
+#endif
+
+#ifdef PY3K
+/* See http://bugs.python.org/issue15657 */
+#define METH_KEYWORDS 0x0003
+#endif
+
static PyObject *str__dict__, *str__implemented__, *strextends;
static PyObject *BuiltinImplementationSpecifications, *str__provides__;
static PyObject *str__class__, *str__providedBy__;
diff --git a/src/zope/interface/adapter.py b/src/zope/interface/adapter.py
index 625b7be..64274b7 100644
--- a/src/zope/interface/adapter.py
+++ b/src/zope/interface/adapter.py
@@ -398,7 +398,7 @@ class LookupBaseFallback(object):
LookupBasePy = LookupBaseFallback # BBB
try:
- from _zope_interface_coptimizations import LookupBase
+ from zope.interface._zope_interface_coptimizations import LookupBase
except ImportError: #pragma NO COVER
LookupBase = LookupBaseFallback
@@ -434,7 +434,7 @@ class VerifyingBaseFallback(LookupBaseFallback):
VerifyingBasePy = VerifyingBaseFallback #BBB
try:
- from _zope_interface_coptimizations import VerifyingBase
+ from zope.interface._zope_interface_coptimizations import VerifyingBase
except ImportError: #pragma NO COVER
VerifyingBase = VerifyingBaseFallback
diff --git a/src/zope/interface/declarations.py b/src/zope/interface/declarations.py
index 48e459a..8ea56b9 100644
--- a/src/zope/interface/declarations.py
+++ b/src/zope/interface/declarations.py
@@ -640,11 +640,11 @@ ClassProvidesBase = ClassProvidesBaseFallback
# Try to get C base:
try:
- import _zope_interface_coptimizations
+ import zope.interface._zope_interface_coptimizations
except ImportError: #pragma NO COVERAGE
pass
else: #pragma NO COVERAGE
- from _zope_interface_coptimizations import ClassProvidesBase
+ from zope.interface._zope_interface_coptimizations import ClassProvidesBase
class ClassProvides(Declaration, ClassProvidesBase):
@@ -917,13 +917,15 @@ def _normalizeargs(sequence, output = None):
_empty = Declaration()
try:
- import _zope_interface_coptimizations
+ import zope.interface._zope_interface_coptimizations
except ImportError: #pragma NO COVER
pass
else: #pragma NO COVER PyPy
- from _zope_interface_coptimizations import implementedBy
- from _zope_interface_coptimizations import providedBy
- from _zope_interface_coptimizations import getObjectSpecification
- from _zope_interface_coptimizations import ObjectSpecificationDescriptor
+ from zope.interface._zope_interface_coptimizations import implementedBy
+ from zope.interface._zope_interface_coptimizations import providedBy
+ from zope.interface._zope_interface_coptimizations import (
+ getObjectSpecification)
+ from zope.interface._zope_interface_coptimizations import (
+ ObjectSpecificationDescriptor)
objectSpecificationDescriptor = ObjectSpecificationDescriptor()
diff --git a/src/zope/interface/interface.py b/src/zope/interface/interface.py
index e7eff5d..c7c3836 100644
--- a/src/zope/interface/interface.py
+++ b/src/zope/interface/interface.py
@@ -114,7 +114,7 @@ class SpecificationBasePy(object):
SpecificationBase = SpecificationBasePy
try:
- from _zope_interface_coptimizations import SpecificationBase
+ from zope.interface._zope_interface_coptimizations import SpecificationBase
except ImportError: #pragma NO COVER
pass
@@ -155,14 +155,14 @@ class InterfaceBasePy(object):
InterfaceBase = InterfaceBasePy
try:
- from _zope_interface_coptimizations import InterfaceBase
+ from zope.interface._zope_interface_coptimizations import InterfaceBase
except ImportError: #pragma NO COVER
pass
adapter_hooks = []
try:
- from _zope_interface_coptimizations import adapter_hooks
+ from zope.interface._zope_interface_coptimizations import adapter_hooks
except ImportError: #pragma NO COVER
pass