Skip to main content

An up to date human friendly and flexible approach for development with any kind of monetary amounts

Project description

stockholmMoney for Python 3

pypi MIT License Code coverage Made with Python

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

stockholm-0.0.9.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

stockholm-0.0.9-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

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

Hashes for stockholm-0.0.9.tar.gz
Algorithm Hash digest
SHA256 e02d868fc1cf577560fcb7f47e7940b014c5ddd8868027cb7828e559760e2061
MD5 981887f20aa52876b3ce1490062afede
BLAKE2b-256 af7ff1138b8e70f532c1f812dfe6cf07fea7413585c61faca8eda52b5869ac30

See more details on using hashes here.

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

Hashes for stockholm-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 8bea4260990b0269e9a94c1c42fb2da8ad4977b889bc9fa1e7acd16b1a95cb6b
MD5 f96825f3e48019d2a6da7c9fd09c4e05
BLAKE2b-256 63b336dd4c7ae8f4156bb6692f3727689ea123c3c452047a4a5fc19facc64b52

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page