docs: def update(self):
          """Actual update process goes here using auxialary ``get_currencies``
          and ``get_exchangerates`` methods. This method creates or updates
          corresponding ``Currency`` and ``ExchangeRate`` models
  
          """
          currencies = self.get_currencies()
          currency_objects = {}
          for code, name in currencies:
              currency_objects[code], created = Currency.objects.get_or_create(
                  code=code, defaults={'name': name})
              if created:
                  logger.info('currency: %s created', code)
          existing = ExchangeRate.objects.values('source__code',
                                                 'target__code',
                                                 'id')
          existing = {(d['source__code'], d['target__code']): d['id']
                      for d in existing}
          usd_exchange_rates = dict(self.get_exchangerates('USD'))
          updates = []
          inserts = []
          for source in currencies:
              for target in currencies:
                  rate = self._get_rate_through_usd(source.code,
                                                    target.code,
                                                    usd_exchange_rates)
  
                  exchange_rate = ExchangeRate(source=currency_objects[source.code],
                                               target=currency_objects[target.code],
                                               rate=rate)
  
                  if (source.code, target.code) in existing:
                      exchange_rate.id = existing[(source.code, target.code)]
                      updates.append(exchange_rate)
                      logger.debug('exchange rate updated %s/%s=%s'
                                   % (source, target, rate))
                  else:
                      inserts.append(exchange_rate)
                      logger.debug('exchange rate created %s/%s=%s'
                                   % (source, target, rate))
  
              logger.info('exchange rates updated for %s' % source.code)
          logger.info("Updating %s rows" % len(updates))
          update_many(updates)
          logger.info("Inserting %s rows" % len(inserts))
          insert_many(inserts)
          logger.info('saved rates to db')