Roundup Tracker

Both xmlrpc and rest interfaces have been added since this was proposed. So with curl and other tools available this might not be useful anymore.

The Roundup Remote Library will provide a simple client-side interface to a Roundup tracker's hyperdb. This access will benefit both the Roundup administrator (who will be able to manage their tracker from a remote computer) and the Roundup user.

Developer conversation regarding the proposal may be found at:

This is a project I have submitted to Google for the Summer of Code program.

The Proposal and responses to Google SoC mentor's comments may be found below.


Roundup Remote Library

author:Timothy J. Warren
email:commandlineguy@gmail.com

Background: Roundup

Roundup is a general purpose issue tracker written in Python. In addition to a highly customizable web-based interface, Roundup offers an e-mail interface and a simple server-side command-line interface.

One of Roundup's great strengths is its support for many different databases (anydbm, SQLite, MetaKit, PostgreSQL, MySQL). All of the database access is abstracted through a hyperdb, which handles the actual database communication.

About the Roundup Remote Library

As mentioned in the Background: Roundup section, Roundup includes a basic command-line interface. This interface, however, is only intended to be used on the Roundup server itself -- it does not provide client-side access to the Roundup database. A Roundup administrator can use the existing command-line interface for adding or changing issues, but a typical Roundup user cannot.

The Roundup Remote Library will provide a simple client-side interface to a Roundup tracker's hyperdb and access to the functionality exposed in the web interface. This access will benefit both the Roundup administrator (who will be able to manage their tracker from a remote computer) and the Roundup user.

By modularizing the access code into a library, the project will also make it easier for other developers to integrate Roundup functionality into their application. For instance, an application developer may use code similar to the following:

import roundup-client

tracker = roundup-client.connect('http://url.to.tracker.com', 'username', 'password')
for issue in tracker.query('My Saved Query'):
  print '%s %s' % (issue['Title'], issue['Status'])

...

tracker.issue(issuenum).addFile(fobj)

A command-line client (roundup-client.py) will also be included. In addition to demonstrating how to use the library, the client will allow shell-based remote access to:

  • Create an issue
  • Add a message to an issue
  • Attach a file to an issue
  • View issues

An example of this may be seen here:

$ roundup-client.py Issue47 addfile somefile.txt
$ echo 'Installed patch on server; closing ticket' | roundup-client.py Issue91 addmessage -
Transport

The underlying transport between the remote client and the server will be as transparent to the user as possible. I will initially implement an XML-RPC transport; this will allow simple access to all of the hyperdb functionality with the added benefit of enabling access from other programming languages.

Using a "scraping" technique to access the data (using urllib2 as the transport, with an HTML parser to pull out the data) was discussed on the Roundup development list. While this provides certain benefits to users of older versions of Roundup, a direct RPC transport provides better access to the full hyperdb.

More information can be found in the mailing list archive at: http://sourceforge.net/mailarchive/forum.php?thread_id=10285465&forum_id=1100

Deliverables

Modules
  • libroundup.py

    libroundup.py will implement the actual library functions: signing into a Roundup tracker, viewing issues, adding and changing issues.

  • roundup-client.py

    roundup-client.py will be an interface to libroundup.py, allowing a programmatic and comment-line access to a tracker.

Project Schedule

  • May 23, 2006

    Officially begin working on Roundup Remote Library.

    Begin analyzing Roundup server code, begin work on XML-RPC server code

  • June 2

    Begin work on roundup-client

  • June 16

    Begin integrating XML-RPC server code into roundup-server

  • June 23

    Begin migrating roundup-admin to use the Remote Library

  • June 30

    Release Library and roundup-client as alpha code, field testing begins

  • July 7

    Begin work on installer

  • July 21

    Begin additional coding tasks as time permits: additional transports or other enhancements, Roundup bug fixes or enhancements

  • Aug 4

    Release Library as RC1; begin functional and integration tests

  • Aug 11

    Finalize documentation

  • Aug 18

    Begin packaging code for delivery

  • August 21, 2006

    Finalize state of code, ensure code is clean and in version control

    Make final Summer of Code delivery

    Version 1.0!

