Exemplo n.º 1
0
 def create_dir(self, nodeid, filename):
     """Create directory within node"""
     node = self._nodes.get(nodeid)
     if node is None:
         raise connlib.UnknownNode()
     if not filename.endswith("/"):
         raise connlib.FileError()
     node.files[filename] = None
Exemplo n.º 2
0
 def get_rootid(self):
     """Returns nodeid of notebook root node"""
     # GET /
     self._request('GET', format_node_path(self._prefix))
     result = self._conn.getresponse()
     if result.status == httplib.OK:
         return plist.load(result)
     else:
         raise connlib.UnknownNode()
Exemplo n.º 3
0
 def delete_file(self, nodeid, filename):
     """Delete a file contained within a node"""
     node = self._nodes.get(nodeid)
     if node is None:
         raise connlib.UnknownNode()
     try:
         del node.files[filename]
     except:
         raise connlib.UnknownFile()
Exemplo n.º 4
0
    def delete_node(self, nodeid):

        self._request('DELETE', format_node_path(self._prefix, nodeid))
        result = self._conn.getresponse()
        if result.status == httplib.NOT_FOUND:
            raise connlib.UnknownNode()
        elif result.status != httplib.OK:
            raise connlib.ConnectionError()
        self._title_cache.remove(nodeid)
Exemplo n.º 5
0
    def update_node(self, nodeid, attr):

        body_content = self.dumps_data(attr).encode("utf8")
        self._request('PUT', format_node_path(self._prefix, nodeid),
                      body_content)
        result = self._conn.getresponse()
        if result.status == httplib.NOT_FOUND:
            raise connlib.UnknownNode()
        elif result.status != httplib.OK:
            raise connlib.ConnectionError()
        self._title_cache.update_attr(attr)
Exemplo n.º 6
0
    def create_dir(self, nodeid, filename):
        """Create directory within node"""
        node = self._nodes.get(nodeid)
        if node is None:
            raise connlib.UnknownNode()
        if not filename.endswith("/"):
            raise connlib.FileError()

        # Create all directory parts.
        parts = filename.split("/")
        for i in range(len(parts) - 1):
            node.files["/".join(parts[:i + 1]) + "/"] = None
Exemplo n.º 7
0
 def list_dir(self, nodeid, filename="/"):
     """
     List data files in node
     """
     node = self._nodes.get(nodeid)
     if node is None:
         raise connlib.UnknownNode()
     if not filename.endswith("/"):
         raise connlib.FileError()
     files = [
         f for f in node.files.iterkeys()
         if f.startswith(filename) and f != filename
     ]
Exemplo n.º 8
0
    def read_node(self, nodeid):

        self._request('GET', format_node_path(self._prefix, nodeid))
        result = self._conn.getresponse()
        if result.status == httplib.OK:
            try:
                attr = plist.load(result)
                self._title_cache.update_attr(attr)
                return attr
            except Exception as e:
                raise connlib.ConnectionError("unexpected error '%s'" % str(e),
                                              e)
        else:
            raise connlib.UnknownNode(nodeid)
Exemplo n.º 9
0
    def get_rootid(self):
        """Returns nodeid of notebook root node"""
        # GET /
        self._request('GET', format_node_path(self._prefix))
        result = self._conn.getresponse()

        if result.status == httplib.NOT_FOUND:
            raise connlib.UnknownNode()
        if result.status != httplib.OK:
            raise connlib.ConnectionError()

        # Currently only the first rootid is returned.
        data = self.load_data(result)
        rootid = data['rootids'][0]
        return rootid
Exemplo n.º 10
0
    def open_file(self, nodeid, filename, mode="r", codec=None):
        """
        Open a file contained within a node

        nodeid   -- node to open a file from
        filename -- filename of file to open
        mode     -- can be "r" (read), "w" (write), "a" (append)
        codec    -- read or write with an encoding (default: None)
        """
        node = self._nodes.get(nodeid)
        if node is None:
            raise connlib.UnknownNode()
        if filename.endswith("/"):
            raise connlib.FileError()
        stream = node.files.get(filename)
        if stream is None:
            stream = node.files[filename] = File()
        else:
            stream.reopen()
        return stream
Exemplo n.º 11
0
    def list_dir(self, nodeid, filename="/"):
        """
        List data files in node
        """
        node = self._nodes.get(nodeid)
        if node is None:
            raise connlib.UnknownNode()
        if not filename.endswith("/"):
            raise connlib.FileError()

        seen = set()
        for name in node.files.iterkeys():
            if name.startswith(filename) and name != filename:
                part = name[len(filename):]
                index = part.find('/')
                if index >= 0:
                    # Do not list files within directory.
                    part = part[:index + 1]
                fullname = filename + part
                if fullname not in seen:
                    yield fullname
                    seen.add(fullname)
Exemplo n.º 12
0
 def update_node(self, nodeid, attr):
     """Write node attr"""
     node = self._nodes.get(nodeid)
     if node is None:
         raise connlib.UnknownNode()
     node.attr = dict(attr)
Exemplo n.º 13
0
 def read_node(self, nodeid):
     """Read a node attr"""
     node = self._nodes.get(nodeid)
     if node is None:
         raise connlib.UnknownNode()
     return node.attr
Exemplo n.º 14
0
 def has_file(self, nodeid, filename):
     node = self._nodes.get(nodeid)
     if node is None:
         raise connlib.UnknownNode()
     return filename in node.files
Exemplo n.º 15
0
 def delete_node(self, nodeid):
     """Delete node"""
     node = self._nodes.get(nodeid)
     if node is None:
         raise connlib.UnknownNode()
     del self._nodes[nodeid]
Exemplo n.º 16
0
        self._title_cache.update_attr(attr)

    def read_node(self, nodeid):

        self._request('GET', format_node_path(self._prefix, nodeid))
        result = self._conn.getresponse()
        if result.status == httplib.OK:
            try:
                attr = self.load_data(result)
                self._title_cache.update_attr(attr)
                return attr
            except Exception, e:
                raise connlib.ConnectionError(
                    "unexpected error '%s'" % str(e), e)
        else:
            raise connlib.UnknownNode(nodeid)

    def update_node(self, nodeid, attr):

        body_content = self.dumps_data(attr).encode("utf8")
        self._request('PUT', format_node_path(self._prefix, nodeid),
                      body_content)
        result = self._conn.getresponse()
        if result.status == httplib.NOT_FOUND:
            raise connlib.UnknownNode()
        elif result.status != httplib.OK:
            raise connlib.ConnectionError()
        self._title_cache.update_attr(attr)

    def delete_node(self, nodeid):