Liberapay is a recurrent donations platform.
It's a fork of Gittip/Gratipay, see this post for the differences between the two.
You have a question? Come ask us in the salon or in the IRC channel #liberapay on Freenode.
If you have questions about translating Liberapay, you can ask them in the translation thread of the salon.
Liberapay is a fork of Gratipay, so it uses the web micro-framework Aspen, which is based on filesystem routing and simplates. Don't worry, it's quite simple. For example to make Liberapay return a Hello $user, your id is $userid
message for requests to the URL /$user/hello
, you only need to create the file www/%username/hello.spt
with this inside:
from liberapay.utils import get_participant
[---]
participant = get_participant(state)
[---] text/html
{{ _("Hello {0}, your id is {1}", request.path['username'], participant.id) }}
As illustrated by the last line our default template engine is Jinja.
The _
function attempts to translate the message into the user's language and escapes the variables properly (it knows that it's generating a message for an HTML page).
The python code inside simplates is only for request-specific logic, common backend code is in the liberapay/
directory.
Firstly, make sure you have the following dependencies installed:
- python ≥ 2.7.8 (we're working on porting to python 3)
- postgresql 9.4.5 (see the official download & install docs
- make
Then run:
make env
Now you need to give yourself superuser postgres powers (if it hasn't been done already), and create two databases:
su postgres -c "createuser --superuser $(whoami)"
createdb liberapay
createdb liberapay_tests
If you need a deeper understanding take a look at the Database Roles and Managing Databases sections of PostgreSQL's documentation.
Then you can set up the DB:
make schema
Environment variables are used for configuration, the default values are in
defaults.env
and tests/test.env
. You can override them in
local.env
and tests/local.env
respectively.
Once you've installed everything and set up the database, you can run the app:
make run
It should now be accessible at http://localhost:8339/.
You can create some fake users to make it look more like the real site:
make data
The python code interacts with the database by sending raw SQL queries through the postgres.py library.
The official PostgreSQL documentation is your friend when dealing with SQL, especially the sections "[The SQL Language] (https://www.postgresql.org/docs/9.4/static/sql.html)" and "[SQL Commands] (https://www.postgresql.org/docs/9.4/static/sql-commands.html)".
The DB schema is in sql/schema.sql
, but don't modify that file directly,
instead put the changes in sql/branch.sql
. During deployment that script will
be run on the production DB and the changes will be merged into sql/schema.sql
.
That process is semi-automated by release.sh
.
For our styles we use SASS and [Bootstrap 3]
(https://getbootstrap.com/). Stylesheets are in the style/
directory and our
JavaScript code is in js/
. Our policy for both is to have as little as
possible of them: the website should be almost entirely usable without JS, and
our CSS should leverage Bootstrap as much as possible instead of containing lots
of custom rules that would become a burden to maintain.
We compile Bootstrap ourselves from the SASS source in the style/bootstrap/
directory. We do that to be able to easily customize it by changing values in
style/variables.scss
. Modifying the files in style/bootstrap/
is probably
not a good idea.
The easiest way to run the test suite is:
make test
That recreates the test DB's schema and runs all the tests. To speed things up you can also use the following commands:
make pytest
only runs the python tests without recreating the test DBmake pytest-re
does the same but only runs the tests that failed in the previous run
We depend on MangoPay for payments. If you want to modify that part of the code you'll need the MangoPay API documentation.
Liberapay is hosted on OpenShift Online, which runs the OpenShift M4 platform (also called OpenShift 2.x, not to be confused with the newer OpenShift 3.x based on Docker). The user documentation is on developers.openshift.com.
To deploy the app simply run release.sh
, it'll guide you through it.