About OneGov: http://docs.onegovcloud.ch/
Requirements:
- Python 3.6+
- Postgres 10+
- POSIX platform (Linux, FreeBSD, macOS)
Optional:
- Memcached 1.4+
- Elasticsearch 5.5+
To install, create a new virtual environment and run make:
virtualenv -p python3 .
source bin/activate
make install
To get the latest updates and sources run:
make update
To apply schema-changes to your database:
onegov-core upgrade
OneGov requires the following packages:
- libxml2
- libxslt
Those should be downloaded and built automatically during installation.
For that to work you need the python development files. On OSX those should be already installed if you installed Python 3 trough homebrew.
On other POSIX platforms you might have to install them. On Ubuntu for example, you need to run:
sudo apt-get install git python3-dev python-virtualenv
You also need to have the following header files installed:
sudo apt-get install libcurl4-openssl-dev libffi-dev libjpeg-dev libpq-dev
libxml2-dev libxslt1-dev zlib1g-dev libev-dev libgnutls28-dev libkrb5-dev
libpoppler-cpp-dev
The depot-storage folder contains the depot based storage.
The docs folder contains onegov's documentation.
The eggs folder contains links to all the sources used by the interpreter.
This is very handy if you need to lookup source code from your editor.
The file-storage folder contains the pyfilesystem based storage.
The experiments folder contains Jupyter Notebook files.
The profiles folder contains profiling output.
The src folder contains the source code directly associated with onegov. This
is where the magic happens ;)
OneGov supports different applications under different paths. Usually you probably want to run onegov.town though, the first such application. You can have different applications run on the same database though.
To prepare a database, make sure you have Postgres 9.3+ running locally, with a database designated to running your application.
Once you do, copy onegov.yml.example and edit the dns string inside
the resulting onegov.yml file:
cp onegov.yml.example onegov.yml
Then edit the following line in onegov.yml:
dsn: postgres://user:password@localhost:5432/database
To use OneGov Town you need to define a town first. Run the following command to define a new town (there is currently no way to do it through the web interface).
bin/onegov-town --select /onegov_town/govikon add Govikon
You also might want to define an admin to manage the site. Run the following command to define a user with admin role.
bin/onegov-user --select /onegov_town/govikon add admin [email protected] --no-prompt --password test
Having done that, start the onegov server as follows:
bin/onegov-server
And point your browser to http://localhost:8080/onegov_town/govikon.
To use OneGov Election Day you need to define a so called principal. That's basically the canton using the application.
To do this for the canton of zg for example you create the following directory:
mkdir -p file-storage/onegov_election_day-zg
Then you create a file containing the information about the canton:
touch file-storage/onegov_election_day-zg/principal.yml
Inside you configure the principal (example content):
name: Kanton Zug
logo: logo.svg
canton: zg
color: '#234B85'
The logo points to a file in the same directory as the yml file.
You also want to add a user, which you can do as follows:
bin/onegov-user --select /onegov_election_day/zg add admin [email protected]
Having done that, start the onegov server as follows:
bin/onegov-server
And point your browser to http://localhost:8080/wahlen/zg.
To transfer files from a remote server (e.g. onegov-agency), you can take the following steps:
- Find out the hostname of the live server, e.g. staatskalender-ar.onegovcloud.ch
- Use
pet whereis staatskalender-ar.onegovcloud.chwhich returns the server the app was deployed on. - ssh into the remote server to find out where
onegov.ymlis located, in general in/opt/onegov/onegov.ymldirectory. - Launch the command to copy the files:
onegov-core transfer <hostname> /opt/onegov/onegov.yml
To run the tests of a specific module:
py.test src/onegov.core
py.test src/onegov.town
py.test src/onegov.user
And so on.
To run a specific test:
py.test src/onegov.core -k test_my_test
To run tests in parallel (for faster execution):
py.test src/onegov.core --tx='4*popen//python=bin/py' --dist=load
To run all tests at once:
make test
Note that the following won't work:
py.test src/onegov.*
To run the tests with tox:
tox -c src/onegov.core/tox.ini
tox -c src/onegov.org/tox.ini
And so on.
To run a specific test:
tox -c src/onegov.core -- -k test_my_test
To add a package that should only be available in the development environment, add it to requirements.txt
Version pins should be added to constraints.txt
To add your own set of extra packages, create a new file called extras.txt and
add them there (just like you would in a requirements.txt).
To profile all requests, set profile in the onegov.yml to true. This will
result in a timestamp profile file in the profiles folder for each request.
You may then use the pstats profile browser as described here: http://stefaanlippens.net/python_profiling_with_pstats_interactive_mode
Or convert it to an SVG use gprof2dot
gprof2dot -f pstats profiles/[profile file] | dot -Tsvg -o output.svg
Another possiblilty is to run py.test with pytest-profiling, which creates
a nice SVG:
py.test --profile --profile-svg src/onegov.core
To use i18n, gettext must be installed. On most linux distros this is a given. On OSX it is recommended to install gettext with homebrew:
brew install gettext
bash i18n.sh onegov.town de
bash i18n.sh onegov.town
To build the docs:
cd docs
make html
To completely rebuild the docs:
cd docs
make clean
make html
To show what changes (if any) are uncommited:
uncommitted . -nu
Jupyter notebook comes preinstalled:
jupyter notebook
We use https://github.com/brigade/scss-lint to lint our scss files. The linter
configuration is found in the local directory (./.scss-lint.yml).
In Sublime Text the linter should pick this file up when using the
onegov.sublime-project file. Though it might require a restart.
In Atom the https://atom.io/packages/linter-scss-lint will pick up the right configuration file per default.
Other editors are not directly supported, so you are on your own.
Travis tests if this setup actually works. Current status: