[Python-checkins] cpython (3.3): Issue #17098: Be more stringent of setting __loader__ on early imported

Brett Cannon brett at python.org
Sun Feb 3 15:17:41 CET 2013


FYI, Raymond let me know that this is causing the buildbots to occasionally
fail thanks to xml.parsers.expat.errors somehow circumventing import. I'm
going to try and figure out what's going on.

On Fri, Feb 1, 2013 at 4:38 PM, brett.cannon <python-checkins at python.org>wrote:

> http://hg.python.org/cpython/rev/19ea454ccdf7
> changeset:   81884:19ea454ccdf7
> branch:      3.3
> parent:      81882:4a4688b865ff
> user:        Brett Cannon <brett at python.org>
> date:        Fri Feb 01 15:31:49 2013 -0500
> summary:
>   Issue #17098: Be more stringent of setting __loader__ on early imported
> modules. Also made test more rigorous.
>
> files:
>   Lib/importlib/_bootstrap.py         |    7 +-
>   Lib/test/test_importlib/test_api.py |    6 +
>   Python/importlib.h                  |  591 ++++++++-------
>   3 files changed, 310 insertions(+), 294 deletions(-)
>
>
> diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
> --- a/Lib/importlib/_bootstrap.py
> +++ b/Lib/importlib/_bootstrap.py
> @@ -1704,10 +1704,13 @@
>          BYTECODE_SUFFIXES = DEBUG_BYTECODE_SUFFIXES
>
>      module_type = type(sys)
> -    for module in sys.modules.values():
> +    for name, module in sys.modules.items():
>          if isinstance(module, module_type):
>              if not hasattr(module, '__loader__'):
> -                module.__loader__ = BuiltinImporter
> +                if name in sys.builtin_module_names:
> +                    module.__loader__ = BuiltinImporter
> +                elif _imp.is_frozen(name):
> +                    module.__loader__ = FrozenImporter
>
>      self_module = sys.modules[__name__]
>      for builtin_name in ('_io', '_warnings', 'builtins', 'marshal'):
> diff --git a/Lib/test/test_importlib/test_api.py
> b/Lib/test/test_importlib/test_api.py
> --- a/Lib/test/test_importlib/test_api.py
> +++ b/Lib/test/test_importlib/test_api.py
> @@ -184,6 +184,12 @@
>              if isinstance(module, types.ModuleType):
>                  self.assertTrue(hasattr(module, '__loader__'),
>                          '{!r} lacks a __loader__ attribute'.format(name))
> +                if name in sys.builtin_module_names:
> +                    self.assertEqual(importlib.machinery.BuiltinImporter,
> +                                     module.__loader__)
> +                elif imp.is_frozen(name):
> +                    self.assertEqual(importlib.machinery.FrozenImporter,
> +                                     module.__loader__)
>
>  def test_main():
>      from test.support import run_unittest
> diff --git a/Python/importlib.h b/Python/importlib.h
> --- a/Python/importlib.h
> +++ b/Python/importlib.h
> [stripped]
>
> --
> Repository URL: http://hg.python.org/cpython
>
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-checkins/attachments/20130203/9c8e9283/attachment-0001.html>


More information about the Python-checkins mailing list