Re: PEP 420 issue: extend_path

"Eric V. Smith" <[email protected]>
Newsgroups gmane.comp.python.import
Message-ID <[email protected]>
On 05/07/2012 11:00 AM, Antoine Pitrou wrote:
> On Mon, 07 May 2012 09:01:07 -0400
> "Eric V. Smith" <[email protected]> wrote:
>> On 05/07/2012 06:53 AM, Antoine Pitrou wrote:
>>> On Mon, 07 May 2012 10:38:15 +0200
>>> "Martin v. Löwis" <[email protected]> wrote:
>>>>
>>>> Interestingly, it appears that pkg_util will break under PEP 420, 
>>>> anyway, as it currently does (in _handle_ns)
>>>>
>>>>      loader = importer.find_module(packageName)
>>>>      if loader is None:
>>>>          return None
>>>> ...
>>>>          loader.load_module(packageName); module.__path__ = path
>>>>
>>>> Now, if loader suddenly becomes a string, than the load_module
>>>> call will raise an attribute error (untested).
>>>
>>> I think find_module() returning a string is a kludge. It would be
>>> better IMO if it returned a dedicated object clearly pointing out that
>>> a namespace package was potentially found (and also allowing to record
>>> other potential metadata).
>>
>> Well the original goal was to allow existing finders to be called
>> without modification. Are you saying we always return a dedicated object
>> (thus breaking existing finders)?
> 
> Why would it break existing finders? finder_module() would either return
> a loader, or a dedicated object (or None).

If we introduce a new type that all find_module() functions must return
in all cases, it would break existing finders. This object would have a
flag (or some other value) that says either "I returned a loader" or "I
returned a namespace package path". That's how I originally read your
message, but I guess that's not what you're saying.

If we return this new object instead of what PEP 420 currently defines
as a string, then I agree there won't be any impact on existing finders.
Just as there won't be an impact if we define it as a string instead of
some new object.

> Returning a string is completely non-obvious to the caller (who may not
> know about namespace packages or their precise implementation in PEP
> 420).

Well, if you don't know about namespace packages you won't be returning
a string. So I don't see a problem there.

But I agree there's some little part of me that says "why should
namespace packages get to grab string as a return type for
find_module(), when maybe there will be some other use for strings in
the future".

For me, it comes down to future-proofing the API versus the hassle of
defining some new class just to support a use case that may never happen.

Eric.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.