Skip to main content

A Django application for currency conversion using real-time exchange rates

Project description

Django Currency Converter

A Django application for converting currencies using real-time exchange rates from ExchangeRate-API.

Features

  • Real-time currency conversion using ExchangeRate-API
  • Built-in caching for improved performance
  • Custom Django management commands
  • Comprehensive error handling
  • Support for 24+ major currencies
  • Production-ready with proper logging
  • Type hints and documentation

Installation

  1. Install the package:
pip install django-currency-converter-erapi
  1. For .env file support (recommended), also install:
pip install django-currency-converter-erapi[dotenv]
  1. Add currency_converter to your Django project's INSTALLED_APPS in settings.py:
INSTALLED_APPS = [
    # ... other apps
    'currency_converter_erapi',
]

Configuration

API Key Configuration (Multiple Options)

The currency converter supports multiple ways to configure your API key for premium access:

Option 1: .env File (Recommended)

Create a .env file in your Django project root:

# .env file
CURRENCY_API_KEY=your_exchangerate_api_key_here
# or alternatively:
EXCHANGERATE_API_KEY=your_exchangerate_api_key_here

Option 2: Django Settings

Add to your Django settings.py:

CURRENCY_API_KEY = 'your_api_key_here'

Option 3: Environment Variables

Set environment variables directly:

export CURRENCY_API_KEY=your_api_key_here
# or
export EXCHANGERATE_API_KEY=your_api_key_here

Priority Order

The package checks for API keys in this order:

  1. Django settings (CURRENCY_API_KEY)
  2. Environment variable CURRENCY_API_KEY
  3. Environment variable EXCHANGERATE_API_KEY
  4. No API key (uses free tier)

Additional Settings

Add these optional settings to your Django settings.py:

# Currency Converter Settings (Optional)
CURRENCY_CACHE_TIMEOUT = 3600  # Cache exchange rates for 1 hour (default: 3600)

# Ensure you have caching configured
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake',
    }
}

Usage

Using the Management Command

Convert currency using the management command:

# Basic conversion
python manage.py convert_currency 100 USD EUR

# Show only exchange rate
python manage.py convert_currency 100 USD EUR --rate-only

# List all supported currencies
python manage.py convert_currency 0 USD EUR --list-currencies

Using the Converter Class in Your Code

from currency_converter_erapi.converter import CurrencyConverter
from currency_converter_erapi.exceptions import InvalidCurrencyError, APIError

try:
    converter = CurrencyConverter()

    # Convert 100 USD to EUR
    result = converter.convert(100, 'USD', 'EUR')
    print(f"100 USD = {result} EUR")

    # Get exchange rate only
    rate = converter.get_exchange_rate('USD', 'EUR')
    print(f"1 USD = {rate} EUR")

    # Get supported currencies
    currencies = converter.get_supported_currencies()
    print(f"Supported currencies: {currencies}")

except InvalidCurrencyError as e:
    print(f"Invalid currency: {e}")
except APIError as e:
    print(f"API error: {e}")

Supported Currencies

The application supports 24 major currencies:

  • USD, EUR, GBP, JPY, AUD, CAD, CHF, CNY
  • SEK, NZD, MXN, SGD, HKD, NOK, TRY, RUB
  • INR, BRL, ZAR, KRW, DKK, PLN, TWD, THB

Error Handling

The package includes comprehensive error handling:

  • InvalidCurrencyError: Raised for unsupported currency codes
  • APIError: Raised when the exchange rate API fails
  • RateLimitError: Raised when API rate limits are exceeded
  • NetworkError: Raised for network connectivity issues
  • CacheError: Raised for caching-related errors

API Rate Limits

The free ExchangeRate-API has the following limits:

  • 1,500 requests per month
  • Cached responses help minimize API calls

For higher limits, consider upgrading to a paid plan and setting CURRENCY_API_KEY.

Requirements

  • Python 3.8+
  • Django 3.2+
  • requests 2.25.0+

Development

Running Tests

python -m pytest

Code Quality

The project follows PEP 8 standards and includes:

  • Type hints
  • Comprehensive docstrings
  • Error handling
  • Logging support

Troubleshooting

Common Issues

  1. API Rate Limit Exceeded

    • Solution: Wait for rate limit reset or upgrade to paid plan
  2. Network Timeout

    • Solution: Check internet connection and firewall settings
  3. Cache Issues

    • Solution: Ensure Django caching is properly configured
  4. Invalid Currency Code

    • Solution: Use 3-letter ISO currency codes (e.g., USD, EUR)

Logging

Enable logging to see detailed error information:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'currency_converter_erapi': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    },
}

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

For issues and questions:

  • Create an issue on GitHub
  • Check the troubleshooting section above

Changelog

Version 1.0.0

  • Initial release
  • Support for 24 major currencies
  • Caching support
  • Management commands
  • Comprehensive error handling

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

django_currency_converter_erapi-1.2.0.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

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

File details

Details for the file django_currency_converter_erapi-1.2.0.tar.gz.

File metadata

File hashes

Hashes for django_currency_converter_erapi-1.2.0.tar.gz
Algorithm Hash digest
SHA256 d85900bc683499c067e54bb0c6605765b9c1533e46051074968fc01cc61d3809
MD5 1e7b850d2cabcc6e7bb20711f731e4c3
BLAKE2b-256 95157619c38e5d3c939d279ecf2790f0e4604294b3dfed667c72334e9db39862

See more details on using hashes here.

File details

Details for the file django_currency_converter_erapi-1.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_currency_converter_erapi-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6684813cdf674a78d93a29dff9b1af3b3e23e4be9bd51dd23eff7086cdb213c4
MD5 6d93f79325cb3b083245fda751d60abc
BLAKE2b-256 4b45cb7b60eb19e73b518a85fe207f04855321a46197b662357f44784594aa6b

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