Files @ 44cf81f3b6b8
Branch filter:

Location: Morevna/src/morevna.py

Laman
server can also serve data blocks
import sys
import os.path
from argparse import ArgumentParser

import config as conf
import stats
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)
	if args.host: conf.hosts.insert(0,args.host)
	if args.port: conf.port=args.port

	c=Client(args.datafile)
	blocksToTransfer=c.negotiate()
	c.sendData(blocksToTransfer)
	print()
	print(stats.report())

def serve(args):
	_checkFile(args.datafile)
	if args.tree:
		_checkFile(args.tree)
	if args.host: conf.hosts.insert(0,args.host)
	if args.port: conf.port=args.port

	s=Server(args.datafile,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("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)