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)