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
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()
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()
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)
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 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
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 ]
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)
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
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
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)
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)
def read_node(self, nodeid): """Read a node attr""" node = self._nodes.get(nodeid) if node is None: raise connlib.UnknownNode() return node.attr
def has_file(self, nodeid, filename): node = self._nodes.get(nodeid) if node is None: raise connlib.UnknownNode() return filename in node.files
def delete_node(self, nodeid): """Delete node""" node = self._nodes.get(nodeid) if node is None: raise connlib.UnknownNode() del self._nodes[nodeid]
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):