New submission from Julian Berman:

I find that the importlib documentation is a bit too low level. Import hooks 
are not that common, so requiring a bit of reading is OK with me, but I 
somewhat *understand* PEP 302, so I have a general idea of *what* I want to do 
and what kind of objects can accomplish that, and still find it hard to figure 
out how to take the pieces provided by importlib and use them to do what I want.

If I provide a specific example, I want to create a path hook that "just" does 
the usual import behavior, but before executing the module, does some 
transformation on the source code, say. In trying to figure out the best way to 
do that I had a hard time using the docs to figure out which pieces I should 
assemble to do that. I'm going to just describe the rough series of steps I 
went through, and hopefully that will help give a picture of where in the docs 
I had trouble.

`importlib.abc` has a few things that would appear to help. None of the things 
seem like an exact match, so immediately I'm confused -- after reading PEP 302 
I'd have expected to need to find an object to implement one or both of 
`get_code` or `get_source` on, or one that has that implemented that I can 
subclass and extend. The closest thing there that I find is PyPycLoader, which 
seems to be saying it implements the standard import behavior, but the docs say 
its deprecated and to use SourceLoader. At this point, after checking out 
`SourceLoader` and seeing that it has me implementing two methods whose purpose 
I don't quite understand, even after reading the short descriptions of them, at 
least not in the context of what I want to do, I begin to suspect that what I 
really want is to combine SourceLoader with some things from the `imp` module, 
or maybe `importlib.__import__`, but am left wondering again how much I need to 
implement before I just can use that. I then notice `importlib.
 util.module_for_loader`, and add that to the simple loader I've written which 
I'm still waiting to plug `imp` into, before realizing that that decorator eats 
the `fullname` attribute and *only* passes along the module, which confuses me, 
since now I don't know how to retrieve the source for the module object that 
I'm being passed -- so I save the path name in `__init__` for the class, and 
assume that's what I should be doing, despite not seeing an example doing that. 
Assuming that's even correct as-is, it took me quite a bit to put those pieces 
together.

So I apologize for rambling -- I think essentially what'd improve things is 
providing more examples, or perhaps a HOWTO entry, that targeted assembling the 
pieces provided in the module into a few clear, complete examples of finders, 
loaders and importers.

----------
assignee: docs@python
components: Documentation
messages: 169901
nosy: Julian, docs@python
priority: normal
severity: normal
status: open
title: It's hard to decypher how to build off of the provided objects from the 
importlib docs
versions: Python 3.3, Python 3.4

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue15867>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to