Source code for fixerio.client
from __future__ import unicode_literals
import datetime
try:
from urllib.parse import urljoin
except ImportError: # For Python 2
from urlparse import urljoin # noqa
import requests
from .exceptions import FixerioException
BASE_URL = 'http://data.fixer.io/api/'
LATEST_PATH = 'latest'
[docs]class Fixerio(object):
""" A client for Fixer.io. """
def __init__(self, access_key, symbols=None):
"""
:param access_key: your API Key.
:type access_key: str or unicode
:param symbols: currency symbols to request specific exchange rates.
:type symbols: list or tuple
"""
self.access_key = access_key
self.symbols = symbols
def _create_payload(self, symbols):
""" Creates a payload with no none values.
:param symbols: currency symbols to request specific exchange rates.
:type symbols: list or tuple
:return: a payload.
:rtype: dict
"""
payload = {'access_key': self.access_key}
if symbols is not None:
payload['symbols'] = ','.join(symbols)
return payload
[docs] def latest(self, symbols=None):
""" Get the latest foreign exchange reference rates.
:param symbols: currency symbols to request specific exchange rates.
:type symbols: list or tuple
:return: the latest foreign exchange reference rates.
:rtype: dict
:raises FixerioException: if any error making a request.
"""
try:
symbols = symbols or self.symbols
payload = self._create_payload(symbols)
url = BASE_URL + LATEST_PATH
response = requests.get(url, params=payload)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as ex:
raise FixerioException(str(ex))
[docs] def historical_rates(self, date, symbols=None):
"""
Get historical rates for any day since `date`.
:param date: a date
:type date: date or str
:param symbols: currency symbols to request specific exchange rates.
:type symbols: list or tuple
:return: the historical rates for any day since `date`.
:rtype: dict
:raises FixerioException: if any error making a request.
"""
try:
if isinstance(date, datetime.date):
# Convert date to ISO 8601 format.
date = date.isoformat()
symbols = symbols or self.symbols
payload = self._create_payload(symbols)
url = BASE_URL + date
response = requests.get(url, params=payload)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as ex:
raise FixerioException(str(ex))