<br><br><div class="gmail_quote">On Mon, Jul 20, 2009 at 05:22, Nick Coghlan <span dir="ltr">&lt;<a href="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div><div></div><div class="h5">brett.cannon wrote:<br>
&gt; Author: brett.cannon<br>
&gt; Date: Mon Jul 20 06:23:48 2009<br>
&gt; New Revision: 74110<br>
&gt;<br>
&gt; Log:<br>
&gt; Implement the PEP 302 protocol for get_filename() as<br>
&gt; importlib.abc.ExecutionLoader. PyLoader now inherits from this ABC instead of<br>
&gt; InspectLoader directly. Both PyLoader and PyPycLoader provide concrete<br>
&gt; implementations of get_filename in terms of source_path and bytecode_path.<br>
&gt;<br>
&gt;<br>
&gt; Modified:<br>
&gt;    python/branches/py3k/Doc/library/importlib.rst<br>
&gt;    python/branches/py3k/Lib/importlib/_bootstrap.py<br>
&gt;    python/branches/py3k/Lib/importlib/abc.py<br>
&gt;    python/branches/py3k/Lib/importlib/test/source/test_abc_loader.py<br>
&gt;    python/branches/py3k/Lib/importlib/test/test_abc.py<br>
&gt;    python/branches/py3k/Misc/NEWS<br>
&gt;<br>
&gt; Modified: python/branches/py3k/Doc/library/importlib.rst<br>
&gt; ==============================================================================<br>
&gt; --- python/branches/py3k/Doc/library/importlib.rst    (original)<br>
&gt; +++ python/branches/py3k/Doc/library/importlib.rst    Mon Jul 20 06:23:48 2009<br>
&gt; @@ -202,10 +202,24 @@<br>
&gt;          :term:`loader` cannot find the module.<br>
&gt;<br>
&gt;<br>
&gt; +.. class:: ExecutionLoader<br>
&gt; +<br>
&gt; +    An abstract base class which inherits from :class:`InspectLoader` that,<br>
&gt; +    when implemented, allows a module to be executed as a script. The ABC<br>
&gt; +    represents an optional :pep:`302` protocol.<br>
&gt; +<br>
&gt; +    .. method:: get_filename(fullname)<br>
&gt; +<br>
&gt; +        An abstract method that is to return the value for :attr:`__file__` for<br>
&gt; +        the specified module. If no path is available, :exc:`ImportError` is<br>
&gt; +        raised.<br>
<br>
</div></div>This isn&#39;t quite accurate:<br>
<br>
1. Modules that come from a loader without get_filename() can still be<br>
executed via the runpy module. They will just have __file__ set to None<br>
instead of the value that would have been set by load_module() (and if<br>
they were executed with -m then sys.argv[0] will be wrong as well).<br>
</blockquote><div><br></div><div>Changed it to say it helps.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br>
2. There&#39;s an additional restriction on get_filename(): it isn&#39;t allowed<br>
to load the module (otherwise there is no point to the method - if<br>
loading the module was acceptable, then runpy could just do that and<br>
inspect __file__ itself as a fallback when the loader didn&#39;t provide<br>
get_filename()).</blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br>
I have a feeling that I didn&#39;t mention point 2 explicitly when I<br>
documented get_filename() in PEP 302 though.<br>
</blockquote><div><br></div><div>Nope, it isn&#39;t in the docs, but I believe it is implied for all the protocols from PEP 302 short of load_module.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<br>
Regards,<br>
Nick.<br>
<font color="#888888"><br>
--<br>
Nick Coghlan   |   <a href="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</a>   |   Brisbane, Australia<br>
---------------------------------------------------------------<br>
</font><div><div></div><div class="h5">_______________________________________________<br>
Python-checkins mailing list<br>
<a href="mailto:Python-checkins@python.org">Python-checkins@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/python-checkins" target="_blank">http://mail.python.org/mailman/listinfo/python-checkins</a><br>
</div></div></blockquote></div><br>