__init__.py
84 lines
| 2.5 KiB
| text/x-python
|
PythonLexer
/ hgdemandimport / __init__.py
|
r32420 | # hgdemandimport - global demand-loading of modules for Mercurial | ||
# | ||||
# Copyright 2017 Facebook Inc. | ||||
# | ||||
# This software may be used and distributed according to the terms of the | ||||
# GNU General Public License version 2 or any later version. | ||||
'''demandimport - automatic demand-loading of modules''' | ||||
# This is in a separate package from mercurial because in Python 3, | ||||
# demand loading is per-package. Keeping demandimport in the mercurial package | ||||
# would disable demand loading for any modules in mercurial. | ||||
from __future__ import absolute_import | ||||
|
r33861 | import os | ||
|
r32422 | import sys | ||
|
r32423 | if sys.version_info[0] >= 3: | ||
from . import demandimportpy3 as demandimport | ||||
else: | ||||
from . import demandimportpy2 as demandimport | ||||
|
r32420 | |||
|
r37862 | # Full module names which can't be lazy imported. | ||
# Extensions can add to this set. | ||||
IGNORES = { | ||||
|
r32422 | '__future__', | ||
'_hashlib', | ||||
# ImportError during pkg_resources/__init__.py:fixup_namespace_package | ||||
'_imp', | ||||
'_xmlplus', | ||||
'fcntl', | ||||
|
r43346 | 'nt', # pathlib2 tests the existence of built-in 'nt' module | ||
|
r32422 | 'win32com.gen_py', | ||
|
r43346 | 'win32com.shell', # 'appdirs' tries to import win32com.shell | ||
'_winreg', # 2.7 mimetypes needs immediate ImportError | ||||
|
r32422 | 'pythoncom', | ||
# imported by tarfile, not available under Windows | ||||
'pwd', | ||||
'grp', | ||||
# imported by profile, itself imported by hotshot.stats, | ||||
# not available under Windows | ||||
'resource', | ||||
# this trips up many extension authors | ||||
'gtk', | ||||
# setuptools' pkg_resources.py expects "from __main__ import x" to | ||||
# raise ImportError if x not defined | ||||
'__main__', | ||||
|
r46006 | '_ast', # https://bugs.python.org/issue41631 | ||
|
r43346 | '_ssl', # conditional imports in the stdlib, issue1964 | ||
'_sre', # issue4920 | ||||
|
r32422 | 'rfc822', | ||
'mimetools', | ||||
|
r43346 | 'sqlalchemy.events', # has import-time side effects (issue5085) | ||
|
r46179 | 'sqlalchemy.dialects', # similar problems as above | ||
|
r32422 | # setuptools 8 expects this module to explode early when not on windows | ||
'distutils.msvc9compiler', | ||||
'__builtin__', | ||||
'builtins', | ||||
|
r43346 | 'urwid.command_map', # for pudb | ||
|
r45600 | 'lzma', | ||
|
r37862 | } | ||
|
r32422 | |||
_pypy = '__pypy__' in sys.builtin_module_names | ||||
if _pypy: | ||||
|
r37862 | # _ctypes.pointer is shadowed by "from ... import pointer" (PyPy 5) | ||
IGNORES.add('_ctypes.pointer') | ||||
|
r32422 | |||
|
r37862 | demandimport.init(IGNORES) | ||
|
r32422 | |||
|
r32420 | # Re-export. | ||
isenabled = demandimport.isenabled | ||||
disable = demandimport.disable | ||||
deactivated = demandimport.deactivated | ||||
|
r33861 | |||
|
r43346 | |||
|
r33861 | def enable(): | ||
|
r33862 | # chg pre-imports modules so do not enable demandimport for it | ||
|
r43346 | if ( | ||
'CHGINTERNALMARK' not in os.environ | ||||
and os.environ.get('HGDEMANDIMPORT') != 'disable' | ||||
): | ||||
|
r33861 | demandimport.enable() | ||