Twisted components system in 2.0
Twisted code's own use of the twisted.python.components
package has been updated to use Zope Interfaces in
the 2.0 release.
New code developed starting with the 2.0 release of Twisted Core should use Zope Interfaces directly rather than using the twisted.python.components package.
FAQ
Why did Twisted switch to Zope Interfaces?
The twisted.python.components package is a large amount of on-going maintenance. Using the Zope Interface package also provides a greater level of compatibility between Twisted interfaces and Zope interfaces.
Why did Twisted switch to Zope Interfaces rather than PyProtocols?
The Zope Interface package was chosen over PyProtocols because of its greater conceptual similarity to twisted.python.components.
Will this affect my deployment?
No. Releases of Twisted Core will include Zope Interfaces.
How can I update my own code?
Classes written using twisted.python.components declare which interfaces they implement in this style:
class C:
__implements__ = IFoo,
This should be changed to:
class C:
zope.interface.implements(IFoo)
What about third party classes dependant on the old style of implements declarations?
Use backwardsCompatImplements
to fix this.
twisted.python.components.backwardsCompatImplements(C)
What about using third party classes?
If you are using third party libraries that only declare __implements__, these
objects should be made compatible with fixClassImplements
:
# import o where o is some third party library
from thirdparty.lib import o
twisted.python.components.fixClassImplements(o.__class__)
This will make sure that __implements__ declarations get converted to the new style of implements declarations.
Acknowledgements
This document is the work of Jason A. Mobarak, with contributions from Mary Gardiner.