Example #1
0
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)
Example #2
0
File: pyBib.py Project: von/pyBib
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)