1 # GNU MediaGoblin -- federated, autonomous media hosting
2 # Copyright (C) 2011 Free Software Foundation, Inc
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU Affero General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU Affero General Public License for more details.
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 ####################################
21 # Staticdirect infrastructure.
22 # Borrowed largely from cc.engine
23 # by Chris Webber & Creative Commons
25 # This needs documentation!
26 ####################################
31 class StaticDirect(object):
35 def __call__(self
, filepath
):
36 if self
.cache
.has_key(filepath
):
37 return self
.cache
[filepath
]
39 static_direction
= self
.cache
[filepath
] = self
.get(filepath
)
40 return static_direction
43 def get(self
, filepath
):
44 # should be implemented by the individual staticdirector
48 class RemoteStaticDirect(StaticDirect
):
49 def __init__(self
, remotepath
):
50 StaticDirect
.__init
__(self
)
51 self
.remotepath
= remotepath
.rstrip('/')
53 def get(self
, filepath
):
55 self
.remotepath
, filepath
.lstrip('/'))
58 class MultiRemoteStaticDirect(StaticDirect
):
60 For whene separate sections of the static data is served under
63 def __init__(self
, remotepaths
):
64 StaticDirect
.__init
__(self
)
65 self
.remotepaths
= remotepaths
67 def get(self
, filepath
):
68 section
, rest
= filepath
.strip('/').split('/', 1)
71 self
.remotepaths
[section
].rstrip('/'),