3 # Copyright 2014 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file.
6 from google
.appengine
.api
import memcache
7 from google
.appengine
.api
import urlfetch
12 """A simple appengine app that hosts .html files in src/styleguide/c++ from
13 chromium's git repo."""
16 class MainHandler(webapp2
.RequestHandler
):
18 handler
= GitilesMirrorHandler()
19 handler
.initialize(self
.request
, self
.response
)
20 return handler
.get("c++11.html")
23 BASE
= 'https://chromium.googlesource.com/chromium/src.git/' \
24 '+/master/styleguide/c++/%s?format=TEXT'
25 class GitilesMirrorHandler(webapp2
.RequestHandler
):
26 def get(self
, resource
):
27 if '..' in resource
: # No path traversal.
28 self
.response
.write(':-(')
32 contents
= memcache
.get(url
)
33 if not contents
or self
.request
.get('bust'):
34 result
= urlfetch
.fetch(url
)
35 if result
.status_code
!= 200:
36 self
.response
.set_status(result
.status_code
)
37 self
.response
.write('http error %d' % result
.status_code
)
39 contents
= base64
.b64decode(result
.content
)
40 memcache
.set(url
, contents
, time
=5*60) # seconds
42 if resource
.endswith('.css'):
43 self
.response
.headers
['Content-Type'] = 'text/css'
44 self
.response
.write(contents
)
47 app
= webapp2
.WSGIApplication([
49 ('/(\S+\.(?:css|html))', GitilesMirrorHandler
),