Files @ 259f29140f23
Branch filter:

Location: Morevna/src/morevna.py

Laman
server forked into background
import sys
import os.path
from argparse import ArgumentParser

from util import spawnDaemon
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 push(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)
	spawnDaemon(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("push")
pUpdate.add_argument("-p","--port",type=int)
pUpdate.add_argument("--host",default="127.0.0.1")
pUpdate.add_argument("datafile")
pUpdate.set_defaults(func=push)

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)