1
0
mirror of https://github.com/mon/ifstools.git synced 2025-02-20 03:51:14 +01:00

Python 2 compatibility

This commit is contained in:
Will Toohey 2017-12-27 12:19:32 +10:00
parent 9371df11c3
commit 7d1e389b02
8 changed files with 43 additions and 18 deletions

3
.gitignore vendored
View File

@ -1 +1,4 @@
__pycache__/ __pycache__/
*.ifs
*_ifs
*.pyc

View File

@ -6,7 +6,7 @@ import lxml.etree as etree
from . import get_folder_handlers, escapes from . import get_folder_handlers, escapes
from .GenericFile import GenericFile from .GenericFile import GenericFile
class GenericFolder(): class GenericFolder(object):
def __init__(self, ifs, name, time, files, folders): def __init__(self, ifs, name, time, files, folders):
self.ifs = ifs self.ifs = ifs

View File

@ -2,6 +2,7 @@ from io import BytesIO
from struct import unpack, pack from struct import unpack, pack
from os.path import getmtime, isfile, join, dirname from os.path import getmtime, isfile, join, dirname
from os import utime, mkdir from os import utime, mkdir
import errno
from PIL import Image from PIL import Image
import lxml.etree as etree import lxml.etree as etree
@ -23,7 +24,7 @@ dxt5_end = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + \
class ImageFile(GenericFile): class ImageFile(GenericFile):
def __init__(self, gen_file, image_elem, fmt, compress): def __init__(self, gen_file, image_elem, fmt, compress):
super().__init__(gen_file.ifs, gen_file.path, super(ImageFile, self).__init__(gen_file.ifs, gen_file.path,
gen_file.name + '.png', gen_file.time, gen_file.name + '.png', gen_file.time,
gen_file.start, gen_file.size) gen_file.start, gen_file.size)
self._packed_name = gen_file._packed_name self._packed_name = gen_file._packed_name
@ -46,7 +47,7 @@ class ImageFile(GenericFile):
raise Exception('ImageFile must be instantiated from existing element') raise Exception('ImageFile must be instantiated from existing element')
def _load_from_ifs(self, convert_kbin = False): def _load_from_ifs(self, convert_kbin = False):
data = super()._load_from_ifs() data = super(ImageFile, self)._load_from_ifs()
if self.compress == 'avslz': if self.compress == 'avslz':
uncompressed_size = unpack('>I', data[:4])[0] uncompressed_size = unpack('>I', data[:4])[0]
@ -137,8 +138,17 @@ class ImageFile(GenericFile):
return data return data
def _mkdir(self, dir): def _mkdir(self, dir):
try: try: # python 3
mkdir(dir) try:
except FileExistsError: mkdir(dir)
pass except FileExistsError:
pass
except NameError: # python 2
try:
mkdir(dir)
except OSError as e:
if e.errno == errno.EEXIST:
pass
else:
raise

View File

@ -7,7 +7,7 @@ from . import GenericFolder
class MD5Folder(GenericFolder): class MD5Folder(GenericFolder):
def __init__(self, ifs, name, time, files, folders): def __init__(self, ifs, name, time, files, folders):
super().__init__(ifs, name, time, files, folders) super(MD5Folder, self).__init__(ifs, name, time, files, folders)
for filename, file in self.files.items(): for filename, file in self.files.items():
if filename.endswith('.xml'): if filename.endswith('.xml'):
@ -20,13 +20,13 @@ class MD5Folder(GenericFolder):
@classmethod @classmethod
def from_xml(cls, ifs, element, name = '', md5_tag = None, extension = None): def from_xml(cls, ifs, element, name = '', md5_tag = None, extension = None):
self = super().from_xml(ifs, element, name) self = super(MD5Folder, cls).from_xml(ifs, element, name)
self._apply_md5(md5_tag, extension) self._apply_md5(md5_tag, extension)
return self return self
@classmethod @classmethod
def from_filesystem(cls, ifs, tree, name = '', md5_tag = None, extension = None): def from_filesystem(cls, ifs, tree, name = '', md5_tag = None, extension = None):
self = super().from_filesystem(ifs, tree, name) self = super(MD5Folder, cls).from_filesystem(ifs, tree, name)
self._apply_md5(md5_tag, extension) self._apply_md5(md5_tag, extension)
return self return self

View File

@ -2,18 +2,18 @@ from . import MD5Folder, GenericFile, ImageFile
class TexFolder(MD5Folder): class TexFolder(MD5Folder):
def __init__(self, ifs, name, time, files, folders): def __init__(self, ifs, name, time, files, folders):
super().__init__(ifs, name, time, files, folders) super(TexFolder, self).__init__(ifs, name, time, files, folders)
self.compress = self.info_kbin.xml_doc.attrib.get('compress') self.compress = self.info_kbin.xml_doc.attrib.get('compress')
@classmethod @classmethod
def from_xml(cls, ifs, element, name = ''): def from_xml(cls, ifs, element, name = ''):
self = super().from_xml(ifs, element, name, 'image', '.png') self = super(TexFolder, cls).from_xml(ifs, element, name, 'image', '.png')
self._create_images() self._create_images()
return self return self
@classmethod @classmethod
def from_filesystem(cls, ifs, tree, name = ''): def from_filesystem(cls, ifs, tree, name = ''):
self = super().from_filesystem(ifs, tree, name, 'image', '.png') self = super(TexFolder, cls).from_filesystem(ifs, tree, name, 'image', '.png')
self._create_images() self._create_images()
return self return self

View File

@ -17,7 +17,8 @@ def decompress(input):
decompressed = bytearray() decompressed = bytearray()
while True: while True:
flag = input.read(1)[0] # wrap in bytes for py2
flag = bytes(input.read(1))[0]
for i in range(8): for i in range(8):
if (flag >> i) & 1 == 1: if (flag >> i) & 1 == 1:
decompressed.append(input.read(1)[0]) decompressed.append(input.read(1)[0])

View File

@ -1,5 +1,6 @@
from os.path import basename, dirname, splitext, join, isdir, isfile, getmtime from os.path import basename, dirname, splitext, join, isdir, isfile, getmtime
from os import mkdir, utime, walk from os import mkdir, utime, walk
import errno
from io import BytesIO from io import BytesIO
import hashlib import hashlib
import lxml.etree as etree import lxml.etree as etree
@ -181,10 +182,19 @@ class IFS:
utime(outdir, (timestamp, timestamp)) utime(outdir, (timestamp, timestamp))
def _mkdir(self, dir): def _mkdir(self, dir):
try: try: # python 3
mkdir(dir) try:
except FileExistsError: mkdir(dir)
pass except FileExistsError:
pass
except NameError: # python 2
try:
mkdir(dir)
except OSError as e:
if e.errno == errno.EEXIST:
pass
else:
raise
def load_file(self, start, size): def load_file(self, start, size):
start = self.header_end+start start = self.header_end+start

View File

@ -1,4 +1,5 @@
lxml lxml
tqdm tqdm
pillow pillow
future
git+https://github.com/mon/kbinxml.git git+https://github.com/mon/kbinxml.git