Example #1
0
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)
Example #2
0
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)
Example #3
0
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))
Example #4
0
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)
Example #5
0
    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)
Example #6
0
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)
Example #7
0
File: wrapper.py Project: dexy/dexy
    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)
Example #8
0
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)