Hi Steffen Hoffmann,
Thanks for you reply. It gives me a starting pont.
I followed your suggestion. What I did is:

1. Create MyTicketChangeScriptCaller.py (chmod 755) in my <env>/plugins
folder. Below is its content:


> from subprocess import Popen
> from trac.core import *
> from trac.config  import Option
> from trac.ticket import ITicketChangeListener
> class TicketChangeScript(Component):
>      """ Calling a script file on ticket changes."""
>      implements(ITicketChangeListener)
>      script = Option('ticket_change_script', 'call', '',
> doc="/usr/local/bin/test.sh")
>      # ITicketChangeListener Interface
>     def ticket_created(self, ticket):
>          self._call(ticket, 'created')
>     def ticket_changed(self, ticket, comment, author, old_values):
>          self._call(ticket, 'modified')
> #    def ticket_deleted(self, ticket):
>  #        # Beware: We may not have all ticket properties here,
>  #        # just ticket number.
>  #        self._call(ticket, 'deleted')
>     def _call(self, tkt, tkt_change):
>          Popen([' '.join([script, tkt.id, tkt['summary'], tkt_change])],
> shell=True)


 2. Add these lines in my trac.ini file


> [ticket_change_script]
> call = /usr/local/bin/test.sh
>

3. Create a test shell script /usr/local/bin/test.sh (chmod 755), which
doesn't need a common arguments. Below is its content:


> #!/bin/sh
> tkt_id=$1
> tkt_summary=$2
> tkt_status=$3
> echo $tkt_id > /tmp/test
> echo $tkt_summary >> /tmp/test
> echo $tkt_status >> /tmp/test


For my understanding when I create/modify a ticket in Trac , I should
get something in /tmp/test file. But there is nothing, even the file
(/tmp/test) wasn't created.
What I missed from your explanation?

Thank you for your patience and help
On Sat, Sep 29, 2012 at 4:02 PM, Steffen Hoffmann <[email protected]> wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 29.09.2012 07:36, radelphe wrote:
> > Hi all,
> >
> > I'm new in Trac system, but I like it.
> >
> > I would like to call an external script when a ticket is created or
> > closed or reopened.
> > On that script I'd like to use ticket summary, status, and reporter
> > (maybe other field too) as arguments.
> > I searched on the archive, and I found this topic (snip)
>
> > Anyone can help me please?
>
> Well writing entire plugins is a bit over the top, even more as you seem
> to rely on ready-made solutions.
>
> In fact, the linked mailing-list thread contains plenty of valuable
> hints, and building the solution is merely copy-paste and combine the
> pieces. Look at the bare-bone ITicketChangeListener implementation
> written by Chris Heller:
>
>
> from trac.core import *
> from trac.ticket import ITicketChangeListener
>
> class TicketListenerPluginExample(Component):
>     """ The 'Hello World' of using the ITicketChangeListener interface
>     """
>
>     implements(ITicketChangeListener)
>
>     # ITicketChangeListener Interface
>
>     def ticket_created(self, ticket):
>         self.log.info('Ticket created: %r' % ticket)
>
>     def ticket_changed(self, ticket, comment, author, old_values):
>         self.log.info('Ticket modified: %r' % ticket)
>
>     def ticket_deleted(self, ticket):
>         self.log.info('Ticket deleted: %r' % ticket)
>
>
> Put this into a file, and save the file as
>  <env>/plugins/MyTicketChangeScriptCaller.py
> to get it recognized by Trac. It's that simple.
>
> Instead of logging you want to call out to a script. Fine, yoheeb's code
> is right above:
>
> Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
>
> Putting it all together:
>
>
> from subprocess import Popen
>
> from trac.core import *
> from trac.config  import Option
> from trac.ticket import ITicketChangeListener
>
> class TicketChangeScript(Component):
>     """ Calling a script file on ticket changes."""
>
>     implements(ITicketChangeListener)
>
>     script = Option('ticket_change_script', 'call', '',
>                     doc="File with path and common arguments")
>
>     # ITicketChangeListener Interface
>
>     def ticket_created(self, ticket):
>         self._call(ticket, 'created')
>
>     def ticket_changed(self, ticket, comment, author, old_values):
>         self._call(ticket, 'modified')
>
> #    def ticket_deleted(self, ticket):
> #        # Beware: We may not have all ticket properties here,
> #        # just ticket number.
> #        self._call(ticket, 'deleted')
>
>     def _call(self, tkt, tkt_change):
>         Popen([' '.join([script, tkt.id,
>                          tkt['summary'], tkt_change])],
>               shell=True)
>
>
> Additional pieces are
>  * additional option to read script from configruation instead of
> hard-coding into the plugin
>  * factor general call out into a private method to prevent code
> duplication
>  * signal Popen to use the shell, note some differences between Unix and
> Windows here: http://stackoverflow.com/questions/1253122
>  * extracting properties from Ticket object, that is given to each
> change listener in the ticket argument, see other available properties
> in the source: Ticket class in trac/ticket/model.py
>
> In your `trac.ini` create a new section:
>
>
> [ticket_change_script]
> call = /usr/local/bin/my_script.sh -my_common_args
>
>
> Your (BASH) script will get called effectively like so:
> $> /bin/sh /usr/local/bin/my_script.sh -my_common_args <ticket.id>
> <summary> <created|modified|deleted>
>
> This is completely untested, but I hope it's clearer now.?
>
> Steffen Hoffmann
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>
> iEYEARECAAYFAlBm8XQACgkQ31DJeiZFuHf60ACgqPcRtCZdr1gCEXkNKQbpt3wT
> k+IAnA9JC4LQjmSpsHS/H1oWfR03ylP5
> =M0Ke
> -----END PGP SIGNATURE-----
>
> --
> You received this message because you are subscribed to the Google Groups
> "Trac Users" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/trac-users?hl=en.
>
>
-- 
Adelphe Rafanambinana

-- 
You received this message because you are subscribed to the Google Groups "Trac 
Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/trac-users?hl=en.

Reply via email to