~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/webapp/media.py

  • Committer: Matt Giuca
  • Date: 2009-02-24 02:02:03 UTC
  • mto: This revision was merged to the branch mainline in revision 1119.
  • Revision ID: matt.giuca@gmail.com-20090224020203-aqdcjnsj6y7wl32o
Added a new look to the IVLE header bar. Mmmm... Web 2.0.
Added top-level directory image-source, containing SVG and script files for
    generating the images.
ivle/webapp/coremedia/images: Added 'chrome' directory containing the rendered
    images.
Modified ivle/webapp/base/ivle-headings.html and
    ivle/webapp/coremedia/ivle.css to support the new images.
    Note that the H1 and H2 at the top of the page are no longer displayed
    (and their custom styles have been removed). There is a heading image
    instead.

Show diffs side-by-side

added added

removed removed

Lines of Context:
140
140
                                    usegmt=True)
141
141
        return super(VersionedMediaFileView, self)._make_filename(req)
142
142
 
143
 
 
144
 
# This maps a media namespace to an external dependency directory (in this
145
 
# case specified by the configuration option media/externals/jquery) and a
146
 
# list of permitted subpaths.
147
 
EXTERNAL_MEDIA_MAP = {'jquery': ('jquery', ['jquery.js'])}
148
 
 
149
 
class ExternalMediaFileView(BaseMediaFileView):
150
 
    '''A view for media files from external dependencies.
151
 
 
152
 
    This serves specific static files from external dependencies as defined in
153
 
    the IVLE configuration.
154
 
    '''
155
 
    permission = None
156
 
 
157
 
    def _make_filename(self, req):
158
 
        try:
159
 
            extern = EXTERNAL_MEDIA_MAP[self.ns]
160
 
        except KeyError:
161
 
            raise NotFound()
162
 
 
163
 
        # Unless it's a whitelisted path, we don't want to hear about it.
164
 
        if self.path not in extern[1]:
165
 
            raise NotFound()
166
 
 
167
 
        # Grab the admin-configured path for this particular external dep.
168
 
        config = Config()
169
 
        externdir = config['media']['externals'][extern[0]]
170
 
 
171
 
        assert isinstance(externdir, basestring)
172
 
 
173
 
        return os.path.join(externdir, self.path)
174
 
 
175
 
    def get_permissions(self, user):
176
 
        return set()
177
 
 
178
 
class ExternalVersionedMediaFileView(ExternalMediaFileView):
179
 
    '''A view for versioned media files from external dependencies, with
180
 
    aggressive caching.
181
 
 
182
 
    This serves specific static media files from external dependencies with a
183
 
    version string, and requests that browsers cache them for a long time.
184
 
    '''
185
 
 
186
 
    def __init__(self, req, ns, path, version):
187
 
        super(ExternalVersionedMediaFileView, self).__init__(req, ns, path)
188
 
        self.version = version
189
 
 
190
 
    def _make_filename(self, req):
191
 
        if self.version != Config()['media']['version']:
192
 
            raise NotFound()
193
 
 
194
 
        # Don't expire for a year.
195
 
        req.headers_out['Expires'] = email.utils.formatdate(
196
 
                                    timeval=time.time() + (60*60*24*365),
197
 
                                    localtime=False,
198
 
                                    usegmt=True)
199
 
        return super(ExternalVersionedMediaFileView, self)._make_filename(req)
200
 
 
201
 
 
202
143
class Plugin(ViewPlugin, PublicViewPlugin):
203
144
    urls = [
204
 
        ('+media/+:version/+external/:ns/*path', ExternalVersionedMediaFileView),
205
 
        ('+media/+external/:ns/*path', ExternalMediaFileView),
206
145
        ('+media/+:version/:ns/*path', VersionedMediaFileView),
207
146
        ('+media/:ns/*path', MediaFileView),
208
147
    ]