From b38317d57b0820628c59a7f324fdb45033b659ee Mon Sep 17 00:00:00 2001 From: Bastian Kleineidam Date: Wed, 27 Feb 2013 19:35:44 +0100 Subject: [PATCH] Replace optparse with argparse. --- config/linkchecker-completion | 4 +- doc/changelog.txt | 2 + doc/install.txt | 2 +- doc/python3.txt | 9 +- linkcheck/cmdline.py | 84 +----- linkcheck/configuration/__init__.py | 2 +- linkchecker | 183 +++++------- linkchecker-nagios | 82 +++--- po/Makefile | 4 +- po/de.po | 438 ++++++++++++++++++---------- po/linkchecker.pot | 378 ++++++++++++++---------- setup.py | 4 +- 12 files changed, 632 insertions(+), 560 deletions(-) diff --git a/config/linkchecker-completion b/config/linkchecker-completion index d2f19733..5252b3b6 100644 --- a/config/linkchecker-completion +++ b/config/linkchecker-completion @@ -10,8 +10,8 @@ _linkcheck() { cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} - if type _optcomplete &> /dev/null; then - _optcomplete "$@" + if type _argcomplete &> /dev/null; then + _argcomplete "$@" else _filedir fi diff --git a/doc/changelog.txt b/doc/changelog.txt index 2a58ad9d..603d1e0e 100644 --- a/doc/changelog.txt +++ b/doc/changelog.txt @@ -2,6 +2,8 @@ Changes: - checking: Always use the W3C validator to check HTML or CSS syntax. +- cmdline: Replace argument parsing. No changes in functionality, only + the help text will be formatted different. 8.4 "Frankenweenie" (released 25.01.2013) diff --git a/doc/install.txt b/doc/install.txt index f59f2554..7e360c25 100644 --- a/doc/install.txt +++ b/doc/install.txt @@ -51,7 +51,7 @@ First, install the required software. On Redhat systems, install the package qt-devel. 4. *Optional, for bash-completion:* - optcomplete Python module from http://furius.ca/optcomplete/ + argcomplete Python module from https://pypi.python.org/pypi/argcomplete 6. *Optional, for displaying country codes:* GeoIP from http://www.maxmind.com/app/python diff --git a/doc/python3.txt b/doc/python3.txt index 8bccd6be..b033fe82 100644 --- a/doc/python3.txt +++ b/doc/python3.txt @@ -6,7 +6,8 @@ Date: 08.08.2012 OK Python OK Qt/PyQt OK mod_wsgi from http://code.google.com/p/modwsgi/ -TODO optcomplete from http://furius.ca/optcomplete/ -TODO GeoIP from http://www.maxmind.com/app/python -TODO Twill from http://twill.idyll.org/ -TODO Python Gtk from http://www.pygtk.org/downloads.html +OK argcomplete from https://pypi.python.org/pypi/argcomplete +OK dnspython (as dnspython3) +TODO(optional) GeoIP from http://www.maxmind.com/app/python +TODO(optional) Twill from http://twill.idyll.org/ +TODO(optional) Python Gtk from http://www.pygtk.org/downloads.html diff --git a/linkcheck/cmdline.py b/linkcheck/cmdline.py index 6e25400f..c4f52e16 100644 --- a/linkcheck/cmdline.py +++ b/linkcheck/cmdline.py @@ -1,5 +1,5 @@ # -*- coding: iso-8859-1 -*- -# Copyright (C) 2000-2012 Bastian Kleineidam +# Copyright (C) 2000-2013 Bastian Kleineidam # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,10 +19,9 @@ Utility functions suitable for command line clients. """ from __future__ import print_function import sys -import optparse -from . import fileutil, ansicolor, strformat, checker +from . import checker from .director import console -from .decorators import notimplemented + def print_version(exit_code=0): """Print the program version and exit.""" @@ -38,83 +37,6 @@ def print_usage (msg, exit_code=2): sys.exit(exit_code) -class LCHelpFormatter (optparse.IndentedHelpFormatter, object): - """Help formatter indenting paragraph-wise.""" - - def __init__ (self): - """Set current console width for this formatter.""" - width = ansicolor.get_columns(sys.stdout) - super(LCHelpFormatter, self).__init__(width=width) - - def format_option (self, option): - """Customized help display with indentation.""" - # The help for each option consists of two parts: - # * the opt strings and metavars - # eg. ("-x", or "-fFILENAME, --file=FILENAME") - # * the user-supplied help string - # eg. ("turn on expert mode", "read data from FILENAME") - - # If possible, we write both of these on the same line: - # -x turn on expert mode - - # But if the opt string list is too long, we put the help - # string on a second line, indented to the same column it would - # start in if it fit on the first line. - # -fFILENAME, --file=FILENAME - # read data from FILENAME - result = [] - opts = self.option_strings[option] - opt_width = self.help_position - self.current_indent - 2 - if len(opts) > opt_width: - opts = "%*s%s\n" % (self.current_indent, "", opts) - indent_first = self.help_position - else: # start help on same line as opts - opts = "%*s%-*s " % (self.current_indent, "", opt_width, opts) - indent_first = 0 - result.append(opts) - if option.help: - text = strformat.wrap(option.help, self.help_width) - help_lines = text.splitlines() - result.append("%*s%s\n" % (indent_first, "", help_lines[0])) - result.extend(["%*s%s\n" % (self.help_position, "", line) - for line in help_lines[1:]]) - elif opts[-1] != "\n": - result.append("\n") - return "".join(result) - - -class LCOptionParser (optparse.OptionParser, object): - """Option parser with custom help text layout.""" - - def __init__ (self, err_exit_code=2): - """Initializing using our own help formatter class.""" - super(LCOptionParser, self).__init__(formatter=LCHelpFormatter()) - self.err_exit_code = err_exit_code - - def error (self, msg): - """Print usage info and given message.""" - print_usage(msg, exit_code=self.err_exit_code) - - @notimplemented - def get_usage (self): - """Print usage text.""" - pass - - def print_help_msg (self, s, out): - """Print a help message to stdout.""" - s = console.encode(s) - if fileutil.is_tty(out): - strformat.paginate(s) - else: - print(s, file=out) - sys.exit(0) - - @notimplemented - def print_help (self, file=None): - """Print help text to given file.""" - pass - - def aggregate_url (aggregate, url, err_exit_code=2): """Append given commandline URL to input queue.""" get_url_from = checker.get_url_from diff --git a/linkcheck/configuration/__init__.py b/linkcheck/configuration/__init__.py index 2eb0d3fe..11861cf6 100644 --- a/linkcheck/configuration/__init__.py +++ b/linkcheck/configuration/__init__.py @@ -63,7 +63,7 @@ def normpath (path): # List optional Python modules in the form (module, name) Modules = ( ("PyQt4.Qsci", u"QScintilla"), - ("optcomplete", u"Optcomplete"), + ("argcomplete", u"Argcomplete"), ("GeoIP", u"GeoIP"), # on Unix systems ("pygeoip", u"GeoIP"), # on Windows systems ("twill", u"Twill"), diff --git a/linkchecker b/linkchecker index ac4666bd..b73f4675 100755 --- a/linkchecker +++ b/linkchecker @@ -25,15 +25,14 @@ import codecs import re import os import pprint -import optparse +import argparse import getpass # installs _() and _n() gettext functions into global namespace import linkcheck -# override optparse gettext method with the one from linkcheck.init_i18n() -optparse._ = _ +# override argparse gettext method with the one from linkcheck.init_i18n() +#argparse._ = _ # now import the rest of the linkchecker gang -from linkcheck.cmdline import print_version, print_usage, LCOptionParser, \ - aggregate_url +from linkcheck.cmdline import print_version, print_usage, aggregate_url from linkcheck import log, LOG_CMDLINE, i18n, strformat import linkcheck.checker import linkcheck.configuration @@ -42,7 +41,7 @@ import linkcheck.logger import linkcheck.ansicolor from linkcheck.director import console, check_urls, get_aggregate # optional modules -has_optcomplete = linkcheck.fileutil.has_module("optcomplete") +has_argcomplete = linkcheck.fileutil.has_module("argcomplete") has_profile = linkcheck.fileutil.has_module("cProfile") has_pstats = linkcheck.fileutil.has_module("pstats") has_meliae = linkcheck.fileutil.has_module("meliae") @@ -53,8 +52,6 @@ _username = None _password = None # usage texts -Usage = _("""USAGE\tlinkchecker [options] [file-or-url]...""") - Notes = _("""NOTES o URLs on the command line starting with "ftp." are treated like "ftp://ftp.", URLs starting with "www." are treated like "http://www.". @@ -195,8 +192,10 @@ file entry: "\n".join([u" o %s - %s" % (tag, desc) \ for tag, desc in sorted(linkcheck.checker.const.Warnings.items())]) +Epilog = u"\n".join((Examples, LoggerTypes, RegularExpressions, CookieFormat, ProxySupport, Notes, Retval, Warnings)) -def viewprof (): + +def viewprof(): """Print profiling data and exit.""" if not has_pstats: log.error(LOG_CMDLINE, @@ -235,59 +234,45 @@ def has_encoding (encoding): return False # instantiate option parser and configure options -class MyOptionParser (LCOptionParser): - """Option parser for LinkChecker commandline client.""" +argparser = argparse.ArgumentParser( + epilog=Epilog, + formatter_class=argparse.RawDescriptionHelpFormatter +) - def get_usage (self): - """Return translated usage text.""" - return Usage - - def print_help (self, file=None): - """Print translated help text.""" - s = u"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s" % (self.format_help(), - Examples, LoggerTypes, RegularExpressions, CookieFormat, - ProxySupport, Notes, Retval, Warnings) - self.print_help_msg(s, file) - -# instantiate option parser and configure options -optparser = MyOptionParser() # build a config object for this check session config = linkcheck.configuration.Configuration() ################# general options ################## -group = optparse.OptionGroup(optparser, _("General options")) -group.add_option("-f", "--config", type="string", dest="configfile", +group = argparser.add_argument_group(_("General options")) +group.add_argument("-f", "--config", dest="configfile", metavar="FILENAME", help=_( """Use FILENAME as configuration file. Per default LinkChecker uses ~/.linkchecker/linkcheckerrc (under Windows -%HOMEPATH%\\.linkchecker\\linkcheckerrc).""")) -group.add_option("-t", "--threads", type="int", dest="threads", - metavar="NUMBER", +%%HOMEPATH%%\\.linkchecker\\linkcheckerrc).""")) +group.add_argument("-t", "--threads", type=int, metavar="NUMBER", help=_( """Generate no more than the given number of threads. Default number of threads is 10. To disable threading specify a non-positive number.""")) -group.add_option("-V", "--version", action="store_true", dest="version", +group.add_argument("-V", "--version", action="store_true", help=_("""Print version and exit.""")) -group.add_option("--stdin", action="store_true", dest="stdin", +group.add_argument("--stdin", action="store_true", help=_( """Read list of white-space separated URLs to check from stdin.""")) -optparser.add_option_group(group) ################# output options ################## -group = optparse.OptionGroup(optparser, _("Output options")) -group.add_option("--check-css", action="store_true", dest="checkcss", +group = argparser.add_argument_group(_("Output options")) +group.add_argument("--check-css", action="store_true", dest="checkcss", help=_( """Check syntax of CSS URLs with the W3C online validator.""")) -group.add_option("--check-html", action="store_true", dest="checkhtml", +group.add_argument("--check-html", action="store_true", dest="checkhtml", help=_( """Check syntax of HTML URLs with the W3C online validator.""")) -group.add_option("--complete", action="store_true", dest="complete", +group.add_argument("--complete", action="store_true", dest="complete", help=_("""Log all URLs, including duplicates. Default is to log duplicate URLs only once.""")) -group.add_option("-D", "--debug", type="string", action="append", - metavar="STRING", +group.add_argument("-D", "--debug", action="append", metavar="STRING", help=_("""Print debugging output for the given logger. Available loggers are %(lognamelist)s. Specifying 'all' is an alias for specifying all available loggers. @@ -296,8 +281,8 @@ than one logger. For accurate results, threading will be disabled during debug runs.""") % \ {"lognamelist": linkcheck.lognamelist}) -group.add_option("-F", "--file-output", type="string", action="append", - dest="fileoutput", metavar="TYPE[/ENCODING][/FILENAME]", +group.add_argument("-F", "--file-output", action="append", + dest="fileoutput", metavar="TYPE[/ENCODING[/FILENAME]]", help=_( """Output to a file linkchecker-out.TYPE, $HOME/.linkchecker/blacklist for 'blacklist' output, or FILENAME if specified. @@ -311,13 +296,12 @@ are %(loggertypes)s. You can specify this option multiple times to output to more than one file. Default is no file output. Note that you can suppress all console output with the option '-o none'.""") % \ {'loggertypes': linkcheck.logger.LoggerKeys}) -group.add_option("--no-status", action="store_false", dest="status", +group.add_argument("--no-status", action="store_false", dest="status", default=True, help=_( """Do not print check status messages.""")) -group.add_option("--no-warnings", action="store_false", dest="warnings", +group.add_argument("--no-warnings", action="store_false", dest="warnings", help=_("""Don't log warnings. Default is to log warnings.""")) -group.add_option("-o", "--output", type="string", dest="output", - metavar="TYPE[/ENCODING]", +group.add_argument("-o", "--output", dest="output", metavar="TYPE[/ENCODING]", help=_( """Specify output as %(loggertypes)s. Default output type is text. The ENCODING specifies the output encoding, the default is that of your @@ -325,23 +309,23 @@ locale. Valid encodings are listed at """ \ """http://docs.python.org/lib/standard-encodings.html.""") % \ {'loggertypes': linkcheck.logger.LoggerKeys}) -group.add_option("--profile", action="store_true", dest="profile", - help=optparse.SUPPRESS_HELP) -group.add_option("-q", "--quiet", action="store_true", dest="quiet", +group.add_argument("--profile", action="store_true", dest="profile", + help=argparse.SUPPRESS) +group.add_argument("-q", "--quiet", action="store_true", dest="quiet", help=_( """Quiet operation, an alias for '-o none'. This is only useful with -F.""")) -group.add_option("--scan-virus", action="store_true", dest="scanvirus", +group.add_argument("--scan-virus", action="store_true", dest="scanvirus", help=_( """Scan content of URLs with ClamAV virus scanner.""")) -group.add_option("--trace", action="store_true", dest="trace", +group.add_argument("--trace", action="store_true", dest="trace", help=_("""Print tracing information.""")) -group.add_option("-v", "--verbose", action="store_true", dest="verbose", +group.add_argument("-v", "--verbose", action="store_true", dest="verbose", help=_( """Log all URLs. Default is to log only errors and warnings.""")) -group.add_option("--viewprof", action="store_true", dest="viewprof", - help=optparse.SUPPRESS_HELP) -group.add_option("-W", "--warning-regex", type="string", dest="warningregex", +group.add_argument("--viewprof", action="store_true", dest="viewprof", + help=argparse.SUPPRESS) +group.add_argument("-W", "--warning-regex", dest="warningregex", metavar="REGEX", help=_( """Define a regular expression which prints a warning if it matches @@ -354,99 +338,79 @@ Application error'. Note that multiple values can be combined in the regular expression, for example "(This page has moved|Oracle Application error)".""")) -group.add_option("--warning-size-bytes", dest="warningsizebytes", +group.add_argument("--warning-size-bytes", dest="warningsizebytes", metavar="NUMBER", help=_( """Print a warning if content size info is available and exceeds the given number of bytes.""")) -optparser.add_option_group(group) ################# checking options ################## -group = optparse.OptionGroup(optparser, _("Checking options")) -group.add_option("-a", "--anchors", action="store_true", dest="anchors", +group = argparser.add_argument_group(_("Checking options")) +group.add_argument("-a", "--anchors", action="store_true", dest="anchors", help=_( """Check HTTP anchor references. Default is not to check anchors. This option enables logging of the warning 'url-anchor-not-found'.""")) -group.add_option("-C", "--cookies", action="store_true", dest="cookies", +group.add_argument("-C", "--cookies", action="store_true", dest="cookies", help=_( """Accept and send HTTP cookies according to RFC 2109. Only cookies which are sent back to the originating server are accepted. Sent and accepted cookies are provided as additional logging information.""")) -group.add_option("--cookiefile", type="string", dest="cookiefile", - metavar="FILENAME", +group.add_argument("--cookiefile", dest="cookiefile", metavar="FILENAME", help=_( """Read a file with initial cookie data. The cookie data format is explained below.""")) -group.add_option("--ignore-url", type="string", action="append", - metavar="REGEX", +group.add_argument("--ignore-url", action="append", metavar="REGEX", dest="externstrict", help=_( """Only check syntax of URLs matching the given regular expression. This option can be given multiple times.""")) -group.add_option("--no-follow-url", type="string", action="append", - metavar="REGEX", +group.add_argument("--no-follow-url", action="append", metavar="REGEX", dest="extern", help=_( """Check but do not recurse into URLs matching the given regular expression. This option can be given multiple times.""")) -group.add_option("-N", "--nntp-server", type="string", dest="nntpserver", - metavar="STRING", +group.add_argument("-N", "--nntp-server", dest="nntpserver", metavar="STRING", help=_( """Specify an NNTP server for 'news:...' links. Default is the environment variable NNTP_SERVER. If no host is given, only the syntax of the link is checked.""")) -group.add_option("-p", "--password", action="store_false", dest="password", +group.add_argument("-p", "--password", action="store_false", dest="password", default=False, help=_( """Read a password from console and use it for HTTP and FTP authorization. For FTP the default password is 'anonymous@'. For HTTP there is no default password. See also -u.""")) -group.add_option("-P", "--pause", type="int", dest="pause", +group.add_argument("-P", "--pause", type=int, dest="pause", metavar="NUMBER", help=_( """Pause the given number of seconds between two subsequent connection requests to the same host. Default is no pause between requests.""")) -group.add_option("-r", "--recursion-level", type="int", dest="recursionlevel", - metavar="NUMBER", +group.add_argument("-r", "--recursion-level", type=int, + dest="recursionlevel", metavar="NUMBER", help=_( """Check recursively all links up to given depth. A negative depth will enable infinite recursion. Default depth is infinite.""")) -group.add_option("--timeout", type="int", dest="timeout", +group.add_argument("--timeout", type=int, dest="timeout", metavar="NUMBER", help=_( """Set the timeout for connection attempts in seconds. The default timeout is %d seconds.""") % config["timeout"]) -group.add_option("-u", "--user", type="string", dest="username", - metavar="STRING", +group.add_argument("-u", "--user", dest="username", metavar="STRING", help=_( """Try the given username for HTTP and FTP authorization. For FTP the default username is 'anonymous'. For HTTP there is no default username. See also -p.""")) -group.add_option("--user-agent", type="string", dest="useragent", - metavar="STRING", +group.add_argument("--user-agent", dest="useragent", metavar="STRING", help=_( """Specify the User-Agent string to send to the HTTP server, for example "Mozilla/4.0". The default is "LinkChecker/X.Y" where X.Y is the current version of LinkChecker.""")) -optparser.add_option_group(group) +argparser.add_argument('url', nargs='*') ################# auto completion ##################### -if has_optcomplete: - import optcomplete - - def FileCompleter (cwd, line, point, prefix, suffix): - """Completes by listing all possible files, here or matching - substrings""" - startdir = os.path.dirname(prefix) - lhs = os.path.basename(prefix) - if startdir: - listdir = startdir - else: - listdir = cwd - return [os.path.join(startdir, f) - for f in os.listdir(os.path.expanduser(listdir)) - if f.startswith(lhs)] - optcomplete.autocomplete(optparser, arg_completer=FileCompleter) +if has_argcomplete: + import argcomplete + argcomplete.autocomplete(argparser) def read_stdin_urls (): @@ -465,7 +429,8 @@ def read_stdin_urls (): # read and parse command line options and arguments -(options, args) = optparser.parse_args() +options = argparser.parse_args() + # initialize logging if options.debug: allowed_debugs = linkcheck.lognames.keys() @@ -496,9 +461,9 @@ if options.debug and not __debug__: # apply commandline options and arguments to configuration constructauth = False do_profile = False -if options.warnings is not None: +if options.warnings: config["warnings"] = options.warnings -if options.anchors is not None: +if options.anchors: config["anchors"] = options.anchors if options.externstrict: pats = [linkcheck.get_link_pat(arg, strict=True) \ @@ -560,7 +525,7 @@ if options.fileoutput: config['fileoutput'].append(logger) if options.nntpserver: config["nntpserver"] = options.nntpserver -if options.username is not None: +if options.username: _username = options.username constructauth = True if options.password: @@ -577,13 +542,13 @@ if options.pause is not None: else: print_usage(_("Illegal argument %(arg)r for option %(option)s") % \ {"arg": options.pause, "option": "'-P, --pause'"}) -if options.profile is not None: +if options.profile: do_profile = options.profile -if options.quiet is not None: +if options.quiet: config['logger'] = config.logger_new('none') if options.recursionlevel is not None: config["recursionlevel"] = options.recursionlevel -if options.status is not None: +if options.status: config['status'] = options.status if options.threads is not None: if options.threads < 1: @@ -595,13 +560,13 @@ if options.timeout is not None: else: print_usage(_("Illegal argument %(arg)r for option %(option)s") % \ {"arg": options.timeout, "option": "'--timeout'"}) -if options.version is not None: +if options.version: print_version() -if options.verbose is not None: +if options.verbose: if options.verbose: config["verbose"] = True config["warnings"] = True -if options.complete is not None: +if options.complete: if options.complete: config["complete"] = True config["verbose"] = True @@ -613,18 +578,16 @@ if options.warningregex is not None: config["warnings"] = True if options.warningsizebytes is not None: config["warnsizebytes"] = options.warningsizebytes -if options.cookies is not None: +if options.cookies: config['storecookies'] = config['sendcookies'] = options.cookies if options.cookiefile is not None: config['cookiefile'] = options.cookiefile config['storecookies'] = config['sendcookies'] = True if constructauth: config.add_auth(pattern=".+", user=_username, password=_password) -if options.scanvirus is not None: - config["scanvirus"] = options.scanvirus -# boolean options for syntaxcheck -for option in ("checkhtml", "checkcss"): - if getattr(options, option) is not None: +# boolean options +for option in ("checkhtml", "checkcss", "scanvirus"): + if getattr(options, option): config[option] = getattr(options, option) # read missing passwords for entry in config["authentication"]: @@ -663,8 +626,8 @@ if options.trace: if options.stdin: for url in read_stdin_urls(): aggregate_url(aggregate, url) -elif args: - for url in args: +elif options.url: + for url in options.url: aggregate_url(aggregate, strformat.stripurl(url)) else: log.warn(LOG_CMDLINE, _("no files or URLs given")) diff --git a/linkchecker-nagios b/linkchecker-nagios index 4a25320d..b34f1be2 100755 --- a/linkchecker-nagios +++ b/linkchecker-nagios @@ -1,6 +1,6 @@ #!/usr/bin/python -u # -*- coding: iso-8859-1 -*- -# Copyright (C) 2012 Bastian Kleineidam +# Copyright (C) 2012-2013 Bastian Kleineidam # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,14 +23,14 @@ Run this file without options to see how it's done. import sys import os import socket -import optparse +import argparse import pprint # installs _() and _n() gettext functions into global namespace import linkcheck -# override optparse gettext method with the one from linkcheck.init_i18n() -optparse._ = _ +# override argparse gettext method with the one from linkcheck.init_i18n() +argparse._ = _ # now import the rest of the linkchecker gang -from linkcheck.cmdline import print_version, print_usage, LCOptionParser, \ +from linkcheck.cmdline import print_version, print_usage, LCHelpFormatter, \ aggregate_url from linkcheck import log, LOG_CMDLINE, strformat import linkcheck.checker @@ -40,9 +40,6 @@ import linkcheck.logger import linkcheck.ansicolor from linkcheck.director import console, check_urls, get_aggregate -# usage texts -Usage = _("""USAGE\tlinkchecker-nagios [options] [file-or-url]...""") - Retval = _(r"""RETURN VALUE 0 - everything checked ok without errors or warnings 1 - URL check warnings were found @@ -54,23 +51,16 @@ Examples = _(r"""EXAMPLES linkchecker-nagios -v www.example.org """) +Epilog = u"\n".join((Retval, Examples)) -class MyOptionParser (LCOptionParser): - """Option parser for LinkChecker nagios plugin.""" - - def get_usage (self): - """Return translated usage text.""" - return Usage - - def print_help (self, file=None): - """Print translated help text.""" - s = u"%s\n%s\n%s" % (self.format_help(), Examples, Retval) - if file is None: - file = sys.stdout - self.print_help_msg(s, file) # instantiate option parser and configure options -optparser = MyOptionParser(err_exit_code=3) +class ArgumentParser(argparse.ArgumentParser): + def error(self, message): + self.print_usage(sys.stderr) + self.exit(3, _('%s: error: %s\n') % (self.prog, message)) + +argparser = ArgumentParser(formatter_class=LCHelpFormatter, epilog=Epilog) # build a config object for this check session config = linkcheck.configuration.Configuration() @@ -78,41 +68,40 @@ config = linkcheck.configuration.Configuration() config['recursionlevel'] = 1 # Standard options -group = optparse.OptionGroup(optparser, _("Standard nagios options")) -group.add_option("-v", "--verbose", action="count", default=0, dest="verbose", +group = argparser.add_argument_group(_("Standard nagios options")) +group.add_argument("-v", "--verbose", action="count", default=0, help=_("""Increase verbosity. This option can be given multiple times.""")) -group.add_option("-V", "--version", action="store_true", dest="version", +group.add_argument("-V", "--version", action="store_true", help=_("""Print version and exit.""")) -group.add_option("-t", "--timeout", type="int", dest="timeout", - metavar="NUMBER", +group.add_argument("-t", "--timeout", type=int, dest="timeout", metavar="NUMBER", help=_( """Set the timeout for connection attempts in seconds. The default timeout is %d seconds.""") % config["timeout"]) # Checking options -group = optparse.OptionGroup(optparser, _("Checking options")) -group.add_option("-f", "--config", type="string", dest="configfile", - metavar="FILENAME", +group = argparser.add_argument_group(_("Checking options")) +group.add_argument("-f", "--config", dest="configfile", metavar="FILENAME", help=_( """Use FILENAME as configuration file. Per default LinkChecker uses ~/.linkchecker/linkcheckerrc (under Windows %HOMEPATH%\\.linkchecker\\linkcheckerrc).""")) +argparser.add_argument("url", nargs='+', metavar="FILE_OR_URL") # read and parse command line options and arguments -(options, args) = optparser.parse_args() +args = argparser.parse_args() -if options.version is not None: +if args.version is not None: print_version() -if options.timeout is not None: - if options.timeout > 0: - config["timeout"] = options.timeout +if args.timeout is not None: + if args.timeout > 0: + config["timeout"] = args.timeout else: print_usage(_("Illegal argument %(arg)r for option %(option)s") % \ - {"arg": options.timeout, "option": "'--timeout'"}, + {"arg": args.timeout, "option": "'--timeout'"}, exit_code=3) socket.setdefaulttimeout(config["timeout"]) -if options.verbose >= 3: +if args.verbose >= 3: debug = ['all'] else: debug = None @@ -123,13 +112,12 @@ log.debug(LOG_CMDLINE, _("Python %(version)s on %(platform)s") % \ # read configuration files try: files = [] - if options.configfile: - path = linkcheck.configuration.normpath(options.configfile) + if args.configfile: + path = linkcheck.configuration.normpath(args.configfile) if os.path.isfile(path): files.append(path) else: - log.warn(LOG_CMDLINE, - _("Unreadable config file: %r"), options.configfile) + log.warn(LOG_CMDLINE, _("Unreadable config file: %r"), args.configfile) sys.exit(3) config.read(files=files) except linkcheck.LinkCheckerError, msg: @@ -139,12 +127,12 @@ linkcheck.drop_privileges() socket.setdefaulttimeout(config["timeout"]) -if options.verbose < 0: +if args.verbose < 0: config['logger'] = config.logger_new('none') else: config["verbose"] = True config["warnings"] = True - if options.verbose >= 2: + if args.verbose >= 2: config["complete"] = True # check missing passwords @@ -161,12 +149,8 @@ log.debug(LOG_CMDLINE, "configuration: %s", # prepare checking queue aggregate = get_aggregate(config) # add urls to queue -if args: - for url in args: - aggregate_url(aggregate, strformat.stripurl(url), err_exit_code=3) -else: - log.warn(LOG_CMDLINE, _("no files or URLs given")) - sys.exit(3) +for url in args.url: + aggregate_url(aggregate, strformat.stripurl(url), err_exit_code=3) # finally, start checking check_urls(aggregate) diff --git a/po/Makefile b/po/Makefile index bd0ed36f..a16555c8 100644 --- a/po/Makefile +++ b/po/Makefile @@ -2,11 +2,11 @@ XGETTEXT := xgettext MSGFMT := msgfmt MSGMERGE := msgmerge POSOURCES = $(shell find ../linkcheck -name \*.py) \ - ../linkchecker ../linkchecker-gui /usr/lib/python2.7/optparse.py + ../linkchecker ../linkchecker-gui /usr/lib/python2.7/argparse.py LDIR = ../share/locale PACKAGE = linkchecker TEMPLATE = $(PACKAGE).pot -MYMAIL := calvin@users.sourceforge.net +MYMAIL := bastian.kleineidam@web.de LFILE = LC_MESSAGES/$(PACKAGE).mo # defined language (add new languages here) LANGUAGES = de fr es diff --git a/po/de.po b/po/de.po index ea6ee79e..703e1c74 100644 --- a/po/de.po +++ b/po/de.po @@ -4,8 +4,8 @@ msgid "" msgstr "" "Project-Id-Version: $Id$\n" -"Report-Msgid-Bugs-To: calvin@users.sourceforge.net\n" -"POT-Creation-Date: 2013-02-05 14:55+0100\n" +"Report-Msgid-Bugs-To: bastian.kleineidam@web.de\n" +"POT-Creation-Date: 2013-02-27 10:40+0100\n" "PO-Revision-Date: 2012-11-13 18:13+0100\n" "Last-Translator: Bastian Kleineidam \n" "Language-Team: de \n" @@ -101,7 +101,7 @@ msgstr "Standard Locale:" msgid "System info:" msgstr "Systeminformation:" -#: ../linkcheck/director/console.py:145 ../linkchecker:476 +#: ../linkcheck/director/console.py:145 ../linkchecker:441 #, python-format msgid "Python %(version)s on %(platform)s" msgstr "Python %(version)s auf %(platform)s" @@ -535,128 +535,138 @@ msgstr "%(scheme)s URL ignoriert." msgid "URL is unrecognized or has invalid syntax" msgstr "URL ist unbekannt oder besitzt ungültige Syntax" -#: ../linkcheck/checker/const.py:115 +#: ../linkcheck/checker/const.py:117 msgid "The effective URL is different from the original." msgstr "Die effektive URL unterscheidet sich vom Original." -#: ../linkcheck/checker/const.py:117 +#: ../linkcheck/checker/const.py:119 msgid "Could not get the content of the URL." msgstr "Konnte den Inhalt der URL nicht bekommen." -#: ../linkcheck/checker/const.py:118 +#: ../linkcheck/checker/const.py:120 msgid "URL anchor was not found." msgstr "URL Anker wurde nicht gefunden." -#: ../linkcheck/checker/const.py:120 +#: ../linkcheck/checker/const.py:122 msgid "The warning regular expression was found in the URL contents." msgstr "" "Der reguläre Ausdruck für Warnungen wurde in den URL Inhalten gefunden." -#: ../linkcheck/checker/const.py:121 +#: ../linkcheck/checker/const.py:123 msgid "The URL content is a duplicate of another URL." msgstr "Der URL-Inhalte ist ein Duplikat einer anderen URL." -#: ../linkcheck/checker/const.py:122 +#: ../linkcheck/checker/const.py:124 msgid "The URL content size is too large." msgstr "Der URL Inhalt ist zu groß." -#: ../linkcheck/checker/const.py:123 +#: ../linkcheck/checker/const.py:125 msgid "The URL content size is zero." msgstr "Der URL Inhaltsgrößenangabe ist Null." -#: ../linkcheck/checker/const.py:124 +#: ../linkcheck/checker/const.py:126 msgid "The URL content size and download size are unequal." msgstr "" "Der URL Inhaltsgrößenangabe und die Download-Größe sind unterschiedlich." -#: ../linkcheck/checker/const.py:125 +#: ../linkcheck/checker/const.py:127 msgid "The URL is longer than the recommended size." msgstr "Die URL ist länger als die empfohlene Länge." -#: ../linkcheck/checker/const.py:126 +#: ../linkcheck/checker/const.py:128 msgid "The URL contains leading or trailing whitespace." msgstr "Die URL %(url)s enthält Leerzeichen am Anfang oder Ende." -#: ../linkcheck/checker/const.py:127 +#: ../linkcheck/checker/const.py:129 msgid "The file: URL is missing a trailing slash." msgstr "Der file: URL fehlt ein abschließender Schrägstrich." -#: ../linkcheck/checker/const.py:129 +#: ../linkcheck/checker/const.py:131 msgid "The file: path is not the same as the system specific path." msgstr "Der file: Pfad ist nicht derselbe wie der Systempfad." -#: ../linkcheck/checker/const.py:130 +#: ../linkcheck/checker/const.py:132 msgid "The ftp: URL is missing a trailing slash." msgstr "Der ftp: URL fehlt ein abschließender Schrägstrich." -#: ../linkcheck/checker/const.py:131 +#: ../linkcheck/checker/const.py:133 msgid "The http: URL checking has been denied." msgstr "Die http: URL-Überprüfung wurde verweigert." -#: ../linkcheck/checker/const.py:132 +#: ../linkcheck/checker/const.py:134 msgid "The URL has moved permanently." msgstr "Die URL wurde dauerhaft verschoben." -#: ../linkcheck/checker/const.py:134 +#: ../linkcheck/checker/const.py:136 msgid "The URL has been redirected to an URL of a different type." msgstr "Die URL wurde zu einem anderen URL-Typ umgeleitet." -#: ../linkcheck/checker/const.py:135 +#: ../linkcheck/checker/const.py:137 msgid "The URL had no content." msgstr "Die URL besitzt keinen Inhalt." -#: ../linkcheck/checker/const.py:137 +#: ../linkcheck/checker/const.py:139 msgid "An error occurred while storing a cookie." msgstr "Ein Fehler trat auf während des Speicherns eines Cookies." -#: ../linkcheck/checker/const.py:139 +#: ../linkcheck/checker/const.py:141 msgid "An error occurred while decompressing the URL content." msgstr "Ein Fehler trat beim Dekomprimieren des URL Inhalts auf." -#: ../linkcheck/checker/const.py:141 +#: ../linkcheck/checker/const.py:143 msgid "The URL content is encoded with an unknown encoding." msgstr "Der URL-Inhalt ist in einer unbekannten Kodierung verfasst." -#: ../linkcheck/checker/const.py:143 +#: ../linkcheck/checker/const.py:145 msgid "Unsupported HTTP authentication method." msgstr "Nicht unterstützte HTTP Authentifizierungsmethode." -#: ../linkcheck/checker/const.py:145 ../linkcheck/checker/httpurl.py:243 +#: ../linkcheck/checker/const.py:147 ../linkcheck/checker/httpurl.py:243 msgid "Unauthorized access without HTTP authentication." msgstr "Unauthorisierter Zugriff ohne HTTP-Authentifizierung." -#: ../linkcheck/checker/const.py:146 +#: ../linkcheck/checker/const.py:148 msgid "The SSL certificate is invalid or expired." msgstr "Das SSL-Zertifikat ist ungültig oder abgelaufen." -#: ../linkcheck/checker/const.py:147 +#: ../linkcheck/checker/const.py:149 msgid "The URL has been ignored." msgstr "Die URL wurde ignoriert." -#: ../linkcheck/checker/const.py:148 +#: ../linkcheck/checker/const.py:150 msgid "The mail MX host could not be found." msgstr "Der MX Mail-Rechner konnte nicht gefunden werden." -#: ../linkcheck/checker/const.py:150 +#: ../linkcheck/checker/const.py:152 msgid "The mailto: address could not be verified." msgstr "Die mailto: Addresse konnte nicht überprüft werden." -#: ../linkcheck/checker/const.py:152 +#: ../linkcheck/checker/const.py:154 msgid "No connection to a MX host could be established." msgstr "Es konnte keine Verbindung zu einem MX-Rechner hergestellt werden." -#: ../linkcheck/checker/const.py:153 +#: ../linkcheck/checker/const.py:155 msgid "No NNTP server was found." msgstr "Es wurde kein NNTP Server gefunden." -#: ../linkcheck/checker/const.py:154 +#: ../linkcheck/checker/const.py:156 msgid "The NNTP newsgroup could not be found." msgstr "Die NNTP Nachrichtengruppe konnte nicht gefunden werden." -#: ../linkcheck/checker/const.py:155 +#: ../linkcheck/checker/const.py:157 msgid "The IP is obfuscated." msgstr "Die IP-Adresse ist verschleiert." +#: ../linkcheck/checker/const.py:158 +#, fuzzy +msgid "HTML syntax error." +msgstr "gültige HTML Syntax" + +#: ../linkcheck/checker/const.py:159 +#, fuzzy +msgid "CSS syntax error." +msgstr "gültige CSS Syntax" + #: ../linkcheck/checker/mailtourl.py:87 #, python-format msgid "No mail addresses found in `%(url)s'." @@ -930,32 +940,32 @@ msgid "%(w3type)s validation error at line %(line)s col %(column)s: %(msg)s" msgstr "" "%(w3type)s Validierungsfehler in Zeile %(line)s Spalte %(column)s: %(msg)s" -#: ../linkcheck/checker/urlbase.py:883 +#: ../linkcheck/checker/urlbase.py:882 msgid "valid HTML syntax" msgstr "gültige HTML Syntax" -#: ../linkcheck/checker/urlbase.py:892 +#: ../linkcheck/checker/urlbase.py:890 #, python-format msgid "HTML W3C validation caused error: %(msg)s " msgstr "HTML W3C Validierung verursachte Fehler: %(msg)s" -#: ../linkcheck/checker/urlbase.py:919 +#: ../linkcheck/checker/urlbase.py:917 msgid "valid CSS syntax" msgstr "gültige CSS Syntax" -#: ../linkcheck/checker/urlbase.py:927 +#: ../linkcheck/checker/urlbase.py:925 #, python-format msgid "CSS W3C validation caused error: %(msg)s " msgstr "CSS W3C Validierung verursachte Fehler: %(msg)s" -#: ../linkcheck/checker/urlbase.py:980 +#: ../linkcheck/checker/urlbase.py:978 #, python-format msgid "%(num)d URL parsed." msgid_plural "%(num)d URLs parsed." msgstr[0] "%(num)d URL geparst." msgstr[1] "%(num)d URLs geparst." -#: ../linkcheck/checker/urlbase.py:1126 +#: ../linkcheck/checker/urlbase.py:1124 #, python-format msgid "URL has unparsable domain name: %(domain)s" msgstr "URL besitzt einen nicht analysierbaren Rechnernamen: %(domain)s" @@ -1406,7 +1416,6 @@ msgstr "&Optionen" #: ../linkcheck/gui/linkchecker_ui_main.py:845 #: ../linkcheck/gui/linkchecker_ui_options.py:137 -#: /usr/lib/python2.7/optparse.py:1626 msgid "Options" msgstr "Optionen" @@ -1668,7 +1677,7 @@ msgstr "" msgid "Closing active URLs with timeout %s..." msgstr "Schließe aktive URLs mit Timeout %s..." -#: ../linkcheck/gui/__init__.py:437 ../linkchecker:698 +#: ../linkcheck/gui/__init__.py:437 ../linkchecker:663 msgid "Dumping memory statistics..." msgstr "Generiere Speicherabzug..." @@ -1676,7 +1685,7 @@ msgstr "Generiere Speicherabzug..." msgid "LinkChecker memory dump written" msgstr "LinkChecker Speicherabzug geschrieben" -#: ../linkcheck/gui/__init__.py:440 ../linkchecker:700 +#: ../linkcheck/gui/__init__.py:440 ../linkchecker:665 #, python-format msgid "The memory dump has been written to `%(filename)s'." msgstr "Der Speicherabzug wurde in Datei `%(filename)s' geschrieben." @@ -1701,7 +1710,7 @@ msgstr[1] "%4d Verknüpfungen ausgewählt" msgid "LinkChecker internal error" msgstr "LinkChecker interner Fehler" -#: ../linkcheck/gui/linkchecker_ui_options.py:138 ../linkchecker:366 +#: ../linkcheck/gui/linkchecker_ui_options.py:138 ../linkchecker:349 msgid "Checking options" msgstr "Prüf-Optionen" @@ -1947,11 +1956,7 @@ msgid_plural "%d misses" msgstr[0] "%d Verfehlung" msgstr[1] "%d Verfehlungen" -#: ../linkchecker:56 -msgid "USAGE\tlinkchecker [options] [file-or-url]..." -msgstr "BENUTZUNG\tlinkchecker [Optionen] [datei-oder-url]..." - -#: ../linkchecker:58 +#: ../linkchecker:55 msgid "" "NOTES\n" " o URLs on the command line starting with \"ftp.\" are treated like\n" @@ -1986,7 +1991,7 @@ msgstr "" "o Beim Prüfen von 'news:' Links muss der angegebene NNTP Rechner nicht\n" " unbedingt derselbe wie der des Benutzers sein.\n" -#: ../linkchecker:74 +#: ../linkchecker:71 msgid "" "PROXY SUPPORT\n" "To use a proxy on Unix or Windows set $http_proxy, $https_proxy or " @@ -2039,7 +2044,7 @@ msgstr "" " set http_proxy=http://proxy.example.com:8080\n" "\n" -#: ../linkchecker:98 +#: ../linkchecker:95 msgid "" "REGULAR EXPRESSIONS\n" "Only Python regular expressions are accepted by LinkChecker.\n" @@ -2057,7 +2062,7 @@ msgstr "" "Die einzige Hinzufügung ist, dass ein regulärer Ausdruck negiert wird\n" "falls er mit einem Ausrufezeichen beginnt.\n" -#: ../linkchecker:107 +#: ../linkchecker:104 msgid "" "COOKIE FILES\n" "A cookie file contains standard RFC 805 header data with the following\n" @@ -2114,7 +2119,7 @@ msgstr "" "Host: example.com\n" "Set-cookie: baggage=\"elitist\"; comment=\"hologram\"\n" -#: ../linkchecker:135 +#: ../linkchecker:132 msgid "" "RETURN VALUE\n" "The return value is non-zero when\n" @@ -2128,7 +2133,7 @@ msgstr "" " o Warnungen gefunden wurden und Warnungen aktiviert sind\n" " o ein Programmfehler aufgetreten ist\n" -#: ../linkchecker:142 +#: ../linkchecker:139 msgid "" "EXAMPLES\n" "The most common use checks the given domain recursively, plus any\n" @@ -2181,7 +2186,7 @@ msgstr "" "\"ftp.\" beginnt:\n" " linkchecker -r0 ftp.example.org\n" -#: ../linkchecker:166 +#: ../linkchecker:163 msgid "" "OUTPUT TYPES\n" "Note that by default only errors and warnings are logged.\n" @@ -2238,7 +2243,7 @@ msgstr "" "none Gibt nichts aus. Für Debugging oder Prüfen des Rückgabewerts " "geeignet.\n" -#: ../linkchecker:191 +#: ../linkchecker:188 msgid "" "IGNORE WARNINGS\n" "The following warnings are recognized in the 'ignorewarnings' config\n" @@ -2248,7 +2253,7 @@ msgstr "" "Die folgenden Warnungen werden vom Konfigurationseintrag 'ignorewarnings'\n" "erkannt:\n" -#: ../linkchecker:203 +#: ../linkchecker:202 msgid "" "The `pstats' Python module is not installed, therefore the --viewprof option " "is disabled." @@ -2256,35 +2261,36 @@ msgstr "" "Das `pstats' Python Modul ist nicht installiert, deshalb ist die --viewprof " "Option deaktiviert." -#: ../linkchecker:208 +#: ../linkchecker:207 #, python-format msgid "Could not find profiling file %(file)r." msgstr "Konnte Profiling-Datei %(file)r nicht finden." -#: ../linkchecker:210 +#: ../linkchecker:209 msgid "Please run linkchecker with --profile to generate it." msgstr "Bitte starten Sie linkchecker mit --profile, um sie zu generieren." -#: ../linkchecker:225 +#: ../linkchecker:224 #, python-format msgid "Syntax error in %(arg)r: %(msg)s" msgstr "Syntaxfehler in %(arg)r: %(msg)s" -#: ../linkchecker:259 +#: ../linkchecker:247 msgid "General options" msgstr "Allgemeine Optionen" -#: ../linkchecker:263 +#: ../linkchecker:251 +#, fuzzy, python-format msgid "" "Use FILENAME as configuration file. Per default LinkChecker uses\n" "~/.linkchecker/linkcheckerrc (under Windows\n" -"%HOMEPATH%\\.linkchecker\\linkcheckerrc)." +"%%HOMEPATH%%\\.linkchecker\\linkcheckerrc)." msgstr "" "Benutze FILENAME als Konfigurationsdatei. Standardmäßig benutzt\n" " LinkChecker ~/.linkchecker/linkcheckerrc\n" "(unter Windows %HOMEPATH%\\.linkchecker\\linkcheckerrc)." -#: ../linkchecker:269 +#: ../linkchecker:256 msgid "" "Generate no more than the given number of threads. Default number\n" "of threads is 10. To disable threading specify a non-positive number." @@ -2293,35 +2299,35 @@ msgstr "" "von Threads ist 10. Geben Sie eine negative Zahl an, um Threading zu " "deaktivieren." -#: ../linkchecker:272 +#: ../linkchecker:259 msgid "Print version and exit." msgstr "Drucke die Version und beende das Programm." -#: ../linkchecker:275 +#: ../linkchecker:262 msgid "Read list of white-space separated URLs to check from stdin." msgstr "" "Lese eine Liste von URLs zum Prüfen von der Standardeingabe, getrennt durch " "Leerzeichen." -#: ../linkchecker:279 +#: ../linkchecker:265 msgid "Output options" msgstr "Ausgabeoptionen" -#: ../linkchecker:282 +#: ../linkchecker:268 #, fuzzy msgid "Check syntax of CSS URLs with the W3C online validator." msgstr "" "Prüfe Syntax von CSS URLs mit cssutils. Falls es nicht installiert ist,\n" "prüfe mit dem W3C Online Validator." -#: ../linkchecker:285 +#: ../linkchecker:271 #, fuzzy msgid "Check syntax of HTML URLs with the W3C online validator." msgstr "" "Prüfe Syntax von HTML URLs mit HTML tidy. Falls es nicht installiert ist,\n" "prüfe mit dem W3C Online Validator." -#: ../linkchecker:287 +#: ../linkchecker:273 msgid "" "Log all URLs, including duplicates.\n" "Default is to log duplicate URLs only once." @@ -2329,7 +2335,7 @@ msgstr "" "Logge alle URLs, inklusive Duplikate.\n" "Standard ist, doppelte URLs nur einmal zu loggen." -#: ../linkchecker:291 +#: ../linkchecker:276 #, python-format msgid "" "Print debugging output for the given logger.\n" @@ -2349,7 +2355,7 @@ msgstr "" "\n" "Für exakte Resultate wird Threading während Debugläufen deaktiviert." -#: ../linkchecker:302 +#: ../linkchecker:287 #, python-format msgid "" "Output to a file linkchecker-out.TYPE, $HOME/.linkchecker/blacklist for\n" @@ -2379,15 +2385,15 @@ msgstr "" "Standard ist keine Dateiausgabe. Beachten Sie dass die Option\n" "'-o none' jegliche Ausgaben auf der Konsole verhindert." -#: ../linkchecker:316 +#: ../linkchecker:301 msgid "Do not print check status messages." msgstr "Gebe keine Statusmeldungen aus." -#: ../linkchecker:318 +#: ../linkchecker:303 msgid "Don't log warnings. Default is to log warnings." msgstr "Gebe keine Warnungen aus. Standard ist die Ausgabe von Warnungen." -#: ../linkchecker:322 +#: ../linkchecker:306 #, python-format msgid "" "Specify output as %(loggertypes)s. Default output type is text.\n" @@ -2402,7 +2408,7 @@ msgstr "" "Gültige Enkodierungen sind unter http://docs.python.org/lib/standard-" "encodings.html aufgeführt." -#: ../linkchecker:332 +#: ../linkchecker:316 msgid "" "Quiet operation, an alias for '-o none'.\n" "This is only useful with -F." @@ -2410,19 +2416,19 @@ msgstr "" "Keine Ausgabe, ein Alias für '-o none'.\n" "Dies ist nur in Verbindung mit -F nützlich." -#: ../linkchecker:336 +#: ../linkchecker:320 msgid "Scan content of URLs with ClamAV virus scanner." msgstr "Prüfe Inhalt von URLs mit dem ClamAV Antivirus Programm." -#: ../linkchecker:338 +#: ../linkchecker:322 msgid "Print tracing information." msgstr "Trace-Information ausgeben." -#: ../linkchecker:341 +#: ../linkchecker:325 msgid "Log all URLs. Default is to log only errors and warnings." msgstr "Logge alle URLs. Standard ist es, nur fehlerhafte URLs zu loggen." -#: ../linkchecker:347 +#: ../linkchecker:331 msgid "" "Define a regular expression which prints a warning if it matches\n" "any content of the checked link. This applies only to valid pages,\n" @@ -2446,7 +2452,7 @@ msgstr "" "werden können, zum Beispiel \"(Diese Seite ist umgezogen|Oracle " "Applikationsfehler)\"." -#: ../linkchecker:360 +#: ../linkchecker:344 msgid "" "Print a warning if content size info is available and exceeds the\n" "given number of bytes." @@ -2454,7 +2460,7 @@ msgstr "" "Gebe eine Warnung aus wenn die Inhaltsgröße bekannt ist und die\n" "angegebene Anzahl an Bytes übersteigt." -#: ../linkchecker:369 +#: ../linkchecker:352 msgid "" "Check HTTP anchor references. Default is not to check anchors.\n" "This option enables logging of the warning 'url-anchor-not-found'." @@ -2462,7 +2468,7 @@ msgstr "" "Prüfe HTTP Anker Verweise. Standard ist keine Überprüfung.\n" "Diese Option aktiviert die Ausgabe der Warnung 'url-anchor-not-found'." -#: ../linkchecker:373 +#: ../linkchecker:356 msgid "" "Accept and send HTTP cookies according to RFC 2109. Only cookies\n" "which are sent back to the originating server are accepted.\n" @@ -2475,7 +2481,7 @@ msgstr "" "Gesendete und akzeptierte Cookies werden als zusätzlich geloggte\n" "Information aufgeführt." -#: ../linkchecker:380 +#: ../linkchecker:362 msgid "" "Read a file with initial cookie data. The cookie data format is\n" "explained below." @@ -2483,7 +2489,7 @@ msgstr "" "Lese eine Datei mit Cookie-Daten. Das Datenformat\n" "ist weiter unten erklärt." -#: ../linkchecker:385 +#: ../linkchecker:366 msgid "" "Only check syntax of URLs matching the given regular expression.\n" " This option can be given multiple times." @@ -2491,7 +2497,7 @@ msgstr "" "Prüfe lediglich den Syntax der URLs, welche auf den angegebenen regulären " "Ausdruck zutreffen. Diese Option kann mehrmals angegebenen werden." -#: ../linkchecker:390 +#: ../linkchecker:370 msgid "" "Check but do not recurse into URLs matching the given regular\n" "expression. This option can be given multiple times." @@ -2499,7 +2505,7 @@ msgstr "" "Prüfe URLs die auf den angegebenen regulären Ausdruck zutreffen, aber steige " "nicht rekursiv in sie hinab. Diese Option kann mehrmals angegeben werden." -#: ../linkchecker:395 +#: ../linkchecker:374 msgid "" "Specify an NNTP server for 'news:...' links. Default is the\n" "environment variable NNTP_SERVER. If no host is given,\n" @@ -2509,7 +2515,7 @@ msgstr "" "Umgebungsvariable NNTP_SERVER. Falls kein Rechner angegeben ist,\n" "wird lediglich auf korrekte Syntax des Links geprüft." -#: ../linkchecker:401 +#: ../linkchecker:380 msgid "" "Read a password from console and use it for HTTP and FTP authorization.\n" "For FTP the default password is 'anonymous@'. For HTTP there is\n" @@ -2521,7 +2527,7 @@ msgstr "" "Standardpasswort.\n" "Siehe auch -u." -#: ../linkchecker:407 +#: ../linkchecker:386 msgid "" "Pause the given number of seconds between two subsequent connection\n" "requests to the same host. Default is no pause between requests." @@ -2531,7 +2537,7 @@ msgstr "" "Verbindungen zum demselben Rechner. Standard ist keine Pause zwischen " "Verbindungen." -#: ../linkchecker:412 +#: ../linkchecker:391 msgid "" "Check recursively all links up to given depth. A negative depth\n" "will enable infinite recursion. Default depth is infinite." @@ -2540,7 +2546,7 @@ msgstr "" "negative Tiefe erwirkt unendliche Rekursion. Standard Tiefe ist\n" "unendlich." -#: ../linkchecker:417 +#: ../linkchecker:396 #, python-format msgid "" "Set the timeout for connection attempts in seconds. The default\n" @@ -2549,7 +2555,7 @@ msgstr "" "Setze den Timeout für Verbindungen in Sekunden. Der Standard\n" "Timeout ist %d Sekunden." -#: ../linkchecker:422 +#: ../linkchecker:400 msgid "" "Try the given username for HTTP and FTP authorization.\n" "For FTP the default username is 'anonymous'. For HTTP there is\n" @@ -2559,7 +2565,7 @@ msgstr "" "Authorisation. Für FTP ist der Standardname 'anonymous'. Für HTTP gibt es " "kein Standardnamen. Siehe auch -p." -#: ../linkchecker:428 +#: ../linkchecker:405 msgid "" "Specify the User-Agent string to send to the HTTP server, for example\n" "\"Mozilla/4.0\". The default is \"LinkChecker/X.Y\" where X.Y is the " @@ -2570,60 +2576,60 @@ msgstr "" "z.B. \"Mozilla/4.0\". Der Standard ist \"LinkChecker/X.Y\", wobei X.Y\n" "die aktuelle Version von LinkChecker ist." -#: ../linkchecker:474 +#: ../linkchecker:439 #, python-format msgid "Invalid debug level %(level)r" msgstr "Ungültiger Debuglevel %(level)r" -#: ../linkchecker:487 +#: ../linkchecker:452 #, python-format msgid "Unreadable config file: %r" msgstr "Nicht lesbare Konfigurationsdatei: %r" -#: ../linkchecker:495 +#: ../linkchecker:460 msgid "Running with python -O disables debugging." msgstr "Die Option python -O verhindert das Debuggen." -#: ../linkchecker:518 ../linkchecker:550 +#: ../linkchecker:483 ../linkchecker:515 #, python-format msgid "Unknown logger type %(type)r in %(output)r for option %(option)s" msgstr "Unbekannter Logtyp %(type)r in %(output)r für Option %(option)s" -#: ../linkchecker:522 ../linkchecker:556 +#: ../linkchecker:487 ../linkchecker:521 #, python-format msgid "Unknown encoding %(encoding)r in %(output)r for option %(option)s" msgstr "Unbekanntes Encoding %(encoding)r in %(output)r für Option %(option)s" -#: ../linkchecker:568 +#: ../linkchecker:533 #, python-format msgid "Enter LinkChecker HTTP/FTP password for user %(user)s:" msgstr "Gebe LinkChecker HTTP/FTP Passwort für Benutzer %(user)s ein:" -#: ../linkchecker:571 +#: ../linkchecker:536 msgid "Enter LinkChecker HTTP/FTP password:" msgstr "Gebe LinkChecker HTTP/FTP Passwort ein:" -#: ../linkchecker:578 ../linkchecker:596 +#: ../linkchecker:543 ../linkchecker:561 #, python-format msgid "Illegal argument %(arg)r for option %(option)s" msgstr "Ungültiges Argument %(arg)r für Option %(option)s" -#: ../linkchecker:634 +#: ../linkchecker:599 #, python-format msgid "Enter LinkChecker password for user %(user)s at %(strpattern)s:" msgstr "" "Gebe LinkChecker Passwort für Benutzer %(user)s bei %(strpattern)s ein:" -#: ../linkchecker:655 +#: ../linkchecker:620 #, python-format msgid "Could not parse cookie file: %s" msgstr "Konnte Cookie-Datei nicht parsen: %s" -#: ../linkchecker:670 +#: ../linkchecker:635 msgid "no files or URLs given" msgstr "keine Dateien oder URLs angegeben" -#: ../linkchecker:675 +#: ../linkchecker:640 #, python-format msgid "" "Overwrite profiling file %(file)r?\n" @@ -2632,11 +2638,11 @@ msgstr "" "Profildatei %(file)r überschreiben?\n" "Drücken Sie Strg-C zum Abbrechen, EINGABETASTE zum Fortfahren." -#: ../linkchecker:681 +#: ../linkchecker:646 msgid "Canceled." msgstr "Abgebrochen." -#: ../linkchecker:685 +#: ../linkchecker:650 msgid "" "The `cProfile' Python module is not installed, therefore the --profile " "option is disabled." @@ -2644,77 +2650,190 @@ msgstr "" "Das `cProfile' Python Modul ist nicht installiert, deshalb ist die --profile " "Option deaktiviert." -#: /usr/lib/python2.7/optparse.py:140 -#, python-format -msgid "no such option: %s" -msgstr "Keine solche Option: %s" - -#: /usr/lib/python2.7/optparse.py:151 -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "Mehrdeutige Option: %s (%s?)" - -#: /usr/lib/python2.7/optparse.py:374 -#, python-format -msgid "Usage: %s\n" +#: /usr/lib/python2.7/argparse.py:292 +#, fuzzy +msgid "usage: " msgstr "Syntax: %s\n" -#: /usr/lib/python2.7/optparse.py:393 -msgid "Usage" -msgstr "Syntax" +#: /usr/lib/python2.7/argparse.py:800 +msgid ".__call__() not defined" +msgstr "" -#: /usr/lib/python2.7/optparse.py:418 -msgid "integer" -msgstr "Nummer" - -#: /usr/lib/python2.7/optparse.py:419 -msgid "long integer" -msgstr "Nummer" - -#: /usr/lib/python2.7/optparse.py:420 -msgid "floating-point" -msgstr "Fließkommazahl" - -#: /usr/lib/python2.7/optparse.py:421 -msgid "complex" -msgstr "komplex" - -#: /usr/lib/python2.7/optparse.py:429 +#: /usr/lib/python2.7/argparse.py:1084 #, python-format -msgid "option %s: invalid %s value: %r" -msgstr "Option %s: Ungültiger %s Wert: %r" +msgid "unknown parser %r (choices: %s)" +msgstr "" -#: /usr/lib/python2.7/optparse.py:437 +#: /usr/lib/python2.7/argparse.py:1125 #, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "Option %s: ungültige Auswahl: %r (wähle von %s)" +msgid "argument \"-\" with mode %r" +msgstr "" -#: /usr/lib/python2.7/optparse.py:1250 +#: /usr/lib/python2.7/argparse.py:1132 +#, python-format +msgid "can't open '%s': %s" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1336 +#, python-format +msgid "cannot merge actions - two groups are named %r" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1374 +msgid "'required' is an invalid argument for positionals" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1394 +#, python-format +msgid "invalid option string %r: must start with a character %r" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1415 +#, python-format +msgid "dest= is required for options like %r" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1432 +#, fuzzy, python-format +msgid "invalid conflict_resolution value: %r" +msgstr "ungültiger \"notAfter\" Zertifikatwert %r" + +#: /usr/lib/python2.7/argparse.py:1450 +#, python-format +msgid "conflicting option string(s): %s" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1514 +msgid "mutually exclusive arguments must be optional" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1584 +#, fuzzy +msgid "positional arguments" +msgstr "%s Option erfordert ein Argument" + +#: /usr/lib/python2.7/argparse.py:1585 +#, fuzzy +msgid "optional arguments" +msgstr "%s Option erfordert ein Argument" + +#: /usr/lib/python2.7/argparse.py:1600 msgid "show this help message and exit" msgstr "Zeige diesen Hilfetext und beende" -#: /usr/lib/python2.7/optparse.py:1255 +#: /usr/lib/python2.7/argparse.py:1606 msgid "show program's version number and exit" msgstr "Zeige Programmversion und beende" -#: /usr/lib/python2.7/optparse.py:1278 -msgid "%prog [options]" -msgstr "%prog [Optionen]" +#: /usr/lib/python2.7/argparse.py:1638 +msgid "cannot have multiple subparser arguments" +msgstr "" -#: /usr/lib/python2.7/optparse.py:1498 /usr/lib/python2.7/optparse.py:1537 +#: /usr/lib/python2.7/argparse.py:1690 #, python-format -msgid "%s option requires an argument" -msgstr "%s Option erfordert ein Argument" +msgid "unrecognized arguments: %s" +msgstr "" -#: /usr/lib/python2.7/optparse.py:1500 /usr/lib/python2.7/optparse.py:1539 +#: /usr/lib/python2.7/argparse.py:1790 #, python-format -msgid "%s option requires %d arguments" -msgstr "%s Option erfordert %d Argumente" +msgid "not allowed with argument %s" +msgstr "" -#: /usr/lib/python2.7/optparse.py:1509 +#: /usr/lib/python2.7/argparse.py:1836 /usr/lib/python2.7/argparse.py:1850 #, python-format -msgid "%s option does not take a value" -msgstr "%s Option nimmt kein Wert" +msgid "ignored explicit argument %r" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1940 +msgid "too few arguments" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1947 +#, python-format +msgid "argument %s is required" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1961 +#, python-format +msgid "one of the arguments %s is required" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2007 +msgid "expected one argument" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2008 +msgid "expected at most one argument" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2009 +msgid "expected at least one argument" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2011 +#, python-format +msgid "expected %s argument(s)" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2068 +#, fuzzy, python-format +msgid "ambiguous option: %s could match %s" +msgstr "Mehrdeutige Option: %s (%s?)" + +#: /usr/lib/python2.7/argparse.py:2130 +#, python-format +msgid "unexpected option string: %s" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2234 +#, python-format +msgid "%r is not callable" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2250 +#, fuzzy, python-format +msgid "invalid %s value: %r" +msgstr "Option %s: Ungültiger %s Wert: %r" + +#: /usr/lib/python2.7/argparse.py:2260 +#, fuzzy, python-format +msgid "invalid choice: %r (choose from %s)" +msgstr "Option %s: ungültige Auswahl: %r (wähle von %s)" + +#: /usr/lib/python2.7/argparse.py:2353 +#, fuzzy, python-format +msgid "%s: error: %s\n" +msgstr "ignore%d: Syntaxfehler %s\n" + +#~ msgid "USAGE\tlinkchecker [options] [file-or-url]..." +#~ msgstr "BENUTZUNG\tlinkchecker [Optionen] [datei-oder-url]..." + +#~ msgid "no such option: %s" +#~ msgstr "Keine solche Option: %s" + +#~ msgid "Usage" +#~ msgstr "Syntax" + +#~ msgid "integer" +#~ msgstr "Nummer" + +#~ msgid "long integer" +#~ msgstr "Nummer" + +#~ msgid "floating-point" +#~ msgstr "Fließkommazahl" + +#~ msgid "complex" +#~ msgstr "komplex" + +#~ msgid "%prog [options]" +#~ msgstr "%prog [Optionen]" + +#~ msgid "%s option requires %d arguments" +#~ msgstr "%s Option erfordert %d Argumente" + +#~ msgid "%s option does not take a value" +#~ msgstr "%s Option nimmt kein Wert" #~ msgid "tidy HTML parsing caused error: %(msg)s " #~ msgstr "tidy HTML Parser verursachte Fehler: %(msg)s" @@ -3151,6 +3270,3 @@ msgstr "%s Option nimmt kein Wert" #~ msgid "nofollow%d: syntax error %s\n" #~ msgstr "nofollow%d: Syntaxfehler %s\n" - -#~ msgid "ignore%d: syntax error %s\n" -#~ msgstr "ignore%d: Syntaxfehler %s\n" diff --git a/po/linkchecker.pot b/po/linkchecker.pot index 579e3579..4cde14ca 100644 --- a/po/linkchecker.pot +++ b/po/linkchecker.pot @@ -1,5 +1,5 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Bastian Kleineidam +# Copyright (C) YEAR Bastian Kleineidam # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: calvin@users.sourceforge.net\n" -"POT-Creation-Date: 2013-02-05 14:55+0100\n" +"Report-Msgid-Bugs-To: bastian.kleineidam@web.de\n" +"POT-Creation-Date: 2013-02-27 10:40+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -87,7 +87,7 @@ msgstr "" msgid "System info:" msgstr "" -#: ../linkcheck/director/console.py:145 ../linkchecker:476 +#: ../linkcheck/director/console.py:145 ../linkchecker:441 #, python-format msgid "Python %(version)s on %(platform)s" msgstr "" @@ -509,126 +509,134 @@ msgstr "" msgid "URL is unrecognized or has invalid syntax" msgstr "" -#: ../linkcheck/checker/const.py:115 +#: ../linkcheck/checker/const.py:117 msgid "The effective URL is different from the original." msgstr "" -#: ../linkcheck/checker/const.py:117 +#: ../linkcheck/checker/const.py:119 msgid "Could not get the content of the URL." msgstr "" -#: ../linkcheck/checker/const.py:118 +#: ../linkcheck/checker/const.py:120 msgid "URL anchor was not found." msgstr "" -#: ../linkcheck/checker/const.py:120 +#: ../linkcheck/checker/const.py:122 msgid "The warning regular expression was found in the URL contents." msgstr "" -#: ../linkcheck/checker/const.py:121 +#: ../linkcheck/checker/const.py:123 msgid "The URL content is a duplicate of another URL." msgstr "" -#: ../linkcheck/checker/const.py:122 +#: ../linkcheck/checker/const.py:124 msgid "The URL content size is too large." msgstr "" -#: ../linkcheck/checker/const.py:123 +#: ../linkcheck/checker/const.py:125 msgid "The URL content size is zero." msgstr "" -#: ../linkcheck/checker/const.py:124 +#: ../linkcheck/checker/const.py:126 msgid "The URL content size and download size are unequal." msgstr "" -#: ../linkcheck/checker/const.py:125 +#: ../linkcheck/checker/const.py:127 msgid "The URL is longer than the recommended size." msgstr "" -#: ../linkcheck/checker/const.py:126 +#: ../linkcheck/checker/const.py:128 msgid "The URL contains leading or trailing whitespace." msgstr "" -#: ../linkcheck/checker/const.py:127 +#: ../linkcheck/checker/const.py:129 msgid "The file: URL is missing a trailing slash." msgstr "" -#: ../linkcheck/checker/const.py:129 +#: ../linkcheck/checker/const.py:131 msgid "The file: path is not the same as the system specific path." msgstr "" -#: ../linkcheck/checker/const.py:130 +#: ../linkcheck/checker/const.py:132 msgid "The ftp: URL is missing a trailing slash." msgstr "" -#: ../linkcheck/checker/const.py:131 +#: ../linkcheck/checker/const.py:133 msgid "The http: URL checking has been denied." msgstr "" -#: ../linkcheck/checker/const.py:132 +#: ../linkcheck/checker/const.py:134 msgid "The URL has moved permanently." msgstr "" -#: ../linkcheck/checker/const.py:134 +#: ../linkcheck/checker/const.py:136 msgid "The URL has been redirected to an URL of a different type." msgstr "" -#: ../linkcheck/checker/const.py:135 +#: ../linkcheck/checker/const.py:137 msgid "The URL had no content." msgstr "" -#: ../linkcheck/checker/const.py:137 +#: ../linkcheck/checker/const.py:139 msgid "An error occurred while storing a cookie." msgstr "" -#: ../linkcheck/checker/const.py:139 +#: ../linkcheck/checker/const.py:141 msgid "An error occurred while decompressing the URL content." msgstr "" -#: ../linkcheck/checker/const.py:141 +#: ../linkcheck/checker/const.py:143 msgid "The URL content is encoded with an unknown encoding." msgstr "" -#: ../linkcheck/checker/const.py:143 +#: ../linkcheck/checker/const.py:145 msgid "Unsupported HTTP authentication method." msgstr "" -#: ../linkcheck/checker/const.py:145 ../linkcheck/checker/httpurl.py:243 +#: ../linkcheck/checker/const.py:147 ../linkcheck/checker/httpurl.py:243 msgid "Unauthorized access without HTTP authentication." msgstr "" -#: ../linkcheck/checker/const.py:146 +#: ../linkcheck/checker/const.py:148 msgid "The SSL certificate is invalid or expired." msgstr "" -#: ../linkcheck/checker/const.py:147 +#: ../linkcheck/checker/const.py:149 msgid "The URL has been ignored." msgstr "" -#: ../linkcheck/checker/const.py:148 +#: ../linkcheck/checker/const.py:150 msgid "The mail MX host could not be found." msgstr "" -#: ../linkcheck/checker/const.py:150 +#: ../linkcheck/checker/const.py:152 msgid "The mailto: address could not be verified." msgstr "" -#: ../linkcheck/checker/const.py:152 +#: ../linkcheck/checker/const.py:154 msgid "No connection to a MX host could be established." msgstr "" -#: ../linkcheck/checker/const.py:153 +#: ../linkcheck/checker/const.py:155 msgid "No NNTP server was found." msgstr "" -#: ../linkcheck/checker/const.py:154 +#: ../linkcheck/checker/const.py:156 msgid "The NNTP newsgroup could not be found." msgstr "" -#: ../linkcheck/checker/const.py:155 +#: ../linkcheck/checker/const.py:157 msgid "The IP is obfuscated." msgstr "" +#: ../linkcheck/checker/const.py:158 +msgid "HTML syntax error." +msgstr "" + +#: ../linkcheck/checker/const.py:159 +msgid "CSS syntax error." +msgstr "" + #: ../linkcheck/checker/mailtourl.py:87 #, python-format msgid "No mail addresses found in `%(url)s'." @@ -881,32 +889,32 @@ msgstr "" msgid "%(w3type)s validation error at line %(line)s col %(column)s: %(msg)s" msgstr "" -#: ../linkcheck/checker/urlbase.py:883 +#: ../linkcheck/checker/urlbase.py:882 msgid "valid HTML syntax" msgstr "" -#: ../linkcheck/checker/urlbase.py:892 +#: ../linkcheck/checker/urlbase.py:890 #, python-format msgid "HTML W3C validation caused error: %(msg)s " msgstr "" -#: ../linkcheck/checker/urlbase.py:919 +#: ../linkcheck/checker/urlbase.py:917 msgid "valid CSS syntax" msgstr "" -#: ../linkcheck/checker/urlbase.py:927 +#: ../linkcheck/checker/urlbase.py:925 #, python-format msgid "CSS W3C validation caused error: %(msg)s " msgstr "" -#: ../linkcheck/checker/urlbase.py:980 +#: ../linkcheck/checker/urlbase.py:978 #, python-format msgid "%(num)d URL parsed." msgid_plural "%(num)d URLs parsed." msgstr[0] "" msgstr[1] "" -#: ../linkcheck/checker/urlbase.py:1126 +#: ../linkcheck/checker/urlbase.py:1124 #, python-format msgid "URL has unparsable domain name: %(domain)s" msgstr "" @@ -1336,7 +1344,6 @@ msgstr "" #: ../linkcheck/gui/linkchecker_ui_main.py:845 #: ../linkcheck/gui/linkchecker_ui_options.py:137 -#: /usr/lib/python2.7/optparse.py:1626 msgid "Options" msgstr "" @@ -1580,7 +1587,7 @@ msgstr "" msgid "Closing active URLs with timeout %s..." msgstr "" -#: ../linkcheck/gui/__init__.py:437 ../linkchecker:698 +#: ../linkcheck/gui/__init__.py:437 ../linkchecker:663 msgid "Dumping memory statistics..." msgstr "" @@ -1588,7 +1595,7 @@ msgstr "" msgid "LinkChecker memory dump written" msgstr "" -#: ../linkcheck/gui/__init__.py:440 ../linkchecker:700 +#: ../linkcheck/gui/__init__.py:440 ../linkchecker:665 #, python-format msgid "The memory dump has been written to `%(filename)s'." msgstr "" @@ -1613,7 +1620,7 @@ msgstr[1] "" msgid "LinkChecker internal error" msgstr "" -#: ../linkcheck/gui/linkchecker_ui_options.py:138 ../linkchecker:366 +#: ../linkcheck/gui/linkchecker_ui_options.py:138 ../linkchecker:349 msgid "Checking options" msgstr "" @@ -1838,11 +1845,7 @@ msgid_plural "%d misses" msgstr[0] "" msgstr[1] "" -#: ../linkchecker:56 -msgid "USAGE\tlinkchecker [options] [file-or-url]..." -msgstr "" - -#: ../linkchecker:58 +#: ../linkchecker:55 msgid "" "NOTES\n" " o URLs on the command line starting with \"ftp.\" are treated like\n" @@ -1861,7 +1864,7 @@ msgid "" " same as the host of the user browsing your pages.\n" msgstr "" -#: ../linkchecker:74 +#: ../linkchecker:71 msgid "" "PROXY SUPPORT\n" "To use a proxy on Unix or Windows set $http_proxy, $https_proxy or " @@ -1888,7 +1891,7 @@ msgid "" "\n" msgstr "" -#: ../linkchecker:98 +#: ../linkchecker:95 msgid "" "REGULAR EXPRESSIONS\n" "Only Python regular expressions are accepted by LinkChecker.\n" @@ -1899,7 +1902,7 @@ msgid "" "the regular expression.\n" msgstr "" -#: ../linkchecker:107 +#: ../linkchecker:104 msgid "" "COOKIE FILES\n" "A cookie file contains standard RFC 805 header data with the following\n" @@ -1929,7 +1932,7 @@ msgid "" "Set-cookie: baggage=\"elitist\"; comment=\"hologram\"\n" msgstr "" -#: ../linkchecker:135 +#: ../linkchecker:132 msgid "" "RETURN VALUE\n" "The return value is non-zero when\n" @@ -1938,7 +1941,7 @@ msgid "" " o a program error occurred\n" msgstr "" -#: ../linkchecker:142 +#: ../linkchecker:139 msgid "" "EXAMPLES\n" "The most common use checks the given domain recursively, plus any\n" @@ -1964,7 +1967,7 @@ msgid "" " linkchecker -r0 ftp.example.org\n" msgstr "" -#: ../linkchecker:166 +#: ../linkchecker:163 msgid "" "OUTPUT TYPES\n" "Note that by default only errors and warnings are logged.\n" @@ -1991,77 +1994,78 @@ msgid "" "none Logs nothing. Suitable for debugging or checking the exit code.\n" msgstr "" -#: ../linkchecker:191 +#: ../linkchecker:188 msgid "" "IGNORE WARNINGS\n" "The following warnings are recognized in the 'ignorewarnings' config\n" "file entry:\n" msgstr "" -#: ../linkchecker:203 +#: ../linkchecker:202 msgid "" "The `pstats' Python module is not installed, therefore the --viewprof option " "is disabled." msgstr "" -#: ../linkchecker:208 +#: ../linkchecker:207 #, python-format msgid "Could not find profiling file %(file)r." msgstr "" -#: ../linkchecker:210 +#: ../linkchecker:209 msgid "Please run linkchecker with --profile to generate it." msgstr "" -#: ../linkchecker:225 +#: ../linkchecker:224 #, python-format msgid "Syntax error in %(arg)r: %(msg)s" msgstr "" -#: ../linkchecker:259 +#: ../linkchecker:247 msgid "General options" msgstr "" -#: ../linkchecker:263 +#: ../linkchecker:251 +#, python-format msgid "" "Use FILENAME as configuration file. Per default LinkChecker uses\n" "~/.linkchecker/linkcheckerrc (under Windows\n" -"%HOMEPATH%\\.linkchecker\\linkcheckerrc)." +"%%HOMEPATH%%\\.linkchecker\\linkcheckerrc)." msgstr "" -#: ../linkchecker:269 +#: ../linkchecker:256 msgid "" "Generate no more than the given number of threads. Default number\n" "of threads is 10. To disable threading specify a non-positive number." msgstr "" -#: ../linkchecker:272 +#: ../linkchecker:259 msgid "Print version and exit." msgstr "" -#: ../linkchecker:275 +#: ../linkchecker:262 msgid "Read list of white-space separated URLs to check from stdin." msgstr "" -#: ../linkchecker:279 +#: ../linkchecker:265 msgid "Output options" msgstr "" -#: ../linkchecker:282 +#: ../linkchecker:268 msgid "Check syntax of CSS URLs with the W3C online validator." msgstr "" -#: ../linkchecker:285 +#: ../linkchecker:271 msgid "Check syntax of HTML URLs with the W3C online validator." msgstr "" -#: ../linkchecker:287 +#: ../linkchecker:273 msgid "" "Log all URLs, including duplicates.\n" "Default is to log duplicate URLs only once." msgstr "" -#: ../linkchecker:291 +#: ../linkchecker:276 #, python-format msgid "" "Print debugging output for the given logger.\n" @@ -2073,7 +2077,7 @@ msgid "" "For accurate results, threading will be disabled during debug runs." msgstr "" -#: ../linkchecker:302 +#: ../linkchecker:287 #, python-format msgid "" "Output to a file linkchecker-out.TYPE, $HOME/.linkchecker/blacklist for\n" @@ -2090,15 +2094,15 @@ msgid "" "suppress all console output with the option '-o none'." msgstr "" -#: ../linkchecker:316 +#: ../linkchecker:301 msgid "Do not print check status messages." msgstr "" -#: ../linkchecker:318 +#: ../linkchecker:303 msgid "Don't log warnings. Default is to log warnings." msgstr "" -#: ../linkchecker:322 +#: ../linkchecker:306 #, python-format msgid "" "Specify output as %(loggertypes)s. Default output type is text.\n" @@ -2108,25 +2112,25 @@ msgid "" "html." msgstr "" -#: ../linkchecker:332 +#: ../linkchecker:316 msgid "" "Quiet operation, an alias for '-o none'.\n" "This is only useful with -F." msgstr "" -#: ../linkchecker:336 +#: ../linkchecker:320 msgid "Scan content of URLs with ClamAV virus scanner." msgstr "" -#: ../linkchecker:338 +#: ../linkchecker:322 msgid "Print tracing information." msgstr "" -#: ../linkchecker:341 +#: ../linkchecker:325 msgid "Log all URLs. Default is to log only errors and warnings." msgstr "" -#: ../linkchecker:347 +#: ../linkchecker:331 msgid "" "Define a regular expression which prints a warning if it matches\n" "any content of the checked link. This applies only to valid pages,\n" @@ -2140,19 +2144,19 @@ msgid "" "for example \"(This page has moved|Oracle Application error)\"." msgstr "" -#: ../linkchecker:360 +#: ../linkchecker:344 msgid "" "Print a warning if content size info is available and exceeds the\n" "given number of bytes." msgstr "" -#: ../linkchecker:369 +#: ../linkchecker:352 msgid "" "Check HTTP anchor references. Default is not to check anchors.\n" "This option enables logging of the warning 'url-anchor-not-found'." msgstr "" -#: ../linkchecker:373 +#: ../linkchecker:356 msgid "" "Accept and send HTTP cookies according to RFC 2109. Only cookies\n" "which are sent back to the originating server are accepted.\n" @@ -2160,208 +2164,288 @@ msgid "" "information." msgstr "" -#: ../linkchecker:380 +#: ../linkchecker:362 msgid "" "Read a file with initial cookie data. The cookie data format is\n" "explained below." msgstr "" -#: ../linkchecker:385 +#: ../linkchecker:366 msgid "" "Only check syntax of URLs matching the given regular expression.\n" " This option can be given multiple times." msgstr "" -#: ../linkchecker:390 +#: ../linkchecker:370 msgid "" "Check but do not recurse into URLs matching the given regular\n" "expression. This option can be given multiple times." msgstr "" -#: ../linkchecker:395 +#: ../linkchecker:374 msgid "" "Specify an NNTP server for 'news:...' links. Default is the\n" "environment variable NNTP_SERVER. If no host is given,\n" "only the syntax of the link is checked." msgstr "" -#: ../linkchecker:401 +#: ../linkchecker:380 msgid "" "Read a password from console and use it for HTTP and FTP authorization.\n" "For FTP the default password is 'anonymous@'. For HTTP there is\n" "no default password. See also -u." msgstr "" -#: ../linkchecker:407 +#: ../linkchecker:386 msgid "" "Pause the given number of seconds between two subsequent connection\n" "requests to the same host. Default is no pause between requests." msgstr "" -#: ../linkchecker:412 +#: ../linkchecker:391 msgid "" "Check recursively all links up to given depth. A negative depth\n" "will enable infinite recursion. Default depth is infinite." msgstr "" -#: ../linkchecker:417 +#: ../linkchecker:396 #, python-format msgid "" "Set the timeout for connection attempts in seconds. The default\n" "timeout is %d seconds." msgstr "" -#: ../linkchecker:422 +#: ../linkchecker:400 msgid "" "Try the given username for HTTP and FTP authorization.\n" "For FTP the default username is 'anonymous'. For HTTP there is\n" "no default username. See also -p." msgstr "" -#: ../linkchecker:428 +#: ../linkchecker:405 msgid "" "Specify the User-Agent string to send to the HTTP server, for example\n" "\"Mozilla/4.0\". The default is \"LinkChecker/X.Y\" where X.Y is the current\n" "version of LinkChecker." msgstr "" -#: ../linkchecker:474 +#: ../linkchecker:439 #, python-format msgid "Invalid debug level %(level)r" msgstr "" -#: ../linkchecker:487 +#: ../linkchecker:452 #, python-format msgid "Unreadable config file: %r" msgstr "" -#: ../linkchecker:495 +#: ../linkchecker:460 msgid "Running with python -O disables debugging." msgstr "" -#: ../linkchecker:518 ../linkchecker:550 +#: ../linkchecker:483 ../linkchecker:515 #, python-format msgid "Unknown logger type %(type)r in %(output)r for option %(option)s" msgstr "" -#: ../linkchecker:522 ../linkchecker:556 +#: ../linkchecker:487 ../linkchecker:521 #, python-format msgid "Unknown encoding %(encoding)r in %(output)r for option %(option)s" msgstr "" -#: ../linkchecker:568 +#: ../linkchecker:533 #, python-format msgid "Enter LinkChecker HTTP/FTP password for user %(user)s:" msgstr "" -#: ../linkchecker:571 +#: ../linkchecker:536 msgid "Enter LinkChecker HTTP/FTP password:" msgstr "" -#: ../linkchecker:578 ../linkchecker:596 +#: ../linkchecker:543 ../linkchecker:561 #, python-format msgid "Illegal argument %(arg)r for option %(option)s" msgstr "" -#: ../linkchecker:634 +#: ../linkchecker:599 #, python-format msgid "Enter LinkChecker password for user %(user)s at %(strpattern)s:" msgstr "" -#: ../linkchecker:655 +#: ../linkchecker:620 #, python-format msgid "Could not parse cookie file: %s" msgstr "" -#: ../linkchecker:670 +#: ../linkchecker:635 msgid "no files or URLs given" msgstr "" -#: ../linkchecker:675 +#: ../linkchecker:640 #, python-format msgid "" "Overwrite profiling file %(file)r?\n" "Press Ctrl-C to cancel, RETURN to continue." msgstr "" -#: ../linkchecker:681 +#: ../linkchecker:646 msgid "Canceled." msgstr "" -#: ../linkchecker:685 +#: ../linkchecker:650 msgid "" "The `cProfile' Python module is not installed, therefore the --profile option " "is disabled." msgstr "" -#: /usr/lib/python2.7/optparse.py:140 +#: /usr/lib/python2.7/argparse.py:292 +msgid "usage: " +msgstr "" + +#: /usr/lib/python2.7/argparse.py:800 +msgid ".__call__() not defined" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1084 #, python-format -msgid "no such option: %s" +msgid "unknown parser %r (choices: %s)" msgstr "" -#: /usr/lib/python2.7/optparse.py:151 +#: /usr/lib/python2.7/argparse.py:1125 #, python-format -msgid "ambiguous option: %s (%s?)" +msgid "argument \"-\" with mode %r" msgstr "" -#: /usr/lib/python2.7/optparse.py:374 +#: /usr/lib/python2.7/argparse.py:1132 #, python-format -msgid "Usage: %s\n" +msgid "can't open '%s': %s" msgstr "" -#: /usr/lib/python2.7/optparse.py:393 -msgid "Usage" -msgstr "" - -#: /usr/lib/python2.7/optparse.py:418 -msgid "integer" -msgstr "" - -#: /usr/lib/python2.7/optparse.py:419 -msgid "long integer" -msgstr "" - -#: /usr/lib/python2.7/optparse.py:420 -msgid "floating-point" -msgstr "" - -#: /usr/lib/python2.7/optparse.py:421 -msgid "complex" -msgstr "" - -#: /usr/lib/python2.7/optparse.py:429 +#: /usr/lib/python2.7/argparse.py:1336 #, python-format -msgid "option %s: invalid %s value: %r" +msgid "cannot merge actions - two groups are named %r" msgstr "" -#: /usr/lib/python2.7/optparse.py:437 +#: /usr/lib/python2.7/argparse.py:1374 +msgid "'required' is an invalid argument for positionals" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1394 #, python-format -msgid "option %s: invalid choice: %r (choose from %s)" +msgid "invalid option string %r: must start with a character %r" msgstr "" -#: /usr/lib/python2.7/optparse.py:1250 +#: /usr/lib/python2.7/argparse.py:1415 +#, python-format +msgid "dest= is required for options like %r" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1432 +#, python-format +msgid "invalid conflict_resolution value: %r" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1450 +#, python-format +msgid "conflicting option string(s): %s" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1514 +msgid "mutually exclusive arguments must be optional" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1584 +msgid "positional arguments" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1585 +msgid "optional arguments" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1600 msgid "show this help message and exit" msgstr "" -#: /usr/lib/python2.7/optparse.py:1255 +#: /usr/lib/python2.7/argparse.py:1606 msgid "show program's version number and exit" msgstr "" -#: /usr/lib/python2.7/optparse.py:1278 -msgid "%prog [options]" +#: /usr/lib/python2.7/argparse.py:1638 +msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python2.7/optparse.py:1498 /usr/lib/python2.7/optparse.py:1537 +#: /usr/lib/python2.7/argparse.py:1690 #, python-format -msgid "%s option requires an argument" +msgid "unrecognized arguments: %s" msgstr "" -#: /usr/lib/python2.7/optparse.py:1500 /usr/lib/python2.7/optparse.py:1539 +#: /usr/lib/python2.7/argparse.py:1790 #, python-format -msgid "%s option requires %d arguments" +msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python2.7/optparse.py:1509 +#: /usr/lib/python2.7/argparse.py:1836 /usr/lib/python2.7/argparse.py:1850 #, python-format -msgid "%s option does not take a value" +msgid "ignored explicit argument %r" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1940 +msgid "too few arguments" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1947 +#, python-format +msgid "argument %s is required" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:1961 +#, python-format +msgid "one of the arguments %s is required" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2007 +msgid "expected one argument" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2008 +msgid "expected at most one argument" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2009 +msgid "expected at least one argument" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2011 +#, python-format +msgid "expected %s argument(s)" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2068 +#, python-format +msgid "ambiguous option: %s could match %s" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2130 +#, python-format +msgid "unexpected option string: %s" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2234 +#, python-format +msgid "%r is not callable" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2250 +#, python-format +msgid "invalid %s value: %r" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2260 +#, python-format +msgid "invalid choice: %r (choose from %s)" +msgstr "" + +#: /usr/lib/python2.7/argparse.py:2353 +#, python-format +msgid "%s: error: %s\n" msgstr "" diff --git a/setup.py b/setup.py index bb142850..513a0daf 100644 --- a/setup.py +++ b/setup.py @@ -111,7 +111,7 @@ py_includes = ['dns.rdtypes.IN.*', 'dns.rdtypes.ANY.*', 'twill.other_packages.*', 'twill.other_packages._mechanize_dist.*', ] # basic excludes for py2exe and py2app -py_excludes = ['doctest', 'unittest', 'optcomplete', 'Tkinter', +py_excludes = ['doctest', 'unittest', 'argcomplete', 'Tkinter', 'PyQt4.QtDesigner', 'PyQt4.QtNetwork', 'PyQt4.QtOpenGL', 'PyQt4.QtScript', 'PyQt4.QtTest', 'PyQt4.QtWebKit', 'PyQt4.QtXml', 'PyQt4.phonon', @@ -951,7 +951,7 @@ o a command line, GUI and web interface # "IP country info": ['GeoIP'], # http://www.maxmind.com/app/python # "Login form": ['twill'], # http://twill.idyll.org/ # "GNOME proxies": ['pygtk'], # http://www.pygtk.org/downloads.html - # "Bash completion": ['optcomplete'], # http://furius.ca/optcomplete/ + # "Bash completion": ['argcomplete'], # https://pypi.python.org/pypi/argcomplete # "Memory debugging": ['meliae'], # https://launchpad.net/meliae #} )