Anna Sirota
2b2b898e5c
Money amounts are currently prefixed with currency codes everywhere, including CSVs, which makes it harder to use those in bookkeeping. This change ensures CSVs have simple decimal money amounts instead. |
||
---|---|---|
assets_shared@8839ec4de3 | ||
blender_fund | ||
blender_fund_main | ||
blender_notes | ||
campaign/simulator | ||
docs | ||
donation-box@398d77d64b | ||
GeoLite2-Country_20181002 | ||
logentry_admin | ||
playbooks | ||
templates | ||
.coveragerc | ||
.gitignore | ||
.gitmodules | ||
deploy.sh | ||
LICENSE.txt | ||
manage.py | ||
poetry.lock | ||
pyproject.toml | ||
README.md | ||
setup.cfg |
Blender Development Fund
Requirements
- Python 3.10
- virtualenv
- PostgreSQL
Recommended for local development:
virtualenvwrapper
adds commands for naming, creating, listing, activating and deactivating
Python virtualenv
s, which makes it much easier to work on various Python projects.
If you prefer not to use it, any other way of creating a virtualenv
or venv will do.
Setting up
Make a copy of example settings first:
cp blender_fund/settings.example.py blender_fund/settings.py
Initialise the submodule included into this repo:
git submodule update --init
To create a new Blender Development Fund database, run this as the PostgreSQL root user:
CREATE USER blender_fund CREATEDB PASSWORD 'blender_fund';
CREATE DATABASE blender_fund OWNER blender_fund;
CREATE SCHEMA blender_fund;
GRANT ALL ON schema blender_fund TO blender_fund;
and change blender_fund
to a random password that you also store in the settings.py
file.
Alternatively, change the password using:
ALTER ROLE blender_fund WITH PASSWORD 'new_password';
In case of production, omit CREATEDB
and make sure that both postgres
and blender_fund
users have secure hard to guess passwords set.
While inside project's directory, run the following to install project dependencies.
Note that path to python3.10
binary might differ in your OS,
adjust the mkvirtualenv
command accordingly:
mkvirtualenv fund -a `pwd` -p /usr/bin/python3.10
pip install poetry==1.4.2
poetry install
./manage.py migrate
./manage.py loaddata systemuser devfund default_site
./manage.py collectmedia --noinput
./manage.py runserver 8010
./manage.py createsuperuser
The last command creates an admin account that can be used to log in at http://fund.local:8010/admin/.
Working with virtualenvwrapper
In addition to mkvirtualenv
mentioned above, the following commands are useful:
- use
workon fund
to go to Fund's project directory and activate itsvirtualenv
; - use
deactivate
to "exit" it; - use
lsvirtualenv
to list existingvirtualenv
s; - use
rmvirtualenv fund
to delete Fund'svirtualenv
.
CMS
We use Wagtail as CMS for providing access to dynamic content of the website,
such as page titles, calls to action, or entire pages. The CMS is accessible at the /cms
endpoint.
Note: we are currently using a development version of Wagtail, therefore we need to build the static assets for the package ourselves. Check the warning in the startup log for more info on how to do it.
Stripe integration
TODO improve this section.
Follow the official guide for setting up Stripe CLI: https://stripe.com/docs/development/quickstart
Webhook testing
Run a local listener that will make webhook requests to your development server:
stripe listen --forward-to fund.local:8010/webhooks/stripe/
Run background tasks that are created by the webhook code:
./manage.py process_tasks
Braintree integration and HTTPS
It seems even the Braintree sandbox assumes you're using an HTTPS website. The easiest way to set this up is to use stunnel to create a simple HTTPS wrapper around your devserver.
NOTE: to make Django aware of the fact that HTTPS is used, set the environment variable
HTTPS=1
when running manage.py runserver
.
You can now access https://fund.local:8443/ to reach your dev server via HTTPS.
Documentation
cd docs
poetry run mkdocs serve -a localhost:8080
Testing
Run poetry run py.test
to run the unit tests.
By default we use the --reuse-db
option to speed up subsequent test runs.
However, this skips the database migrations; add --create-db
on the CLI to
recreate the test database and run all the migrations.
GeoIP
The GeoIP database was downloaded from GeoLite2-Country
Deployment
- Merge the required commits from
master
intoproduction
branch - Run unittests
- Push
production
to origin - Run
cd playbooks; ./ansible.sh -i environment/production deploy.yaml