Files @ 02ea4fed2520
Branch filter:

Location: Morevna/src/netnode.py - annotation

Laman
fixes, error handling
import socket
import logging as log

from networkers import NetworkReader,NetworkWriter
from hashtree import HashTree


class FailedConnection(Exception): pass


class BaseConnection: # abstract
	def __init__(self):
		self._socket=None
		self.incoming=None
		self.outcoming=None

	def createNetworkers(self):
		fr=self._socket.makefile(mode="rb")
		fw=self._socket.makefile(mode="wb")

		self.incoming=NetworkReader(fr)
		self.outcoming=NetworkWriter(fw)

	def __enter__(self):
		return self.incoming,self.outcoming

	def __exit__(self, exc_type, exc_val, exc_tb):
		try:
			self._socket.shutdown(socket.SHUT_RDWR)
			self._socket.close()
		except OSError:
			log.warning("broken connection")


class NetNode:
	def __init__(self,filename,treeFile=""):
		self._incoming=None
		self._outcoming=None

		self._filename=filename
		self._treeFile=treeFile

		if treeFile:
			self._tree=HashTree.load(treeFile)
		else:
			self._tree=HashTree.fromFile(filename)

		self._newLeaves=dict()

	def _updateTree(self):
		log.info("updating hash tree...")
		for (k,v) in self._newLeaves.items():
			self._tree.updateLeaf(k, v)
		self._tree.save(self._treeFile)