Development of Debian Member Portfolio Service¶
The following sections describe how to setup a local development environment for the Debian Member Portfolio Service.
All instructions assume that you work on a Debian system. You should use Python 2.7 for development.
Setup of a local development¶
To start working on the source code you need to have git installed:
sudo aptitude install git
The canonical git repository for the Debian Member Portfolio Service is available at http://debianstuff.dittberner.info/git/debianmemberportfolio.git. To get a clone of the source code you change to a directory of your choice and invoke git clone:
cd ~/src git clone http://debianstuff.dittberner.info/git/debianmemberportfolio.git
You should use virtualenv to separate the development environment from your system wide Python installation. You can install virtualenv using:
sudo aptitude install python-virtualenv
When you have virtualenv installed you should create a virtual environment for Debian Member Portfolio Service development and install the requirements using pip:
mkdir ~/.virtualenvs virtualenv --distribute ~/.virtualenvs/dmportfolio . ~/.virtualenvs/dmportfolio/bin/activate cd ~/src/debianmemberportfolio pip install -r wheezyreq.pip
The Debian Member Portfolio Service instance at http://portfolio.debian.net/ is running on a Debian Wheezy server, therefore wheezyreq.pip contains dependency versions matching that Debian release.
The dependency download and installation into the virtual environment takes some time.
After you have your virtual environment ready you need to setup the project for development:
python setup.py develop
Prepare for first startup¶
The Debian Member Portfolio Service uses data from the Debian keyring to get information regarding PGP keys and names related to email addresses. Before you can run the service you need to fetch a copy of the keyring and prepare it for use by the code.
You need rsync and gnupg for these tasks:
sudo aptitude install rsync gnupg
When you have both installed you can run:
. ~/.virtualenvs/dmportfolio/bin/activate ./synckeyrings.sh python debianmemberportfolio/model/keyringanalyzer.py
The first synchronizes the keyrings in $HOME/debian/keyring.debian.org with files on the keyring.debian.org host. And the second generates a key/value database in debianmemberportfolio/model/keyringcache that is used by the code.
Run a development server¶
Pylons uses PasteScript to run a development server. You can run a development server using:
paster serve --reload development.ini
The output of this command should look like the following:
Starting subprocess with file monitor Starting server in PID 31377. serving on http://127.0.0.1:5000
You can now access your development server at the URL that is printed by the command.
If you want to stop the development server press Ctrl + C.
Common development tasks¶
Add new URL¶
Debian Member Portfolio Service uses a ini style configuration file debianmemberportfolio/model/portfolio.ini to configure the generated URL patterns. The actual URL generation is done in DdportfolioController in the urllist() method.
If you want to add a new URL type you have to add a line in portfolio.ini and an entry in DdportfolioController‘s _LABELS dictionary. The top level dictionary keys correspond to sections in the ini file. The dictionary values are dictionaries themselves that contain a special key label that defines the label of the section in the output and keys for each entry to be rendered in that section. The values in these sub-dictionaries are strings marked for translation using the _() function from pylons.i18n.
The patterns in portfolio.ini can contain the following placeholders that are filled at runtime:
|%(aliothusername)s||user name on alioth.debian.org|
|%(email)s||email address (URL encoded)|
|%(firstchar)s||first character of the email address|
|%(forumsid)d||forum user id|
|%(gpgfp)s||GNUPG/PGP key fingerprint|
|%(name)s||full name (i.e. John Smith)|
|%(username)s||Debian user name|
|%(wikihomepage)s||full name in camel case (i.e. JohnSmith)|
The replacement of placeholders is performed in the urllist() method. And uses data from the Debian keyring. Access to the pre-parsed keyring data is performed using the build_data() function of the module debianmemberportfolio.model.dddatabuilder, which uses several helper functions from debianmemberportfolio.model.keyfinder to access the key information.