Files @ 6c8e994fd906
Branch filter:

Location: Morevna/src/morevna.py

Laman
using just one socket, server saving memory when not serving
import sys
import os.path
import logging as log
from argparse import ArgumentParser

from util import spawnDaemon
import config as conf
import stats
from hashtree import HashTree
from client import Client, Connection as ClientConnection
from server import Miniserver


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)
	with ClientConnection() as con:
		c.setConnection(con)
		blocksToTransfer=c.negotiate()
		c.sendData(blocksToTransfer)
	print()
	print(stats.report())

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

	c=Client(args.datafile)
	with ClientConnection() as con:
		c.setConnection(con)
		blocksToTransfer=c.negotiate()
		c.pullData(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=Miniserver(args.datafile,args.tree)
	try:
		spawnDaemon(s.serve)
	except Exception as e:
		log.exception("exception: %s",e)


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)

pUpdate=subparsers.add_parser("pull")
pUpdate.add_argument("-p","--port",type=int)
pUpdate.add_argument("--host",default="127.0.0.1")
pUpdate.add_argument("datafile")
pUpdate.set_defaults(func=pull)

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)