This package contains ISO 4217 active and historical currency data. Written and tested for Python 3.6 and above. Supports pint for operations with currency units.
>>> from iso_4217 import Currency
>>> Currency.USD
<Currency.USD: 'US Dollar'>
>>> Currency.USD.value
'US Dollar'
>>> Currency.USD.number
840
>>> Currency('US Dollar')
<Currency.USD: 'US Dollar'>
>>> Currency.JPY.entities
frozenset({'JAPAN'})
>>> Currency.ZWR
<Currency.ZWR: 'Zimbabwe Dollar (2009)'>
>>> Currency.ZWR.entities
frozenset()
>>> Currency.ZWR.withdrew_entities
(Historic(entity='ZIMBABWE', name='Zimbabwe Dollar'...2009, month=6), begin=None)),)
>>> Currency.VED
<Currency.VED: 'Bolívar Soberano (VED)'>
Pint units and subunits are available with convenient unit and subunit
properties on Currency. Accessing these properties requires pint package installed
and automatically defines currency units in application default registry.
>>> Currency.USD.unit * 5 + Currency.USD.subunit * 5 <Quantity(5.05, 'USD')>
Currency units can be defined in any UnitRegistry manually
>>> import pint >>> from decimal import Decimal >>> from iso_4217 import define_currency_units >>> reg = define_currency_units(pint.UnitRegistry(non_int_type=Decimal)) >>> 5 * reg.USD <Quantity(5, 'USD')>
But units from separate registries should not be mixed
>>> Currency.USD.unit == reg.USD Traceback (most recent call last): ... ValueError: Cannot operate with Unit and Unit of different registries.
If you want to replace registry used by Currency just replace the application registry:
>>> pint.set_application_registry(reg) >>> Currency.USD.unit == reg.USD True
Subunits are defined with s suffix:
>>> 5 * reg.USDs
<Quantity(5, 'USDs')>
>>> (5 * reg.USDs).to("USD")
<Quantity(0.05, 'USD')>
>>> (5 * reg.BHDs).to_base_units()
<Quantity(0.005, 'BHD')>
Each currency is defined within it’s own dimension:
>>> (5 * reg.USD).to('EUR')
Traceback (most recent call last):
...
pint.errors.DimensionalityError: Cannot convert from 'USD' ([currency_USD]) to 'EUR' ([currency_EUR])
But automatic currency conversion can be made via pint Contexts
>>> context = pint.Context()
>>> eur_to_usd = lambda r, eur: eur * r("1.2 USD/EUR")
>>> context.add_transformation("[currency_EUR]", "[currency_USD]", eur_to_usd)
>>> (Currency.EUR.unit * 5).to('USD', context)
<Quantity(6.0, 'USD')>
Inspired by iso4217 package by Hong Minhee.
Release files for iso-4217 0.4.220401
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| iso_4217-0.4.220401.tar.gz | 17.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| iso_4217-0.4.220401-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.4 kB
Release files / iso_4217-0.4.220401.tar.gz
| Download URL | iso_4217-0.4.220401.tar.gz |
|---|---|
| Size | 17.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7ed4f1a7ad2e178ee3d24ca859d8442d31be34df5e7c58a4c7a1772316adb98e
|
|
BLAKE2b-256 checksum How to use checksums |
7f9ed7bf769a043ce9a4a773e818a068b7718a25e766557b14bdece5ac61bdf3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.13 CPython/3.10.4 Linux/5.13.0-1021-azure
|
Release files / iso_4217-0.4.220401-py3-none-any.whl
| Download URL | iso_4217-0.4.220401-py3-none-any.whl |
|---|---|
| Size | 17.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7674ea780ba27637069781dbdbe04fcac3ff6d0db999380d08b45b6e60df75b3
|
|
BLAKE2b-256 checksum How to use checksums |
6f0ab70022ebe6e25b29f36cf6f0c03ac0088c372263b2e8d95c9040acd6a94d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.13 CPython/3.10.4 Linux/5.13.0-1021-azure
|