diff options
author | Christopher Allan Webber <cwebber@dustycloud.org> | 2012-07-05 22:12:29 -0500 |
---|---|---|
committer | Christopher Allan Webber <cwebber@dustycloud.org> | 2012-07-14 12:55:13 -0500 |
commit | e8d4e5821447da9ceec7dfb60f4b95cad1861f7a (patch) | |
tree | dc9292fdd584d94fbeed9c6f57e993396ea9bcb1 /mediagoblin/tools/staticdirect.py | |
parent | 3b47da8eab4ac8b4b580fb95da2d4a3e891e9555 (diff) | |
download | mediagoblin-e8d4e5821447da9ceec7dfb60f4b95cad1861f7a.tar.lz mediagoblin-e8d4e5821447da9ceec7dfb60f4b95cad1861f7a.tar.xz mediagoblin-e8d4e5821447da9ceec7dfb60f4b95cad1861f7a.zip |
Moving staticdirect to tools/
Diffstat (limited to 'mediagoblin/tools/staticdirect.py')
-rw-r--r-- | mediagoblin/tools/staticdirect.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/mediagoblin/tools/staticdirect.py b/mediagoblin/tools/staticdirect.py new file mode 100644 index 00000000..7477de68 --- /dev/null +++ b/mediagoblin/tools/staticdirect.py @@ -0,0 +1,75 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +#################################### +# Staticdirect infrastructure. +# Borrowed largely from cc.engine +# by Chris Webber & Creative Commons +# +# This needs documentation! +#################################### + +import pkg_resources +import logging + +_log = logging.getLogger(__name__) + + +class StaticDirect(object): + def __init__(self): + self.cache = {} + + def __call__(self, filepath): + if filepath in self.cache: + return self.cache[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) + 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): + return '%s/%s' % ( + self.remotepath, filepath.lstrip('/')) + + +class MultiRemoteStaticDirect(StaticDirect): + """ + For whene separate sections of the static data is served under + separate urls. + """ + def __init__(self, remotepaths): + StaticDirect.__init__(self) + self.remotepaths = remotepaths + + def get(self, filepath): + section, rest = filepath.strip('/').split('/', 1) + + return '%s/%s' % ( + self.remotepaths[section].rstrip('/'), + rest.lstrip('/')) |