@@ -24,23 +24,22 @@ def __init__(self):
2424 def _source_url (self ):
2525 return "http://api.fixer.io/"
2626
27- def _validate_date (self , date_str ):
27+ # def _validate_date(self, date_str):
28+
29+ def _get_date_string (self , date_str ):
30+ if date_str is None :
31+ return 'latest'
2832 try :
2933 datetime .datetime .strptime (date_str , '%Y-%m-%d' )
34+ return date_str
3035 except ValueError :
3136 raise ValueError ("Incorrect date String, date_str should be YYYY-MM-DD" )
3237
33-
38+
3439class CurrencyRates (Common ):
3540
3641 def get_rates (self , base_cur , date_str = None ):
37-
38- if date_str is None :
39- date_str = 'latest'
40- else :
41- self ._validate_date (date_str )
42- date_str = str (date_str )
43-
42+ date_str = self ._get_date_string (date_str )
4443 payload = {'base' : base_cur }
4544 source_url = self ._source_url () + date_str
4645 response = requests .get (source_url , params = payload )
@@ -50,12 +49,7 @@ def get_rates(self, base_cur, date_str=None):
5049 raise RatesNotAvailableError ("Currency Rates Source Not Ready" )
5150
5251 def get_rate (self , base_cur , dest_cur , date_str = None ):
53- if date_str is None :
54- date_str = 'latest'
55- else :
56- self ._validate_date (date_str )
57- date_str = str (date_str )
58-
52+ date_str = self ._get_date_string (date_str )
5953 payload = {'base' : base_cur , 'symbols' : dest_cur }
6054 source_url = self ._source_url () + date_str
6155 response = requests .get (source_url , params = payload )
@@ -65,4 +59,17 @@ def get_rate(self, base_cur, dest_cur, date_str=None):
6559 return rate
6660 raise RatesNotAvailableError ("Currency Rates Source Not Ready" )
6761
68- # def convert(self, base_cur, dest_cur, amount, date_str=None)
62+ def convert (self , base_cur , dest_cur , amount , date_str = None ):
63+ date_str = self ._get_date_string (date_str )
64+ payload = {'base' : base_cur , 'symbols' : dest_cur }
65+ source_url = self ._source_url () + date_str
66+ response = requests .get (source_url , params = payload )
67+ if response .status_code == 200 :
68+ print response .json ()
69+ rate = response .json ().get ('rates' , {}).get (dest_cur , None )
70+ if not rate :
71+ raise RatesNotAvailableError ("Currency {0} => {1} rate not available for Date {2}." .format (
72+ source_url , dest_cur , date_str ))
73+ converted_amount = rate * amount
74+ return converted_amount
75+ raise RatesNotAvailableError ("Currency Rates Source Not Ready" )
0 commit comments