An up to date human friendly and flexible approach for development with any kind of monetary amounts
Project description
stockholm — Money for Python 3
Library for formatting and performing arithmetic and comparison operations on monetary amounts. Also with support for currency handling, exchange and network transport structure generation as well as parsing.
An up to date human friendly and flexible approach for development with any kind of monetary amounts.
At its bone a Money class for Python 3.x. This is a library to be used by backend and frontend API coders of fintech companies, web merchants and subscription services. A simple, yet powerful way of coding with money.
from stockholm import Money
The stockholm.Money object has full arithmetic support together with int, float, Decimal, other Money objects as well as string. The stockholm.Money object also supports complex string formatting functionality for easy debugging and a clean coding pattern.
from stockholm import Currency
Currencies to monetary amounts can be specified using either currencies built with the stockholm.Currency metaclasses or simply by specifying the currency ticker as a string (for example "SEK" or "EUR") when creating a new Money object.
Currencies using the stockholm.Currency metaclasses can hold additional options, such as default number of decimals in string output. Note that the amounts are usually never behind the scenes and uses the same precision and backend as Decimal values and can as well be interchangable with such values.
Installation with pip
$ pip install stockholm
Examples
Arithmetics
Full arithmetic support with different types, backed by Decimal for dealing with rounding errors, while also keeping the monetary amount fully currency aware.
from stockholm import Money
money = Money("4711.50", currency="SEK")
print(money)
# 4711.50 SEK
output = (money + 100) * 3 + Money(50)
print(output)
# 14484.50 SEK
print(output / 5)
# 2896.90 SEK
print(round(output / 3, 4))
# 4828.1667 SEK
print(round(output / 3, 1))
# 4828.20 SEK
Formatting
Advanced string formatting functionality.
from stockholm import Money
jpy_money = Money(1352953, "JPY")
exchange_rate = Money("0.08861326")
sek_money = Money(jpy_money * exchange_rate, "SEK")
print(f"I have {jpy_money:,.0m} which equals around {sek_money:,.2m}")
print(f"The exchange rate is {exchange_rate} ({jpy_money:c} -> {sek_money:c})")
# I have 1,352,953 JPY which equals around 119,889.58 SEK
# The exchange rate is 0.08861326 (JPY -> SEK)
print(f"{jpy_money:.0f}")
# 1352953
print(f"{sek_money:.2f}")
# 119889.58
print(f"{sek_money:.1f}")
# 119889.6
print(f"{sek_money:.0f}")
# 119890
Input data types
Flexible ways for assigning values to a monetary amount using many different input data types and methods.
from decimal import Decimal
from stockholm import Money
Money(100, currency="EUR")
# <stockholm.Money: "100.00 EUR">
Money("1338 USD")
# <stockholm.Money: "1338.00 USD">
Money("0.5")
# <stockholm.Money: "0.50">
amount = Decimal(5000) / 3
Money(amount, currency="XDR")
# <stockholm.Money: "1666.666666667">
money = Money("0.30285471")
Money(money, currency="BTC")
# <stockholm.Money: "0.30285471 BTC">
cents_as_str = "471100"
Money(cents_as_str, currency="USD", is_cents=True)
# <stockholm.Money: "4711.00 USD">
List arithmetics
Adding several monetary amounts from a list.
from stockholm import Money
amounts = [
Money(1),
Money("1.50"),
Money("1000"),
]
# Use Money.sum to deal with complex values of different data types
Money.sum(amounts)
# <stockholm.Money: "1002.50">
# Built-in sum may also be used (if only working with monetary amounts)
sum(amounts)
# <stockholm.Money: "1002.50">
Acknowledgements
Built with inspiration from https://github.com/carlospalol/money and https://github.com/vimeo/py-money
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 Distribution
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 stockholm-0.0.9.tar.gz.
File metadata
- Download URL: stockholm-0.0.9.tar.gz
- Upload date:
- Size: 11.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e02d868fc1cf577560fcb7f47e7940b014c5ddd8868027cb7828e559760e2061
|
|
| MD5 |
981887f20aa52876b3ce1490062afede
|
|
| BLAKE2b-256 |
af7ff1138b8e70f532c1f812dfe6cf07fea7413585c61faca8eda52b5869ac30
|
File details
Details for the file stockholm-0.0.9-py3-none-any.whl.
File metadata
- Download URL: stockholm-0.0.9-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8bea4260990b0269e9a94c1c42fb2da8ad4977b889bc9fa1e7acd16b1a95cb6b
|
|
| MD5 |
f96825f3e48019d2a6da7c9fd09c4e05
|
|
| BLAKE2b-256 |
63b336dd4c7ae8f4156bb6692f3727689ea123c3c452047a4a5fc19facc64b52
|