Files @ 6686770e5fe6
Branch filter:

Location: Morevna/src/morevna.py - annotation

Laman
simple shell backup script
import sys
import os.path
from argparse import ArgumentParser

import config as conf
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)

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

	# 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("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)