DEVELOPMENT¶
This documentation is dedicated to code contributors, in order to run a development instance.
Developers are advice to run their Geotrek instance in an isolated environment, however it is not an absolute prerequisite. More details below.
Isolated environment¶
If you use virtual machines or containers (Vagrant, LXC, ...), this will install all the necessary components for development :
./install.sh --dev
Directly on your host¶
The most minimal components required to run an instance are :
- PostGIS 2 server
- GDAL, GEOS, libproj
- gettext
- libfreetype
- libxml2, libxslt
- Usual Python dev stuff
See the list of minimal packages on Debian/Ubuntu.
If you already have all these components installed your OS (probably because you’re already a python/GIS developer), then just jump to the next section !
Run¶
Start local instance :
make env_dev update serve
Note
Running env_dev
and update
is recommended after a pull of new source code,
but is not mandatory : make serve
is enough most of the time.
Run unit tests :
make env_test update tests
Run unit tests in verbose mode, and without migrations :
make env_dev update tests
For Capture server, run an instance of screamshotter in a separate terminal :
bin/django runserver --settings=screamshotter.settings 8001
For PDF conversion server, run an instance of Convertit in a separate terminal on http://localhost:6543
bin/convertit lib/src/convertit/development.ini
Development data¶
make load_data
bin/django loaddata development-pne
In order to get elevation data, a DEM is necessary. If you use the default extent,
as defined in conf/settings.ini.sample
, you can load the following dataset :
wget http://depot.makina-corpus.org/public/geotrek/mnt_0_ecrins.zip
unzip mnt_0_ecrins.zip
bin/django loaddem mnt_0_ecrins/w001001.adf
Conventions¶
- Use flake8
- KISS & DRY as much as possible
- Elegant and generic is good, simple is better
- Commits messages are explicit and mention issue number (
(ref #12)
or(fixes #23)
) - Features are developed in a branch and merged from Github pull-requests.
Definition of done¶
docs/changelog.rst
is up-to-date- A unit-test covers the bugfix or the new feature
- A frontend test (:path:jstests/nav-*.js) covers the navigation bug fix or feature
- A JS Mocha test (:path:jstests/tests.*.js) covers the JavaScript bug fix or feature
- Unit-tests coverage is above or at least equal with previous commits
- Settings have default value in
settings/base.py
orconf/settings-default.ini
- Installation instructions are up-to-date
Check TODO in the source tree
find geotrek | xargs egrep -n -i '(TODO|XXX|temporary|FIXME)'
Release¶
- Update VERSION file, docs/conf.py
- Pin (fixed revision) of eggs under development in buildout.cfg
- Use semantic versioning
- Use zest.releaser
- Add git tag X.Y.Z
- Add release on Github (copy-paste
CHANGES
paragraph)
Model modification¶
bin/django makemigrations <appName> bin/django migrate
notes: | Add migration file to source control. |
---|
Database reset¶
Data only:
bin/django flush
Everything:
dbname=geotrekdb
sudo -n -u postgres -s -- psql -c "DROP DATABASE ${dbname};" && sudo -n -u postgres -s -- psql -c "CREATE DATABASE ${dbname};" && sudo -n -u postgres -s -- psql -d ${dbname} -c "CREATE EXTENSION postgis;"
Mapentity development¶
To develop mapentity and Geotrek together, add the following lines to etc/settings.ini
:
[sources]
mapentity = git https://github.com/makinacorpus/django-mapentity.git
[buildout]
auto-checkout += mapentity
Then run:
make env_dev update
cd lib/src/mapentity/
git submodule init
git submodule update