Commit 4552f6849762ba99d359ef958e4a1d73768b3ef1

Authored by decalage2
1 parent 42e0faa6

oleid: fixed relative imports for Python 3 (issue #115)

Showing 1 changed file with 27 additions and 4 deletions
oletools/oleid.py
@@ -41,7 +41,9 @@ http://www.decalage.info/python/oletools @@ -41,7 +41,9 @@ http://www.decalage.info/python/oletools
41 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 41 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
42 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 42 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43 43
  44 +# To improve Python 2+3 compatibility:
44 from __future__ import print_function 45 from __future__ import print_function
  46 +#from __future__ import absolute_import
45 47
46 #------------------------------------------------------------------------------ 48 #------------------------------------------------------------------------------
47 # CHANGELOG: 49 # CHANGELOG:
@@ -50,8 +52,9 @@ from __future__ import print_function @@ -50,8 +52,9 @@ from __future__ import print_function
50 # - improved usage display with -h 52 # - improved usage display with -h
51 # 2014-11-30 v0.03 PL: - improved output with prettytable 53 # 2014-11-30 v0.03 PL: - improved output with prettytable
52 # 2016-10-25 v0.50 PL: - fixed print and bytes strings for Python 3 54 # 2016-10-25 v0.50 PL: - fixed print and bytes strings for Python 3
  55 +# 2016-12-12 v0.51 PL: - fixed relative imports for Python 3 (issue #115)
53 56
54 -__version__ = '0.50' 57 +__version__ = '0.51'
55 58
56 59
57 #------------------------------------------------------------------------------ 60 #------------------------------------------------------------------------------
@@ -73,8 +76,21 @@ __version__ = '0.50' @@ -73,8 +76,21 @@ __version__ = '0.50'
73 #=== IMPORTS ================================================================= 76 #=== IMPORTS =================================================================
74 77
75 import optparse, sys, os, re, zlib, struct 78 import optparse, sys, os, re, zlib, struct
76 -import thirdparty.olefile as olefile  
77 -from thirdparty.prettytable import prettytable 79 +
  80 +try:
  81 + # Relative imports (only works when imported from package):
  82 + from .thirdparty import olefile
  83 + from .thirdparty.prettytable import prettytable
  84 +except:
  85 + # if it does not work, fall back to absolute imports:
  86 + # add this module's folder to sys.path (absolute+normalized path):
  87 + _thismodule_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__)))
  88 + if not _thismodule_dir in sys.path:
  89 + sys.path.insert(0, _thismodule_dir)
  90 + # absolute imports:
  91 + from thirdparty import olefile
  92 + from thirdparty.prettytable import prettytable
  93 +
78 94
79 95
80 #=== FUNCTIONS =============================================================== 96 #=== FUNCTIONS ===============================================================
@@ -265,6 +281,12 @@ class OleID: @@ -265,6 +281,12 @@ class OleID:
265 #=== MAIN ================================================================= 281 #=== MAIN =================================================================
266 282
267 def main(): 283 def main():
  284 + # print banner with version
  285 + print ('oleid %s - http://decalage.info/oletools' % __version__)
  286 + print ('THIS IS WORK IN PROGRESS - Check updates regularly!')
  287 + print ('Please report any issue at https://github.com/decalage2/oletools/issues')
  288 + print ('')
  289 +
268 usage = 'usage: %prog [options] <file>' 290 usage = 'usage: %prog [options] <file>'
269 parser = optparse.OptionParser(usage=__doc__ + '\n' + usage) 291 parser = optparse.OptionParser(usage=__doc__ + '\n' + usage)
270 ## parser.add_option('-o', '--ole', action='store_true', dest='ole', help='Parse an OLE file (e.g. Word, Excel) to look for SWF in each stream') 292 ## parser.add_option('-o', '--ole', action='store_true', dest='ole', help='Parse an OLE file (e.g. Word, Excel) to look for SWF in each stream')
@@ -277,7 +299,7 @@ def main(): @@ -277,7 +299,7 @@ def main():
277 return 299 return
278 300
279 for filename in args: 301 for filename in args:
280 - print('\nFilename:', filename) 302 + print('Filename:', filename)
281 oleid = OleID(filename) 303 oleid = OleID(filename)
282 indicators = oleid.check() 304 indicators = oleid.check()
283 305
@@ -293,6 +315,7 @@ def main(): @@ -293,6 +315,7 @@ def main():
293 t.add_row((indicator.name, indicator.value)) 315 t.add_row((indicator.name, indicator.value))
294 316
295 print(t) 317 print(t)
  318 + print ('')
296 319
297 if __name__ == '__main__': 320 if __name__ == '__main__':
298 main() 321 main()