def create_output(url):
    workdir = mkdtemp()
    results = {}
    results = {}

    result = StringIO()

    # Trickery to capture stderr from the xym tools for later use
    stderr_ = sys.stderr
    sys.stderr = result
    extracted_models = xym.xym(source_id=url, dstdir=workdir, srcdir="", strict=True, strict_examples=False,
                               debug_level=0)
    sys.stderr = stderr_
    xym_stderr = result.getvalue()

    for em in extracted_models:
        file_name = em.split("@")[0].replace(".", "_")
        pyang_stderr, pyang_output, confdc_stderr, yanglint_stderr = validate_yangfile(em, workdir)
        results[em] = {"pyang_stderr": cgi.escape(pyang_stderr),
                                  "pyang_output": cgi.escape(pyang_output),
                                  "xym_stderr": cgi.escape(xym_stderr),
                                  "confdc_stderr": cgi.escape(confdc_stderr),
                                  "yanglint_stderr": cgi.escape(yanglint_stderr),
                                  "name_split": file_name}

    rmtree(workdir)
    return results
def create_output(url):
    workdir = mkdtemp()
    results = {}

    result = StringIO()

    # Trickery to capture stderr from the xym tools for later use
    stderr_ = sys.stderr
    sys.stderr = result
    extracted_models = xym.xym(source_id=url,
                               dstdir=workdir,
                               srcdir="",
                               strict=True,
                               strict_examples=False,
                               debug_level=0)
    sys.stderr = stderr_
    xym_stderr = result.getvalue()

    for em in extracted_models:
        pyang_stderr, pyang_output, confdc_stderr, yanglint_stderr = validate_yangfile(
            em, workdir)
        results[em] = {
            "pyang_stderr": cgi.escape(pyang_stderr),
            "pyang_output": cgi.escape(pyang_output),
            "xym_stderr": cgi.escape(xym_stderr),
            "confdc_stderr": cgi.escape(confdc_stderr),
            "yanglint_stderr": cgi.escape(yanglint_stderr)
        }

    rmtree(workdir)

    return results
Пример #3
0
 def extract_from(file, dir, strict=True):
     saved_stdout = sys.stdout
     saved_stderr = sys.stderr
     xymerr = StringIO()
     xymout = StringIO()
     sys.stderr = xymerr
     sys.stdout = xymout
     model_list = []
     try:
         model_list = xym.xym(str(file),
                              str(file.parent),
                              str(dir),
                              strict=strict,
                              debug_level=verbosity - 2)
         for name in model_list:
             modfile = moddir / name
             mtime = file.stat().st_mtime
             os.utime(str(modfile), (mtime, mtime))
             if '"' in name:
                 name = name.replace('"', '')
                 modfile.rename(str(moddir / name))
         model_list = [n.replace('"', '') for n in model_list]
     except Exception as e:
         print("** Error when extracting from %s: %s" % (file, str(e)))
     sys.stdout = saved_stdout
     sys.stderr = saved_stderr
     #
     if verbosity > 1:
         outmsg = xymout.getvalue()
         self.stdout.write(outmsg)
     if verbosity > 2:
         errmsg = xymerr.getvalue()
         self.stderr.write(errmsg)
     return model_list
Пример #4
0
    def runTest(self):
        """Run a test that is the equivalent of:

        xym.py test-file.txt
        """
        extracted_modules = xym.xym('test-file.txt', './', './', False, False, 0)
        self.assertTrue(len(extracted_modules)==5)
        module_check = ['example-no-error.yang', 'ex-error.yang', 'ex-no-error.yang', 'example-error.yang', 'test-valid.yang']
        for y in module_check:
            self.assertTrue(y in extracted_modules)
Пример #5
0
 def extract_from_rfc_file(self, rfc_file: str):
     return xym.xym(rfc_file,
                    self.rfc_path,
                    self.rfc_yang_path,
                    strict=True,
                    strict_examples=False,
                    debug_level=self.debug_level,
                    add_line_refs=False,
                    force_revision_pyang=False,
                    force_revision_regexp=True)
Пример #6
0
    def runTest(self):
        """Run a test that is the equivalent of:

        xym.py --strict --strict-examples test-file.txt
        """
        extracted_modules = xym.xym('test-file.txt', './', './', True, True, 0)
        self.assertTrue(len(extracted_modules) == 1)
        module_check = ['example-no-error.yang']
        for y in module_check:
            self.assertTrue(y in extracted_modules)
Пример #7
0
    def runTest(self):
        """Run a test that is the equivalent of:

        xym.py --strict --strict-examples test-file.txt
        """
        extracted_modules = xym.xym('test-file.txt', './', './', True, True, 0)
        self.assertTrue(len(extracted_modules)==1)
        module_check = ['example-no-error.yang']
        for y in module_check:
            self.assertTrue(y in extracted_modules)
