Mercurial > public > src > moin > 1.9
diff MoinMoin/user.py @ 1940:d7296d36e6f0
enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
author | Thomas Waldmann <tw AT waldmann-edv DOT de> |
---|---|
date | Wed, 04 Apr 2007 00:56:56 +0200 |
parents | 740d9939ffe9 |
children | a05a3b447db5 |
line wrap: on
line diff
--- a/MoinMoin/user.py Tue Apr 03 23:46:32 2007 +0200 +++ b/MoinMoin/user.py Wed Apr 04 00:56:56 2007 +0200 @@ -182,7 +182,6 @@ line = '\t'.join(line) return line - def decodeList(line): """ Decode list of items from user data file @@ -198,6 +197,39 @@ items.append(item) return items +def encodeDict(items): + """ Encode dict of items in user data file + + Items are separated by '\t' characters. + Each item is key:value. + + @param items: dict of unicode:unicode + @rtype: unicode + @return: dict encoded as unicode + """ + line = [] + for key, value in items.items(): + item = u'%s:%s' % (key, value) + line.append(item) + line = '\t'.join(line) + return line + +def decodeDict(line): + """ Decode dict of key:value pairs from user data file + + @param line: line containing a dict, encoded with encodeDict + @rtype: dict + @return: dict unicode:unicode items + """ + items = {} + for item in line.split('\t'): + item = item.strip() + if not item: + continue + key, value = item.split(':', 1) + items[key] = value + return items + class User: """A MoinMoin User""" @@ -225,6 +257,7 @@ self.auth_username = auth_username self.auth_method = kw.get('auth_method', 'internal') self.auth_attribs = kw.get('auth_attribs', ()) + self.bookmarks = {} # interwikiname: bookmark # create some vars automatically self.__dict__.update(self._cfg.user_form_defaults) @@ -323,13 +356,6 @@ """ return os.path.join(self._cfg.user_dir, self.id or "...NONE...") - def __bookmark_filename(self): - if self._cfg.interwikiname: - return (self.__filename() + "." + self._cfg.interwikiname + - ".bookmark") - else: - return self.__filename() + ".bookmark" - def exists(self): """ Do we have a user account for this user? @@ -365,6 +391,10 @@ if key.endswith('[]'): key = key[:-2] val = decodeList(val) + # Decode dict values + elif key.endswith('{}'): + key = key[:-2] + val = decodeDict(val) # for compatibility reading old files, keep these explicit # we will store them with [] appended elif key in ['quicklinks', 'subscribed_pages']: @@ -530,6 +560,10 @@ if isinstance(value, list): key += '[]' value = encodeList(value) + # Encode dict values + elif isinstance(value, dict): + key += '{}' + value = encodeDict(value) line = u"%s=%s\n" % (key, unicode(value)) data.write(line) data.close() @@ -580,10 +614,10 @@ @param tm: timestamp """ if self.valid: - bm_fn = self.__bookmark_filename() - bmfile = open(bm_fn, "w") - bmfile.write(str(tm)+"\n") - bmfile.close() + interwikiname = unicode(self._cfg.interwikiname or '') + bookmark = unicode(tm) + self.bookmarks[interwikiname] = bookmark + self.save() def getBookmark(self): """ Get bookmark timestamp. @@ -592,12 +626,11 @@ @return: bookmark timestamp or None """ bm = None - bm_fn = self.__bookmark_filename() - - if self.valid and os.path.exists(bm_fn): + interwikiname = unicode(self._cfg.interwikiname or '') + if self.valid: try: - bm = long(open(bm_fn, 'r').readline()) # must be long for py 2.2 - except (OSError, ValueError): + bm = int(self.bookmarks[interwikiname]) + except (ValueError, KeyError): pass return bm @@ -607,13 +640,13 @@ @rtype: int @return: 0 on success, 1 on failure """ - bm_fn = self.__bookmark_filename() + interwikiname = unicode(self._cfg.interwikiname or '') if self.valid: - if os.path.exists(bm_fn): - try: - os.unlink(bm_fn) - except OSError: - return 1 + try: + del self.bookmarks[interwikiname] + except KeyError: + return 1 + self.save() return 0 return 1