示例#1
0
def main():
    import argparse
    parser = argparse.ArgumentParser(
        description=
        "Merge existing template files, deduping identical templates.")
    parser.add_argument("--verbose",
                        action="store_true",
                        help="Enable debugging output")
    parser.add_argument("templates_outfile",
                        type=str,
                        help="Path to the output template file")
    parser.add_argument("templates_files",
                        type=str,
                        nargs="+",
                        help="Path to the template files")
    args = parser.parse_args()

    if args.verbose:
        logging.basicConfig(
            level=logging.DEBUG,
            format="%(asctime)s %(levelname)s %(name)s %(message)s")

    templates = TemplateDatabase()

    for file_ in args.templates_files:
        new_templates = TemplateDatabase()
        with open(file_, "rb") as f:
            new_templates.deserialize(f.read(), warn_on_conflict=False)
        templates.extend(new_templates)

    with open(args.templates_outfile, "wb") as f:
        f.write(templates.serialize())
示例#2
0
def main():
    import argparse
    parser = argparse.ArgumentParser(
        description="Verify a template file's syntax and contents.")
    parser.add_argument("templates", type=str,
                        help="Path to the file containing recovered templates")
    args = parser.parse_args()

    with open(args.templates, "rb") as f:
        templates_txt = f.read()

    # we break rules below be reaching into `templates`. Sorry :-(
    templates = TemplateDatabase()
    try:
        templates.deserialize(templates_txt, warn_on_conflict=True)

        print "Template Distribution:"
        for eid in sorted(templates._eid_map.keys()):
            print "  EID: %6d  --> %2d templates" % \
                (eid, len(templates._eid_map[eid]))

        print ""
        print "  Summary   "
        print "-------------"
        print "No Conflicts!"
        sys.exit(0)
    except TemplateEIDConflictError:
        templates.deserialize(templates_txt, warn_on_conflict=False)

        print "Template Distribution:"
        for eid in sorted(templates._eid_map.keys()):
            ids = []
            tt = []
            for id_ in templates._eid_map[eid]:
                tt.extend(templates._templates[id_])
                ids.append(id_)

            if len(ids) != len(tt):
                print "  EID: %6d  --> %2d templates (%d conflicts)" % \
                    (eid, len(tt), len(tt) - len(ids))
            else:
                print "  EID: %6d  --> %2d templates" % \
                    (eid, len(templates._eid_map[eid]))

        print ""
        print "        Summary        "
        print "-----------------------"

        print "There are %d Conflicts!" % \
            (sum(map(len, templates._templates.values())) - len(templates._templates.keys()))
        sys.exit(-1)