import sys
import os.path
from argparse import ArgumentParser
from hashtree import HashTree
from client import Client
from server import Server
def _checkDatafile(datafile):
if not os.path.isfile(datafile):
print("invalid file specified:",args.datafile,file=sys.stderr)
sys.exit(1)
def buildTree(args):
_checkDatafile(args.datafile)
tree=HashTree.fromFile(args.datafile)
tree.save(args.treefile)
def update(args):
_checkDatafile(args.datafile)
c=Client(args.datafile)
blocksToTransfer=c.negotiate()
c.sendData(blocksToTransfer)
def serve(args):
_checkDatafile(args.datafile)
# debug copy default file
import shutil
origFilename=args.datafile
filename=origFilename+"_"
shutil.copyfile(origFilename,filename)
s=Server(filename)
s.serve()
parser=ArgumentParser()
subparsers=parser.add_subparsers()
pRebuild=subparsers.add_parser("build")
pRebuild.add_argument("treefile",help="stored hash tree location")
pRebuild.add_argument("datafile")
pRebuild.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)