diff options
Diffstat (limited to 'python/examples/kaitai/kshelpers.py')
| -rw-r--r-- | python/examples/kaitai/kshelpers.py | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/python/examples/kaitai/kshelpers.py b/python/examples/kaitai/kshelpers.py index bcdc9931..1deeef59 100644 --- a/python/examples/kaitai/kshelpers.py +++ b/python/examples/kaitai/kshelpers.py @@ -84,7 +84,6 @@ def ksImportClass(moduleName): classThing = getattr(module, className) except Exception as e: log.log_error('importing kaitai module %s' % moduleName) - #log.log_debug(e) pass return classThing @@ -97,11 +96,13 @@ def parseFpath(fpath, ksModuleName=None): ksClass = ksImportClass(ksModuleName) if not ksClass: return None + parsed = None try: parsed = ksClass.from_file(fpath) parsed._read() - except Exception: - log.log_error('kaitai module %s threw exception, check file type' % ksModuleName) + except Exception as e: + log.log_error('parseFpath(): kaitai module %s threw exception, check file type' % ksModuleName) + parsed = None return parsed @@ -113,11 +114,13 @@ def parseData(data, ksModuleName=None): ksClass = ksImportClass(ksModuleName) if not ksClass: return None + parsed = None try: parsed = ksClass.from_bytes(data) parsed._read() - except Exception: - log.log_error('kaitai module %s threw exception, check file type' % ksModuleName) + except Exception as e: + log.log_error('parseData(): kaitai module %s threw exception, check file type' % ksModuleName) + parsed = None return parsed @@ -134,12 +137,13 @@ def parseIo(ioObj, ksModuleName=None): ksClass = ksImportClass(ksModuleName) if not ksClass: return None + parsed = None try: ioObj.seek(0, io.SEEK_SET) parsed = ksClass.from_io(ioObj) parsed._read() - except Exception: - log.log_error('kaitai module %s threw exception, check file type' % ksModuleName) + except Exception as e: + log.log_error('parseIo(): kaitai module %s threw exception, check file type' % ksModuleName) parsed = None return parsed @@ -300,19 +304,20 @@ def buildQtree(ksobj): qwi = KaitaiTreeWidgetItem() qwi.setKaitaiObject(ksobj) - for fieldName in dir(ksobj): - if hasattr(ksobj, fieldName): - getattr(ksobj, fieldName) - - fields = dir(ksobj) - for fieldName in fields: - if fieldName.startswith('_') and (not fieldName.startswith('_m_')): - continue - if fieldName in exceptions: + fieldNames = [] + for candidate in dir(ksobj): + if candidate.startswith('_') and (not candidate.startswith('_m_')): continue - if not hasattr(ksobj, fieldName): + if candidate in exceptions: continue - if ('_m_'+fieldName) in fields: + try: + if getattr(ksobj, candidate, False): + fieldNames.append(candidate) + except Exception: + pass + + for fieldName in fieldNames: + if ('_m_'+fieldName) in fieldNames: # favor the '_m_' version which seems to get the debug info continue |
