[Twisted-Python] Flow: better synchronous exceptions [patch]
Glyph Lefkowitz
glyph at twistedmatrix.com
Tue Jun 24 00:30:22 MDT 2003
On Tuesday, June 24, 2003, at 12:42 AM, Clark C. Evans wrote:
> 7. Most importantly (for me), due to the redundancy of flow/flow.py
> I'd like to ask glyph if a limited form of __init__.py import
> could be used in the case of a module/module.py mechansim so
> that the public objects in module.py could be imported into the
> module itself. ie, in flow/__init__.py having:
This is a general problem that needs to be solved within Twisted.
Packages should be able to specify public interfaces which you can
import directly, such as
from twisted.internet import Application
from twisted.web import Resource
from twisted.cred import IRealm
These interfaces are generally much smaller than the total of the
classes in all the modules, and specifying things this way would make
documentation simpler and allow us to change implementations and
provide backwards compatibility in a much nicer way.
The problem is that the Python import system does not give us the right
kind of hooks to provide this without importing things in advance or
giving a performance hit to objects imported this way (making them
getattr wrappers), as far as I can tell; while you can patch
__import__, you can't catch the *first* import mid-way, so if someone
starts a program with
from twisted.internet import Application
you could not patch __import__ in twisted/__init__.py because it is not
called recursively.
I am not opposed to evil in order to make this work, but I am very
opposed to _fragile_ evil; something as basic as the import system
should not be prone to surprising behavior and subtle misconfiguration.
So, I am opposed to flow implementing its own ad-hoc name promotion
until we can come up with a standardizeable way to promote names to the
package level, but I would very much like to figure out how to promote
names in a generic way.
More information about the Twisted-Python
mailing list