From 3165f73d7c6224523957fa69beade6069efea6ef Mon Sep 17 00:00:00 2001 From: mormj <34754695+mormj@users.noreply.github.com> Date: Fri, 22 May 2020 14:21:09 -0400 Subject: pybind: add hash check to binding file creation (#3472) --- gr-utils/bindtool/scripts/header_utils.py | 78 +++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 gr-utils/bindtool/scripts/header_utils.py (limited to 'gr-utils/bindtool/scripts/header_utils.py') diff --git a/gr-utils/bindtool/scripts/header_utils.py b/gr-utils/bindtool/scripts/header_utils.py new file mode 100644 index 0000000000..165124e969 --- /dev/null +++ b/gr-utils/bindtool/scripts/header_utils.py @@ -0,0 +1,78 @@ +# Utilities for reading values in header files + +from argparse import ArgumentParser +import re + + +class PybindHeaderParser: + def __init__(self, pathname): + with open(pathname,'r') as f: + self.file_txt = f.read() + + def get_flag_automatic(self): + # p = re.compile(r'BINDTOOL_GEN_AUTOMATIC\(([^\s])\)') + # m = p.search(self.file_txt) + m = re.search(r'BINDTOOL_GEN_AUTOMATIC\(([^\s])\)', self.file_txt) + if (m and m.group(1) == '1'): + return True + else: + return False + + def get_flag_pygccxml(self): + # p = re.compile(r'BINDTOOL_USE_PYGCCXML\(([^\s])\)') + # m = p.search(self.file_txt) + m = re.search(r'BINDTOOL_USE_PYGCCXML\(([^\s])\)', self.file_txt) + if (m and m.group(1) == '1'): + return True + else: + return False + + def get_header_filename(self): + # p = re.compile(r'BINDTOOL_HEADER_FILE\(([^\s]*)\)') + # m = p.search(self.file_txt) + m = re.search(r'BINDTOOL_HEADER_FILE\(([^\s]*)\)', self.file_txt) + if (m): + return m.group(1) + else: + return None + + def get_header_file_hash(self): + # p = re.compile(r'BINDTOOL_HEADER_FILE_HASH\(([^\s]*)\)') + # m = p.search(self.file_txt) + m = re.search(r'BINDTOOL_HEADER_FILE_HASH\(([^\s]*)\)', self.file_txt) + if (m): + return m.group(1) + else: + return None + + def get_flags(self): + return f'{self.get_flag_automatic()};{self.get_flag_pygccxml()};{self.get_header_filename()};{self.get_header_file_hash()};' + + + +def argParse(): + """Parses commandline args.""" + desc='Reads the parameters from the comment block in the pybind files' + parser = ArgumentParser(description=desc) + + parser.add_argument("function", help="Operation to perform on comment block of pybind file", choices=["flag_auto","flag_pygccxml","header_filename","header_file_hash","all"]) + parser.add_argument("pathname", help="Pathname of pybind c++ file to read, e.g. blockname_python.cc") + + return parser.parse_args() + +if __name__ == "__main__": + # Parse command line options and set up doxyxml. + args = argParse() + + pbhp = PybindHeaderParser(args.pathname) + + if args.function == "flag_auto": + print(pbhp.get_flag_automatic()) + elif args.function == "flag_pygccxml": + print(pbhp.get_flag_pygccxml()) + elif args.function == "header_filename": + print(pbhp.get_header_filename()) + elif args.function == "header_file_hash": + print(pbhp.get_header_file_hash()) + elif args.function == "all": + print(pbhp.get_flags()) \ No newline at end of file -- cgit v1.2.3 From a7436c3062aa6e81e476b283f571626b8dd73a07 Mon Sep 17 00:00:00 2001 From: Josh Morman <mormjb@gmail.com> Date: Thu, 11 Jun 2020 11:32:11 -0400 Subject: pybind: add exception handling to pybind header parsing --- gr-utils/bindtool/scripts/header_utils.py | 64 +++++++++++++++++-------------- 1 file changed, 36 insertions(+), 28 deletions(-) (limited to 'gr-utils/bindtool/scripts/header_utils.py') diff --git a/gr-utils/bindtool/scripts/header_utils.py b/gr-utils/bindtool/scripts/header_utils.py index 165124e969..4071f6fa86 100644 --- a/gr-utils/bindtool/scripts/header_utils.py +++ b/gr-utils/bindtool/scripts/header_utils.py @@ -6,43 +6,51 @@ import re class PybindHeaderParser: def __init__(self, pathname): - with open(pathname,'r') as f: - self.file_txt = f.read() + try: + with open(pathname,'r') as f: + self.file_txt = f.read() + except: + self.file_txt = "" def get_flag_automatic(self): - # p = re.compile(r'BINDTOOL_GEN_AUTOMATIC\(([^\s])\)') - # m = p.search(self.file_txt) - m = re.search(r'BINDTOOL_GEN_AUTOMATIC\(([^\s])\)', self.file_txt) - if (m and m.group(1) == '1'): - return True - else: + try: + m = re.search(r'BINDTOOL_GEN_AUTOMATIC\(([^\s])\)', self.file_txt) + if (m and m.group(1) == '1'): + return True + else: + return False + except: return False - - def get_flag_pygccxml(self): - # p = re.compile(r'BINDTOOL_USE_PYGCCXML\(([^\s])\)') - # m = p.search(self.file_txt) - m = re.search(r'BINDTOOL_USE_PYGCCXML\(([^\s])\)', self.file_txt) - if (m and m.group(1) == '1'): - return True - else: + + def get_flag_pygccxml(self): + try: + m = re.search(r'BINDTOOL_USE_PYGCCXML\(([^\s])\)', self.file_txt) + if (m and m.group(1) == '1'): + return True + else: + return False + except: return False def get_header_filename(self): - # p = re.compile(r'BINDTOOL_HEADER_FILE\(([^\s]*)\)') - # m = p.search(self.file_txt) - m = re.search(r'BINDTOOL_HEADER_FILE\(([^\s]*)\)', self.file_txt) - if (m): - return m.group(1) - else: + try: + m = re.search(r'BINDTOOL_HEADER_FILE\(([^\s]*)\)', self.file_txt) + if (m): + return m.group(1) + else: + return None + except: return None + def get_header_file_hash(self): - # p = re.compile(r'BINDTOOL_HEADER_FILE_HASH\(([^\s]*)\)') - # m = p.search(self.file_txt) - m = re.search(r'BINDTOOL_HEADER_FILE_HASH\(([^\s]*)\)', self.file_txt) - if (m): - return m.group(1) - else: + try: + m = re.search(r'BINDTOOL_HEADER_FILE_HASH\(([^\s]*)\)', self.file_txt) + if (m): + return m.group(1) + else: + return None + except: return None def get_flags(self): -- cgit v1.2.3