def test_errata(self): with open("Tests/quote1.json", encoding='utf-8') as f: errata = json.load(f) if not os.path.exists("Temp"): os.mkdir("Temp") state = {"text": "./Tests", "html": "./Temp", "ossPath": "css"} options = Values(defaults={'search': False}) doc = apply_errata(errata, options, state) templates = Templates( os.path.join(os.path.dirname(__file__), "Template")) doc.apply(True, templates) self.assertEqual(doc.InlineCount, 0) self.assertEqual(doc.SectionCount, 1) self.assertEqual(doc.EndnoteCount, 0) self.assertTrue( compare_file("./Temp/RFC8275.html", "./Results/quote1.html", True))
def main2(): # Populate options formatter = optparse.IndentedHelpFormatter(max_help_position=40) optionparser = optparse.OptionParser( usage='rfc-errata [OPTIONS] [<List of RFCs>]' '...\nExample: rfc-errata ', formatter=formatter) server_options = optparse.OptionGroup(optionparser, "Server Options") server_options.add_option( "-s", "--server", dest='serverName', help="specify the server to download from as DNS name") server_options.add_option( "--no-network", action='store_true', default=False, help='don\'t use the network to resolve references') optionparser.add_option_group(server_options) item_options = optparse.OptionGroup(optionparser, "Directory Options") item_options.add_option("--templates", help="Directory containing templates") item_options.add_option("--text", help="Directory to store text versions in") item_options.add_option("--html", help="Directory to store html versions in") item_options.add_option( "--css", help="Directory containing CSS and JavaScript files") item_options.add_option( "--copyto", action="append", help= "Specify a destination to copy the html file, may occur multiple times" ) item_options.add_option("--nocopy", action='store_true', help="Don't copy html files anywhere") optionparser.add_option_group(item_options) item_options = optparse.OptionGroup(optionparser, "Document Options") item_options.add_option("--all", help="Apply to all RFCs", action='store_true') item_options.add_option("--search", action='store_false', default=True, help="Don't search for non-sectioned errata") item_options.add_option("--path", help="path to css files in HTML output") item_options.add_option("--reported", help="apply reported errata (yes/no)") item_options.add_option("--held", help="apply held for update errata (yes/no)") item_options.add_option("--verified", help="apply verified errata (yes/no)") item_options.add_option("--rejected", help="apply rejected errata (yes/no)") optionparser.add_option_group(item_options) item_options = optparse.OptionGroup(optionparser, "General Options") item_options.add_option('-v', '--verbose', action='store_true', help='print extra information') item_options.add_option("--force", action='store_true', help='Force regeneration of html files.') item_options.add_option('-V', '--version', action='callback', callback=display_version, help='display the version number and exit') optionparser.add_option_group(item_options) # --- Parse and validate arguments --------------------------------- (options, args) = optionparser.parse_args() # --- Load status file -------------------------------------------- try: with open("status.json", encoding='utf-8') as f: state = json.load(f) except IOError: state = { "serverName": "www.rfc-editor.org", "lastCheck": "Sun, 21 Apr 2019 00:00:00 GMT", "which": ["Verified", "Held"], "text": "./rfc", "html": "./html", "ossPath": "./css" } updateState = False if options.serverName and options.serverName != state["serverName"]: state["serverName"] = options.serverName updateState = True if options.templates and options.templates != state["templateDir"]: state["templateDir"] = options.templates updateState = True if options.text and options.text != state["textDir"]: state["textDir"] = options.text updateState = True if options.html and options.html != state["html"]: state["html"] = options.html updateState = True if options.path and options.path != state["cssPath"]: state["cssPath"] = options.path updateState = True if options.reported: if options.reported.lower() == "yes": if "Reported" not in state["which"]: state["which"].append("Reported") updateState = True elif options.reported.lower() == "no": if "Reported" in state["which"]: state["which"].remove("Reported") updateState = True else: print("Incorrect argument '{0}' given to reported".format( options.reported)) exit(1) if options.held: if options.held.lower() == "yes": if "Held" not in state["which"]: state["which"].append("Held") updateState = True elif options.held.lower() == "no": if "Held" in state["which"]: state["which"].remove("Held") updateState = True else: print("Incorrect argument '{0}' given to held".format( options.held)) exit(1) if options.verified: if options.verified.lower() == "yes": if "Verified" not in state["which"]: state["which"].append("Verified") updateState = True elif options.verified.lower() == "no": if "Verified" in state["which"]: state["which"].remove("Verified") updateState = True else: print("Incorrect argument '{0}' given to verified".format( options.verified)) exit(1) if options.rejected: if options.rejected.lower() == "yes": if "Rejected" not in state["which"]: state["which"].append("Rejected") updateState = True elif options.rejected.lower() == "no": if "Rejected" in state["which"]: state["which"].remove("Rejected") updateState = True else: print("Incorrect argument '{0}' given to rejected".format( options.rejected)) exit(1) if options.nocopy: if options.copyto: print("copyto and no copy options are mutually exclusive") exit(1) state.remove("dest") updateState = True if options.copyto: state["dest"] = options.copyto updateState = True check = checker(options, state) if check.loadErrata(): updateState = True check.filterErrata() # Create directories if needed if not os.path.isdir(state["text"]): os.mkdir(state["text"]) if not os.path.isdir(state["html"]): os.mkdir(state["html"]) if "templateDir" in state: templates_path = state["templateDir"] else: templates_path = os.path.join(os.path.dirname(__file__), "Template") templates = Templates(templates_path) errorCount = 0 if options.all: errorCount = check.processAllRfcs(templates) else: for rfc in args: rfc = rfc.upper() if not rfc.startswith("RFC"): if rfc.isdigit(): rfc = "RFC" + rfc else: print("Only RFCs can be provided for update. Use RFCXXXX") errorCount += check.processRFC(rfc, options.force, templates) # if False: # with open('rfc/' + rfc + '.txt') as f: # text = f.read() # html = markup(text) # with open('html2/' + rfc + '.html', "w") as f: # f.write(html) check.printStats(errorCount) if updateState: writeState(state) exit(errorCount)