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()
 | |
| 
 |