election-boards is the RESTful server for providing election boards information. It is written in Django Rest Framework, and a partial revision of REST server in g0v councilor-vote-guide project.
pip install -r requirements.txtOn Mac(using brew)
brew install postgresqlIf the service not start automatically:
brew services start postgresqlOn Mac you need to install extra library postgis on your machine before create extension in postgresql:
brew install postgis;Then in postgres CLI type to create extension:
CREATE EXTENSION postgis;
Default is using election_boards. It could be changed in settings
CREATE DATABASE election_boards;
Firstly, download the postgres dump. Then it could be restore in our new database using:
pg_restore -v -U [POSTGRESQL_USER] -d election_boards -h localhost [DUMP_FILE_NAME]The dump data are import into database election_boards.
In local develop mode, default is using config in /election_boards/settings/dev.py. Set environment envariable like below:
export DJANGO_SETTINGS_MODULE=election_boards.settings.devIf production environment /election_boards/settings/production.py preferred, use:
export DJANGO_SETTINGS_MODULE=election_boards.settings.productionThe cleaning is necessary to reset migration history if your server are starting from the data from g0v project, but there are migration files generated during your development.
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete(May not necessary)
Only board is modified for database schema. So here only migrate boards model
python manage.py makemigrations boards
python manage.py migratepython manage.py runserveruwsgi --ini uwsgi.inicelery -A election_boards worker -l info -BSELECT bb.id "看板ID", bb.image "對照圖片代碼", bb.verified_amount "驗證次數", ST_AsText(bb.coordinates) "座標", CONCAT(county, district, road) "地址", cand.count "候選人姓名", slogans.count "看板標語", amount.count "看板數量" FROM boards_boards AS bb LEFT JOIN (SELECT candidates.board_id, STRING_AGG(candidates.count, ' ') AS count FROM (SELECT bc.board_id, CONCAT(ct.name, '=', COUNT(ct.name)) AS count FROM boards_checks AS bc LEFT JOIN boards_checks_candidates AS bcc ON bc.id = bcc.checks_id LEFT JOIN candidates_terms AS ct ON bcc.terms_id = ct.id WHERE bc.type != 2 GROUP BY bc.board_id, ct.name ORDER BY bc.board_id) AS candidates GROUP BY candidates.board_id) AS cand ON bb.id = cand.board_id LEFT JOIN (SELECT slg.board_id, STRING_AGG(slg.count, ' ') AS count FROM (SELECT bc.board_id, CONCAT(bc.slogan, '=', COUNT(bc.slogan)) AS count FROM boards_checks AS bc GROUP BY bc.board_id, bc.slogan ORDER BY bc.board_id) AS slg GROUP BY slg.board_id) AS slogans ON bb.id = slogans.board_id LEFT JOIN (SELECT amnt.board_id, STRING_AGG(amnt.count, ' ') AS count FROM (SELECT bc.board_id, CONCAT(bc.headcount, '次=', COUNT(bc.headcount)) AS count FROM boards_checks AS bc GROUP BY bc.board_id, bc.headcount ORDER BY bc.board_id) AS amnt GROUP BY amnt.board_id) AS amount ON bb.id = amount.board_id;\copy (SELECT commands) to 'absolute path + filename' with csv