Skip to main content

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 data from 1984 to 27-July-2026
  • Online Fallback: Automatically fetches from NBP API for dates after 27-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 200+ currencies supported
  • Precise and exact output: No rounding within library. Results provided as string to avoid floating-point rounding issues
  • Reliable: As most of data is served offline, it is not affected by NBP API downtime, responsiveness or rate limits
  • Flexible Date Input: Accepts datetime.date, datetime.datetime, or ISO format strings (YYYY-MM-DD)
  • No external dependencies: Pure Python with standard library
  • Daily Updates: new version of library released daily with the latest exchange rates available offline

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 rate
  • currency (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 27-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

Current Version 1.5.20260728

  • Library is updated daily with the latest exchange rates included offline. Last 8 digits of version number represent the date when the version was generated (YYYYMMDD).

Version 1.5

  • First official stable version with automated daily updates and support for 200+ currencies.

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

nbp_rates-1.5.20260728.tar.gz (1.5 MB view details)

Uploaded Source

Built Distribution

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

nbp_rates-1.5.20260728-py3-none-any.whl (1.5 MB view details)

Uploaded Python 3

File details

Details for the file nbp_rates-1.5.20260728.tar.gz.

File metadata

  • Download URL: nbp_rates-1.5.20260728.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for nbp_rates-1.5.20260728.tar.gz
Algorithm Hash digest
SHA256 578d95ca309806cb0c0fabb711998087ff59a08c6e540bc5eb4fd587881afcf0
MD5 ff9a32eba91bd0cbd10e80daea52f8a3
BLAKE2b-256 824e1116c851c8c3dc3d9194249543ce3e80870dfea0f452a92c357e85cefb1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for nbp_rates-1.5.20260728.tar.gz:

Publisher: python-publish.yml on varciasz/nbp_rates

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nbp_rates-1.5.20260728-py3-none-any.whl.

File metadata

File hashes

Hashes for nbp_rates-1.5.20260728-py3-none-any.whl
Algorithm Hash digest
SHA256 fb7b60c29aac73b8b9c24c10a37c50e6d8093822b0fb013d63b6a8fb59073028
MD5 ddc4fe997fafb361f4f5b2d857dfe477
BLAKE2b-256 fc53c17ae7f394bcb9c992da973474665dc8a9de095afb1430fca350f59320c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for nbp_rates-1.5.20260728-py3-none-any.whl:

Publisher: python-publish.yml on varciasz/nbp_rates

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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