| #!/usr/bin/env python |
| # Copyright 2014 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import argparse |
| import cherrypy |
| import json |
| import os |
| import staticdirindex |
| from skypy.paths import Paths |
| import skypy.configuration as configuration |
| |
| def skydir(section="", dir="", path="", **kwargs): |
| if cherrypy.request.params.get('format') is None: |
| return '<sky><import src="/sky/examples/file-browser.sky"/><file-browser/></sky>' |
| result = dict() |
| result['directories'] = [] |
| result['files'] = [] |
| for _, dir_names, file_names in os.walk(path.rstrip(r"\/")): |
| for dir_name in sorted(dir_names): |
| result["directories"].append(dir_name) |
| |
| del dir_names[:] # limit to one level |
| |
| for file_name in sorted(file_names): |
| result["files"].append(file_name) |
| return json.dumps(result) |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser(description='Sky development server') |
| parser.add_argument('-v', '--verbose', action='store_true', |
| help='Enable logging to the console.') |
| parser.add_argument('app_path', type=str) |
| parser.add_argument('port', type=int) |
| configuration.add_arguments(parser) |
| args = parser.parse_args() |
| |
| log_dir = os.path.abspath(os.getcwd()) |
| |
| paths = Paths(os.path.join('out', args.configuration)) |
| |
| config = { |
| 'global': { |
| # Cherrypy appears to just drop requests if it doesn't have |
| # a thread to service them, so set our thread_pool high enough |
| # so that a z620 can run all the tests w/o timeouts. |
| 'server.thread_pool': 30, |
| 'server.socket_port': args.port, |
| 'tools.staticdir.content_types' : { |
| 'sky': 'text/sky', |
| }, |
| 'log.screen': args.verbose, |
| 'log.access_log': os.path.join(log_dir, 'access_log.txt'), |
| # This causes some strange python exception?? |
| # 'log.error_log': os.path.join(log_dir, 'error_log.txt'), |
| }, |
| '/': { |
| 'tools.staticdir.on': True, |
| 'tools.staticdir.dir': os.path.abspath(args.app_path), |
| 'tools.staticdir.indexlister': skydir, |
| }, |
| '/mojo/public': { |
| 'tools.staticdir.on': True, |
| 'tools.staticdir.dir': os.path.join(paths.gen_root, 'mojo', 'public'), |
| }, |
| '/mojo/services': { |
| 'tools.staticdir.on': True, |
| 'tools.staticdir.dir': os.path.join(paths.gen_root, 'mojo', 'services'), |
| }, |
| '/sky/services': { |
| 'tools.staticdir.on': True, |
| 'tools.staticdir.dir': os.path.join(paths.gen_root, 'sky', 'services'), |
| }, |
| } |
| cherrypy.quickstart(config=config) |
| |
| |
| if __name__ == '__main__': |
| main() |