Beispiel #1
0
    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)
Beispiel #2
0
 def sync(self, data):
     self.seek(0)
     self.truncate()
     for i in self.deque:
         Inode.write(self, i)
Beispiel #3
0
 def __init__(self, name, parent, maxlen=30):
     Inode.__init__(self, name, parent)
     self.deque = deque(maxlen=maxlen)
Beispiel #4
0
 def remove(self, inode):
     if inode.name in self.static_names:
         del self.static_names[inode.name]
     return Inode.remove(self, inode)
Beispiel #5
0
 def create(self, name, mode=0, klass=None, **kwarg):
     if not kwarg.get('is_internal', False):
         klass = Inode
         self.static_names[name] = (mode, klass, kwarg)
     return Inode.create(self, name, mode, klass, **kwarg)
Beispiel #6
0
 def sync(self, data):
     self.seek(0)
     self.truncate()
     for i in self.deque:
         Inode.write(self, i)
Beispiel #7
0
 def __init__(self, name, parent, maxlen=30):
     Inode.__init__(self, name, parent)
     self.deque = deque(maxlen=maxlen)