From: Zooko O'Whielacronx Date: Sat, 27 Jan 2007 03:15:27 +0000 (-0700) Subject: pyfec: add utility functions to encode into a bunch of temp files and to decode from... X-Git-Tag: tahoe_v0.1.0-0-UNSTABLE~305 X-Git-Url: https://git.rkrishnan.org/specifications/vdrive/global?a=commitdiff_plain;h=f377f0e4660b877ca56416e6afd73a7223bb8816;p=tahoe-lafs%2Ftahoe-lafs.git pyfec: add utility functions to encode into a bunch of temp files and to decode from a bunch of tempfiles --- diff --git a/pyfec/fec/filefec.py b/pyfec/fec/filefec.py index ccc2364e..72a15adb 100644 --- a/pyfec/fec/filefec.py +++ b/pyfec/fec/filefec.py @@ -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.