Files
@ 5c80ca07f00c
Branch filter:
Location: Morevna/src/netnode.py - annotation
5c80ca07f00c
1.5 KiB
text/x-python
reformatted whitespace with more respect for PEP-8
362cff560740 75e070b6b447 75e070b6b447 75e070b6b447 362cff560740 75e070b6b447 75e070b6b447 75e070b6b447 75e070b6b447 5c80ca07f00c 362cff560740 362cff560740 02ea4fed2520 362cff560740 ccbe369ce439 02ea4fed2520 02ea4fed2520 75e070b6b447 75e070b6b447 5c80ca07f00c 5c80ca07f00c 5c80ca07f00c 75e070b6b447 75e070b6b447 5c80ca07f00c 5c80ca07f00c 75e070b6b447 5c80ca07f00c 5c80ca07f00c 75e070b6b447 75e070b6b447 5c80ca07f00c 75e070b6b447 75e070b6b447 095908159393 095908159393 095908159393 095908159393 9f2b0a4f3538 75e070b6b447 75e070b6b447 75e070b6b447 5c80ca07f00c 5c80ca07f00c 5c80ca07f00c 75e070b6b447 5c80ca07f00c 5c80ca07f00c 75e070b6b447 75e070b6b447 5c80ca07f00c 75e070b6b447 5c80ca07f00c 75e070b6b447 5c80ca07f00c 75e070b6b447 362cff560740 362cff560740 362cff560740 362cff560740 362cff560740 5c80ca07f00c 362cff560740 362cff560740 362cff560740 362cff560740 362cff560740 362cff560740 362cff560740 75e070b6b447 75e070b6b447 bacd3b2d37aa 75e070b6b447 68becf4f98c2 | import os
import socket
import logging as log
import config as conf
from networkers import NetworkReader,NetworkWriter
from hashtree import HashTree
lockFile = os.path.join(conf.directory,"dirty.lock")
class FailedConnection(Exception): pass
class LockedException(Exception): pass
class IncompatibleException(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 isLocked(self):
return os.path.isfile(lockFile)
def _lock(self):
try:
f = open(lockFile,"x")
f.close()
except FileExistsError:
raise LockedException()
def _unlock(self):
os.remove(lockFile)
def _updateTree(self):
log.info("updating hash tree...")
self._tree.batchUpdate(self._newLeaves.items())
self._tree.save(self._treeFile)
log.info("tree updated")
|