[REF] currency_rate_update: refactoring related to PR #318

Conflicts:
	currency_rate_update/services/__init__.py
	currency_rate_update/services/currency_getter.py
	currency_rate_update/services/update_service_CA_BOC.py
	currency_rate_update/services/update_service_CH_ADMIN.py
	currency_rate_update/services/update_service_ECB.py
	currency_rate_update/services/update_service_PL_NBP.py
	currency_rate_update/services/update_service_RO_BNR.py
This commit is contained in:
Дмитро Катюха
2016-02-29 18:54:18 +02:00
committed by Yannick Vaucher
parent 3caaaf5a38
commit 5e9a0b43f3
15 changed files with 171 additions and 198 deletions

View File

@@ -102,6 +102,7 @@ Contributors
* Miku Laitinen
* Assem Bayahi
* Daniel Dico <ddico@oerp.ca> (BOC)
* Dmytro Katyukha <firemage.dima@gmail.com>
Maintainer

View File

@@ -1 +1,2 @@
from . import model
from .services.currency_getter_interface import CurrencyGetterInterface

View File

@@ -19,7 +19,7 @@
"security/rule.xml",
"security/ir.model.access.csv",
],
"images": [],
"demo": [],
"active": False,
'installable': True
}

View File

@@ -11,7 +11,8 @@ from dateutil.relativedelta import relativedelta
from openerp import models, fields, api, _
from openerp import exceptions
from ..services.currency_getter import Currency_getter_factory
from ..services.currency_getter_interface import CurrencyGetterType
_logger = logging.getLogger(__name__)
@@ -21,103 +22,8 @@ _intervalTypes = {
'months': lambda interval: relativedelta(months=interval),
}
supported_currency_array = [
"AED", "AFN", "ALL", "AMD", "ANG", "AOA", "ARS", "AUD", "AWG", "AZN",
"BAM", "BBD", "BDT", "BGN", "BHD", "BIF", "BMD", "BND", "BOB", "BRL",
"BSD", "BTN", "BWP", "BYR", "BZD", "CAD", "CDF", "CHF", "CLP", "CNY",
"COP", "CRC", "CUP", "CVE", "CYP", "CZK", "DJF", "DKK", "DOP", "DZD",
"EEK", "EGP", "ERN", "ETB", "EUR", "FJD", "FKP", "GBP", "GEL", "GGP",
"GHS", "GIP", "GMD", "GNF", "GTQ", "GYD", "HKD", "HNL", "HRK", "HTG",
"HUF", "IDR", "ILS", "IMP", "INR", "IQD", "IRR", "ISK", "JEP", "JMD",
"JOD", "JPY", "KES", "KGS", "KHR", "KMF", "KPW", "KRW", "KWD", "KYD",
"KZT", "LAK", "LBP", "LKR", "LRD", "LSL", "LTL", "LVL", "LYD", "MAD",
"MDL", "MGA", "MKD", "MMK", "MNT", "MOP", "MRO", "MTL", "MUR", "MVR",
"MWK", "MXN", "MYR", "MZN", "NAD", "NGN", "NIO", "NOK", "NPR", "NZD",
"OMR", "PAB", "PEN", "PGK", "PHP", "PKR", "PLN", "PYG", "QAR", "RON",
"RSD", "RUB", "RWF", "SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP",
"SLL", "SOS", "SPL", "SRD", "STD", "SVC", "SYP", "SZL", "THB", "TJS",
"TMM", "TND", "TOP", "TRY", "TTD", "TVD", "TWD", "TZS", "UAH", "UGX",
"USD", "UYU", "UZS", "VEB", "VEF", "VND", "VUV", "WST", "XAF", "XAG",
"XAU", "XCD", "XDR", "XOF", "XPD", "XPF", "XPT", "YER", "ZAR", "ZMK",
"ZWD"
]
YAHOO_supported_currency_array = [
"AED", "AFN", "ALL", "AMD", "ANG", "AOA", "ARS", "AUD", "AWG", "AZN",
"BAM", "BBD", "BDT", "BGN", "BHD", "BIF", "BMD", "BND", "BOB", "BRL",
"BSD", "BTN", "BWP", "BYR", "BZD", "CAD", "CDF", "CHF", "CLF", "CLP",
"CNH", "CNY", "COP", "CRC", "CUP", "CVE", "CZK", "DJF", "DKK", "DOP",
"DZD", "EGP", "ERN", "ETB", "EUR", "FJD", "FKP", "GBP", "GEL", "GHS",
"GIP", "GMD", "GNF", "GTQ", "GYD", "HKD", "HNL", "HRK", "HTG", "HUF",
"IDR", "IEP", "ILS", "INR", "IQD", "IRR", "ISK", "JMD", "JOD", "JPY",
"KES", "KGS", "KHR", "KMF", "KPW", "KRW", "KWD", "KYD", "KZT", "LAK",
"LBP", "LKR", "LRD", "LSL", "LTL", "LVL", "LYD", "MAD", "MDL", "MGA",
"MKD", "MMK", "MNT", "MOP", "MRO", "MUR", "MVR", "MWK", "MXN", "MXV",
"MYR", "MZN", "NAD", "NGN", "NIO", "NOK", "NPR", "NZD", "OMR", "PAB",
"PEN", "PGK", "PHP", "PKR", "PLN", "PYG", "QAR", "RON", "RSD", "RUB",
"RWF", "SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS",
"SRD", "STD", "SVC", "SYP", "SZL", "THB", "TJS", "TMT", "TND", "TOP",
"TRY", "TTD", "TWD", "TZS", "UAH", "UGX", "USD", "UYU", "UZS", "VEF",
"VND", "VUV", "WST", "XAF", "XAG", "XAU", "XCD", "XCP", "XDR", "XOF",
"XPD", "XPF", "XPT", "YER", "ZAR", "ZMW", "ZWL"]
RO_BNR_supported_currency_array = [
"AED", "AUD", "BGN", "BRL", "CAD", "CHF", "CNY", "CZK", "DKK", "EGP",
"EUR", "GBP", "HUF", "INR", "JPY", "KRW", "MDL", "MXN", "NOK", "NZD",
"PLN", "RON", "RSD", "RUB", "SEK", "TRY", "UAH", "USD", "XAU", "XDR",
"ZAR"]
CA_BOC_supported_currency_array = [
"AED", "ANG", "ARS", "AUD", "BOC", "BRL", "BSD", "CHF", "CLP", "CNY",
"COP", "CZK", "DKK", "EUR", "FJD", "GBP", "GHS", "GTQ", "HKD", "HNL",
"HRK", "HUF", "IDR", "ILS", "INR", "ISK", "JMD", "JPY", "KRW", "LKR",
"MAD", "MMK", "MXN", "MYR", "NOK", "NZD", "PAB", "PEN", "PHP", "PKR",
"PLN", "RON", "RSD", "RUB", "SEK", "SGD", "THB", "TND", "TRY", "TTD",
"TWD", "USD", "VEF", "VND", "XAF", "XCD", "XPF", "ZAR"]
CH_ADMIN_supported_currency_array = [
"AED", "ALL", "ARS", "AUD", "AZN", "BAM", "BDT", "BGN", "BHD", "BRL",
"CAD", "CHF", "CLP", "CNY", "COP", "CRC", "CZK", "DKK", "DOP", "EGP",
"ETB", "EUR", "GBP", "GTQ", "HKD", "HNL", "HRK", "HUF", "IDR", "ILS",
"INR", "ISK", "JPY", "KES", "KHR", "KRW", "KWD", "KYD", "KZT", "LBP",
"LKR", "LTL", "LVL", "LYD", "MAD", "MUR", "MXN", "MYR", "NGN", "NOK",
"NZD", "OMR", "PAB", "PEN", "PHP", "PKR", "PLN", "QAR", "RON", "RSD",
"RUB", "SAR", "SEK", "SGD", "THB", "TND", "TRY", "TWD", "TZS", "UAH",
"USD", "UYU", "VEF", "VND", "ZAR"]
ECB_supported_currency_array = [
"AUD", "BGN", "BRL", "CAD", "CHF", "CNY", "CZK", "DKK", "EUR", "GBP",
"HKD", "HRK", "HUF", "IDR", "ILS", "INR", "JPY", "KRW", "LTL", "MXN",
"MYR", "NOK", "NZD", "PHP", "PLN", "RON", "RUB", "SEK", "SGD", "THB",
"TRY", "USD", "ZAR"]
MX_BdM_supported_currency_array = [
"ARS", "AUD", "BBD", "BMD", "BOB", "BRL", "BSD", "BZD", "CAD", "CHF",
"CLP", "CNH", "CNY", "COP", "CRC", "CUP", "CZK", "DKK", "DOP", "DZD",
"EGP", "ESD", "EUR", "FJD", "GBP", "GTQ", "GYD", "HKD", "HNL", "HUF",
"IDR", "ILS", "INR", "IQD", "JMD", "JPY", "KES", "KRW", "KWD", "MAD",
"MYR", "NGN", "NIC", "NOK", "NZD", "PAB", "PEN", "PHP", "PLN", "PYG",
"RON", "RUB", "SAR", "SEK", "SGD", "SVC", "THB", "TRY", "TTD", "TWD",
"UAH", "USD", "USD", "UYP", "VEF", "VND", "ZAR"]
PL_NBP_supported_currency_array = [
"AUD", "BGN", "BRL", "CAD", "CHF", "CLP", "CNY", "CZK", "DKK", "EUR",
"GBP", "HKD", "HRK", "HUF", "IDR", "ILS", "INR", "ISK", "JPY", "KRW",
"LTL", "MXN", "MYR", "NOK", "NZD", "PHP", "PLN", "RON", "RUB", "SEK",
"SGD", "THB", "TRY", "UAH", "USD", "XDR", "ZAR"]
supported_currecies = {
'YAHOO_getter': YAHOO_supported_currency_array,
'ECB_getter': ECB_supported_currency_array,
'RO_BNR_getter': RO_BNR_supported_currency_array,
'CA_BOC_getter': CA_BOC_supported_currency_array,
'CH_ADMIN_getter': CH_ADMIN_supported_currency_array,
'MX_BdM_getter': MX_BdM_supported_currency_array,
'PL_NBP_getter': PL_NBP_supported_currency_array,
}
class Currency_rate_update_service(models.Model):
class CurrencyRateUpdateService(models.Model):
"""Class keep services and currencies that
have to be updated"""
_name = "currency.rate.update.service"
@@ -147,29 +53,19 @@ class Currency_rate_update_service(models.Model):
currency_list = ''
if self.service:
currencies = []
currency_list = supported_currency_array
currency_list = supported_currecies[self.service]
getter = CurrencyGetterType.get(self.service)
currency_list = getter.supported_currency_array
currencies = self.env['res.currency'].search(
[('name', 'in', currency_list)])
self.currency_list = [(6, 0, [curr.id for curr in currencies])]
def _selection_service(self, *a, **k):
res = [(x.code, x.name) for x in CurrencyGetterType.getters.values()]
return res
# List of webservicies the value sould be a class name
service = fields.Selection(
[('CH_ADMIN_getter', 'Admin.ch'),
('ECB_getter', 'European Central Bank'),
('YAHOO_getter', 'Yahoo Finance'),
# Added for polish rates
('PL_NBP_getter', 'National Bank of Poland'),
# Added for mexican rates
('MX_BdM_getter', 'Bank of Mexico'),
# Bank of Canada is using RSS-CB
# http://www.cbwiki.net/wiki/index.php/Specification_1.1
# This RSS format is used by other national banks
# (Thailand, Malaysia, Mexico...)
('CA_BOC_getter', 'Bank of Canada - noon rates'),
# Added for romanian rates
('RO_BNR_getter', 'National Bank of Romania')
],
_selection_service,
string="Webservice to use",
required=True)
# List of currencies available on webservice
@@ -217,7 +113,6 @@ class Currency_rate_update_service(models.Model):
_logger.info(
'Starting to refresh currencies with service %s (company: %s)',
self.service, self.company_id.name)
factory = Currency_getter_factory()
rate_obj = self.env['res.currency.rate']
company = self.company_id
# The multi company currency can be set or no so we handle
@@ -234,9 +129,8 @@ class Currency_rate_update_service(models.Model):
try:
# We initalize the class that will handle the request
# and return a dict of rate
getter = factory.register(self.service)
curr_to_fetch = map(lambda x: x.name,
self.currency_to_update)
getter = CurrencyGetterType.get(self.service)
curr_to_fetch = [x.name for x in self.currency_to_update]
res, log_info = getter.get_updated_currency(
curr_to_fetch,
main_currency.name,
@@ -288,6 +182,7 @@ class Currency_rate_update_service(models.Model):
_intervalTypes[str(self.interval_type)]
(self.interval_number)).date()
self.next_run = next_run
return True
@api.multi
def run_currency_update(self):

