def __init__(self, name, parent=None, mode=0, storage=None, obj=None, root=None, **kwarg): # original mode -- may be a function that returns the mode self.orig_mode = mode # result real mode self.mode = self.__class__.get_mode(obj, self.orig_mode, **kwarg) # pass only resulting mode to the VFS layer, it has nothing to do # with callables Inode.__init__(self, name, parent=parent, mode=self.mode, storage=storage, **kwarg) if hasattr(self.parent, "stack"): self.stack = self.parent.stack else: self.stack = {} self.kwarg = kwarg self.root = root self.blacklist = None self.blacklist = kwarg.get("blacklist", None) or \ self.parent.blacklist self.name_template = kwarg.get('name_template', None) if isinstance(self.blacklist, List) and self.name in self.blacklist: self.destroy() raise Eperm() # force self.observe, bypass property setter self.__observe = None cycle_detect = kwarg.get("cycle_detect", "symlink") self.static_names = {} # create the hook to the object only on the object root vInode try: if self.root: self.observe = obj self.stack[id(self.observe)] = self else: # cycle links detection if cycle_detect != "none" and self.mode & stat.S_IFDIR: self._check_cycle() except Eexist as e: if cycle_detect == "symlink": self.write(self.relative_path(e.target.absolute_path())) e.target.cleanup[str(id(self))] = (self.storage.destroy, (self,)) self.mode = stat.S_IFLNK else: self.destroy() raise e except Exception as e: self.destroy() raise e if (self.mode & stat.S_IFDIR) and kwarg.get("repr", True): self.children[".repr"] = vRepr(".repr", self)
def __init__(self, name, parent, maxlen=30): Inode.__init__(self, name, parent) self.deque = deque(maxlen=maxlen)