Personal Information

I first began using Roundup about six months ago, when I needed an issue tracker for a technical support job I had recently started. Having used Python for several years, I knew that I wanted a tracker which was written in Python. By no means was I expecting such a capable product -- Roundup has exceeded my expectations several times over. I find it easier to use and more powerful than many of the commercial products I have used in the past.

Being written in Python made it extremely customizable. I immediately began making some changes to make it work better for me; I have submitted some of those changes back into the project, which has earned me a mention in Roundup's list of acknowledgements.

I am currently finishing my B.S in Computer Science after a seven-year break, during which time I worked professionally in both software development and technical support. After I graduate in December, I am planning on continuing on to graduate school to study either Computer Science or Electrical Engineering; long-term, I am interested in studying Human-Computer Interaction, specifically Ambient Computing and Ubiquitous Computing.

I've been interested in open-source software for quite some time. Although I have primarily used and support MS Windows, I have always used open-source alternatives wherever I was able. I have always enjoyed "giving back to the community", and have contributed code to TightVNC, as well as opening some of my personal-use projects: pyEdlin and ClipboardTransfer.

Timothy J. Warren

commandlineguy@gmail.com


Notations

The following were originally separate pages. They have been consolidated below.

Note1 To Clark C Evans

To Mr. Evans:

I'm not sure exactly how we're supposed to respond to direct questions; hopefully this note is noticed.

My original plan was to initially implement a simple wrapper class on top of a urllib2 scraper in order to access the Tracker; this would provide the necessary functionality (providing a library for additional client-side access) with a minimum of changes necessary on the server.

After proposing this idea to the Roundup development community, the existing developers felt that scraping wasn't the best solution. While it will work for out-of-the-box Trackers, it will likely begin to fail on highly modified Trackers (those with new fields, for instance, or entirely new classes).

Given that I plan to make the transport layer as transparent as possible to the library, I see no reason why an urllib2 transport couldn't be added after the fact. Indeed, I think this would have certain advantages; namely, it would work on older, unmodified versions of Roundup. I may add an urllib2 transport once the SoC project is complete.

More information on the developer's conversation can be found in the mailing list archive: http://sourceforge.net/mailarchive/forum.php?thread_id=10285465&forum_id=1100

Timothy J. Warren

Note2 To Clark C Evans

Mr. Evans (note 2):

I appreciate the feedback, and agree that JSON could make an acceptable transport. I will post this question (XML-RPC vs JSON) to the Roundup development list

Timothy J. Warren

Note3 To Armin Rigo

Mr. Rigo:

As stated in my proposal, I will initially focus on making all of the hyperdb functionality available over a network. From there, adding individual tracker functions should be fairly simple.

Just to clarify, I am not proposing to create a complete user interface (ie, ncurses or GTK); rather, I will create a library to make the database available to remote users, and a utility to provide simple command-line access to the tracker.

My motivation is to be able to use a command-line client similar to the following:

$ roundup-client.py Issue47 attachfile somefile.txt
$ echo 'Installed patch on server; closing ticket' | roundup-client.py Issue91 attachmessage -

However, I agree that a higher-level wrapper providing access to the functions exposed on the web interface could be useful. Perhaps something like the following?

import roundup-client

tracker = roundup-client.connect('http://url.to.tracker.com', 'username', 'password')
for issue in tracker.query('My Open Tickets'):
  if issue['Priority'] == 'Critical':
    <do something with the issue>

Please let me know if this is what you have in mind.

Timothy J. Warren

Note4 To James Joseph Jewett

Mr. Jewett,

Thank you for posting a comment in order to enable edits; I appreciate it.

Timothy J. Warren


CategoryDevelopment