summaryrefslogtreecommitdiff
path: root/python/examples/kaitai/kshelpers.py
diff options
context:
space:
mode:
authorAndrew Lamoureux <andrew@vector35.com>2019-03-21 17:49:02 -0400
committerAndrew Lamoureux <andrew@vector35.com>2019-03-21 17:49:02 -0400
commita6355074d451e9ba9b85f17bfcd7c273ec18ecfa (patch)
treeb5dae98e70afcb7a3c986851fb11d8a90391d018 /python/examples/kaitai/kshelpers.py
parenta79cc606a332377f5923f085dee953871ef72a05 (diff)
kaitai: statusbar widget menu to select any format
also: stop assuming file size on startup, return priority 1 (not 0)
Diffstat (limited to 'python/examples/kaitai/kshelpers.py')
-rw-r--r--python/examples/kaitai/kshelpers.py33
1 files changed, 25 insertions, 8 deletions
diff --git a/python/examples/kaitai/kshelpers.py b/python/examples/kaitai/kshelpers.py
index 55ebd01e..d2e2f441 100644
--- a/python/examples/kaitai/kshelpers.py
+++ b/python/examples/kaitai/kshelpers.py
@@ -1,5 +1,7 @@
#!/usr/bin/env python
+import traceback
+
import io
import os
import sys
@@ -27,6 +29,7 @@ else:
# length: int total length of data
def idData(dataSample, length):
result = None
+ #print('idData() here with sample: %s' % repr(dataSample))
if len(dataSample) < 16:
return result
@@ -46,7 +49,7 @@ def idData(dataSample, length):
if dataSample[0:2] in [b'BM', b'BA', b'CI', b'CP', b'IC', b'PT'] and struct.unpack('<I', dataSample[2:6])[0]==length:
result = 'bmp'
- #print('ioData() returning \'%s\'' % result)
+ #print('idData() returning \'%s\'' % result)
return result
def idFile(fpath):
@@ -66,8 +69,9 @@ def ksImportClass(moduleName):
try:
#print('__package__: -%s-' % __package__) # 'kaitai'
#print('__name__: -%s-' % __name__) # 'kaitai.kshelpers'
-
#print('moduleName: -%s-' % moduleName)
+ #print('importlib.import_module(.%s, %s)' % (moduleName, __package__))
+ print('importing kaitai module "%s"' % moduleName)
module = importlib.import_module('.'+moduleName, __package__)
className = ksModuleToClass(moduleName)
#print('className: -%s-' % className)
@@ -78,28 +82,41 @@ def ksImportClass(moduleName):
return classThing
-def parseFpath(fpath):
- ksClass = ksImportClass(idFile(fpath))
+def parseFpath(fpath, ksModuleName=None):
+ if not ksModuleName:
+ ksModuleName = idFile(fpath)
+ #print('parseFpath() using kaitai format: %s' % ksModuleName)
+
+ ksClass = ksImportClass(ksModuleName)
if not ksClass: return None
parsed = ksClass.from_file(fpath)
parsed._read()
return parsed
-def parseData(data):
- ksClass = ksImportClass(idData(data), len(data))
+def parseData(data, ksModuleName=None):
+ if not ksModuleName:
+ ksModuleName = idData(data, len(data))
+ #print('parseData() using kaitai format: %s' % ksModuleName)
+
+ ksClass = ksImportClass(ksModuleName)
if not ksClass: return None
parsed = ksClass.from_bytes(data)
parsed._read()
return parsed
-def parseIo(ioObj):
+def parseIo(ioObj, ksModuleName=None):
ioObj.seek(0, io.SEEK_END)
length = ioObj.tell()
+ if not ksModuleName:
+ ioObj.seek(0, io.SEEK_SET)
+ ksModuleName = idData(ioObj.read(16), length)
+ #print('parseIo() using kaitai format: %s' % ksModuleName)
+
ioObj.seek(0, io.SEEK_SET)
- ksClass = ksImportClass(idData(ioObj.read(16), length))
+ ksClass = ksImportClass(ksModuleName)
if not ksClass: return None
ioObj.seek(0, io.SEEK_SET)