review/web_ui.py @ 590fb7bae0a8
webui
Add a simple review page in the web UI. Just show diffs for now.
author |
Steve Losh <steve@stevelosh.com> |
date |
Tue, 13 Oct 2009 20:55:01 -0400 |
parents |
73284798e9e9 |
children |
efc3c9173ce1 |
"""The review extension's web UI."""
import sys, os
import api
from mercurial import cmdutil
package_path = os.path.split(os.path.realpath(__file__))[0]
template_path = os.path.join(package_path, 'web_templates')
media_path = os.path.join(package_path, 'web_media')
top_path = os.path.split(package_path)[0]
bundled_path = os.path.join(top_path, 'bundled')
webpy_path = os.path.join(bundled_path, 'webpy')
sys.path.insert(0, webpy_path)
import web
_rd = None
urls = (
'/', 'index',
'/media/([^/]*)', 'media',
'/review/([\da-f]{12})/?', 'review',
)
from mercurial.node import short
g = { 'node_short': short, 'basename': os.path.basename, }
render = web.template.render(template_path, globals=g)
LOG_PAGE_LEN = 15
class index:
def GET(self):
rev_max = _rd.target['tip'].rev()
rev_min = rev_max - LOG_PAGE_LEN if rev_max >= LOG_PAGE_LEN else 0
revs = (_rd.target[r] for r in xrange(rev_max, rev_min, -1))
return render.index(_rd, revs)
class review:
def GET(self, node_short):
return render.review(_rd, _rd[node_short])
class media:
def GET(self, fname):
if '..' in fname:
return ''
else:
with open(os.path.join(media_path, fname)) as f:
content = f.read()
return content
def load_interface(ui, repo):
global _rd
_rd = api.ReviewDatastore(ui, repo)
sys.argv = sys.argv[:1] # Seriously, web.py? This is such a hack.
app = web.application(urls, globals())
app.run()