class ExchangeRatesPoller(object): API_key = '7cf21b8b9b8f4b7a887a5cde5ae85949' API_fetch_interval = timedelta(hours=1) def __init__(self): self.client = OpenExchangeRatesClient(ExchangeRatesPoller.API_key) self.currencies = self.client.currencies() logging.info( "ExchangeRatesPoller initialized.\nSupported currencies:\n" + "\n".join([c + ": " + self.currencies[c] for c in self.currencies ])) self.last_api_fetch_time = None def poll_data(self): if self.client is None or self.last_api_fetch_time is None \ or (datetime.utcnow() - self.last_api_fetch_time > ExchangeRatesPoller.API_fetch_interval): self.lastest = self.client.latest() self.rates = self.lastest['rates'] self.last_api_fetch_time = datetime.utcnow() logging.info(' '.join( [self.__class__.__name__, ": poll_data() fetched new data at:", self.last_api_fetch_time.isoformat()])) else: logging.info(' '.join([self.__class__.__name__, ( ": poll_data() called within fetch " "interval threshold, use previous " "fetched data at:"), self.last_api_fetch_time.isoformat()])) def trigger_notification(self, message): print message def check_exchange_rates(self, currencies): rates = {} for c in currencies: if c.upper() not in self.rates: logging.error(' '.join([self.__class__.__name__, ": currency:", c, "not found in self.rates dict."])) raise Exception("Currency: %s Not recognized!" % c) rates[c] = float(self.rates[c.upper()]) rates_str_lst = [ "USD exchange rate to " + rc.upper() + ": " + str(rates[rc]) for rc in rates ] rates_str = '\n'.join(rates_str_lst) logging.debug(' '.join([self.__class__.__name__, ": check_exchange_rates()\n", rates_str])) return rates_str_lst
class OpenExchangeRatesAdapter(BaseAdapter): """This adapter uses openexchangerates.org service to populate currency and exchange rate models. """ API_KEY_SETTINGS_KEY = 'OPENEXCHANGERATES_API_KEY' def __init__(self): self.client = OpenExchangeRatesClient( getattr(settings, self.API_KEY_SETTINGS_KEY)) def get_currencies(self): return self.client.currencies().items() def get_exchangerates(self, base): return self.client.latest(base)['rates'].items()
class OpenExchangeRatesAdapter(BaseAdapter): """This adapter uses openexchangerates.org service to populate currency and exchange rate models. """ API_KEY_SETTINGS_KEY = 'OPENEXCHANGERATES_API_KEY' def __init__(self): self.client = OpenExchangeRatesClient( getattr(settings, self.API_KEY_SETTINGS_KEY)) def get_currencies(self): return self.client.currencies().items() def get_exchangerates(self, code): return self.client.latest(code)['rates'].items()
class OpenExchangeRateConnector: def __init__(self, api_key): self.client = OpenExchangeRatesClient(api_key) def get_all_rates(self): currencies = self.client.currencies() latest = self.client.latest()['rates'] rates = [] for currency in currencies: short_name = currency if short_name not in settings.CURRENCY_FILTER: continue full_name = currencies[currency] exchange_rate = latest[currency] rates.append(ExchangeRateData(short_name=short_name, full_name=full_name, exchange_rate=exchange_rate)) return rates
def handle(self, *args, **options): self.verbose = int(options.get('verbosity', 0)) self.options = options self.force = self.options['force'] self.imports = [e for e in self.options['import'] if e] client = OpenExchangeRatesClient(APP_ID) if self.verbose >= 1: self.stdout.write("Querying database at %s" % (client.ENDPOINT_CURRENCIES)) symbols = {} with open(self.file_path) as df: symbols = json.load(df) currencies = client.currencies() for code in sorted(currencies.keys()): if (not self.imports) or code in self.imports: if not C._default_manager.filter(code=code) or self.force is True: if self.verbose >= 1: self.stdout.write("Creating %r (%s)" % (currencies[code], code)) c, created = C._default_manager.get_or_create(code=code) if created is True: C._default_manager.filter(pk=c.pk).update(name=currencies[code], is_active=False) if bool(c.symbol) and self.force is False: continue symbol = symbols.get(c.code) if symbol is not None: C._default_manager.filter(pk=c.pk).update(symbol=symbol) else: if self.verbose >= 1: self.stdout.write("Skipping %r (%s)" % (currencies[code], code))