Architecture

Overall Design

The system is designed in largely two parts, a front end and a back end. The back end will download and test all the packages on PyPI, recording the results to a database. The front end then uses this data to compile an index that shows the kwalitee of each version of each package that has been tested.

Due to the sheer number of packages already uploaded to PyPI it will be necessary to distribute the testing among a large number of computers. Each testing node should test a package in a sandboxed environment (i.e. Docker), be almost completely stateless, and be designed in such a way that horizontal scaling is effortless.

Front End

The front end website should be fairly simple. It will most probably just be a Django site that reads from the central database and displays the data in an easily readable form.

Back End

The back-end will consist of a couple services working together, which may or may not be on the same box. These services are:

Relational Database
Preferably Postgres.
Testing Daemon
A program that will sit on a box, starting up new tests in their own Docker container when necessary and reporting test results to the database.
Message Queue
To let the testing daemons know what package and version they should test next. Will most probably be implemented with a simple Redis queue
Master Node
to keep an eye on the testing daemons and monitor their status, occasionally giving out new commands for it to execute (e.g. update, shut down, reload config etc.)