diff options
Diffstat (limited to 'yang/embedmodel.py')
| -rw-r--r-- | yang/embedmodel.py | 75 |
1 files changed, 42 insertions, 33 deletions
diff --git a/yang/embedmodel.py b/yang/embedmodel.py index 0a25c93da7..39bf2bb922 100644 --- a/yang/embedmodel.py +++ b/yang/embedmodel.py @@ -19,13 +19,13 @@ if not os.path.isdir(outdir): # or python-yang. Cross-compiling FRR is already somewhat involved, no need # to make it even harder. -re_name = re.compile(r'\bmodule\s+([^\s]+)\s+\{') -re_subname = re.compile(r'\bsubmodule\s+([^\s]+)\s+\{') -re_mainname = re.compile(r'\bbelongs-to\s+([^\s]+)\s+\{') -re_rev = re.compile(r'\brevision\s+([\d-]+)\s+\{') +re_name = re.compile(r"\bmodule\s+([^\s]+)\s+\{") +re_subname = re.compile(r"\bsubmodule\s+([^\s]+)\s+\{") +re_mainname = re.compile(r"\bbelongs-to\s+([^\s]+)\s+\{") +re_rev = re.compile(r"\brevision\s+([\d-]+)\s+\{") -template = '''/* autogenerated by embedmodel.py. DO NOT EDIT */ +template = """/* autogenerated by embedmodel.py. DO NOT EDIT */ #include <zebra.h> #include "yang.h" @@ -47,23 +47,28 @@ static void embed_register(void) { \tyang_module_embed(&embed); } -''' +""" + +passchars = set(string.printable) - set("\\'\"%\r\n\t\x0b\x0c") + -passchars = set(string.printable) - set('\\\'"%\r\n\t\x0b\x0c') def escapech(char): if char in passchars: return char - if char == '\n': - return '\\n' - if char == '\t': - return '\\t' - if char in '"\\\'': - return '\\' + char - return '\\x%02x' % (ord(char)) + if char == "\n": + return "\\n" + if char == "\t": + return "\\t" + if char in "\"\\'": + return "\\" + char + return "\\x%02x" % (ord(char)) + + def escape(line): - return ''.join([escapech(i) for i in line]) + return "".join([escapech(i) for i in line]) + -with open(inname, 'r') as fd: +with open(inname, "r") as fd: data = fd.read() sub_name = "" @@ -72,29 +77,33 @@ sub_rev = "" # XML support isn't actively used currently, but it's here in case the need # arises. It does avoid the regex'ing. -if '<?xml' in data: +if "<?xml" in data: from xml.etree import ElementTree + xml = ElementTree.fromstring(data) - name = xml.get('name') - rev = xml.find('{urn:ietf:params:xml:ns:yang:yin:1}revision').get('date') - fmt = 'LYS_YIN' + name = xml.get("name") + rev = xml.find("{urn:ietf:params:xml:ns:yang:yin:1}revision").get("date") + fmt = "LYS_YIN" else: search_name = re_name.search(data) - if search_name : - name = search_name.group(1) - rev = re_rev.search(data).group(1) - else : - search_name = re_subname.search(data) - sub_name = search_name.group(1) - name = re_mainname.search(data).group(1) - sub_rev = re_rev.search(data).group(1) - fmt = 'LYS_YANG' + if search_name: + name = search_name.group(1) + rev = re_rev.search(data).group(1) + else: + search_name = re_subname.search(data) + sub_name = search_name.group(1) + name = re_mainname.search(data).group(1) + sub_rev = re_rev.search(data).group(1) + fmt = "LYS_YANG" if name is None or rev is None: - raise ValueError('cannot determine YANG module name and revision') + raise ValueError("cannot determine YANG module name and revision") -lines = [escape(row) for row in data.split('\n')] +lines = [escape(row) for row in data.split("\n")] text = '\\n"\n\t"'.join(lines) -with open(outname, 'w') as fd: - fd.write(template % (text, escape(name), escape(rev), escape(sub_name), escape(sub_rev), fmt)) +with open(outname, "w") as fd: + fd.write( + template + % (text, escape(name), escape(rev), escape(sub_name), escape(sub_rev), fmt) + ) |
