Skip to content

Check that your data complies with the Beneficial Ownership Data Standard (BODS) using our open source data review tool


Notifications You must be signed in to change notification settings


Repository files navigation


Dev installation

git clone openownership-cove-bods
cd openownership-cove-bods
virtualenv .ve --python=/usr/bin/python3
source .ve/bin/activate
pip install -r requirements_dev.txt
python migrate
python compilemessages
python runserver

You may need to pass to runserver in the last step, depending on your development environment.

Note: requires gettext to be installed. This should come by default with Ubuntu, but just in case:

apt-get update && apt-get install gettext

Dev with Docker

Docker is used in production, so sometimes you may want to run locally with Docker to debug issues:

docker compose -f down # (if running)
docker compose -f build --no-cache
docker compose -f up # (to restart)

To run commands, make sure environment is running (see up command above) then:

docker compose -f run bods-cove-app-dev python migrate


We use Django's translation framework to provide this application in different languages. We have used Google Translate to perform initial translations from English, but expect those translations to be worked on by humans over time.

Translations for Translators

Translators can provide translations for this application by becomming a collaborator on Transifex

Translations for Developers

For more information about Django's translation framework, see

If you add new text to the interface, ensure to wrap it in the relevant gettext blocks/functions.

In order to generate messages and post them on Transifex:

First check the Transifex lock <>, because only one branch can be translated on Transifex at a time.


python makemessages -l en
tx push -s

In order to fetch messages from transifex:

tx pull -a

In order to compile them:

python compilemessages

Keep the makemessages and pull messages steps in thier own commits seperate from the text changes.

To check that all new text is written so that it is able to be translated you could install and run django-template-i18n-lint

pip install django-template-i18n-lint
django-template-i18n-lint cove

Adding and updating requirements

Add a new requirements to or depending on whether it is just a development requirement or not.

Then, run pip-compile && pip-compile this will populate requirements.txt and requirements_dev.txt with pinned versions of the new requirement and its dependencies.

pip-compile --upgrade && pip-compile --upgrade will update all pinned requirements to the latest version. Generally we don't want to do this at the same time as adding a new dependency, to make testing any problems easier.