mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-04-13 05:43:03 +00:00
pyfec: add utility functions to encode into a bunch of temp files and to decode from a bunch of tempfiles
This commit is contained in:
parent
fd8ebcaf6d
commit
f377f0e466
@ -24,6 +24,43 @@ import fec
|
||||
|
||||
import array
|
||||
|
||||
def encode_to_files(inf, prefix, k, m):
|
||||
"""
|
||||
Encode inf, writing the shares to named $prefix+$shareid.
|
||||
"""
|
||||
l = [ open(prefix+str(shareid), "wb") for shareid in range(m) ]
|
||||
def cb(shares, len):
|
||||
assert len(shares) == len(l)
|
||||
for i in range(len(shares)):
|
||||
l.write(share)
|
||||
|
||||
encode_file(inf, cb, k, m, chunksize=4096)
|
||||
|
||||
def decode_from_files(outf, prefix, k, m):
|
||||
"""
|
||||
Decode from the first k files in the current directory whose names begin
|
||||
with prefix, writing the results to outf.
|
||||
"""
|
||||
import os
|
||||
infs = []
|
||||
shareids = []
|
||||
for f in os.listdir("."):
|
||||
if f.startswith(prefix):
|
||||
infs.append(open(f, "rb"))
|
||||
shareids.append(int(f[len(prefix):]))
|
||||
if len(infs) == k:
|
||||
break
|
||||
|
||||
CHUNKSIZE = 4096
|
||||
dec = fec.Decoder(k, m)
|
||||
while True:
|
||||
x = [ inf.read(CHUNKSIZE) for inf in infs ]
|
||||
decshares = dec.decode(x, shareids)
|
||||
for decshare in decshares:
|
||||
outf.write(decshare)
|
||||
if len(x[-1]) != CHUNKSIZE:
|
||||
break
|
||||
|
||||
def encode_file(inf, cb, k, m, chunksize=4096):
|
||||
"""
|
||||
Read in the contents of inf, encode, and call cb with the results.
|
||||
|
Loading…
x
Reference in New Issue
Block a user