====================== 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_. .. _Roundup: http://roundup.sourceforge.net .. _hyperdb: http://roundup.sourceforge.net/doc-1.0/design.html#hyperdatabase .. _anydbm: http://docs.python.org/lib/module-anydbm.html .. _SQLite: http://www.sqlite.org .. _MetaKit: http://www.equi4.com/metakit.html .. _PostgreSQL: http://www.postgresql.org .. _MySQL: http://www.mysql.com .. _MIT License: http://www.opensource.org/licenses/mit-license.php .. _CNRI Python License: http://www.opensource.org/licenses/pythonpl.php .. _acknowledgements: http://roundup.sourceforge.net/doc-1.0/index.html#acknowledgements .. _pyEdlin: http://pyedlin.sourceforge.net .. _ClipboardTransfer: http://cliptrans.sourceforge.net .. _Ambient Computing: http://www.ubiq.com/hypertext/weiser/acmfuture2endnote.htm .. _Ubiquitous Computing: http://en.wikipedia.org/wiki/Ubiquitous_computing