Skip to content

Commit 414a484

Browse files
committed
Update pyfoxfile.py
1 parent 2a0b17c commit 414a484

File tree

1 file changed

+58
-13
lines changed

1 file changed

+58
-13
lines changed

pyfoxfile.py

Lines changed: 58 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7523,15 +7523,54 @@ def AppendFilesWithContentFromRarFile(infile, fp, extradata=[], jsondata={}, com
75237523
pass
75247524
return fp
75257525

7526+
if(not py7zr_support):
7527+
def sevenzip_readall(infile, **kwargs):
7528+
return False
7529+
else:
7530+
class _MemoryIO(py7zr.Py7zIO):
7531+
"""In-memory file object used by py7zr's factory API."""
7532+
def __init__(self):
7533+
self._buf = bytearray()
7534+
def write(self, data):
7535+
# py7zr will call this repeatedly with chunks
7536+
self._buf.extend(data)
7537+
def read(self, size=None):
7538+
if size is None:
7539+
return bytes(self._buf)
7540+
return bytes(self._buf[:size])
7541+
def seek(self, offset, whence=0):
7542+
# we don't really need seeking for your use case
7543+
return 0
7544+
def flush(self):
7545+
pass
7546+
def size(self):
7547+
return len(self._buf)
7548+
class _MemoryFactory(py7zr.WriterFactory):
7549+
"""Factory that creates _MemoryIO objects and keeps them by filename."""
7550+
def __init__(self):
7551+
self.files = {}
7552+
def create(self, filename: str) -> py7zr.Py7zIO:
7553+
io_obj = _MemoryIO()
7554+
self.files[filename] = io_obj
7555+
return io_obj
7556+
def sevenzip_readall(infile, **kwargs):
7557+
"""
7558+
Replacement for SevenZipFile.readall() using the new py7zr API.
7559+
7560+
Returns: dict[filename -> _MemoryIO]
7561+
"""
7562+
factory = _MemoryFactory()
7563+
with py7zr.SevenZipFile(infile, mode="r", **kwargs) as archive:
7564+
archive.extractall(factory=factory)
7565+
return factory.files
7566+
75267567
if(not py7zr_support):
75277568
def AppendFilesWithContentFromSevenZipFileToList(infile, extradata=[], jsondata={}, contentasfile=False, compression="auto", compresswholefile=True, compressionlevel=None, compressionuselist=compressionlistalt, checksumtype=["md5", "md5", "md5"], formatspecs=__file_format_dict__, saltkey=None, verbose=False):
75287569
return False
75297570
def AppendFilesWithContentFromSevenZipFile(infile, fp, extradata=[], jsondata={}, compression="auto", compresswholefile=True, compressionlevel=None, compressionuselist=compressionlistalt, checksumtype=["md5", "md5", "md5", "md5", "md5"], formatspecs=__file_format_dict__, saltkey=None, verbose=False):
75307571
return False
75317572
else:
7532-
def AppendFilesWithContentFromSevenZipFile(infile, extradata=[], jsondata={}, contentasfile=False, compression="auto", compresswholefile=True, compressionlevel=None, compressionuselist=compressionlistalt, checksumtype=["md5", "md5", "md5"], formatspecs=__file_format_dict__, saltkey=None, verbose=False):
7533-
if(not hasattr(fp, "write")):
7534-
return False
7573+
def AppendFilesWithContentFromSevenZipFileToList(infile, extradata=[], jsondata={}, contentasfile=False, compression="auto", compresswholefile=True, compressionlevel=None, compressionuselist=compressionlistalt, checksumtype=["md5", "md5", "md5"], formatspecs=__file_format_dict__, saltkey=None, verbose=False):
75357574
formver = formatspecs['format_ver']
75367575
fileheaderver = str(int(formver.replace(".", "")))
75377576
curinode = 0
@@ -7543,7 +7582,10 @@ def AppendFilesWithContentFromSevenZipFile(infile, extradata=[], jsondata={}, co
75437582
if(not os.path.exists(infile) or not os.path.isfile(infile)):
75447583
return False
75457584
szpfp = py7zr.SevenZipFile(infile, mode="r")
7546-
file_content = szpfp.readall()
7585+
try:
7586+
file_content = szpfp.readall()
7587+
except AttributeError:
7588+
file_content = sevenzip_readall(infile)
75477589
#sztest = szpfp.testzip()
75487590
sztestalt = szpfp.test()
75497591
if(sztestalt):
@@ -7566,14 +7608,8 @@ def AppendFilesWithContentFromSevenZipFile(infile, extradata=[], jsondata={}, co
75667608
fcsize = format(int(0), 'x').lower()
75677609
flinkcount = 0
75687610
fblksize = 0
7569-
if(hasattr(fstatinfo, "st_blksize")):
7570-
fblksize = format(int(fstatinfo.st_blksize), 'x').lower()
75717611
fblocks = 0
7572-
if(hasattr(fstatinfo, "st_blocks")):
7573-
fblocks = format(int(fstatinfo.st_blocks), 'x').lower()
75747612
fflags = 0
7575-
if(hasattr(fstatinfo, "st_flags")):
7576-
fflags = format(int(fstatinfo.st_flags), 'x').lower()
75777613
ftype = 0
75787614
if(member.is_directory):
75797615
ftype = 5
@@ -7640,7 +7676,10 @@ def AppendFilesWithContentFromSevenZipFile(infile, extradata=[], jsondata={}, co
76407676
typechecktest = CheckCompressionType(fcontents, filestart=0, closefp=False)
76417677
fcontents.seek(0, 0)
76427678
fcencoding = GetFileEncoding(fcontents, 0, False)[0]
7643-
file_content[member.filename].close()
7679+
try:
7680+
file_content[member.filename].close()
7681+
except AttributeError:
7682+
pass
76447683
if(typechecktest is False and not compresswholefile):
76457684
fcontents.seek(0, 2)
76467685
ucfsize = fcontents.tell()
@@ -11915,7 +11954,10 @@ def SevenZipFileListFiles(infile, verbose=False, returnfp=False):
1191511954
lcfi = 0
1191611955
returnval = {}
1191711956
szpfp = py7zr.SevenZipFile(infile, mode="r")
11918-
file_content = szpfp.readall()
11957+
try:
11958+
file_content = szpfp.readall()
11959+
except AttributeError:
11960+
file_content = sevenzip_readall(infile)
1191911961
#sztest = szpfp.testzip()
1192011962
sztestalt = szpfp.test()
1192111963
if(sztestalt):
@@ -11959,7 +12001,10 @@ def SevenZipFileListFiles(infile, verbose=False, returnfp=False):
1195912001
printfname = member.filename
1196012002
if(ftype == 0):
1196112003
fsize = len(file_content[member.filename].read())
11962-
file_content[member.filename].close()
12004+
try:
12005+
file_content[member.filename].close()
12006+
except AttributeError:
12007+
pass
1196312008
try:
1196412009
fuid = int(os.getuid())
1196512010
except (KeyError, AttributeError):

0 commit comments

Comments
 (0)