File diff 10b0a818d759 → 1927a1812033
oxrlib/loaders.py
Show inline comments
 
import cgi
 
import functools
 
import io
 
import urllib.request
 
import urllib.parse
...
 
@@ -19,6 +20,10 @@ class LoaderSourceError(LoaderError):
 
    pass
 

	
 

	
 
class NoLoadersError(Exception):
 
    pass
 

	
 

	
 
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
 
            else:
 
                raise NoLoadersError() if error is None else error
 
        return load_wrapper
 

	
 
    @_wrap_load_method
 
    def historical(self, date, base):
 
        pass