def _read_attr(self, filename, recover=True): """Read a node meta data file""" try: tree = ET.ElementTree(file=filename) except Exception as e: #if recover: # self._recover_attr(filename) # return self._read_attr(filename, recover=False) raise ConnectionError( _(u"Error reading meta data file '%s'" % filename), e) # check root root = tree.getroot() if root.tag != "node": raise ConnectionError(_("Root tag is not 'node'")) # iterate children attr = {} version = None for child in root: if child.tag == "dict": attr = plist.load_etree(child) if child.tag == "version": version = int(child.text) if version: attr["version"] = version return attr
def read_extension_info(filename): """Reads an extensions info""" tree = ET.ElementTree(file=get_extension_info_file(filename)) # parse xml # check tree structure matches current version root = tree.getroot() if root.tag != "extension": raise keepnote.KeepNotePreferenceError("bad extension info format") p = root.find("dict") if p is None: raise keepnote.KeepNotePreferenceError("bad extension info format") return plist.load_etree(p)
def read(self): """Read preferences from file""" # ensure preference file exists if not os.path.exists(get_user_pref_file(self._pref_dir)): # write default try: init_user_pref_dir(self._pref_dir) self.write() except Exception as e: raise KeepNotePreferenceError("Cannot initialize preferences", e) try: # read preferences xml tree = ElementTree.ElementTree( file=get_user_pref_file(self._pref_dir)) # parse xml # check tree structure matches current version root = tree.getroot() if root.tag == "keepnote": p = root.find("pref") if p is None: # convert from old preference version import keepnote.compat.pref as old old_pref = old.KeepNotePreferences() old_pref.read(get_user_pref_file(self._pref_dir)) data = old_pref._get_data() else: # get data object from xml d = p.find("dict") if d is not None: data = plist.load_etree(d) else: data = orderdict.OrderDict() # set data self._data.clear() self._data.update(data) except Exception as e: raise KeepNotePreferenceError("Cannot read preferences", e) # notify listeners self.changed.notify()
return self._read_attr(filename, recover=False) raise ConnectionError( _(u"Error reading meta data file '%s'" % filename), e) # check root root = tree.getroot() if root.tag != "node": raise ConnectionError(_("Root tag is not 'node'")) # iterate children attr = {} version = None for child in root: if child.tag == "dict": attr = plist.load_etree(child) if child.tag == "version": version = int(child.text) if version: attr["version"] = version return attr def _recover_attr(self, filename): if os.path.exists(filename): self._move_to_lostdir(filename) try: out = open(filename, "w")
class KeepNotePreferences(Pref): """Preference data structure for the KeepNote application""" def __init__(self, pref_dir=None): Pref.__init__(self) if pref_dir is None: self._pref_dir = get_user_pref_dir() else: self._pref_dir = pref_dir # listener self.changed = Listeners() self.changed.add(self._on_changed) def get_pref_dir(self): """Returns preference directory""" return self._pref_dir def _on_changed(self): """Listener for preference changes""" self.write() #========================================= # Input/Output def read(self): """Read preferences from file""" # ensure preference file exists if not os.path.exists(get_user_pref_file(self._pref_dir)): # write default try: init_user_pref_dir(self._pref_dir) self.write() except Exception, e: raise KeepNotePreferenceError("Cannot initialize preferences", e) try: # read preferences xml tree = ET.ElementTree(file=get_user_pref_file(self._pref_dir)) # parse xml # check tree structure matches current version root = tree.getroot() if root.tag == "keepnote": p = root.find("pref") if p is None: # convert from old preference version import keepnote.compat.pref as old old_pref = old.KeepNotePreferences() old_pref.read(get_user_pref_file(self._pref_dir)) data = old_pref._get_data() else: # get data object from xml d = p.find("dict") if d is not None: data = plist.load_etree(d) else: data = orderdict.OrderDict() # set data self._data.clear() self._data.update(data) except Exception, e: raise KeepNotePreferenceError("Cannot read preferences", e)
tree = ET.ElementTree(file=filename) except Exception, e: raise ConnectionError( _(u"Error reading meta data file '%s'" % filename), e) # check root root = tree.getroot() if root.tag != "node": raise ConnectionError(_("Root tag is not 'node'")) # iterate children attr = {} extra = {} for child in root: if child.tag == "dict": attr = plist.load_etree(child) elif child.tag == "version": extra['version'] = int(child.text) elif child.tag == "id": extra['nodeid'] = child.text # For backward-compatibility, use attr nodeid to set extra if needed. if 'nodeid' not in extra: extra['nodeid'] = attr['nodeid'] if set_extra: for key, value in extra.items(): attr[key] = value return attr, extra