A simple wallet django application
Project description
A simple wallet django application
Creating a New Wallet
A wallet is owned by a user. Should you be using a custom user model, the wallet should still work properly as it the wallet points to settings.AUTH_USER_MODEL.
from wallet.models import Wallet
# wallets are owned by users.
wallet = user.wallet_set.create()
Despositing a balance to a wallet
from django.db import transaction
with transaction.atomic():
# We need to lock the wallet first so that we're sure
# that nobody modifies the wallet at the same time
# we're modifying it.
wallet = Wallet.select_for_update().get(pk=wallet.id)
wallet.deposit(100) # amount
Withdrawing a balance from a wallet
from django.db import transaction
with transaction.atomic():
# We need to lock the wallet first so that we're sure
# that nobody modifies the wallet at the same time
# we're modifying it.
wallet = Wallet.select_for_update().get(pk=wallet.id)
wallet.withdraw(100) # amount
Withdrawing with an insufficient balance
When a user tries to withdraw from a wallet with an amount greater than its balance, the transaction raises a wallet.errors.InsufficientBalance error.
# wallet.current_balance # 50
# This raises an wallet.errors.InsufficentBalance.
wallet.withdraw(100)
This error inherits from django.db.IntegrityError so that when it is raised, the whole transaction is automatically rolled-back.
Transferring between wallets
One can transfer a values between wallets. It uses withdraw and deposit internally. Should the sending wallet have an insufficient balance, wallet.errors.InsufficientBalance is raised.
with transaction.atomic():
wallet = Wallet.select_for_update().get(pk=wallet_id)
transfer_to_wallet = Wallet.select_for_update().get(pk=transfer_to_wallet_id)
wallet.transfer(transfer_to_wallet, 100)
CURRENCY_STORE_FIELD
The CURRENCY_STORE_FIELD is a django field class that contains how the fields should be stored. By default, it uses django.models.BigIntegerField. It was chosen that way for simplicity - just make cents into your smallest unit (0.01 -> 1, 1.00 -> 100).
You can change this to decimal by adding this to your settings.py:
# settings.py
CURRENCY_STORE_FIELD = models.DecimalField(max_digits=10, decimal_places=2)
You need to run ./manage.py makemigrations after that.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django-pursed-0.9.linux-x86_64.tar.gz.
File metadata
- Download URL: django-pursed-0.9.linux-x86_64.tar.gz
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca20aab4a01730edf373c07ef184275725c4031e4fb0d8500f94b2c0925c733c
|
|
| MD5 |
94cc1eaee89a69a61a3c5c8b96f48fa7
|
|
| BLAKE2b-256 |
2e58baa3761e86a132dc71f6b03c4bbc31bcc71becffd2cccc2435f3028b7242
|
File details
Details for the file django_pursed-0.9-py3-none-any.whl.
File metadata
- Download URL: django_pursed-0.9-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ea21139ef912fe4e04efbd41be0c8a621f9ae17a7762193581c869c5208b04f
|
|
| MD5 |
c4d5d00a1488fecee6f6cf1374c6793e
|
|
| BLAKE2b-256 |
c4a4b0bb1e9556abfa63a5c5759da105eee3484828266039afb5a1309310f13d
|
File details
Details for the file django_pursed-0.9-py2.py3-none-any.whl.
File metadata
- Download URL: django_pursed-0.9-py2.py3-none-any.whl
- Upload date:
- Size: 23.0 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b225c50cd2698fa85f3659bb22c4aee817bb9fa49d06a6f9cb5ec88482f27582
|
|
| MD5 |
c59f23685b895662a195672dcca0f186
|
|
| BLAKE2b-256 |
5c46dd34fb25e153346c4ae55a3a5f8ac9c0e02d4f18871af51d01ac031fe899
|