Edgewall Software

Ticket #3517: trac-cia.diff

File trac-cia.diff, 2.2 KB (added by wichert@…, 2 years ago)

Example of submitting messages to CIA from trac

  • trac/cia.py

     
     1import xmlrpclib 
     2 
     3class CIA: 
     4    def __init__(self, project, server="http://cia.navi.cx", module="Issue tracker"): 
     5        self.project=project 
     6        self.module=module 
     7        self.server=xmlrpclib.ServerProxy(server) 
     8 
     9 
     10    def message(self, ticket, author, message): 
     11        ticket=" #%s" % ticket 
     12        generator="<generator><name>CIA Trac plugin</name><version>0.1</version></generator>" 
     13        source="<source><project>%s</project><module>%s</module></source>" % \ 
     14                    (self.project, self.module) 
     15        body="<body><commit><revision>%s</revision><author>%s</author><log>%s</log></commit></body>" % \ 
     16                    (ticket, author, message) 
     17 
     18        return "<message>"+generator+source+body+"</message>" 
     19 
     20 
     21    def __call__(self, ticket, author, message): 
     22        body=self.message(ticket, author, message) 
     23        self.server.hub.deliver(body) 
     24 
     25 
  • trac/Notify.py

     
    2424import time 
    2525import smtplib 
    2626 
     27import cia 
    2728 
    2829class Notify: 
    2930    """Generic notification class for Trac. Subclass this to implement 
     
    8485            if email: 
    8586                self.email_map[username] = email 
    8687 
     88    def send_to_cia(self): 
     89        if not self.newticket: 
     90            return 
     91 
     92        project = self.config.get('notification', 'cia_project') 
     93        server = self.config.get('notification', 'cia_server') 
     94 
     95        if project is None or server is None: 
     96            return 
     97 
     98        c = cia.CIA(project=project, server=server) 
     99        c(self.ticket.id, self.hdf["ticket.reporter"], 
     100                "[%s] %s" % (self.hdf["ticket.component"], self.hdf["ticket.summary"])) 
     101 
     102 
    87103    def notify(self, resid, subject): 
    88104        self.subject = subject 
    89105 
     106        if self.config.getbool("notification", "send_to_cia"): 
     107            self.send_to_cia() 
     108 
    90109        if not self.config.getbool('notification', 'smtp_enabled'): 
    91110            return 
    92111        self.smtp_server = self.config.get('notification', 'smtp_server')