Write-it is an application that aims to deliver messages to people whose contacts are to be private or the messages should be public, for example: members of congress.
Write-it is a layer on top of popit from where it takes the people and adds contacts. The way it delivers messages is using plugins for example: mailit. And this approach allows for future ways of delivering for example: twitter, whatsapp, fax or pager.
Future uses are in congresoabierto to replace the old "preguntales" (You can check here, to see how it used to work) feature, it was inspired by writetothem.
Installation instructions for developers are below. If you'd like to integrate WriteIt with your civic tech application it's recommended that you use the hosted version and read INTEGRATION_GUIDE.md
in this directory for integration instructions.
Assuming you have Vagrant installed, run the following:
git clone https://github.com/ciudadanointeligente/write-it.git
cd write-it
vagrant up
Vagrant will automatically install WriteIt and all of its dependencies. This can take a few minutes.
Once it’s complete, log into the virtual machine with:
vagrant ssh
Once you’re inside the virtual machine, you can load some fixtures with:
./manage.py loaddata example_data.yaml
Then run the development server with:
./manage.py runserver 0.0.0.0:8000
And visit http://127.0.0.1.xip.io:8000 on your host machine to use WriteIt.
celery -A writeit worker
This handles syncing contact details from remote sources. If you have created a new instance and the contacts do not seem to be syncing it is probably because a celery worker is not running.
celery -A writeit beat
This sends emails to recipients and periodically re-sync contacts from remote sources.
It's required if you want to play around seaching messages and answers, this part is optional.
Your version of the Python elasticsearch
package must match
the version of Elasticsearch you have. The requirements.txt
file in this repository currently specifies
elasticsearch==1.6.0
, which will only work with Elasticsearch
with a major version of 1. If you have a 0.x or 2.x version of
Elasticsearch you will need to install a different version of
the Python elasticsearch
package. For more details on how to
pick the right version to use, see:
https://elasticsearch-py.readthedocs.io/en/master/#compatibility
In ubuntu you can do sudo apt-get install libffi-dev
- Libssl
In ubuntu you can do sudo apt-get install libssl-dev
- GCC (G++) 4.3+ (used by python libsass package)
In ubuntu you can do sudo apt-get install g++
- yui-compressor
In ubuntu you can do sudo apt-get install yui-compressor
Write-it is built using Django. You should install Django and its dependencies inside a virtualenv. We suggest you use virtualenvwrapper to create and manage virtualenvs, so if you don’t already have it, go install it, remembering in particular to add the required lines to your shell startup file.
With virtualenvwrapper installed, clone this repo, cd
into it, and create a virtualenv:
git clone git@github.com:ciudadanointeligente/write-it.git
cd write-it
mkvirtualenv writeit
Install the requirements:
pip install -r requirements.txt
Set up the database, creating an admin user when prompted:
./manage.py syncdb && ./manage.py migrate
Compile all the available translations:
./manage.py compilemessages
There's a problem migrating and the problem looks like
django.db.utils.OperationalError: no such table: tastypie_apikey
It can be fixed by running it twice.
Then run the server:
./manage.py runserver
Elasticsearch is optional and can be turned off by creating a new local_settings.py file vi writeit/local_settings.py
with the following content
LOCAL_ELASTICSEARCH = False
For testing you need to run ./manage.py test nuntium contactos mailit
For coverage analysis run ./coverage.sh
At this point you probably have write-it running without any users. You could create a (super) user by running:
python manage.py createsuperuser
It will ask you the username and password (which you will need to repeat).
With that done you will be able to access '/accounts/login/'.
The following procedure should safely get new translations from Transifex and push any new messages for translation back to Transifex:
tx pull -a -f
Commit those changes, since Transifex has no history, and when we push back to Transifex any removed translations will no longer appear there:
git commit -m "Recording the latest translations from Transifex" -- locale
Extract all translation strings from the code, and update the
.po
files so that any new strings for translation are added:
./manage.py makemessages -a --no-wrap
This will add fuzzily inferred translations to the .po
files, but they won't be added to Transifex when we upload
(since it doesn't support fuzzy translations) and later we'll
pull back from transifex to remove them.
Push any new strings to Transifex with:
tx push -s -t --skip
If you pull from Transifex again, that should remove the fuzzy translations:
tx pull -a -f
Now you can commit the result:
git commit -m "Updated .po files from makemessages" -- locale
And run:
./manage.py compilemessages
Write-it has been used mostly through its REST API for which there are a number of API clients. The github repos and the status of the development are listed below:
- writeit-rails ALPHA
- writeit-django ALPHA
The instructions are in the following link.