☀️ Illinois Sunshine. Keep an eye on money in Illinois politics.
Clone or download
Pull request Compare This branch is 218 commits ahead of andreas-koukorinis:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Illinois Sunshine

Keep an eye on money in Illinois politics. Built for the Illinois Campaign for Political Reform.


Install OS level dependencies:

  • Python 3.4
  • PostgreSQL 9.4 +

Install app requirements

We recommend using virtualenv and virtualenvwrapper for working in a virtualized development environment. Read how to set up virtualenv.

Once you have virtualenvwrapper set up,

mkvirtualenv illinois-sunshine
git clone https://github.com/datamade/illinois-sunshine.git
cd illinois-sunshine
pip install -r requirements.txt
cp sunshine/app_config.py.example sunshine/app_config.py

In app_config.py, put your Postgres user in DB_USER and password in DB_PW.

NOTE: Mac users might need this lxml workaround.

Afterwards, whenever you want to work on illinois-sunshine,

workon illinois-sunshine

Setup your database

Before we can run the website, we need to create a database.

createdb illinois_sunshine

Then, we run the etl.py script to download our data from the IL State Board of Elections and load it into the database.

python etl.py --download --load_data --recreate_views

This command will take between 15-45 min depending on your internet connection.

You can run etl.py again to get the latest data from the IL State Board of Elections. It is updated daily. Other useful flags are:

 --download               Downloading fresh data
 --cache                  Cache downloaded files to S3
 --load_data              Load data into database
 --recreate_views         Recreate database views
 --chunk_size CHUNK_SIZE  Adjust the size of each insert when loading data

Running Illinois Sunshine

git clone git@github.com:datamade/illinois-sunshine.git
cd illinois-sunshine

# to run locally
python runserver.py

navigate to http://localhost:5000/

Optionally configure PostgreSQL stop words

While developing this, we noticed that PostgreSQL treats some names od individuals and organizations as stop words. We added a custom stop word list to the repo that can be used to make sure that these names will show up in search results.

  • Create a symbolic link from the stop words list in this repo to the PostgreSQL shared directory (this example will work on Debian and Ubuntu):
sudo ln -s /path/to/this/repo/sunshine.stop /usr/share/postgresql/9.4/tsearch_data/sunshine.stop

You'll then need to change the STOP_WORD_LIST configuration in app_config.py to sunshine


  • Eric van Zanten - developer
  • Derek Eder - developer

Errors / Bugs

If something is not behaving intuitively, it is a bug, and should be reported. Report it here: https://github.com/datamade/illinois-sunshine/issues

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Commit, do not mess with rakefile, version, or history.
  • Send a pull request. Bonus points for topic branches.


Copyright (c) 2015 DataMade and Illinois Campaign for Political Reform. Released under the MIT License.