View File

@@ -0,0 +1,8 @@
# Note, that CA_BOC getter seems not to be working
from . import update_service_CA_BOC
from . import update_service_CH_ADMIN
from . import update_service_ECB
from . import update_service_YAHOO
from . import update_service_PL_NBP
from . import update_service_MX_BdM
from . import update_service_RO_BNR

View File

@@ -1,63 +0,0 @@
# -*- coding: utf-8 -*-
# © 2008-2016 Camptocamp
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
class AbstractClassError(Exception):
def __str__(self):
return 'Abstract Class'
def __repr__(self):
return 'Abstract Class'
class AbstractMethodError(Exception):
def __str__(self):
return 'Abstract Method'
def __repr__(self):
return 'Abstract Method'
class UnknowClassError(Exception):
def __str__(self):
return 'Unknown Class'
def __repr__(self):
return 'Unknown Class'
class UnsuportedCurrencyError(Exception):
def __init__(self, value):
self.curr = value
def __str__(self):
return 'Unsupported currency %s' % self.curr
def __repr__(self):
return 'Unsupported currency %s' % self.curr
class Currency_getter_factory():
"""Factory pattern class that will return
a currency getter class base on the name passed
to the register method
"""
def register(self, class_name):
allowed = [
'CH_ADMIN_getter',
'PL_NBP_getter',
'ECB_getter',
'GOOGLE_getter',
'YAHOO_getter',
'MX_BdM_getter',
'CA_BOC_getter',
'RO_BNR_getter',
]
if class_name in allowed:
exec "from .update_service_%s import %s" % \
(class_name.replace('_getter', ''), class_name)
class_def = eval(class_name)
return class_def()
else:
raise UnknowClassError