def create_output(url):
    workdir = mkdtemp()
    results = {}

    result = StringIO()

    # Trickery to capture stderr from the xym tools for later use
    stderr_ = sys.stderr
    sys.stderr = result
    #url = "c:\\users\\hwx180~1\\appdata\\local\\temp\\tmpwh8emt\\draft-kumar-lime-yang-connectionless-oam-03.txt"

    extracted_models = xym.xym(source_id=url, dstdir=workdir, srcdir="", strict=True, strict_examples=False,
                               debug_level=0)
    sys.stderr = stderr_
    xym_stderr = result.getvalue()

    emsave = ""
    for em in extracted_models:
        pyang_stderr, pyang_output = validate_yangfile(em, workdir)
        pyOutput = cgi.escape(pyang_output)
        splitStr = ""
        if ("\n" in pyOutput):
            splitStr = "}\n<"
        else:
            splitStr = "}<"
        outputList = pyOutput.split(splitStr)

        jsonOutputTmp = outputList[0] + "}"
        outputJson = json.loads(jsonOutputTmp)
        jsonOutputTmp = json.dumps(outputJson, indent=2)

        xmlOutputTmp = "<" + outputList[1]
        xmlOutputTmp = xmlOutputTmp.replace("&lt;", "<")
        xmlOutputTmp = xmlOutputTmp.replace("&gt;", ">")
        outputXmlET_tmp = ET.fromstring(xmlOutputTmp)
        outputXmlET = xml_indent(outputXmlET_tmp, 0)
        xmlOutputTmp = ET.tostring(outputXmlET)

        xmlOutputTmp = xmlOutputTmp.replace("<", "&lt;")
        xmlOutputTmp = xmlOutputTmp.replace(">", "&gt;")

        results[em] = {"pyang_stderr": cgi.escape(pyang_stderr),
                       "pyang_output": jsonOutputTmp,
                       "pyang_output1": xmlOutputTmp}

        emsave = em
    # "pyang_output": cgi.escape(pyang_output),
    # "pyang_output1":cgi.escape(pyang_output)


    rmtree(workdir)

    return results, emsave
Пример #9
0
    def runTest(self):
        """Run a test that is the equivalent of:

        xym.py test-file.txt
        """
        extracted_modules = xym.xym('test-file.txt', './', './', False, False,
                                    0)
        self.assertTrue(len(extracted_modules) == 5)
        module_check = [
            'example-no-error.yang', 'ex-error.yang', 'ex-no-error.yang',
            'example-error.yang', 'test-valid.yang'
        ]
        for y in module_check:
            self.assertTrue(y in extracted_modules)
Пример #10
0
 def extract_from_draft_file(self,
                             draft_file: str,
                             srcdir: str,
                             dstdir: str,
                             strict: bool = False,
                             strict_examples: bool = False):
     return xym.xym(draft_file,
                    srcdir,
                    dstdir,
                    strict=strict,
                    strict_examples=strict_examples,
                    debug_level=self.debug_level,
                    add_line_refs=False,
                    force_revision_pyang=False,
                    force_revision_regexp=True)
Пример #11
0
    def runTest(self):
        """Run a test that is the equivalent of:

        xym.py --strict --strict-examples test-file.txt
        """
        extracted_modules = xym.xym('resources/test-file-with-symbol',
                                    './',
                                    './',
                                    strict=True,
                                    strict_examples=False,
                                    debug_level=0,
                                    force_revision_regexp=True)
        self.assertTrue(len(extracted_modules) == 1)
        module_check = ['*****@*****.**']
        for y in module_check:
            self.assertTrue(y in extracted_modules)
Пример #12
0
    def runTest(self):
        """Run a test that is the equivalent of:

        xym.py --strict test-file.txt
        """
        extracted_modules = xym.xym('resources/test-file.txt',
                                    './',
                                    './',
                                    strict=True,
                                    strict_examples=False,
                                    debug_level=0)
        self.assertTrue(len(extracted_modules) == 3)
        module_check = [
            'ex-no-error.yang', 'example-error.yang', 'test-valid.yang'
        ]
        for y in module_check:
            self.assertTrue(y in extracted_modules)
