Here's my plan for implementing PEP 302 support (``__loader__`` sensitivity) for the above modules:
* Change all of the ``linecache`` API functions (except ``clearcache()``) to add an optional ``module_globals`` argument, which they will use to obtain the ``__name__`` and ``__loader__`` in the event that the given filename doesn't exist, but appears to be the source file for the given module. (That is, if the basename of the filename is consistent with the last part of the ``__name__`` in the module_globals, if ``sys.modules[__name__].__dict__ is module_globals``, and the ``__loader__`` (if any) in module_globals has a ``get_source()`` method.) * Change ``inspect.getsourcefile()`` to return the source path as long as the object's module has a ``__loader__`` with a ``get_source()`` method. This will ensure that other ``inspect`` functions will still try to load the source code for the object in question, even if it's in a zipfile or loaded by some other import mechanism. * Change ``inspect.findsource()`` to pass the target object's module globals as an extra argument to ``linecache.getlines()`` * Change the ``traceback`` module to supply frame globals to the ``linecache`` APIs it uses. * Change the ``site`` module to not "absolutize" ``__file__`` attributes of modules with ``__loader__`` attributes; ``__loader__`` objects are responsible for their own ``__file__`` values. (Actually, if this is desirable behavior, the builtin import machinery should be doing it, not site.py!) * Add an optional ``module_globals`` argument to ``warnings.warn_explicit()``, which will be passed through to ``linecache.getlines()`` if the warning is not ignored. (This will prime the line cache in case the warning is to be output.) * Change ``warnings.warn()`` to pass the appropriate globals to ``warn_explicit()``. * Change ``doctest.testfile()`` and ``DocTestSuite`` to use the target module's ``__loader__.get_data()`` method (if available) to load the given doctest file. * Change ``__patched_linecache_getlines()`` in ``doctest`` to accept an optional ``module_globals`` argument, to be passed through to the original ``getlines()`` function. I'm starting work on the above now. If I finish early enough today, I'll follow up with plans for fixing ``pydoc``, which requires slightly more extensive surgery, since it doesn't even support packages with multiple ``__path__`` entries yet, let alone PEP 302. Please let me know if you have any questions or concerns. _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com