def generate(site):
    """Present the list of bad links to the given file descriptor."""
    # find all links with link problems
    links = [ x
              for x in site.linkMap.values()
              if len(x.linkproblems)>0 ]
    # sort list
    links.sort(lambda a, b: cmp(a.url, b.url))
    # present results
    fp = plugins.open_html(plugins.badlinks, site)
    if not links:
        fp.write(
          '   <p class="description">\n'
          '    There were no problems retrieving links from the website.\n'
          '   </p>\n'
          '   <ol>\n' )
        plugins.close_html(fp)
        return
    fp.write(
      '   <p class="description">\n'
      '    These links could not be retrieved during the crawling of the website.\n'
      '   </p>\n'
      '   <ol>\n' )
    for link in links:
        # list the link
        fp.write(
          '    <li>\n'
          '     %(badurl)s\n'
          '     <ul class="problems">\n'
          % { 'badurl':  plugins.make_link(link,link.url) })
        # list the problems
        for problem in link.linkproblems:
            fp.write(
              '      <li>%(problem)s</li>\n'
              % { 'problem':  plugins.htmlescape(problem) })
        fp.write(
          '     </ul>\n')
        # present a list of parents
        link.parents.sort()
        plugins.print_parents(fp, link, '     ')
        # add a reference to the problem map
        for problem in link.linkproblems:
            for parent in link.parents:
                parent.add_pageproblem('bad link: ' + link.url + ': ' + problem)
        fp.write(
          '    </li>\n')
    fp.write(
      '   </ol>\n' )
    plugins.close_html(fp)
Esempio n. 2
0
def generate(site):
    """Present the list of bad links to the given file descriptor."""
    # find all links with link problems
    links = [x for x in site.linkMap.values() if len(x.linkproblems) > 0]
    # sort list
    links.sort(lambda a, b: cmp(a.url, b.url))
    # present results
    fp = plugins.open_html(plugins.badlinks, site)
    if not links:
        fp.write(
            '   <p class="description">\n'
            '    There were no problems retrieving links from the website.\n'
            '   </p>\n'
            '   <ol>\n')
        plugins.close_html(fp)
        return
    fp.write(
        '   <p class="description">\n'
        '    These links could not be retrieved during the crawling of the website.\n'
        '   </p>\n'
        '   <ol>\n')
    for link in links:
        # list the link
        fp.write('    <li>\n'
                 '     %(badurl)s\n'
                 '     <ul class="problems">\n' %
                 {'badurl': plugins.make_link(link, link.url)})
        # list the problems
        for problem in link.linkproblems:
            fp.write('      <li>%(problem)s</li>\n' %
                     {'problem': plugins.htmlescape(problem)})
        fp.write('     </ul>\n')
        # present a list of parents
        link.parents.sort()
        plugins.print_parents(fp, link, '     ')
        # add a reference to the problem map
        for problem in link.linkproblems:
            for parent in link.parents:
                parent.add_pageproblem('bad link: ' + link.url + ': ' +
                                       problem)
        fp.write('    </li>\n')
    fp.write('   </ol>\n')
    plugins.close_html(fp)
Esempio n. 3
0
def generate(site):
    """Output a list of modules, it's authors and it's version to the
    file descriptor."""
    fp = plugins.open_html(plugins.about, site)
    # TODO: xxx links were fetched, xxx pages were examined and a total of xxx notes and problems were found
    # TODO: include some runtime information (e.g. supported schemes, user configuration, etc)
    # output some general information about the report
    fp.write(
      '   <p>\n'
      '    This is a website report generated by <tt>webcheck</tt>\n'
      '    %(version)s. <tt>webcheck</tt> is a website checking tool for\n'
      '    webmasters. It crawls a given website and does a number of tests\n'
      '    to see if links and pages are valid.\n'
      '    More information about <tt>webcheck</tt> can be found at the\n'
      '    <tt>webcheck</tt> homepage which is located at\n'
      '    <a href="%(homepage)s">%(homepage)s</a>.\n'
      '   </p>\n'
      '   <p>\n'
      '    This report was generated on %(time)s, a total of %(numurls)d\n'
      '    links were found.\n'
      '   </p>\n\n'
      % { 'version':  plugins.htmlescape(config.VERSION),
          'time':     plugins.htmlescape(time.ctime(time.time())),
          'numurls':  len(site.linkMap),
          'homepage': config.HOMEPAGE } )
    # output copyright information
    fp.write(
      '   <h3>Copyright</h3>\n'
      '   <p>\n'
      '    <tt>webcheck</tt> was originally named <tt>linbot</tt> which was\n'
      '    developed by Albert Hopkins (marduk).\n'
      '    Versions up till 1.0 were maintained by Mike W. Meyer who changed\n'
      '    the name to <tt>webcheck</tt>.\n'
      '    After that Arthur de Jong did a complete rewrite.\n'
      '    <tt>webcheck</tt> is <i>free software</i>; you can redistribute it\n'
      '    and/or modify it under the terms of the\n'
      '    <a href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License</a>\n'
      '    (version 2 or later).\n'
      '    There is no warranty; not even for merchantability or fitness for a\n'
      '    particular purpose. See the source for further details.\n'
      '   </p>\n'
      '   <p>\n'
      '    Copyright &copy; 1998, 1999, 2002, 2005, 2006 Albert Hopkins (marduk),\n'
      '    Mike W. Meyer and Arthur de Jong\n'
      '   </p>\n'
      '   <p>\n'
      '    The files in this generated report do not automatically fall under\n'
      '    the copyright of the software, unless explicitly stated otherwise.\n'
      '   </p>\n'
      '   <p>\n'
      '    <tt>webcheck</tt> includes the\n'
      '    <a href="http://victr.lm85.com/projects/fancytooltips/">FancyTooltips</a>\n'
      '    javascript library to display readable tooltips. FancyTooltips is\n'
      '    distributed under the MIT license and has the following copyright\n'
      '    notices (see <tt>fancytooltips.js</tt> for details):\n'
      '   </p>\n'
      '   <p>\n'
      '    Copyright &copy; 2003, 2005 Stuart Langridge, Paul McLanahan,\n'
      '    Peter Janes, Brad Choate, Dunstan Orchard, Ethan Marcotte,\n'
      '    Mark Wubben and Victor Kulinski\n'
      '   </p>\n\n' )
    # output plugin information
    fp.write(
      '   <h3>Plugins</h3>\n'
      '   <ul>\n')
    for plugin in config.PLUGINS:
        report = __import__('plugins.'+plugin, globals(), locals(), [plugin])
        fp.write(
          '    <li>\n'
          '     <strong>%s</strong><br />\n'
          % plugins.htmlescape(report.__title__) )
        if hasattr(report, '__doc__'):
            fp.write('     %s<br />\n' % plugins.htmlescape(report.__doc__))
        fp.write('    </li>\n')
    fp.write(
      '   </ul>\n' )
    plugins.close_html(fp)
Esempio n. 4
0
def generate(site):
    """Output a list of modules, it's authors and it's version to the
    file descriptor."""
    fp = plugins.open_html(plugins.about, site)
    # TODO: xxx links were fetched, xxx pages were examined and a total of xxx notes and problems were found
    # TODO: include some runtime information (e.g. supported schemes, user configuration, etc)
    # output some general information about the report
    fp.write(
        '   <p>\n'
        '    This is a website report generated by <tt>webcheck</tt>\n'
        '    %(version)s. <tt>webcheck</tt> is a website checking tool for\n'
        '    webmasters. It crawls a given website and does a number of tests\n'
        '    to see if links and pages are valid.\n'
        '    More information about <tt>webcheck</tt> can be found at the\n'
        '    <tt>webcheck</tt> homepage which is located at\n'
        '    <a href="%(homepage)s">%(homepage)s</a>.\n'
        '   </p>\n'
        '   <p>\n'
        '    This report was generated on %(time)s, a total of %(numurls)d\n'
        '    links were found.\n'
        '   </p>\n\n' % {
            'version': plugins.htmlescape(config.VERSION),
            'time': plugins.htmlescape(time.ctime(time.time())),
            'numurls': len(site.linkMap),
            'homepage': config.HOMEPAGE
        })
    # output copyright information
    fp.write(
        '   <h3>Copyright</h3>\n'
        '   <p>\n'
        '    <tt>webcheck</tt> was originally named <tt>linbot</tt> which was\n'
        '    developed by Albert Hopkins (marduk).\n'
        '    Versions up till 1.0 were maintained by Mike W. Meyer who changed\n'
        '    the name to <tt>webcheck</tt>.\n'
        '    After that Arthur de Jong did a complete rewrite.\n'
        '    <tt>webcheck</tt> is <i>free software</i>; you can redistribute it\n'
        '    and/or modify it under the terms of the\n'
        '    <a href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License</a>\n'
        '    (version 2 or later).\n'
        '    There is no warranty; not even for merchantability or fitness for a\n'
        '    particular purpose. See the source for further details.\n'
        '   </p>\n'
        '   <p>\n'
        '    Copyright &copy; 1998, 1999, 2002, 2005, 2006 Albert Hopkins (marduk),\n'
        '    Mike W. Meyer and Arthur de Jong\n'
        '   </p>\n'
        '   <p>\n'
        '    The files in this generated report do not automatically fall under\n'
        '    the copyright of the software, unless explicitly stated otherwise.\n'
        '   </p>\n'
        '   <p>\n'
        '    <tt>webcheck</tt> includes the\n'
        '    <a href="http://victr.lm85.com/projects/fancytooltips/">FancyTooltips</a>\n'
        '    javascript library to display readable tooltips. FancyTooltips is\n'
        '    distributed under the MIT license and has the following copyright\n'
        '    notices (see <tt>fancytooltips.js</tt> for details):\n'
        '   </p>\n'
        '   <p>\n'
        '    Copyright &copy; 2003, 2005 Stuart Langridge, Paul McLanahan,\n'
        '    Peter Janes, Brad Choate, Dunstan Orchard, Ethan Marcotte,\n'
        '    Mark Wubben and Victor Kulinski\n'
        '   </p>\n\n')
    # output plugin information
    fp.write('   <h3>Plugins</h3>\n' '   <ul>\n')
    for plugin in config.PLUGINS:
        report = __import__('plugins.' + plugin, globals(), locals(), [plugin])
        fp.write('    <li>\n'
                 '     <strong>%s</strong><br />\n' %
                 plugins.htmlescape(report.__title__))
        if hasattr(report, '__doc__'):
            fp.write('     %s<br />\n' % plugins.htmlescape(report.__doc__))
        fp.write('    </li>\n')
    fp.write('   </ul>\n')
    plugins.close_html(fp)
def generate(site):
    """Output the overview of problems to the given file descriptor."""
    # make a list of problems per author
    problem_db = {}
    for link in site.linkMap.values():
        # skip external pages
        if not link.isinternal or len(link.pageproblems) == 0:
            continue
        # make a normal name for the author
        if link.author:
            author = link.author.strip()
        else:
            author = unicode('Unknown')
        # store the problem
        if problem_db.has_key(author):
            problem_db[author].append(link)
        else:
            problem_db[author] = [link]
    fp = plugins.open_html(plugins.problems, site)
    if not problem_db:
        fp.write(
          '   <p class="description">\n'
          '    No problems were found on this site, hurray.\n'
          '   </p>\n' )
        plugins.close_html(fp)
        return
    # print description
    fp.write(
      '   <p class="description">\n'
      '    This is an overview of all the problems on the site, grouped by\n'
      '    author.\n'
      '   </p>\n' )
    # get a list of authors
    authors = problem_db.keys()
    authors.sort()
    # generate short list of authors
    if len(authors) > 1:
        fp.write('   <ul class="authorlist">\n')
        for author in authors:
            fp.write(
              '    <li><a href="#%(authorref)s">Author: %(author)s</a></li>\n'
              % { 'authorref': urllib.quote(author,''),
                  'author':    plugins.htmlescape(author) })
        fp.write('   </ul>\n')
    # generate problem report
    fp.write('   <ul>\n')
    for author in authors:
        fp.write(
          '     <li>\n'
          '      <a name="%(authorref)s">Author: %(author)s</a>\n'
          '      <ul>\n'
          % { 'authorref': urllib.quote(author,''),
              'author':    plugins.htmlescape(author) })
        # sort pages by url
        problem_db[author].sort(lambda a, b: cmp(a.url, b.url))
        # list problems for this author
        for link in problem_db[author]:
            # present the links
            fp.write(
              '    <li>\n'
              '     %(link)s\n'
              '     <ul class="problems">\n'
              % { 'link':    plugins.make_link(link) })
            # sort problems by name
            link.pageproblems.sort()
            # list the problems
            for problem in link.pageproblems:
                fp.write(
                  '      <li>%(problem)s</li>\n'
                  % { 'problem':  plugins.htmlescape(problem) })
            # end the list item
            fp.write(
              '     </ul>\n'
              '    </li>\n' )
        fp.write(
          '      </ul>\n'
          '     </li>\n' )
    fp.write(
      '   </ul>\n' )
    plugins.close_html(fp)