Version 6 (modified by anonymous, 10 years ago) (diff)

removed unnecessary line break

SEAT plugin: SEarch wiki and ticket ATtachments

Notice: This plugin is unmaintained and available for adoption.


This plugin allows text integral search in wiki and ticket attachments (.pdf, .doc,.ppt,...). The SEAT plugin has the following features:

  • new Attachments source to the search page
  • an excerpt of the matching documents is presented in the result page
  • any format is supported as long as there is a command line tool for plain text conversion (filter command)

Bugs/Feature Requests

Existing bugs and feature requests for SearchAttachmentsPlugin are here.

If you have any issues, create a new ticket.


Download the zipped source from [download:searchattachmentsplugin here].


You can check out SearchAttachmentsPlugin from here using Subversion, or browse the source with Trac.

How to install?

  • Install the plugin
        python bdist_egg
        cp dist/TracSearchAttachmentsPlugin-0.1-py2.4.egg /path/to/your/env/plugins/
  • Trac 10.x and 11.x source code must be manually modified for SEAT plugin to work. The file to modify is, on a Linux Fedora system, it is located in /usr/lib/python2.4/site-packages/trac
162     def insert(self, filename, fileobj, size, t=None, db=None):
184         try:
185             # Note: `path` is an unicode string because `self.path` was one.
186             # As it contains only quoted chars and numbers, we can use `ascii`
187             basename = os.path.basename(path).encode('ascii')
188             filename = unicode_unquote(basename)
190             cursor = db.cursor()
191             cursor.execute("INSERT INTO attachment "
192                            "VALUES (%s,%s,%s,%s,%s,%s,%s,%s)",
193                            (self.parent_type, self.parent_id, filename,
194                             self.size, self.time, self.description,,
195                             self.ipnr))
196             shutil.copyfileobj(fileobj, targetfile)
197             self.filename = filename
199   'New attachment: %s by %s', self.title,
202             if handle_ta:
203                 db.commit()
205             targetfile.close() # << Line to add for SEAT plugin
207             for listener in AttachmentModule(self.env).change_listeners:
208                 listener.attachment_added(self)
209         finally:
210             targetfile.close()

  • Use the trac-seat utility to index existing attachments:
        cp YOUR_SOURCE_DIR/searchattachmentsplugin/0.10/trac-seat /path/to/your/env/index
        cd /path/to/your/env/index
        chmod +x trac-seat
        ./trac-seat /path/to/your/env meta
        ./trac-seat /path/to/your/env index -c
        cd ..
        chown -R apache:apache /path/to.your/env/index
  • Configure trac.ini
       searchattachments.* = enabled
       # This is the path to the swish-e command on your system
       swish = /usr/local/bin/swish-e
       seat  = /path/to/your/env/trac-seat
       # The first %s is the absolute path of the input file.
       # The second %s is the absolute path of the text file generated by the command.
       filter.doc = /usr/local/bin/catdoc -b "%s" > "%s"
       filter.ppt = /usr/local/bin/catppt "%s" > "%s"
       filter.pdf = /usr/bin/pdftotext "%s" "%s"

There is no need to declare a filter command for .txt or .text. Text files are handled natively. To index a new non-text format, just add a filter.* entry using the appropriate command line tool for this format.

   filter.EXTENSION = path_to_EXTENSION_to_text_command -infile "%s" -outfile "%s"
  • restart the trac server

Recent Changes

15177 by rjollos on 2016-01-26 18:12:25
0.2dev: Fix indentation using
14892 by rjollos on 2015-08-28 00:22:07
Convert to datetime. Untested patch by srl100@…. Fixes #4930.
14470 by rjollos on 2015-02-27 21:50:21
Branching for Trac 1.0.


Author: deltroo