Skip to content

Instantly share code, notes, and snippets.

@damnit
Created August 26, 2014 08:45
Show Gist options
  • Select an option

  • Save damnit/2c738260a1d3cceaf4eb to your computer and use it in GitHub Desktop.

Select an option

Save damnit/2c738260a1d3cceaf4eb to your computer and use it in GitHub Desktop.
this is about how trac works
from __future__ import print_function
from trac.core import Component, ComponentManager, Interface, ExtensionPoint, implements
class IMessageObserver(Interface):
def message_received(message):
""" called when message is received. """
class MessageSender(Component):
""" component that sends messages. """
observers = ExtensionPoint(IMessageObserver)
def __init__(self):
super(MessageSender, self).__init__()
def send_message(self, message):
for observer in self.observers:
observer.message_received(message)
class MessagePrinter(Component):
""" component that prints messages. """
implements(IMessageObserver)
def __init__(self):
super(MessagePrinter, self).__init__()
def message_received(self, message):
print("MessageObserver: %s" % message)
class MessageYeller(Component):
""" component that prints messages. """
implements(IMessageObserver)
def __init__(self):
super(MessageYeller, self).__init__()
def message_received(self, message):
print("MessageYeller: %s" % message.upper())
if __name__ == "__main__":
c = ComponentManager()
MessageSender(c)
MessagePrinter(c)
MessageYeller(c)
sender = c.components.get(MessageSender)
sender.send_message("printed message")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment