import sys
import os.path
from argparse import ArgumentParser
from hashtree import HashTree
from client import Client
from server import Server
def _checkFile(f):
if not os.path.isfile(f):
print("invalid file specified:",f,file=sys.stderr)
sys.exit(1)
def buildTree(args):
_checkFile(args.datafile)
tree=HashTree.fromFile(args.datafile)
tree.save(args.treefile)
def update(args):
_checkFile(args.datafile)
c=Client(args.datafile)
blocksToTransfer=c.negotiate()
c.sendData(blocksToTransfer)
def serve(args):
_checkFile(args.datafile)
if args.tree:
_checkFile(args.tree)
# debug copy default file
import shutil
origFilename=args.datafile
filename=origFilename+"_"
shutil.copyfile(origFilename,filename)
s=Server(filename,args.tree)
s.serve()
parser=ArgumentParser()
subparsers=parser.add_subparsers()
pBuild=subparsers.add_parser("build")
pBuild.add_argument("treefile", help="stored hash tree location")
pBuild.add_argument("datafile")
pBuild.set_defaults(func=buildTree)
pUpdate=subparsers.add_parser("update")
pUpdate.add_argument("-p","--port",type=int)
pUpdate.add_argument("--host",default="127.0.0.1")
pUpdate.add_argument("-t","--tree",help="stored hash tree location")
pUpdate.add_argument("datafile")
pUpdate.set_defaults(func=update)
pServe=subparsers.add_parser("serve")
pServe.add_argument("-p","--port",type=int)
pServe.add_argument("--host",default="")
pServe.add_argument("-t","--tree",help="stored hash tree location")
pServe.add_argument("datafile")
pServe.set_defaults(func=serve)
args=parser.parse_args()
args.func(args)