Development
============

This page is intended mostly for developers. 

Roadmap
--------

List of things I would like to add to pubsub:

- completed implementation of support for pubsub over UDP sockets, which
  would allow two pubsub-apps to publish and subscribe to messages of other
  applications (pseudo-code already in src/contrib)
- complete implementation of multi-threading helper class, no change
  required to pubsub, rather just utility class to help user
  (pseudo-code already in src/contrib)
- determine and fix performance bottlenecks
- figure out a good way to prevent wrapped listener subscriptions from being DOA
  (pubsub only keeps weak reference to listener, so if listener subscribe like
  ``pub.subscribe( wrapper(yourListener) )`` then listener will be unsubscribed
  as soon as subscribe returns; you need
  ``refListener = wrapper(yourListener); pub.subscribe(refListener)``)
- finish the src/contrib/monitor implementation to monitor pubsub messages,
  or some way of monitoring message sending


.. _label_contributing:

Contributing
-------------

Contributions are welcome! There are many ways you could contribute:

- bug fixes
- new features
- test results on different platforms
- documentation
- screencasts! (of applications using pubsub with output when user clicks)
- example topic trees (using ``pubsubutils.printTopicTree()`` in latest
  version, or ``print Publisher`` in versions 1)
- other improvements
- money!

Please contact me via email (schoenborno, at
users.sf.net) or by posting on the forums (links in the
:ref:`label_support` section).


Scripts Available
------------------

The following is likely to be useful to pubsub developers and contributors only.

*Testing*:
    The package currently gets tested on Windows XP only. The tests can be
    run automatically by running :command:`runtests.bat` from the :file:`tests`
    folder of a source distribution.

    If anyone is able to run the test suite on other platforms, please let
    me know of the results. A Linux person will have no
    trouble running the equivalent batch commands on Linux.

*Documentation*:
    The documentation can be generated on Windows by running
    :command:`gendocs.bat` from the :file:`docs` folder of a source
    distribution (but see the note about Sphinx patch in next section).
    For Linux, again you should be able to
    just copy the commands form the :file:`.bat` file to a shell window.

*Performance*:
    A small performance test is available in the :file:`tests` folder.
    On Windows, run it via :command:`runperf.bat`.


System Requirements
---------------------

In addition to the :ref:`label-install-reqs`, the following are required:

- To run unit tests:

  - nose >= 0.10
  - coverage >= 3.1b1


- To generate these docs:

  - sphinx >= 0.6.3; note that sphinx must be patched as per post on
    sphinx-dev:

    .. literalinclude:: sphinx_patch1.txt
    .. literalinclude:: sphinx_patch2.txt


