summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rwxr-xr-xpython/examples/kaitai/__main__.py20
-rw-r--r--python/examples/kaitai/kaitaistruct.py4
-rw-r--r--python/examples/kaitai/kshelpers.py41
-rw-r--r--python/examples/kaitai/view.py4
4 files changed, 37 insertions, 32 deletions
diff --git a/python/examples/kaitai/__main__.py b/python/examples/kaitai/__main__.py
index 237fc180..2accd2e5 100755
--- a/python/examples/kaitai/__main__.py
+++ b/python/examples/kaitai/__main__.py
@@ -42,19 +42,19 @@ def dump(obj, depth=0):
indent = ' '*depth
if isinstance(obj, kaitaistruct.KaitaiStruct):
- for fieldName in dir(obj):
- if hasattr(obj, fieldName):
- getattr(obj, fieldName)
-
- for fieldName in dir(obj):
- #print('considering field: %s (hasattr returns: %d)' % (fieldName, hasattr(obj, fieldName)))
- if fieldName != '_debug' and fieldName.startswith('_'):
- continue
- if fieldName in dump_exceptions:
+ fieldNames = []
+ for candidate in dir(obj):
+ if candidate != '_debug' and candidate.startswith('_'):
continue
- if not hasattr(obj, fieldName):
+ if candidate in dump_exceptions:
continue
+ try:
+ if getattr(obj, candidate, False):
+ fieldNames.append(candidate)
+ except Exception:
+ pass
+ for fieldName in fieldNames:
subObj = getattr(obj, fieldName)
if type(subObj) == types.MethodType:
diff --git a/python/examples/kaitai/kaitaistruct.py b/python/examples/kaitai/kaitaistruct.py
index 4d588b9f..1bcc31f1 100644
--- a/python/examples/kaitai/kaitaistruct.py
+++ b/python/examples/kaitai/kaitaistruct.py
@@ -33,7 +33,7 @@ class KaitaiStruct(object):
f = open(filename, 'rb')
try:
return cls(KaitaiStream(f))
- except Exception:
+ except Exception as e:
# close file descriptor, then reraise the exception
f.close()
raise
@@ -375,5 +375,5 @@ class KaitaiStream(object):
"""
try:
return enum_obj(value)
- except ValueError:
+ except ValueError as e:
return value
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
diff --git a/python/examples/kaitai/view.py b/python/examples/kaitai/view.py
index a30140c0..75952b9b 100644
--- a/python/examples/kaitai/view.py
+++ b/python/examples/kaitai/view.py
@@ -137,7 +137,7 @@ class KaitaiView(QScrollArea, View):
# parse the file using Kaitai, construct the TreeWidget
def kaitaiParse(self, ksModuleName=None):
- #log_debug('kaitaiParse() with len(bv)=%d and bv.file.filename=%s' % (len(self.binaryView), self.binaryView.file.filename))
+ log.log_debug('kaitaiParse() with len(bv)=%d and bv.file.filename=%s' % (len(self.binaryView), self.binaryView.file.filename))
if len(self.binaryView) == 0:
return
@@ -155,7 +155,7 @@ class KaitaiView(QScrollArea, View):
tree = kshelpers.buildQtree(parsed)
except Exception as e:
log.log_error('kaitai module %s threw exception, check file type' % ksModuleName)
- true = None
+ tree = None
else:
tree = kshelpers.buildQtree(parsed)