import cgi
import functools
import io
import urllib.request
import urllib.parse
@@ -19,6 +20,10 @@ class LoaderSourceError(LoaderError):
pass
class NoLoadersError(Exception):
class FileCache:
def __init__(self, dir_path, filename_pattern):
self.dir_path = dir_path
@@ -75,3 +80,32 @@ class OXRAPIRequest:
'historical/{}.json'.format(date.isoformat()),
{'app_id': self.app_id, 'base': base},
)
class LoaderChain:
def __init__(self):
self.loaders = []
def add_loader(self, loader):
self.loaders.append(loader)
def _wrap_load_method(orig_func):
@functools.wraps(orig_func)
def load_wrapper(self, *args, **kwargs):
self.used_loader = None
error = None
for loader in self.loaders:
try:
response = getattr(loader, orig_func.__name__)(*args, **kwargs)
except LoaderError as this_error:
error = this_error
else:
self.used_loader = loader
return response
raise NoLoadersError() if error is None else error
return load_wrapper
@_wrap_load_method
def historical(self, date, base):