View File

@@ -46,8 +46,55 @@ class UnsuportedCurrencyError(Exception):
return 'Unsupported currency %s' % self.curr
class Currency_getter_interface(object):
"Abstract class of currency getter"
class CurrencyGetterType(type):
""" Meta class for currency getters.
Automaticaly registers new curency getter on class definition
"""
getters = {}
def __new__(mcs, name, bases, attrs):
cls = super(CurrencyGetterType, mcs).__new__(mcs, name, bases, attrs)
if getattr(cls, 'code', None):
mcs.getters[cls.code] = cls
return cls
@classmethod
def get(mcs, code, *args, **kwargs):
""" Get getter by code
"""
return mcs.getters[code](*args, **kwargs)
class CurrencyGetterInterface(object):
""" Abstract class of currency getter
To create new getter, just subclass this class
and define class variables 'code' and 'name'
and implement *get_updated_currency* method
For example::
from openerp.addons.currency_rate_update \
import CurrencyGetterInterface
class MySuperCurrencyGetter(CurrencyGetterInterface):
code = "MSCG"
name = "My Currency Rates"
supported_currency_array = ['USD', 'EUR']
def get_updated_currency(self, currency_array, main_currency,
max_delta_days):
# your code that fills self.updated_currency
# and return result
return self.updated_currency, self.log_info
"""
__metaclass__ = CurrencyGetterType
# attributes required for currency getters
code = None # code for service selection
name = None # displayed name
log_info = " "

