zope: force module import by importing symbols
authorGregory Szorc <gregory.szorc@gmail.com>
Fri, 30 Mar 2018 13:39:06 -0700
changeset 37208 b9dd8403d8ff
parent 37207 d3f1d3e4e58d
child 37209 2208149c4b8e
zope: force module import by importing symbols Previously, we tried to import a module and handle the ImportError. Our lazy module importer doesn't verify the module exists and returns a dummy object representing the module. Only once we attempt to load a symbol in the module does the ImportError get raises. This means that simple imports inside `try..except ImportError` don't detect missing modules. This commit changes imports in zope.interface to access symbols, thus forcing module load and triggering ImportError. This fixes zope.interface for pure builds. Differential Revision: https://phab.mercurial-scm.org/D2980
mercurial/thirdparty/zope/interface/declarations.py
--- a/mercurial/thirdparty/zope/interface/declarations.py	Fri Mar 30 13:17:20 2018 -0700
+++ b/mercurial/thirdparty/zope/interface/declarations.py	Fri Mar 30 13:39:06 2018 -0700
@@ -640,12 +640,9 @@
 
 # Try to get C base:
 try:
-    from . import _zope_interface_coptimizations
+    from ._zope_interface_coptimizations import ClassProvidesBase
 except ImportError:
     pass
-else:
-    from ._zope_interface_coptimizations import ClassProvidesBase
-
 
 class ClassProvides(Declaration, ClassProvidesBase):
     """Special descriptor for class __provides__
@@ -917,15 +914,13 @@
 _empty = Declaration()
 
 try:
-    from . import _zope_interface_coptimizations
+    from ._zope_interface_coptimizations import (
+        getObjectSpecification,
+        implementedBy,
+        ObjectSpecificationDescriptor,
+        providedBy,
+    )
 except ImportError:
     pass
-else:
-    from ._zope_interface_coptimizations import implementedBy
-    from ._zope_interface_coptimizations import providedBy
-    from ._zope_interface_coptimizations import (
-        getObjectSpecification)
-    from ._zope_interface_coptimizations import (
-        ObjectSpecificationDescriptor)
 
 objectSpecificationDescriptor = ObjectSpecificationDescriptor()