class CurrenciesIdentificatorTest(unittest.TestCase): def setUp(self): self.identificator = CurrencySymbolCodeIdentificator() def test(self): self.existingSymbol("$", "USD") self.existingSymbol("£", "GBP") self.existingSymbol("CA$", "CAD") def existingSymbol(self, symbol, code): self.assertEqual(code, self.identificator.translateToCode(symbol))
class CurrenciesIdentificatorTest(unittest.TestCase): def setUp(self): self.identificator = CurrencySymbolCodeIdentificator() def test(self): self.existingSymbol("$", "USD") self.existingSymbol("£", "GBP") self.existingSymbol("CA$", "CAD") def existingSymbol(self, symbol, code): self.assertEqual(code, self.identificator.translateToCode(symbol))
def __init__(self, useCache=True, showDiagnosticData=False): self.useCache = useCache self.showDiagnosticData = showDiagnosticData self.availableCurrencies = getAvailableCurrencies() self.symbolTranslator = CurrencySymbolCodeIdentificator()
class CurrencyConverter: def __init__(self, useCache=True, showDiagnosticData=False): self.useCache = useCache self.showDiagnosticData = showDiagnosticData self.availableCurrencies = getAvailableCurrencies() self.symbolTranslator = CurrencySymbolCodeIdentificator() def convertIntoJson(self, inputCurrency, outputCurrencies, value): startTime = time.time() inputCurrency = self._translateInputCurrencyIntoValidCode( inputCurrency) outputCurrencies = self._translateOutputCurrenciesIntoValidCode( outputCurrencies) rates, cachedData = self._getRates(inputCurrency, outputCurrencies) executionTime = time.time() - startTime diagnostic = self._createDiagnosticData(cachedData, executionTime) jsonResult = self._createJsonFromRates(inputCurrency, rates, value, diagnostic) return jsonResult def _getRates(self, inputCurrency, outputCurrencies): rates = None if self.useCache: cachedData = True rates = self._tryGetRatesFromCache(inputCurrency, outputCurrencies) if rates == None: cachedData = False rates = self._getExchangeRatesFromWebService( inputCurrency, outputCurrencies) return rates, cachedData def _getExchangeRatesFromWebService(self, inputCurrency, outputCurrencies): rates = getExchangeRatesFromWebService(inputCurrency, outputCurrencies) if self.useCache: writeRatesIntoCache(inputCurrency, rates) return rates def _createJsonFromRates(self, inputCurrency, rates, value, diagnosticData): result = {} if diagnosticData != None: result["diagnostic"] = diagnosticData result["input"] = {"amount": value, "currency": inputCurrency} result["output"] = {} for rate, converted in self._convertEach(rates, value): result["output"][rate.outputCurrency] = converted return result def _createDiagnosticData(self, cachedData, executionTime): if self.showDiagnosticData: return {"cachedData": cachedData, "executionTime": executionTime} return None def _convertEach(self, rates, value): for rate in rates: yield rate, rate.convert(value) def _tryGetRatesFromCache(self, inputCurrency, outputCurrencies): try: rates = tryGetRatesFromCache(inputCurrency, outputCurrencies) return rates except NotInCacheError as e: return None def _translateOutputCurrenciesIntoValidCode(self, currency): if currency != None: currency = [self._processCurrencyInput(currency)] else: currency = self.availableCurrencies return currency def _translateInputCurrencyIntoValidCode(self, currency): return self._processCurrencyInput(currency) def _processCurrencyInput(self, currencyInput): if currencyInput in self.availableCurrencies: return currencyInput currencyCode = self.symbolTranslator.translateToCode(currencyInput) if currencyCode == None: raise InvalidCurrency(currencyInput) return currencyCode
def setUp(self): self.identificator = CurrencySymbolCodeIdentificator()
def __init__(self, useCache = True, showDiagnosticData = False): self.useCache = useCache self.showDiagnosticData = showDiagnosticData self.availableCurrencies = getAvailableCurrencies() self.symbolTranslator = CurrencySymbolCodeIdentificator()
class CurrencyConverter: def __init__(self, useCache = True, showDiagnosticData = False): self.useCache = useCache self.showDiagnosticData = showDiagnosticData self.availableCurrencies = getAvailableCurrencies() self.symbolTranslator = CurrencySymbolCodeIdentificator() def convertIntoJson(self, inputCurrency, outputCurrencies, value): startTime = time.time() inputCurrency = self._translateInputCurrencyIntoValidCode(inputCurrency) outputCurrencies = self._translateOutputCurrenciesIntoValidCode(outputCurrencies) rates, cachedData = self._getRates(inputCurrency, outputCurrencies) executionTime = time.time() - startTime diagnostic = self._createDiagnosticData(cachedData, executionTime) jsonResult = self._createJsonFromRates(inputCurrency, rates, value, diagnostic) return jsonResult def _getRates(self, inputCurrency, outputCurrencies): rates = None if self.useCache: cachedData = True rates = self._tryGetRatesFromCache(inputCurrency, outputCurrencies) if rates == None: cachedData = False rates = self._getExchangeRatesFromWebService(inputCurrency, outputCurrencies) return rates, cachedData def _getExchangeRatesFromWebService(self, inputCurrency, outputCurrencies): rates = getExchangeRatesFromWebService(inputCurrency, outputCurrencies) if self.useCache: writeRatesIntoCache(inputCurrency, rates) return rates def _createJsonFromRates(self, inputCurrency, rates, value, diagnosticData): result = {} if diagnosticData != None: result["diagnostic"] = diagnosticData result["input"] = {"amount": value, "currency": inputCurrency} result["output"] = {} for rate, converted in self._convertEach(rates, value): result["output"][rate.outputCurrency] = converted return result def _createDiagnosticData(self, cachedData, executionTime): if self.showDiagnosticData: return { "cachedData" : cachedData, "executionTime" : executionTime } return None def _convertEach(self, rates, value): for rate in rates: yield rate, rate.convert(value) def _tryGetRatesFromCache(self, inputCurrency, outputCurrencies): try: rates = tryGetRatesFromCache(inputCurrency, outputCurrencies) return rates except NotInCacheError as e: return None def _translateOutputCurrenciesIntoValidCode(self, currency): if currency != None: currency = [self._processCurrencyInput(currency)] else: currency = self.availableCurrencies return currency def _translateInputCurrencyIntoValidCode(self, currency): return self._processCurrencyInput(currency) def _processCurrencyInput(self, currencyInput): if currencyInput in self.availableCurrencies: return currencyInput currencyCode = self.symbolTranslator.translateToCode(currencyInput) if currencyCode == None: raise InvalidCurrency(currencyInput) return currencyCode