View File

@@ -3,7 +3,7 @@
# © 2014 Daniel Dico
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from .currency_getter_interface import Currency_getter_interface
from .currency_getter_interface import CurrencyGetterInterface
from openerp import _
from openerp.exceptions import except_orm
@@ -12,11 +12,26 @@ import logging
_logger = logging.getLogger(__name__)
class CA_BOC_getter(Currency_getter_interface):
class CA_BOCGetter(CurrencyGetterInterface):
"""Implementation of Curreny_getter_factory interface
for Bank of Canada RSS service
"""
# Bank of Canada is using RSS-CB
# http://www.cbwiki.net/wiki/index.php/Specification_1.1
# This RSS format is used by other national banks
# (Thailand, Malaysia, Mexico...)
code = 'CA_BOC'
name = 'Bank of Canada - noon rates'
supported_currency_array = [
"AED", "ANG", "ARS", "AUD", "BOC", "BRL", "BSD", "CHF", "CLP", "CNY",
"COP", "CZK", "DKK", "EUR", "FJD", "GBP", "GHS", "GTQ", "HKD", "HNL",
"HRK", "HUF", "IDR", "ILS", "INR", "ISK", "JMD", "JPY", "KRW", "LKR",
"MAD", "MMK", "MXN", "MYR", "NOK", "NZD", "PAB", "PEN", "PHP", "PKR",
"PLN", "RON", "RSD", "RUB", "SEK", "SGD", "THB", "TND", "TRY", "TTD",
"TWD", "USD", "VEF", "VND", "XAF", "XCD", "XPF", "ZAR"]
def get_updated_currency(self, currency_array, main_currency,
max_delta_days):

