Skip to content

Commit d764c88

Browse files
committed
Update pycatfile.py
1 parent 70df850 commit d764c88

1 file changed

Lines changed: 44 additions & 47 deletions

File tree

pycatfile.py

Lines changed: 44 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -794,7 +794,7 @@ def check_version_number(myversion=__version__, proname=__program_alt_name__, ne
794794
if(platform.python_implementation() != ""):
795795
py_implementation = platform.python_implementation()
796796
if(platform.python_implementation() == ""):
797-
py_implementation = "Python"
797+
py_implementation = "CPython"
798798
geturls_ua_pyfile_python_alt = "Mozilla/5.0 ({osver}; {archtype}; +{prourl}) {pyimp}/{pyver} (KHTML, like Gecko) {proname}/{prover}".format(osver=platform.system(
799799
)+" "+platform.release(), archtype=platform.machine(), prourl=__project_url__, pyimp=py_implementation, pyver=platform.python_version(), proname=__project__, prover=__version__)
800800
geturls_ua_googlebot_google = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
@@ -3681,7 +3681,7 @@ def GetHeaderChecksum(inlist=None, checksumtype="md5", encodedata=True, formatsp
36813681

36823682
return "0"
36833683

3684-
def GetFileChecksum(instr, checksumtype="md5", encodedata=True, formatspecs=__file_format_dict__):
3684+
def GetFileChecksum(inbytes, checksumtype="md5", encodedata=True, formatspecs=__file_format_dict__):
36853685
"""
36863686
Accepts bytes/str/file-like.
36873687
- Hashlib algos: streamed in 1 MiB chunks.
@@ -3691,12 +3691,12 @@ def GetFileChecksum(instr, checksumtype="md5", encodedata=True, formatspecs=__fi
36913691
algo_key = (checksumtype or "md5").lower()
36923692

36933693
# file-like streaming
3694-
if hasattr(instr, "read"):
3694+
if hasattr(inbytes, "read"):
36953695
# hashlib
36963696
if CheckSumSupport(algo_key, hashlib_guaranteed):
36973697
h = hashlib.new(algo_key)
36983698
while True:
3699-
chunk = instr.read(1 << 20)
3699+
chunk = inbytes.read(1 << 20)
37003700
if not chunk:
37013701
break
37023702
if not isinstance(chunk, (bytes, bytearray, memoryview)):
@@ -3705,11 +3705,11 @@ def GetFileChecksum(instr, checksumtype="md5", encodedata=True, formatspecs=__fi
37053705
return h.hexdigest().lower()
37063706

37073707
# not known streaming algo: fallback to one-shot bytes
3708-
data = instr.read()
3708+
data = inbytes.read()
37093709
if not isinstance(data, (bytes, bytearray, memoryview)):
37103710
data = bytes(bytearray(data))
37113711
else:
3712-
data = _to_bytes(instr) if (encodedata or not isinstance(instr, (bytes, bytearray, memoryview))) else instr
3712+
data = _to_bytes(inbytes) if (encodedata or not isinstance(inbytes, (bytes, bytearray, memoryview))) else inbytes
37133713
data = bytes(data)
37143714

37153715
# one-shot
@@ -3757,7 +3757,7 @@ def GetHeaderChecksum(inlist=None, checksumtype="md5", encodedata=True, formatsp
37573757

37583758
return "0"
37593759

3760-
def GetFileChecksum(instr, checksumtype="md5", encodedata=True, formatspecs=__file_format_dict__):
3760+
def GetFileChecksum(inbytes, checksumtype="md5", encodedata=True, formatspecs=__file_format_dict__):
37613761
"""
37623762
Accepts bytes/str/file-like.
37633763
- Hashlib algos: streamed in 1 MiB chunks.
@@ -3767,12 +3767,12 @@ def GetFileChecksum(instr, checksumtype="md5", encodedata=True, formatspecs=__fi
37673767
algo_key = (checksumtype or "md5").lower()
37683768

37693769
# file-like streaming
3770-
if hasattr(instr, "read"):
3770+
if hasattr(inbytes, "read"):
37713771
# hashlib
37723772
if CheckSumSupport(algo_key, hashlib_guaranteed):
37733773
h = hashlib.new(algo_key)
37743774
while True:
3775-
chunk = instr.read(1 << 20)
3775+
chunk = inbytes.read(1 << 20)
37763776
if not chunk:
37773777
break
37783778
if not isinstance(chunk, (bytes, bytearray, memoryview)):
@@ -3781,11 +3781,11 @@ def GetFileChecksum(instr, checksumtype="md5", encodedata=True, formatspecs=__fi
37813781
return h.hexdigest().lower()
37823782

37833783
# not known streaming algo: fallback to one-shot bytes
3784-
data = instr.read()
3784+
data = inbytes.read()
37853785
if not isinstance(data, (bytes, bytearray, memoryview)):
37863786
data = bytes(bytearray(data))
37873787
else:
3788-
data = _to_bytes(instr) if (encodedata or not isinstance(instr, (bytes, bytearray, memoryview))) else instr
3788+
data = _to_bytes(inbytes) if (encodedata or not isinstance(inbytes, (bytes, bytearray, memoryview))) else inbytes
37893789
data = bytes(data)
37903790

37913791
# one-shot
@@ -3862,12 +3862,12 @@ def GetHeaderChecksum(inlist=[], checksumtype="md5", encodedata=True, formatspec
38623862
return format(0, 'x').lower()
38633863

38643864

3865-
def GetFileChecksum(instr, checksumtype="md5", encodedata=True, formatspecs=__file_format_dict__):
3866-
if encodedata and hasattr(instr, "encode"):
3867-
instr = instr.encode('UTF-8')
3865+
def GetFileChecksum(inbytes, checksumtype="md5", encodedata=True, formatspecs=__file_format_dict__):
3866+
if encodedata and hasattr(inbytes, "encode"):
3867+
inbytes = inbytes.encode('UTF-8')
38683868
if CheckSumSupport(checksumtype, hashlib_guaranteed):
38693869
checksumoutstr = hashlib.new(checksumtype)
3870-
checksumoutstr.update(instr)
3870+
checksumoutstr.update(inbytes)
38713871
return checksumoutstr.hexdigest().lower()
38723872
return format(0, 'x').lower()
38733873

@@ -4483,7 +4483,7 @@ def ReadFileHeaderDataWithContentToArray(fp, listonly=False, contentasfile=True,
44834483
cfcontents.close()
44844484
fcontents.seek(0, 0)
44854485
fccs = GetFileChecksum(
4486-
fcontents, HeaderOut[-3].lower(), False, formatspecs)
4486+
fcontents.read(), HeaderOut[-3].lower(), False, formatspecs)
44874487
fcontentend = fp.tell()
44884488
if(re.findall("^\\+([0-9]+)", fseeknextfile)):
44894489
fseeknextasnum = int(fseeknextfile.replace("+", ""))
@@ -4701,9 +4701,7 @@ def ReadFileDataWithContent(fp, filestart=0, listonly=False, uncompress=True, sk
47014701
curloc = filestart
47024702
try:
47034703
fp.seek(0, 2)
4704-
except OSError:
4705-
SeekToEndOfFile(fp)
4706-
except ValueError:
4704+
except (OSError, ValueError):
47074705
SeekToEndOfFile(fp)
47084706
CatSize = fp.tell()
47094707
CatSizeEnd = CatSize
@@ -4752,9 +4750,7 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
47524750
curloc = filestart
47534751
try:
47544752
fp.seek(0, 2)
4755-
except OSError:
4756-
SeekToEndOfFile(fp)
4757-
except ValueError:
4753+
except (OSError, ValueError):
47584754
SeekToEndOfFile(fp)
47594755
CatSize = fp.tell()
47604756
CatSizeEnd = CatSize
@@ -4773,8 +4769,8 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
47734769
else:
47744770
inheader = ReadFileHeaderDataWoSize(
47754771
fp, formatspecs['format_delimiter'])
4776-
fnumextrafieldsize = int(inheader[5], 16)
4777-
fnumextrafields = int(inheader[6], 16)
4772+
fnumextrafieldsize = int(inheader[6], 16)
4773+
fnumextrafields = int(inheader[7], 16)
47784774
fextrafieldslist = []
47794775
extrastart = 7
47804776
extraend = extrastart + fnumextrafields
@@ -4795,7 +4791,8 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
47954791
fnumfields = int(inheader[1], 16)
47964792
fhencoding = inheader[2]
47974793
fostype = inheader[3]
4798-
fnumfiles = int(inheader[4], 16)
4794+
fpythontype = inheader[4]
4795+
fnumfiles = int(inheader[5], 16)
47994796
fprechecksumtype = inheader[-2]
48004797
fprechecksum = inheader[-1]
48014798
headercheck = ValidateHeaderChecksum([formstring] + inheader[:-1], fprechecksumtype, fprechecksum, formatspecs)
@@ -4808,7 +4805,7 @@ def ReadFileDataWithContentToArray(fp, filestart=0, seekstart=0, seekend=0, list
48084805
return False
48094806
formversions = re.search('(.*?)(\\d+)', formstring).groups()
48104807
fcompresstype = ""
4811-
outlist = {'fnumfiles': fnumfiles, 'ffilestart': filestart, 'fformat': formversions[0], 'fcompression': fcompresstype, 'fencoding': fhencoding, 'fversion': formversions[1], 'fostype': fostype, 'fheadersize': fheadsize, 'fsize': CatSizeEnd, 'fnumfields': fnumfields + 2, 'fformatspecs': formatspecs, 'fchecksumtype': fprechecksumtype, 'fheaderchecksum': fprechecksum, 'frawheader': [formstring] + inheader, 'fextrafields': fnumextrafields, 'fextrafieldsize': fnumextrafieldsize, 'fextradata': fextrafieldslist, 'ffilelist': []}
4808+
outlist = {'fnumfiles': fnumfiles, 'ffilestart': filestart, 'fformat': formversions[0], 'fcompression': fcompresstype, 'fencoding': fhencoding, 'fversion': formversions[1], 'fostype': fostype, 'fimptype': fpythontype, 'fheadersize': fheadsize, 'fsize': CatSizeEnd, 'fnumfields': fnumfields + 2, 'fformatspecs': formatspecs, 'fchecksumtype': fprechecksumtype, 'fheaderchecksum': fprechecksum, 'frawheader': [formstring] + inheader, 'fextrafields': fnumextrafields, 'fextrafieldsize': fnumextrafieldsize, 'fextradata': fextrafieldslist, 'ffilelist': []}
48124809
if (seekstart < 0) or (seekstart > fnumfiles):
48134810
seekstart = 0
48144811
if (seekend == 0) or (seekend > fnumfiles) or (seekend < seekstart):
@@ -4909,7 +4906,7 @@ def ReadFileDataWithContentToList(fp, filestart=0, seekstart=0, seekend=0, listo
49094906
curloc = filestart
49104907
try:
49114908
fp.seek(0, 2)
4912-
except (ValueError, OSError):
4909+
except (OSError, ValueError):
49134910
SeekToEndOfFile(fp)
49144911
CatSize = fp.tell()
49154912
CatSizeEnd = CatSize
@@ -5066,7 +5063,7 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
50665063
fp = infile
50675064
try:
50685065
fp.seek(0, 2)
5069-
except (ValueError, OSError):
5066+
except (OSError, ValueError):
50705067
SeekToEndOfFile(fp)
50715068
outfsize = fp.tell()
50725069
fp.seek(filestart, 0)
@@ -5076,7 +5073,7 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
50765073
shutil.copyfileobj(PY_STDIN_BUF, fp, length=__filebuff_size__)
50775074
try:
50785075
fp.seek(0, 2)
5079-
except (ValueError, OSError):
5076+
except (OSError, ValueError):
50805077
SeekToEndOfFile(fp)
50815078
outfsize = fp.tell()
50825079
fp.seek(filestart, 0)
@@ -5086,7 +5083,7 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
50865083
fp.write(infile)
50875084
try:
50885085
fp.seek(0, 2)
5089-
except (ValueError, OSError):
5086+
except (OSError, ValueError):
50905087
SeekToEndOfFile(fp)
50915088
outfsize = fp.tell()
50925089
fp.seek(filestart, 0)
@@ -5095,15 +5092,15 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
50955092
fp = download_file_from_internet_file(infile)
50965093
try:
50975094
fp.seek(0, 2)
5098-
except (ValueError, OSError):
5095+
except (OSError, ValueError):
50995096
SeekToEndOfFile(fp)
51005097
outfsize = fp.tell()
51015098
fp.seek(filestart, 0)
51025099
currentfilepos = fp.tell()
51035100
elif(isinstance(infile, FileLikeAdapter)):
51045101
try:
51055102
fp.seek(0, 2)
5106-
except (ValueError, OSError):
5103+
except (OSError, ValueError):
51075104
SeekToEndOfFile(fp)
51085105
outfsize = fp.tell()
51095106
fp.seek(filestart, 0)
@@ -5113,7 +5110,7 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
51135110
fp = open(infile, "rb")
51145111
try:
51155112
fp.seek(0, 2)
5116-
except (ValueError, OSError):
5113+
except (OSError, ValueError):
51175114
SeekToEndOfFile(fp)
51185115
outfsize = fp.tell()
51195116
fp.seek(filestart, 0)
@@ -5164,7 +5161,7 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
51645161
currentinfilepos = infp.tell()
51655162
try:
51665163
infp.seek(0, 2)
5167-
except (ValueError, OSError):
5164+
except (OSError, ValueError):
51685165
SeekToEndOfFile(infp)
51695166
outinfsize = infp.tell()
51705167
infp.seek(currentinfilepos, 0)
@@ -5203,7 +5200,7 @@ def ReadInFileWithContentToList(infile, fmttype="auto", filestart=0, seekstart=0
52035200
fp = infile
52045201
try:
52055202
fp.seek(0, 2)
5206-
except (ValueError, OSError):
5203+
except (OSError, ValueError):
52075204
SeekToEndOfFile(fp)
52085205
outfsize = fp.tell()
52095206
fp.seek(filestart, 0)
@@ -5213,7 +5210,7 @@ def ReadInFileWithContentToList(infile, fmttype="auto", filestart=0, seekstart=0
52135210
shutil.copyfileobj(PY_STDIN_BUF, fp, length=__filebuff_size__)
52145211
try:
52155212
fp.seek(0, 2)
5216-
except (ValueError, OSError):
5213+
except (OSError, ValueError):
52175214
SeekToEndOfFile(fp)
52185215
outfsize = fp.tell()
52195216
fp.seek(filestart, 0)
@@ -5223,7 +5220,7 @@ def ReadInFileWithContentToList(infile, fmttype="auto", filestart=0, seekstart=0
52235220
fp.write(infile)
52245221
try:
52255222
fp.seek(0, 2)
5226-
except (ValueError, OSError):
5223+
except (OSError, ValueError):
52275224
SeekToEndOfFile(fp)
52285225
outfsize = fp.tell()
52295226
fp.seek(filestart, 0)
@@ -5232,15 +5229,15 @@ def ReadInFileWithContentToList(infile, fmttype="auto", filestart=0, seekstart=0
52325229
fp = download_file_from_internet_file(infile)
52335230
try:
52345231
fp.seek(0, 2)
5235-
except (ValueError, OSError):
5232+
except (OSError, ValueError):
52365233
SeekToEndOfFile(fp)
52375234
outfsize = fp.tell()
52385235
fp.seek(filestart, 0)
52395236
currentfilepos = fp.tell()
52405237
elif(isinstance(infile, FileLikeAdapter)):
52415238
try:
52425239
fp.seek(0, 2)
5243-
except (ValueError, OSError):
5240+
except (OSError, ValueError):
52445241
SeekToEndOfFile(fp)
52455242
outfsize = fp.tell()
52465243
fp.seek(filestart, 0)
@@ -5250,7 +5247,7 @@ def ReadInFileWithContentToList(infile, fmttype="auto", filestart=0, seekstart=0
52505247
fp = open(infile, "rb")
52515248
try:
52525249
fp.seek(0, 2)
5253-
except (ValueError, OSError):
5250+
except (OSError, ValueError):
52545251
SeekToEndOfFile(fp)
52555252
outfsize = fp.tell()
52565253
fp.seek(filestart, 0)
@@ -5301,7 +5298,7 @@ def ReadInFileWithContentToList(infile, fmttype="auto", filestart=0, seekstart=0
53015298
currentinfilepos = infp.tell()
53025299
try:
53035300
infp.seek(0, 2)
5304-
except (ValueError, OSError):
5301+
except (OSError, ValueError):
53055302
SeekToEndOfFile(infp)
53065303
outinfsize = infp.tell()
53075304
infp.seek(currentinfilepos, 0)
@@ -5442,11 +5439,11 @@ def AppendFileHeader(fp,
54425439

54435440
# Preserve your original "tmpoutlen" computation exactly
54445441
tmpoutlist = [extrasizelen, extrafields] # you used this as a separate list
5445-
tmpoutlen = 3 + len(tmpoutlist) + len(xlist) + 2
5442+
tmpoutlen = 4 + len(tmpoutlist) + len(xlist) + 2
54465443
tmpoutlenhex = _hex_lower(tmpoutlen)
54475444

54485445
# Serialize the first group
5449-
fnumfilesa = AppendNullBytes([tmpoutlenhex, fencoding, platform.system(), fnumfiles_hex], delimiter)
5446+
fnumfilesa = AppendNullBytes([tmpoutlenhex, fencoding, platform.system(), py_implementation, fnumfiles_hex], delimiter)
54505447
# Append tmpoutlist
54515448
fnumfilesa += AppendNullBytes(tmpoutlist, delimiter)
54525449
# Append extradata items if any
@@ -9419,19 +9416,19 @@ def CatFileValidate(infile, fmttype="auto", filestart=0,
94199416
else:
94209417
inheader = ReadFileHeaderDataWoSize(fp, formatspecs['format_delimiter'])
94219418

9422-
fnumextrafieldsize = int(inheader[5], 16)
9423-
fnumextrafields = int(inheader[6], 16)
9419+
fnumextrafieldsize = int(inheader[6], 16)
9420+
fnumextrafields = int(inheader[7], 16)
94249421
extrastart = 7
94259422
extraend = extrastart + fnumextrafields
94269423
formversion = re.findall("([\\d]+)", formstring)
94279424
fheadsize = int(inheader[0], 16)
94289425
fnumfields = int(inheader[1], 16)
94299426
fhencoding = inheader[2]
94309427
fostype = inheader[3]
9431-
fnumfiles = int(inheader[4], 16)
9428+
fpythontype = inheader[4]
9429+
fnumfiles = int(inheader[5], 16)
94329430
fprechecksumtype = inheader[-2]
94339431
fprechecksum = inheader[-1]
9434-
94359432
il = 0
94369433
headercheck = ValidateHeaderChecksum([formstring] + inheader[:-1], fprechecksumtype, fprechecksum, formatspecs)
94379434
newfcs = GetHeaderChecksum([formstring] + inheader[:-1], fprechecksumtype, True, formatspecs)

0 commit comments

Comments
 (0)