[Twisted-Python] twisted.plugin question

Terry Jones terry at jon.es
Thu Jun 15 11:09:26 EDT 2006

Is the Twisted plugin system described here


still supported / functional?

I tried implementing the example on that page and couldn't make it
work.  Below is my simplified code from that example, in two files.

BTW, the code on that page in the section Extending an Existing Program is
missing a 'from zope.interface import implements'. Also, the assumption
that code is in a file called imatsim.py, and the curious 'from matsim
import imatsim' could be explained. I guess the later is just a harmless


# -------------------
# Begin plugin.py:
import sys
from zope.interface import Interface
from twisted.plugin import getPlugins

sys.path[:0] = ['./twisted/plugins']

class IMaterial(Interface):
    def yieldStress(temperature):
        """ """
def displayMaterial(m):
    print 'A material with yield stress %s at 500 K' % (m.yieldStress(500),)

def displayAllKnownMaterials():
    for material in getPlugins(IMaterial):

if __name__ == '__main__':
# End plugin.py:

# -------------------
# Begin ./twisted/plugins/materials.py:
from twisted.plugin import IPlugin
from plugin import IMaterial
from zope.interface import implements

class SimpleMaterial(object):
    implements(IPlugin, IMaterial)

    def __init__(self, yieldStressFactor):
        self._yieldStressFactor = yieldStressFactor

    def yieldStress(self, temperature):
        return self._yieldStressFactory * temperature

steelPlate = SimpleMaterial(2)
brassPlate = SimpleMaterial(1)
# End ./twisted/plugins/materials.py:

When I run plugin.py, I get the error:

$ python plugin.py
Traceback (most recent call last):
  File "plugin.py", line 18, in ?
  File "plugin.py", line 14, in displayAllKnownMaterials
    for material in getPlugins(IMaterial):
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/twisted/plugin.py", line 210, in getPlugins
    allDropins = getCache(package)
  File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/twisted/plugin.py", line 176, in getCache
    newCacheData = pickle.dumps(cache, 2)
cPickle.PicklingError: Can't pickle <InterfaceClass plugin.IMaterial>: attribute lookup plugin.IMaterial failed

More information about the Twisted-Python mailing list