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
--- 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()