A modular library for NBP exchange rates with offline and online support.
Project description
nbp_rates
A modular Python library for providing NBP (Narodowy Bank Polski) exchange rates with both offline and online support. Very fast and easy to use.
Features
- Offline Support: Includes historical exchange rates from 1984 to 17-July-2026
- Online Fallback: Automatically fetches from NBP API for dates after 17-July-2026
- Dual Table Support: Supports both Table A (major currencies) and Table B (minor currencies)
- Smart Fallback: Optionally searches last available rate before given date (handles holidays, weekends and missing data)
- Super Fast: Optimized for speed with most queries served from local data with minimal API calls
- Easy and Powerful: Simple to use with 100+ currencies supported
- Precise and exact output: Results provided as string to avoid floating-point rounding issues
- Flexible Date Input: Accepts
datetime.date,datetime.datetime, or ISO format strings (YYYY-MM-DD) - No external dependencies: Pure Python with standard library
Installation
Install from PyPI:
pip install nbp_rates
Or install in development mode from the repository:
git clone https://github.com/varciasz/nbp_rates.git
cd nbp_rates
pip install -e .
Requirements
- Python 3.6 or higher
- No external dependencies (uses only Python standard library)
Usage
Basic Usage
Get the exchange rate for a specific date and currency:
from nbp_rates import ProvideCurrencyRate
from datetime import date
# Get USD rate for a specific date
rate = ProvideCurrencyRate(date(2024, 1, 15), 'USD')
print(f"USD rate on 2024-01-15: {rate}")
# Using a string date (ISO format)
rate = ProvideCurrencyRate('2024-01-15', 'EUR')
print(f"EUR rate on 2024-01-15: {rate}")
# Using datetime object
from datetime import datetime
rate = ProvideCurrencyRate(datetime(2024, 1, 15, 10, 30), 'GBP')
print(f"GBP rate on 2024-01-15: {rate}")
Using Fallback
Enable fallback to search up to 31 days back for an available rate (useful for holidays, weekends and missing data):
# Get rate for a holiday, falling back to previous business day if needed
rate = ProvideCurrencyRate(date(2024, 1, 1), 'USD', fallback=True)
print(f"USD rate: {rate}")
Return Values
- Successfully fetched rate: String representation of the exchange rate (e.g.,
"4.25") - Currency not found:
"Error - wrong currency" - Module loading error:
"Error - unable to load currency module" - Fallback limit exceeded or rate not found:
"-1"
Supported Currencies
The library supports 200+ currencies including:
Major currencies (Table A): USD, EUR, GBP, JPY, CHF, CAD, AUD, and many more
Minor currencies (Table B): INR, CNY, MXN, BRL, ZAR, SGD, and many more
See the source code for the complete list of TABLE_A_CURRENCIES and TABLE_B_CURRENCIES.
API Reference
ProvideCurrencyRate(date_given, currency, fallback=False, _depth=0)
Fetches the FX rate for a given date and currency.
Parameters:
date_given(datetime.date, datetime.datetime, or str): The date for which to fetch the ratecurrency(str): ISO 4217 currency code (e.g., 'USD', 'EUR')fallback(bool, optional): If True, searches up to 31 days back for available rates. Default: False_depth(int, optional): Internal parameter for recursion tracking. Default: 0
Returns:
- str: Exchange rate as a string, or error message
Raises:
- ValueError: If the date format is invalid or currency is not recognized
Data Sources
- Offline Data: Embedded exchange rate data from 1984 to 17-July-2026
- Online Data: NBP API (
https://api.nbp.pl/) for dates after the offline data cutoff
License
This project is licensed under the MIT License - see the LICENSE file for details.
Author
Sebastian Kowalik
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Changelog
Version 1.3.20260718
- Initial release with offline and online exchange rate support
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 nbp_rates-1.3.20260718.tar.gz.
File metadata
- Download URL: nbp_rates-1.3.20260718.tar.gz
- Upload date:
- Size: 1.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b98fee3cb40151483fb6b3e500e9d0a3e6f7ec3ac11800dcb4c58eee18d1f1d9
|
|
| MD5 |
536e01dc3f0a16235c2f5e57f940fe4f
|
|
| BLAKE2b-256 |
57bfc5bfac0b99290bc4e54148345fe8b9392742eefc699dcd731d740667a0fb
|
Provenance
The following attestation bundles were made for nbp_rates-1.3.20260718.tar.gz:
Publisher:
python-publish.yml on varciasz/nbp_rates
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nbp_rates-1.3.20260718.tar.gz -
Subject digest:
b98fee3cb40151483fb6b3e500e9d0a3e6f7ec3ac11800dcb4c58eee18d1f1d9 - Sigstore transparency entry: 2195429813
- Sigstore integration time:
-
Permalink:
varciasz/nbp_rates@b3c6b3619c958746508d5bc459c6fd083852a98e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/varciasz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@b3c6b3619c958746508d5bc459c6fd083852a98e -
Trigger Event:
push
-
Statement type:
File details
Details for the file nbp_rates-1.3.20260718-py3-none-any.whl.
File metadata
- Download URL: nbp_rates-1.3.20260718-py3-none-any.whl
- Upload date:
- Size: 1.5 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd4befdbdd2451e7a3e86a82ec3571794b24d0715015c387add9d19247187093
|
|
| MD5 |
ade029b0a388dfd5bc0d27c1a43f07e9
|
|
| BLAKE2b-256 |
5f8d89eb8b04cdc4435bf3d00f224df72387e95e98d243801d46db3f6d3fb813
|
Provenance
The following attestation bundles were made for nbp_rates-1.3.20260718-py3-none-any.whl:
Publisher:
python-publish.yml on varciasz/nbp_rates
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nbp_rates-1.3.20260718-py3-none-any.whl -
Subject digest:
dd4befdbdd2451e7a3e86a82ec3571794b24d0715015c387add9d19247187093 - Sigstore transparency entry: 2195429827
- Sigstore integration time:
-
Permalink:
varciasz/nbp_rates@b3c6b3619c958746508d5bc459c6fd083852a98e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/varciasz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@b3c6b3619c958746508d5bc459c6fd083852a98e -
Trigger Event:
push
-
Statement type: