diff options
Diffstat (limited to 'mediagoblin/tools/staticdirect.py')
-rw-r--r-- | mediagoblin/tools/staticdirect.py | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/mediagoblin/tools/staticdirect.py b/mediagoblin/tools/staticdirect.py index 4143b453..31abc566 100644 --- a/mediagoblin/tools/staticdirect.py +++ b/mediagoblin/tools/staticdirect.py @@ -22,37 +22,42 @@ # This needs documentation! #################################### -import pkg_resources import logging _log = logging.getLogger(__name__) class StaticDirect(object): - def __init__(self): + """ + Direct to a static resource. + + This StaticDirect class can take a series of "domains" to + staticdirect to. In general, you should supply a None domain, as + that's the "default" domain. + + Things work like this: + >>> staticdirect = StaticDirect( + ... {None: "/static/", + ... "theme": "http://example.org/themestatic/"}) + >>> staticdirect("css/monkeys.css") + "/static/css/monkeys.css" + >>> staticdirect("images/lollerskate.png", "theme") + "http://example.org/themestatic/images/lollerskate.png" + """ + def __init__(self, domains): + self.domains = dict( + [(key, value.rstrip('/')) + for key, value in domains.iteritems()]) self.cache = {} - def __call__(self, filepath): - if filepath in self.cache: - return self.cache[filepath] + def __call__(self, filepath, domain=None): + if domain in self.cache and filepath in self.cache[domain]: + return self.cache[domain][filepath] - if not pkg_resources.resource_exists('mediagoblin', - 'static' + filepath): - _log.info("StaticDirect resource %r not found locally", - filepath) - static_direction = self.cache[filepath] = self.get(filepath) + static_direction = self.cache.setdefault( + domain, {})[filepath] = self.get(filepath, domain) return static_direction - def get(self, filepath): - # should be implemented by the individual staticdirector - pass - - -class RemoteStaticDirect(StaticDirect): - def __init__(self, remotepath): - StaticDirect.__init__(self) - self.remotepath = remotepath.rstrip('/') - - def get(self, filepath): + def get(self, filepath, domain=None): return '%s/%s' % ( - self.remotepath, filepath.lstrip('/')) + self.domains[domain], filepath.lstrip('/')) |