This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

Goanna aims to spare source repositories the overheads of frequent polling by CI setups such as Buildbot. It caches change information pushed to it by authorised repositories, and provides a simple web API for clients to polls for changes.

Redis is used as the storage backend. BottlePy is used to provide the web API.

Goanna is still under development and tested mainly using:

  • Python 2.6, Python 2.7
  • Buildbot 0.8.7

If you wish to try it out, do consider running the tests (see below) just to make sure it behaves in your setup.


  • Logging
  • Example VCS Commit hooks (CVS, SVN, Git, Mercurial)
  • Github-webhook compatible API, or better, submit a Github service hook
  • Housekeeping scripts (delete old commit data, etc)
  • Web APIs for reporting (latest revisions, storate stats, etc)


Additional requirements to run tests:

Running tests:

While we write most of the tests for Goanna using the standard unittest module, some tests required additional modules. For example, we use WebTest to support the testing of the WSGI-based web api and Trial to enable the testing of GoannaPoller.

To simplify test management and execution (and since we’re already using it), we use Trial to launch tests:

trial goanna.tests

It is possible to get coverage results using trial --coverage however, the output can be a little unwieldy. To obtain sensible coverage results, we use

coverage run `which trial` goanna.tests  # run test while collecting coverage stats
coverage html  # generate HTML report (output in htmlcov directory)

Deploying the Web App:

For development and testing purposes, you can use examples/scripts/ to launch a basic server.

For deployment, the app can be deployed just like any other Bottle app (see bottle docs for deployment).

To get an app instance, use:

from goanna.webapi import GoannaInABottle
application = GoannaInABottle("/path/to/").get_app()

An example config file can be found in the examples/config directory of the source distribution. If a config file is not provided, the module will look for a file in the current working directory failing which default settings will be applied.

Release History

Release History


This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting