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