Roundup is an open-sourceissue or bug tracking system featuring a command-line, web and e-mail interface. It is written in Python and designed to be highly customizable. Roundup was designed by Ka-Ping Yee for the Software Carpentry project and was developed from 2001-2016 under the direction of Richard Jones. Since then it has been developed by the Roundup community. It is currently the issue tracker for the Python programming language itself. It was once described as "like Bugzilla without the six years of training, or RT without that tedious MySQL rubbish."
Features
The standard configuration of Roundup features:
a web interface for viewing, editing and searching issues
a Mail gateway allowing creation and changing of issues
issue-specific "nosy lists", used for e-mail notifications and conversation
an authorization system, based on roles, classes and objects
an interactive shell for backup and restore tasks and for manipulation of objects
Roundup supports several web backends. It can be run standalone, as a background daemon process, as a CGI script or as WSGI application.
Concepts
Roundup is customized by changing the contents of the tracker instance directory:
Database schema
The database schema is defined in a Python file in the tracker instance's root directory; it is re-read whenever the server is started anew. When changes are found, the tables of the underlying RDBS are altered accordingly.
Page templates
Roundup uses the Template Attribute Language to create HTML or XHTML output. Version 1.5.0 adds experimental support for alternative template engines, such as Jinja2. Templates are named after the classes in database. Roundup automatically chooses template based on class name requested from URL. Some templates are used for several classes, e.g. _generic.index.html, which allows users to change the objects of all classes which lack an own index template. When an "issue123" is requested, this designator is split in the issue class and the id "123". By default an "item" template is chosen: First, an issue.item.html template file is looked for; if it can't be found, _generic.item.html is used as a fallback option. If this is missing equally, an error occurs.
Detectors
Many Roundup functions, including some of the standard functionality, are implemented using so-called detectors, which are located in the "detectors" sub-directory of the tracker instance. They are Python subroutines which have access to the object to change and the requested attribute changes. Detectors are distinguished between auditors and reactors. Auditors are used primarily for several automatic changes, and to refuse un-allowed changes; reactors are executed thereafter and used e.g. for the e-mail notification feature, sending notification mails to all users interested in a certain issue when a comment is added to it. Detectors are triggered whenever one of the actions
create
set
retire
restore
is requested. They can be used to create an elaborated custom workflow.
Extensions
The instance subdirectory "extensions" can hold additional files which are needed for extended functionalities which can't be done with TAL; even totally new actions are possible. Python modules which are used by both detectors and extensions can be put in the "lib" subdirectory