Patchwork D2980: zope: force module import by importing symbols

login
register
mail settings
Submitter phabricator
Date March 30, 2018, 8:53 p.m.
Message ID <differential-rev-PHID-DREV-ptshokryf4ki266tuklu-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/30020/
State Superseded
Headers show

Comments

phabricator - March 30, 2018, 8:53 p.m.
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  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.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D2980

AFFECTED FILES
  mercurial/thirdparty/zope/interface/declarations.py

CHANGE DETAILS




To: indygreg, #hg-reviewers
Cc: mercurial-devel

Patch

diff --git a/mercurial/thirdparty/zope/interface/declarations.py b/mercurial/thirdparty/zope/interface/declarations.py
--- a/mercurial/thirdparty/zope/interface/declarations.py
+++ b/mercurial/thirdparty/zope/interface/declarations.py
@@ -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()