Exchange rates
Level: Intermediate (score: 3)
In this Bite you have to provide the currency exchange rates from EUR to USD and GBP for every day in a given date range.
In the end, you can conveniently look up exchange rates for every required date. The date range is specified by the parameters start_date
and end_date
of the function exchange_rates
. Both parameters are a string in the format "Year-Month-Day".
Exchange rates data from the exchangeratesapi.io API are given as shown below:
{
"start_at": "2019-01-01",
"end_at": "2020-09-01",
"base": "EUR",
"rates": {
"2019-06-28": {
"USD": 1.138,
"GBP": 0.89655
},
"2020-05-19": {
"USD": 1.095,
"GBP": 0.89535
},
"...": {}
}
}
However, this data only contains exchange rates for days on which stock exchange is open. Usually this excludes weekends and several holidays. Therefore, you have to extract this information and derive exchange rates for days that are not available in this data set.
For days where the stock exchange is closed, you have to find the date that precedes a given date when the stock exchange was open. For example, when taking the exchange rates on 2020-04-03 (Friday), the exchange rates for 2020-04-04 (Saturday) and 2020-04-05 (Sunday) are equal to the exchange rates on 2020-04-03 (Friday).
Additionaly, you have to provide the "Base Date" of the exchange rates. The "Base Date" is the date to which the exchange rates are related to originally. So for the above example the Base Dates look like the following:
Date | Base Date | USD | GBP |
2020-04-03 | 2020-04-03 | 1.0785 | 0.8785 |
2020-04-04 | 2020-04-03 | 1.0785 | 0.8785 |
2020-04-05 | 2020-04-03 | 1.0785 | 0.8785 |
To obtain all days to be considered, complete the get_all_days
function. This function returns a list of all days in date
format. Complete the function match_daily_rates
which returns a match between a given day and an entry in the original dataset.
The exchange_rates
function should return the exchange rates for every day in the date range as shown below:
result = {
date(2020, 4, 5): {
"Base Date": date(2020, 4, 3),
"USD": 1.0785,
"GBP": 0.8785,
}
}
Finally two additional requirements:
- Create the result in such a way that it is (chronologically) ordered according to the date keys. You may want to take a look at Python 3.7 changes or at the collections
module.
- Check if the given start_date
and end_date
for exchange_rates
are compatible to the provided dataset. If either the start_date
lies before start of the dataset range or end_date
lies after the end of the dataset range throw a ValueError
and inform the user of the particular problem.
Good luck and keep calm and code in Python!