it works again (and inodes now reference the TangleFileTreeElement of their parent)
This commit is contained in:
parent
0e1826d282
commit
c0e3c81231
126
next.py
126
next.py
@ -49,61 +49,6 @@ class Atom():
|
|||||||
else:
|
else:
|
||||||
return msgpack.dumps([False, self.name, self.cont])
|
return msgpack.dumps([False, self.name, self.cont])
|
||||||
|
|
||||||
class Inode():
|
|
||||||
def __init__(self, name: str, iotaApi: Iota, type: str = None) -> None:
|
|
||||||
self.name = name
|
|
||||||
self.type = type
|
|
||||||
self.ref = None
|
|
||||||
self.iotaApi = iotaApi
|
|
||||||
|
|
||||||
def setType(self, type: str) -> None:
|
|
||||||
self.type = type
|
|
||||||
|
|
||||||
def change(self, size: int=None, hash: int=None, milestoneIndex: int=None) -> Atom:
|
|
||||||
delta = {}
|
|
||||||
if size!=None:
|
|
||||||
self.size = size
|
|
||||||
delta[b's'] = size
|
|
||||||
if size!=None:
|
|
||||||
self.size = hash
|
|
||||||
delta[b'h'] = hash
|
|
||||||
if milestoneIndex!=None:
|
|
||||||
self.milestoneIndex = milestoneIndex
|
|
||||||
delta[b'm'] = milestoneIndex
|
|
||||||
return Atom(False, delta, self.name)
|
|
||||||
|
|
||||||
def applyAtom(self, atom: Atom) -> None:
|
|
||||||
if atom.name != self.name:
|
|
||||||
raise Exception("Cannot apply atom ment for a different inode (names differ)")
|
|
||||||
if atom.milestone:
|
|
||||||
stones = atom.cont
|
|
||||||
if self.name in stones:
|
|
||||||
self.applyAtom(Atom(False, stones[self.name], self.name))
|
|
||||||
else:
|
|
||||||
delta = atom.cont
|
|
||||||
if b's' in delta:
|
|
||||||
self.size = delta[b's']
|
|
||||||
if b'm' in delta:
|
|
||||||
self.milestoneIndex = delta[b'm']
|
|
||||||
|
|
||||||
def toStone(self) -> None:
|
|
||||||
if self.type=="file":
|
|
||||||
return [self.size, self.hash]
|
|
||||||
else:
|
|
||||||
return [self.milestoneIndex]
|
|
||||||
|
|
||||||
def getRef(self):
|
|
||||||
if self.name == "*":
|
|
||||||
return None
|
|
||||||
if not self.ref:
|
|
||||||
if self.type=="dir":
|
|
||||||
self.elem = TangleFileTreeElement(self.name, self.milestoneIndex, self, self.iotaApi)
|
|
||||||
elif self.type=="file":
|
|
||||||
self.ref = TangleFile(self.name, self, self.api)
|
|
||||||
else:
|
|
||||||
raise Exception("Cannot get reference of an inode of type "+self.type)
|
|
||||||
return self.ref
|
|
||||||
|
|
||||||
class BlobChunk():
|
class BlobChunk():
|
||||||
def __init__(self, data: bytes = b'', sealed: bool = False) -> None:
|
def __init__(self, data: bytes = b'', sealed: bool = False) -> None:
|
||||||
self.data = data
|
self.data = data
|
||||||
@ -250,7 +195,7 @@ class TangleFileTreeElement(TangleBlob):
|
|||||||
if isinstance(parent, bytes):
|
if isinstance(parent, bytes):
|
||||||
self.token = hashlib.sha3_384(parent + name.encode()).digest()
|
self.token = hashlib.sha3_384(parent + name.encode()).digest()
|
||||||
else:
|
else:
|
||||||
self.token = hashlib.sha3_384(parent.getRef().token + name.encode()).digest()
|
self.token = hashlib.sha3_384(parent.token + name.encode()).digest()
|
||||||
super(TangleFileTreeElement, self).__init__(self.token, iotaApi)
|
super(TangleFileTreeElement, self).__init__(self.token, iotaApi)
|
||||||
self.name = name
|
self.name = name
|
||||||
self.inodes = {}
|
self.inodes = {}
|
||||||
@ -309,7 +254,7 @@ class TangleFileTreeElement(TangleBlob):
|
|||||||
self._requireFetched()
|
self._requireFetched()
|
||||||
if name in self.getNameList():
|
if name in self.getNameList():
|
||||||
return False
|
return False
|
||||||
inode = Inode(name, self.iotaApi, "dir")
|
inode = Inode(name, self.iotaApi, self, "dir")
|
||||||
atom = inode.change(milestoneIndex=0)
|
atom = inode.change(milestoneIndex=0)
|
||||||
self._newAtom(atom)
|
self._newAtom(atom)
|
||||||
self.inodes[name] = inode
|
self.inodes[name] = inode
|
||||||
@ -382,6 +327,62 @@ class TangleFile():
|
|||||||
self.size = self.blob.getSize()
|
self.size = self.blob.getSize()
|
||||||
self.parent._updateFileToken(self.name, self.token, self.size)
|
self.parent._updateFileToken(self.name, self.token, self.size)
|
||||||
|
|
||||||
|
class Inode():
|
||||||
|
def __init__(self, name: str, iotaApi: Iota, parent: TangleFileTreeElement = None, type: str = None) -> None:
|
||||||
|
self.parent = parent
|
||||||
|
self.name = name
|
||||||
|
self.type = type
|
||||||
|
self.ref = None
|
||||||
|
self.iotaApi = iotaApi
|
||||||
|
|
||||||
|
def setType(self, type: str) -> None:
|
||||||
|
self.type = type
|
||||||
|
|
||||||
|
def change(self, size: int=None, hash: int=None, milestoneIndex: int=None) -> Atom:
|
||||||
|
delta = {}
|
||||||
|
if size!=None:
|
||||||
|
self.size = size
|
||||||
|
delta[b's'] = size
|
||||||
|
if size!=None:
|
||||||
|
self.size = hash
|
||||||
|
delta[b'h'] = hash
|
||||||
|
if milestoneIndex!=None:
|
||||||
|
self.milestoneIndex = milestoneIndex
|
||||||
|
delta[b'm'] = milestoneIndex
|
||||||
|
return Atom(False, delta, self.name)
|
||||||
|
|
||||||
|
def applyAtom(self, atom: Atom) -> None:
|
||||||
|
if atom.name != self.name:
|
||||||
|
raise Exception("Cannot apply atom ment for a different inode (names differ)")
|
||||||
|
if atom.milestone:
|
||||||
|
stones = atom.cont
|
||||||
|
if self.name in stones:
|
||||||
|
self.applyAtom(Atom(False, stones[self.name], self.name))
|
||||||
|
else:
|
||||||
|
delta = atom.cont
|
||||||
|
if b's' in delta:
|
||||||
|
self.size = delta[b's']
|
||||||
|
if b'm' in delta:
|
||||||
|
self.milestoneIndex = delta[b'm']
|
||||||
|
|
||||||
|
def toStone(self) -> None:
|
||||||
|
if self.type=="file":
|
||||||
|
return [self.size, self.hash]
|
||||||
|
else:
|
||||||
|
return [self.milestoneIndex]
|
||||||
|
|
||||||
|
def getRef(self):
|
||||||
|
if self.name == "*":
|
||||||
|
return None
|
||||||
|
if not self.ref:
|
||||||
|
if self.type=="dir":
|
||||||
|
self.elem = TangleFileTreeElement(self.name, self.milestoneIndex, self.parent, self.iotaApi)
|
||||||
|
elif self.type=="file":
|
||||||
|
self.ref = TangleFile(self.name, self, self.api)
|
||||||
|
else:
|
||||||
|
raise Exception("Cannot get reference of an inode of type "+self.type)
|
||||||
|
return self.ref
|
||||||
|
|
||||||
class IotaFs():
|
class IotaFs():
|
||||||
def __init__(self, token) -> None:
|
def __init__(self, token) -> None:
|
||||||
self.api = Iota('https://nodes.thetangle.org:443', local_pow=True)
|
self.api = Iota('https://nodes.thetangle.org:443', local_pow=True)
|
||||||
@ -405,9 +406,8 @@ class IotaFs():
|
|||||||
def createNewFile(self, name) -> None:
|
def createNewFile(self, name) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def main():
|
api = Iota('https://nodes.thetangle.org:443', local_pow=True)
|
||||||
api = Iota('https://nodes.thetangle.org:443', local_pow=True)
|
token = b'testToken'
|
||||||
token = b'testToken'
|
genesis = TangleFileTreeElement("*", 0, token, api)
|
||||||
genesis = TangleFileTreeElement("*", 0, token, api)
|
genesis.mkdir("/")
|
||||||
genesis.mkdir("/")
|
root = genesis.inodes["/"].getRef()
|
||||||
root = genesis.inodes["/"].getRef()
|
|
||||||
|
Loading…
Reference in New Issue
Block a user