# HG changeset patch # User Gregory Szorc # Date 1522442346 25200 # Node ID b9dd8403d8ff4b36847ce405c0db127ca64491a1 # Parent d3f1d3e4e58d1deb0583a428383efe648ed82ae0 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 diff -r d3f1d3e4e58d -r b9dd8403d8ff 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()