49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
|
|
""" web server for displaying source
|
|
"""
|
|
|
|
import py
|
|
try:
|
|
from pypy.translator.js.examples import server
|
|
except ImportError:
|
|
py.test.skip("PyPy not found")
|
|
from py.__.apigen.source.browser import parse_path
|
|
from py.__.apigen.source.html import create_html, create_dir_html, create_unknown_html
|
|
from py.xml import html
|
|
|
|
class Handler(server.TestHandler):
|
|
BASE_URL='http://codespeak.net/svn/py/dist'
|
|
|
|
def __getattr__(self, attr):
|
|
if attr == 'index':
|
|
attr = ''
|
|
url = self.BASE_URL + "/" + attr
|
|
if url.endswith('_py'):
|
|
url = url[:-3] + '.py'
|
|
path = py.path.svnurl(url)
|
|
if not path.check():
|
|
def f(rev=None):
|
|
return create_unknown_html(path)
|
|
f.exposed = True
|
|
f.func_name = attr
|
|
return f
|
|
def f(rev='HEAD'):
|
|
path = py.path.svnurl(url, rev)
|
|
# some try.. except.. here
|
|
if path.check(file=True):
|
|
return unicode(create_html(parse_path(path)))
|
|
elif path.check(dir=True):
|
|
return create_dir_html(path)
|
|
else:
|
|
return create_unknown_html(path)
|
|
f.exposed = True
|
|
f.func_name = attr
|
|
return f
|
|
|
|
def _main():
|
|
server.start_server(handler=Handler)
|
|
|
|
if __name__ == '__main__':
|
|
_main()
|
|
|