Liberapay adalah platform sumbangan berulang. Kami membantu Anda mendanai pencipta dan proyek yang Anda hargai.
Catatan: Webapp ini tidak dapat di-hostan.
Ingin mengobrol? Bergabunglah dengan kami di Gitter.
Atau Anda dapat memposting pesan di salon github kami.
Anda dapat membantu menerjemahkan Liberapay melalui Weblate. Status Saat Ini:
Jika Anda memiliki pertanyaan tentang menerjemahkan Liberapay, Anda dapat menanyakannya di salon.
Liberapay awalnya bercabang dari Genipay dan mewarisi pando-kerangka mikro web ( Né Aspen), yang didasarkan pada routing sistem file dan menyederhanakan. Jangan khawatir, ini cukup sederhana. Misalnya untuk membuat Liberapay mengembalikan Hello $user, your id is $userid pesan untuk permintaan ke URL /$user/hello , Anda hanya perlu membuat file www/%username/hello.spt dengan ini di dalam:
from liberapay.utils import get_participant
[---]
participant = get_participant(state)
[---] text/html
{{ _("Hello {0}, your id is {1}", request.path['username'], participant.id) }}
Seperti diilustrasikan oleh baris terakhir, mesin template default kami adalah Jinja.
Fungsi _ mencoba menerjemahkan pesan ke dalam bahasa pengguna dan lolos dari variabel dengan benar (ia tahu bahwa itu menghasilkan pesan untuk halaman HTML).
Kode Python di dalam Simprates hanya untuk logika khusus permintaan, kode backend umum ada di liberapay/ direktori.
Pastikan Anda memiliki dependensi berikut yang diinstal terlebih dahulu:
Kemudian jalankan:
make env
Sekarang Anda perlu memberi diri Anda kekuatan postgres superuser (jika belum dilakukan), dan membuat dua basis data:
su postgres -c "createuser --superuser $(whoami)"
createdb liberapay
createdb liberapay_tests
Jika Anda memerlukan pemahaman yang lebih dalam, lihatlah peran database dan mengelola bagian database dari dokumentasi PostgreSQL.
Kemudian Anda dapat mengatur DB:
make schema
Variabel lingkungan digunakan untuk konfigurasi, nilai default di defaults.env dan tests/test.env . Anda dapat mengesampingkannya di local.env dan tests/local.env masing -masing.
Setelah Anda menginstal semuanya dan mengatur database, Anda dapat menjalankan aplikasi:
make run
Sekarang harus diakses di http: // localhost: 8339/.
Tidak ada pengguna yang disediakan secara default. Anda dapat membuat akun seperti yang Anda lakukan di situs web nyata, dan jika Anda mau, Anda juga dapat membuat banyak pengguna palsu (tetapi mereka tidak hebat):
make data
Untuk memberikan izin admin ke akun, memodifikasi database seperti itu:
psql liberapay -c "update participants set privileges = 1 where username = 'account-username'"
Untuk menjalankan gajian lokal terbuka http: // localhost: 8339/admin/gajian dan klik tombol "run payday". Anda dapat menambahkan OVERRIDE_PAYDAY_CHECKS=yes di file local.env untuk menonaktifkan pemeriksaan keselamatan yang mencegah menjalankan bayaran pada waktu yang salah.
Kode Python berinteraksi dengan database dengan mengirim kueri SQL mentah melalui pustaka postgres.py.
Dokumentasi resmi PostgreSQL adalah teman Anda saat berhadapan dengan SQL, terutama bagian "Bahasa SQL" dan "Perintah SQL".
Skema DB ada di sql/schema.sql , tetapi jangan memodifikasi file itu secara langsung, alih -alih menempatkan perubahan di sql/branch.sql . Selama penyebaran skrip itu akan dijalankan pada DB produksi dan perubahan akan digabungkan menjadi sql/schema.sql . Proses itu semi-otomatis oleh release.sh .
Untuk gaya kami, kami menggunakan Sass dan Bootstrap 3. Stylesheets ada di style/ direktori dan kode JavaScript kami ada di js/ . Kebijakan kami untuk keduanya adalah memasukkan sesedikit mungkin: Situs web harus hampir seluruhnya dapat digunakan tanpa JS, dan CSS kami harus memanfaatkan bootstrap sebanyak mungkin daripada berisi banyak aturan khusus yang akan menjadi beban untuk dipertahankan.
Kami mengkompilasi bootstrap kami dari sumber Sass dalam style/bootstrap/ direktori. Kami melakukan itu untuk dapat dengan mudah menyesuaikannya dengan mengubah nilai dalam style/variables.scss . Memodifikasi file dalam style/bootstrap/ mungkin merupakan ide yang buruk.
Untuk ikon antarmuka pengguna kami menggunakan ikon bootstrap. Ikon dapat dimasukkan dalam halaman dengan memanggil icon makro dari templates/macros/icons.html , misalnya {{ icon('liberapay') }} . Ikon disimpan dalam file www/assets/icons.svg . Untuk menambahkan ikon baru dalam file itu, elemen root <svg> dari ikon yang ditambahkan harus diubah menjadi elemen <symbol> , hanya mempertahankan atribut viewBox -nya dan menambahkan atribut id .
Jika Anda tidak menemukan ikon di ikon bootstrap yang sesuai dengan kasus penggunaan Anda, Anda dapat mencoba mencari katalog online seperti Flaticon, Icons8, Pictogrammers, SVG Repo dan Proyek Kata benda. Untuk ikon merek, ikon sederhana adalah sumber yang bagus.
Cara termudah untuk menjalankan suite tes adalah:
make test
Ini menciptakan kembali skema DB tes dan menjalankan semua tes. Untuk mempercepat Anda juga dapat menggunakan perintah berikut:
make pytest hanya menjalankan tes Python tanpa menciptakan kembali tes DBmake pytest-re hanya menjalankan tes yang gagal sebelumnya Beberapa tes kami termasuk interaksi dengan layanan eksternal. Untuk mempercepat tes -tes tersebut, kami mencatat permintaan dan respons secara otomatis menggunakan VCR. Catatan ada di direktori tests/py/fixtures , satu per kelas uji.
Jika Anda menambahkan atau memodifikasi interaksi dengan layanan eksternal, maka tes akan gagal, karena VCR tidak akan menemukan permintaan baru atau yang dimodifikasi dalam catatan, dan akan menolak untuk merekam permintaan baru secara default (lihat mode catatan untuk informasi lebih lanjut). Ketika itu terjadi, Anda dapat menambahkan VCR=new_episodes ke perintah pengujian Anda (misalnya make pytest VCR=new_episodes ) atau hapus file fixture usang (misalnya rm tests/py/fixtures/TestPayinsStripe.yml ).
Jika Anda menguji API yang menggunakan kunci idempotensi (misalnya API Stripe), maka beberapa permintaan akan gagal jika tidak lagi identik. Dalam hal ini, tingkatkan nilai atribut offset kelas uji sehingga tombol idempotensi yang berbeda akan digunakan.
PostgreSQL dirancang untuk mencegah kehilangan data, jadi ia banyak menulis disk sinkron secara default. Untuk mengurangi jumlah penulisan yang memblokir, skrip recreate-schema.sh kami secara otomatis mengganti opsi synchronous_commit untuk off untuk database pengujian, namun ini tidak sepenuhnya menonaktifkan sinkronisasi. Jika instance PostgreSQL Anda hanya berisi data yang dapat Anda hilangkan, maka Anda dapat mempercepat lebih jauh dengan mengatur fsync untuk off , wal_level ke minimal dan max_wal_senders ke 0 dalam file konfigurasi server ( postgresql.conf ).
Liberapay saat ini mendukung dua prosesor pembayaran: Stripe dan PayPal.
Anda dapat meneruskan panggilan balik Stripe ke instance Liberapay lokal Anda dengan menjalankan make stripe-bridge . Program stripe-cli harus diinstal agar ini berfungsi.
Semua dependensi baru perlu diaudit untuk memeriksa apakah mereka tidak mengandung kode berbahaya atau kerentanan keamanan.
Kami menggunakan mode periksa hash PIP untuk melindungi diri dari perusakan ketergantungan. Dengan demikian, saat menambahkan atau meningkatkan ketergantungan hash baru perlu dihitung dan dimasukkan ke dalam file persyaratan. Untuk itu Anda dapat menggunakan hashin:
pip install hashin
hashin package==x.y -r requirements_base.txt
Jika karena alasan tertentu, Anda perlu mengulangi semua persyaratan, jalankan make rehash-requirements .
Untuk meningkatkan semua dependensi dalam file persyaratan, jalankan hashin -u -r requirements_base.txt . Anda mungkin harus menjalankan perintah hashin ekstra jika subdependensi baru hilang.
Ketergantungan pengujian di requirements_tests.txt tidak mengikuti aturan ini karena mereka tidak diinstal dalam produksi. Terserah Anda untuk mengisolasi lingkungan pengembangan Anda dari seluruh sistem Anda untuk melindunginya dari kemungkinan kerentanan dalam ketergantungan pengujian.
Saat menulis kode yang menangani informasi pribadi, perlu diingat prinsip -prinsip yang diabadikan dalam GDPR.
Catatan: Liberapay tidak dapat di-hosting sendiri, bagian ini hanya dimaksudkan untuk mendokumentasikan bagaimana kami menggunakan versi baru.
Liberapay saat ini diselenggarakan di AWS (Irlandia).
Untuk menggunakan aplikasi Cukup jalankan release.sh , itu akan memandu Anda melewatinya. Tentu saja Anda perlu diberikan akses terlebih dahulu.
Dedikasi domain publik CC0 (lihat diskusi ini untuk detailnya.)