======================
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