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:
parent
9371df11c3
commit
7d1e389b02
3
.gitignore
vendored
3
.gitignore
vendored
@ -1 +1,4 @@
|
|||||||
__pycache__/
|
__pycache__/
|
||||||
|
*.ifs
|
||||||
|
*_ifs
|
||||||
|
*.pyc
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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])
|
||||||
|
18
ifstools.py
18
ifstools.py
@ -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
|
||||||
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user