View File

@@ -2,7 +2,7 @@
# © 2008 Camptocamp
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from .currency_getter_interface import Currency_getter_interface
from .currency_getter_interface import CurrencyGetterInterface
import logging
from datetime import datetime
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT
@@ -10,11 +10,24 @@ from openerp.tools import DEFAULT_SERVER_DATE_FORMAT
_logger = logging.getLogger(__name__)
class CH_ADMIN_getter(Currency_getter_interface):
class CH_ADMINGetter(CurrencyGetterInterface):
"""Implementation of Currency_getter_factory interface
for Admin.ch service.
"""
code = 'CH_ADMIN'
name = 'Admin.ch'
supported_currency_array = [
"AED", "ALL", "ARS", "AUD", "AZN", "BAM", "BDT", "BGN", "BHD", "BRL",
"CAD", "CHF", "CLP", "CNY", "COP", "CRC", "CZK", "DKK", "DOP", "EGP",
"ETB", "EUR", "GBP", "GTQ", "HKD", "HNL", "HRK", "HUF", "IDR", "ILS",
"INR", "ISK", "JPY", "KES", "KHR", "KRW", "KWD", "KYD", "KZT", "LBP",
"LKR", "LTL", "LVL", "LYD", "MAD", "MUR", "MXN", "MYR", "NGN", "NOK",
"NZD", "OMR", "PAB", "PEN", "PHP", "PKR", "PLN", "QAR", "RON", "RSD",
"RUB", "SAR", "SEK", "SGD", "THB", "TND", "TRY", "TWD", "TZS", "UAH",
"USD", "UYU", "VEF", "VND", "ZAR"]
def rate_retrieve(self, dom, ns, curr):
"""Parse a dom node to retrieve currencies data"""
res = {}

