2020-06-01 15:21:58 +02:00
|
|
|
import os.path
|
|
|
|
import zipfile
|
|
|
|
import tempfile
|
|
|
|
import random
|
|
|
|
import string
|
|
|
|
import shutil
|
|
|
|
import re
|
|
|
|
|
|
|
|
from os.path import basename
|
|
|
|
|
|
|
|
class Unpacker(object):
|
|
|
|
#--------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
#--------------------------------------------------------------------------
|
|
|
|
def entropy(self, length):
|
2021-01-31 20:50:04 +01:00
|
|
|
return ''.join(random.choice('abcdefghijklmnopqrstuvwxyz') for i in range (length))
|
2020-06-01 15:21:58 +02:00
|
|
|
|
|
|
|
#--------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
#--------------------------------------------------------------------------
|
|
|
|
def unpack_zipfile(self, file):
|
|
|
|
|
|
|
|
if not os.path.isfile(file):
|
|
|
|
raise Exception("Error: file, not found!")
|
|
|
|
|
|
|
|
# Create unique working direction into which the zip file is expanded
|
|
|
|
self.unzip_dir = "{0}/{1}_{2}".format(tempfile.gettempdir(), os.path.splitext(basename(file))[0], self.entropy(6))
|
|
|
|
|
|
|
|
datfilename = ""
|
|
|
|
binfilename = ""
|
|
|
|
|
|
|
|
with zipfile.ZipFile(file, 'r') as zip:
|
|
|
|
files = [item.filename for item in zip.infolist()]
|
|
|
|
datfilename = [m.group(0) for f in files for m in [re.search('.*\.dat', f)] if m].pop()
|
|
|
|
binfilename = [m.group(0) for f in files for m in [re.search('.*\.bin', f)] if m].pop()
|
|
|
|
|
|
|
|
zip.extractall(r'{0}'.format(self.unzip_dir))
|
|
|
|
|
|
|
|
datfile = "{0}/{1}".format(self.unzip_dir, datfilename)
|
|
|
|
binfile = "{0}/{1}".format(self.unzip_dir, binfilename)
|
|
|
|
|
|
|
|
# print "DAT file: " + datfile
|
|
|
|
# print "BIN file: " + binfile
|
|
|
|
|
|
|
|
return binfile, datfile
|
|
|
|
|
|
|
|
#--------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
#--------------------------------------------------------------------------
|
|
|
|
def delete(self):
|
|
|
|
# delete self.unzip_dir and its contents
|
|
|
|
shutil.rmtree(self.unzip_dir)
|