def serve_command( port=-1, reporters=['ws', 'output'], # Reporters whose output to try to serve (in order). directory=False # Custom directory to be served. ): """ Runs a simple web server on dexy-generated files. Will look first to see if the Website Reporter has run, if so this content is served. If not the standard output/ directory contents are served. You can also specify another directory to be served. The port defaults to 8085, this can also be customized. """ if not directory: for alias in reporters: reporter = dexy.reporter.Reporter.create_instance(alias) if file_exists(reporter.setting('dir')): directory = reporter.setting('dir') break if not directory: print NO_OUTPUT_MSG sys.exit(1) os.chdir(directory) if port < 0: ports = range(8085, 8100) else: ports = [port] p = None for p in ports: try: Handler = SimpleHTTPServer.SimpleHTTPRequestHandler httpd = SocketServer.TCPServer(("", p), Handler) except socket.error: print "port %s already in use" % p p = None else: break if p: print "serving contents of %s on http://localhost:%s" % (directory, p) print "type ctrl+c to stop" try: httpd.serve_forever() except KeyboardInterrupt: sys.exit(1) else: print "could not find a free port to serve on, tried", ports sys.exit(1)
def reporters_command( alias=False, # Print detailed information about the specified reporter. simple=False, # Only print report aliases, without other information. ): """ List available reports which dexy can run. """ if simple: for reporter in dexy.reporter.Reporter: print(reporter.alias) elif alias: nodoc_settings = ( 'aliases', 'help', ) reporter = dexy.reporter.Reporter.create_instance(alias) print_indented("%s Reporter" % reporter.__class__.__name__) print('') print_indented("settings:") print('') for name in sorted(reporter._instance_settings): if name in nodoc_settings: continue docs, default_value = reporter._instance_settings[name] print_indented(name, 2) print_rewrapped(docs, 4) print_indented("(default: %r)" % default_value, 4) print('') reporter.help() print('') else: FMT = "%-15s %-9s %s" print(FMT % ('alias', 'default', 'info')) for reporter in dexy.reporter.Reporter: help_text = reporter.setting('help').splitlines()[0] default_text = reporter.setting('default') and 'true' or 'false' print(FMT % (reporter.alias, default_text, help_text))
def reporters_command( alias=False, # Print detailed information about the specified reporter. simple=False, # Only print report aliases, without other information. ): """ List available reports which dexy can run. """ if simple: for reporter in dexy.reporter.Reporter: print reporter.alias elif alias: nodoc_settings = ('aliases', 'help',) reporter = dexy.reporter.Reporter.create_instance(alias) print_indented("%s Reporter" % reporter.__class__.__name__) print '' print_indented("settings:") print '' for name in sorted(reporter._instance_settings): if name in nodoc_settings: continue docs, default_value = reporter._instance_settings[name] print_indented(name, 2) print_rewrapped(docs, 4) print_indented("(default: %r)" % default_value, 4) print '' reporter.help() print '' else: FMT = "%-15s %-9s %s" print FMT % ('alias', 'default', 'info') for reporter in dexy.reporter.Reporter: help_text = reporter.setting('help').splitlines()[0] default_text = reporter.setting('default') and 'true' or 'false' print FMT % (reporter.alias, default_text, help_text)
def report(self): if self.reports: self.log.debug("generating user-specified reports '%s'" % self.reports) reporters = [] for alias in self.reports.split(): reporter = dexy.reporter.Reporter.create_instance(alias) reporters.append(reporter) else: msg = "no reports specified, running default reports" self.log.debug(msg) reporters = [i for i in dexy.reporter.Reporter if i.setting("default")] for reporter in reporters: if self.state in reporter.setting("run-for-wrapper-states"): self.log.debug("running reporter %s" % reporter.aliases[0]) reporter.run(self)
def reporters_command( simple=False, # Only print report aliases, without other information. ): """ List available reports which dexy can run. """ if simple: for reporter in dexy.reporter.Reporter: print reporter.alias else: FMT = "%-15s %-9s %s" print FMT % ('alias', 'default', 'info') for reporter in dexy.reporter.Reporter: help_text = reporter.help().splitlines()[0] default_text = reporter.setting('default') and 'true' or 'false' print FMT % (reporter.alias, default_text, help_text)
def report(self): if self.reports: self.log.debug("generating user-specified reports '%s'" % self.reports) reporters = [] for alias in self.reports.split(): reporter = dexy.reporter.Reporter.create_instance(alias) reporters.append(reporter) else: msg = "no reports specified, running default reports" self.log.debug(msg) reporters = [ i for i in dexy.reporter.Reporter if i.setting('default') ] for reporter in reporters: if self.state in reporter.setting('run-for-wrapper-states'): self.log.debug("running reporter %s" % reporter.aliases[0]) reporter.run(self)
def serve_command( port=-1, reporters=['ws', 'output'], # Reporters whose output to try to serve (in order). username='', # http auth username to use (if provided) password='', # http auth password to use (if provided) realm='Dexy', # http auth realm to use (if username and password are provided) directory=False # Custom directory to be served. ): """ Runs a simple web server on dexy-generated files. Will look first to see if the Website Reporter has run, if so this content is served. If not the standard output/ directory contents are served. You can also specify another directory to be served. The port defaults to 8085, this can also be customized. If a username and password are provided, uses HTTP auth to access pages. """ if not directory: for alias in reporters: reporter = dexy.reporter.Reporter.create_instance(alias) if file_exists(reporter.setting('dir')): directory = reporter.setting('dir') break if not directory: print NO_OUTPUT_MSG sys.exit(1) os.chdir(directory) if port < 0: ports = range(8085, 8100) else: ports = [port] p = None for p in ports: try: if username and password: import base64 authcode = base64.b64encode("%s:%s" % (username, password)) Handler = SimpleHTTPAuthRequestHandler Handler.authcode = authcode Handler.realm = realm else: Handler = SimpleHTTPServer.SimpleHTTPRequestHandler httpd = SocketServer.TCPServer(("", p), Handler) except socket.error: print "port %s already in use" % p p = None else: break if p: print "serving contents of %s on http://localhost:%s" % (directory, p) if username and password and Handler.authcode: print "username '%s' and password '%s' are required to access contents" % (username, password) print "type ctrl+c to stop" try: httpd.serve_forever() except KeyboardInterrupt: sys.exit(1) else: print "could not find a free port to serve on, tried", ports sys.exit(1)