View File

@@ -3,7 +3,7 @@
# © 2009 Grzegorz Grzelak
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from .currency_getter_interface import Currency_getter_interface
from .currency_getter_interface import CurrencyGetterInterface
from datetime import datetime
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT
@@ -12,10 +12,17 @@ import logging
_logger = logging.getLogger(__name__)
class ECB_getter(Currency_getter_interface):
class ECBGetter(CurrencyGetterInterface):
"""Implementation of Currency_getter_factory interface
for ECB service
"""
code = 'ECB'
name = 'European Central Bank'
supported_currency_array = [
"AUD", "BGN", "BRL", "CAD", "CHF", "CNY", "CZK", "DKK", "EUR", "GBP",
"HKD", "HRK", "HUF", "IDR", "ILS", "INR", "JPY", "KRW", "LTL", "MXN",
"MYR", "NOK", "NZD", "PHP", "PLN", "RON", "RUB", "SEK", "SGD", "THB",
"TRY", "USD", "ZAR"]
def rate_retrieve(self, dom, ns, curr):
"""Parse a dom node to retrieve-

View File

@@ -3,17 +3,27 @@
# © 2013-2014 Agustin Cruz openpyme.mx
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from .currency_getter_interface import Currency_getter_interface
from .currency_getter_interface import CurrencyGetterInterface
import logging
_logger = logging.getLogger(__name__)
class MX_BdM_getter(Currency_getter_interface):
class MX_BdMGetter(CurrencyGetterInterface):
"""Implementation of Currency_getter_factory interface
for Banco de México service
"""
code = 'MX_BdM'
name = 'Bank of Mexico'
supported_currency_array = [
"ARS", "AUD", "BBD", "BMD", "BOB", "BRL", "BSD", "BZD", "CAD", "CHF",
"CLP", "CNH", "CNY", "COP", "CRC", "CUP", "CZK", "DKK", "DOP", "DZD",
"EGP", "ESD", "EUR", "FJD", "GBP", "GTQ", "GYD", "HKD", "HNL", "HUF",
"IDR", "ILS", "INR", "IQD", "JMD", "JPY", "KES", "KRW", "KWD", "MAD",
"MYR", "NGN", "NIC", "NOK", "NZD", "PAB", "PEN", "PHP", "PLN", "PYG",
"RON", "RUB", "SAR", "SEK", "SGD", "SVC", "THB", "TRY", "TTD", "TWD",
"UAH", "USD", "USD", "UYP", "VEF", "VND", "ZAR"]
def rate_retrieve(self):
""" Get currency exchange from Banxico.xml and proccess it

View File

