def main(argv=None): # Do argv default this way, as doing it in the functional # declaration sets it at compile time. if argv is None: argv = sys.argv # Argument parsing parser = argparse.ArgumentParser( description=__doc__, # printed with -h/--help # Don't mess with format of description formatter_class=argparse.RawDescriptionHelpFormatter, # To have --help print defaults with trade-off it changes # formatting, use: ArgumentDefaultsHelpFormatter ) parser.add_argument("-H", "--host", dest="hostname", default=None, help="Specify hostname for URL if missing", metavar="HOSTNAME") parser.add_argument("-v", "--verbose", action='store_const', dest='verbose', const=True, default=False, help="run verbosely") parser.add_argument('bibs', metavar='file', type=str, nargs='+', help='bib files to use') args = parser.parse_args() bib_parser = BibParser() entries = bib_parser.parse_bib(args.bibs) status = 0 for entry in entries: if "url" in entry.keys(): # Use list() here since returned tuple is immutable urlparts = list(urlparse.urlparse(entry["url"])) if urlparts[0] == '': urlparts[0] = 'http' if urlparts[1] == '': if args.hostname: urlparts[1] = args.hostname else: print "{}: URL has no hostname " \ "and none given on commandline.".format(entry["key"]) continue url = urlparse.urlunparse(urlparts) if check_url(url): if args.verbose: print "{} ... GOOD".format(url) else: print "{} ... BAD".format(url) status = 1 return(status)
def main(argv=None): # Do argv default this way, as doing it in the functional # declaration sets it at compile time. if argv is None: argv = sys.argv # Set up out output via logging module output = logging.getLogger(argv[0]) output.setLevel(logging.DEBUG) output_handler = logging.StreamHandler() # Default is sys.stderr # Set up formatter to just print message without preamble output_handler.setFormatter(logging.Formatter("%(message)s")) output.addHandler(output_handler) # Argument parsing parser = argparse.ArgumentParser( description=__doc__, # printed with -h/--help # Don't mess with format of description formatter_class=argparse.RawDescriptionHelpFormatter, # To have --help print defaults with trade-off it changes # formatting, use: ArgumentDefaultsHelpFormatter ) # Only allow one of debug/quiet mode verbosity_group = parser.add_mutually_exclusive_group() verbosity_group.add_argument("-d", "--debug", action='store_const', const=logging.DEBUG, dest="output_level", default=logging.INFO, help="print debugging") verbosity_group.add_argument("-q", "--quiet", action="store_const", const=logging.WARNING, dest="output_level", help="run quietly") parser.add_argument("-t", "--template", required=True, help="template file", metavar="FILE") parser.add_argument("-T", "--template_path", action='append', help="search PATH for templates", metavar="PATH") parser.add_argument("--version", action="version", version="%(prog)s 1.0") parser.add_argument('bibs', metavar='args', type=str, nargs='+', help='bib files to use') args = parser.parse_args() output_handler.setLevel(args.output_level) output.info("Reading template from {}".format(args.template)) mylookup = TemplateLookup(directories=args.template_path) with open(args.template) as f: template_string = "".join(f.readlines()) template = Template(template_string, lookup=mylookup) output.info("Parsing bib files") try: bib_parser = BibParser() entries = bib_parser.parse_bib(args.bibs) except Exception as e: output.error("Error parsing bibliography files") output.error(str(e)) return 1 substitutions = { "entries" : entries, } try: print template.render(**substitutions) except Exception as e: output.error("Error filling in template") output.error(str(e)) output.error(mako.exceptions.text_error_template().render()) return 1 return(0)