Пример #13
0
    def runTest(self):
        """Run a test that is the equivalent of:

        xym.py --force_revision_regexp https://tools.ietf.org/rfc/rfc7223.txt
        """
        print('start force_revision_regexp')
        extracted_modules = xym.xym("https://tools.ietf.org/rfc/rfc7223.txt",
                                    './',
                                    './',
                                    debug_level=0,
                                    force_revision_regexp=True)
        self.assertTrue(len(extracted_modules) == 4)
        module_check = [
            '*****@*****.**', 'ex-ethernet.yang',
            'ex-ethernet-bonding.yang', 'ex-vlan.yang'
        ]
        for y in module_check:
            self.assertTrue(y in extracted_modules)
 def parse_and_extract(self):
     extracted_models = xym.xym(source_id=self.__source,
                                dstdir=self.__working_directory,
                                srcdir="",
                                strict=True,
                                strict_examples=False,
                                debug_level=0,
                                force_revision_regexp=True)
     xym_res = {'time': datetime.now(timezone.utc).isoformat()}
     sys.stderr = self.__stderr_
     sys.stdout = self.__stdout_
     xym_res['stdout'] = self.__stdout.getvalue()
     xym_res['stderr'] = self.__result.getvalue()
     xym_res['name'] = 'xym'
     xym_res['version'] = self.VERSION
     xym_res['command'] = 'xym.xym(source_id="{}", dstdir="{}", srcdir="", strict=True, strict_examples=False,' \
                          ' debug_level=0, force_revision_regexp=True)'.format(self.__source,
                                                                               self.__working_directory)
     return extracted_models, xym_res
Пример #15
0
    def runTest(self):
        """Run a test that is the equivalent of:

        xym.py --strict --strict-examples test-file.txt
        """
        print('startig test')
        extracted_modules = xym.xym(
            'resources/test-file-no-file-after-code-begins',
            './',
            './',
            strict=True,
            strict_examples=False,
            debug_level=0,
            force_revision_regexp=True)
        print(extracted_modules)
        self.assertTrue(len(extracted_modules) == 1)
        module_check = ['*****@*****.**']
        for y in module_check:
            self.assertTrue(y in extracted_modules)
Пример #16
0
def create_output(url):
	workdir = mkdtemp()
	results = {}

	result = StringIO()

	# Trickery to capture stderr from the xym tools for later use
	stderr_ = sys.stderr
	sys.stderr = result
	extracted_models = xym.xym(source_id = url, dstdir = workdir, srcdir = "", strict = True, strict_examples = False, debug_level = 0)
	sys.stderr = stderr_
	xym_stderr = result.getvalue()

	for em in extracted_models:
		pyang_stderr, pyang_output = validate_yangfile(em, workdir)
		results[em] = { "pyang_stderr": cgi.escape(pyang_stderr),
						"pyang_output": cgi.escape(pyang_output),
						"xym_stderr": cgi.escape(xym_stderr) }

	rmtree(workdir)

	return results
Пример #17
0
def create_output(url, for_datatracker=False):
    workdir = mkdtemp()
    results = {}
    xym_res = {}
    result = StringIO()
    stdout = StringIO()

    # Trickery to capture stderr from the xym tools for later use
    stderr_ = sys.stderr
    stdout_ = sys.stdout
    sys.stderr = result
    sys.stdout = stdout
    try:
        extracted_models = xym.xym(source_id=url,
                                   dstdir=workdir,
                                   srcdir="",
                                   strict=True,
                                   strict_examples=False,
                                   debug_level=0)
        xym_res['time'] = datetime.now(timezone.utc).isoformat()
        sys.stderr = stderr_
        sys.stdout = stdout_
        xym_stderr = result.getvalue()

        xym_res['stdout'] = stdout.getvalue()
        xym_res['stderr'] = xym_stderr
        xym_res['name'] = 'xym'
        xym_res['version'] = versions['xym_version']
        xym_res['code'] = None
        workdir_split = workdir.split('/')
        workdir_split[-1] = 'workdir-{}'.format(workdir_split[-1])
        workdir_to_json = '/'.join(workdir_split)
        xym_res[
            'command'] = 'xym.xym(source_id="{}", dstdir="{}", srcdir="", strict=True, strict_examples=False, debug_level=0)'.format(
                url, workdir_to_json)

        modules = []
        if for_datatracker:
            results: dict[str, t.Any] = {'extraction': xym_res}

        for em in extracted_models:
            file_name = em.split("@")[0].replace(".", "_")
            pyang_res, confdc_res, yanglint_res, yangdump_res = validate_yangfile(
                em, workdir)
            if for_datatracker:
                modules.append({
                    'name':
                    em,
                    'checks':
                    [pyang_res, confdc_res, yanglint_res, yangdump_res]
                })

            else:
                results[em] = {
                    "pyang_stderr": escape(pyang_res['stderr']),
                    "pyang_output": escape(pyang_res['stdout']),
                    "xym_stderr": escape(xym_res['stderr']),
                    "confdc_stderr": escape(confdc_res['stderr']),
                    "yanglint_stderr": escape(yanglint_res['stderr']),
                    "yangdump_stderr": escape(yangdump_res['stderr']),
                    "name_split": file_name
                }
        if for_datatracker:
            results['modules'] = modules
    except Exception as e:
        logger.error('Error: {}'.format(e))
    finally:
        if os.path.exists(workdir):
            shutil.rmtree(workdir)

    return results