@@ -3,7 +3,7 @@
# © 2009 Grzegorz Grzelak
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from .currency_getter_interface import Currency_getter_interface
from .currency_getter_interface import CurrencyGetterInterface
from datetime import datetime
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT
@@ -12,11 +12,19 @@ import logging
_logger = logging.getLogger(__name__)
class PL_NBP_getter(Currency_getter_interface):
class PL_NBPGetter(CurrencyGetterInterface):
"""Implementation of Currency_getter_factory interface
for PL NBP service
"""
code = 'PL_NBP'
name = 'National Bank of Poland'
supported_currency_array = [
"AUD", "BGN", "BRL", "CAD", "CHF", "CLP", "CNY", "CZK", "DKK", "EUR",
"GBP", "HKD", "HRK", "HUF", "IDR", "ILS", "INR", "ISK", "JPY", "KRW",
"LTL", "MXN", "MYR", "NOK", "NZD", "PHP", "PLN", "RON", "RUB", "SEK",
"SGD", "THB", "TRY", "UAH", "USD", "XDR", "ZAR"]
def rate_retrieve(self, dom, ns, curr):
""" Parse a dom node to retrieve

View File

@@ -3,7 +3,7 @@
# © 2014 Dorin Hongu
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from .currency_getter_interface import Currency_getter_interface
from .currency_getter_interface import CurrencyGetterInterface
from datetime import datetime, timedelta
@@ -11,9 +11,17 @@ import logging
_logger = logging.getLogger(__name__)
class RO_BNR_getter(Currency_getter_interface):
class RO_BNRGetter(CurrencyGetterInterface):
"""Implementation of Currency_getter_factory interface for BNR service"""
code = 'RO_BNR'
name = 'National Bank of Romania'
supported_currency_array = [
"AED", "AUD", "BGN", "BRL", "CAD", "CHF", "CNY", "CZK", "DKK", "EGP",
"EUR", "GBP", "HUF", "INR", "JPY", "KRW", "MDL", "MXN", "NOK", "NZD",
"PLN", "RON", "RSD", "RUB", "SEK", "TRY", "UAH", "USD", "XAU", "XDR",
"ZAR"]
def rate_retrieve(self, dom, ns, curr):
""" Parse a dom node to retrieve-
currencies data"""

View File

@@ -2,13 +2,34 @@
# © 2009 Camptocamp
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from .currency_getter_interface import Currency_getter_interface
from .currency_getter_interface import CurrencyGetterInterface
class YAHOO_getter(Currency_getter_interface):
class YAHOOGetter(CurrencyGetterInterface):
"""Implementation of Currency_getter_factory interface
for Yahoo finance service
"""
code = 'YAHOO'
name = 'Yahoo Finance'
supported_currency_array = [
"AED", "AFN", "ALL", "AMD", "ANG", "AOA", "ARS", "AUD", "AWG", "AZN",
"BAM", "BBD", "BDT", "BGN", "BHD", "BIF", "BMD", "BND", "BOB", "BRL",
"BSD", "BTN", "BWP", "BYR", "BZD", "CAD", "CDF", "CHF", "CLF", "CLP",
"CNH", "CNY", "COP", "CRC", "CUP", "CVE", "CZK", "DJF", "DKK", "DOP",
"DZD", "EGP", "ERN", "ETB", "EUR", "FJD", "FKP", "GBP", "GEL", "GHS",
"GIP", "GMD", "GNF", "GTQ", "GYD", "HKD", "HNL", "HRK", "HTG", "HUF",
"IDR", "IEP", "ILS", "INR", "IQD", "IRR", "ISK", "JMD", "JOD", "JPY",
"KES", "KGS", "KHR", "KMF", "KPW", "KRW", "KWD", "KYD", "KZT", "LAK",
"LBP", "LKR", "LRD", "LSL", "LTL", "LVL", "LYD", "MAD", "MDL", "MGA",
"MKD", "MMK", "MNT", "MOP", "MRO", "MUR", "MVR", "MWK", "MXN", "MXV",
"MYR", "MZN", "NAD", "NGN", "NIO", "NOK", "NPR", "NZD", "OMR", "PAB",
"PEN", "PGK", "PHP", "PKR", "PLN", "PYG", "QAR", "RON", "RSD", "RUB",
"RWF", "SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS",
"SRD", "STD", "SVC", "SYP", "SZL", "THB", "TJS", "TMT", "TND", "TOP",
"TRY", "TTD", "TWD", "TZS", "UAH", "UGX", "USD", "UYU", "UZS", "VEF",
"VND", "VUV", "WST", "XAF", "XAG", "XAU", "XCD", "XCP", "XDR", "XOF",
"XPD", "XPF", "XPT", "YER", "ZAR", "ZMW", "ZWL"]
def get_updated_currency(self, currency_array, main_currency,
max_delta_days):

View File

@@ -29,6 +29,8 @@
invisible="not context.get('currency_rate_update_main_view')"
required="context.get('currency_rate_update_main_view')"/>
<field name="max_delta_days"/>
<button name="refresh_currency" type="object"
string="Update now!"/>
</group>
<group name="right">
<field name="interval_type"/>