def sync(user, password, since=None, localdb=None): db = Database(localdb) api = Simplenote(user, password) dbg("LOCAL TO REMOTE:") synced_count = 0 for note in db.values(): if note["CHANGED"]: if not note.has_key("key") or note["key"].startswith(KEY_PREFIX): dbg("NEW NOTE") else: dbg("CHANGED: %s" % note["key"]) if note["key"].startswith(KEY_PREFIX): k = note["key"] del note["key"] else: k = None note = api.update(note) note["CHANGED"] = False db.update(note) if k is not None: db.remove(k) synced_count += 1 if since: rindex = api.index(since=since) dbg(">>>> SINCE: %s" % since) else: rindex = api.index() dbg("REMOTE TO LOCAL:") dbg(">>>> RINDEX LEN: %s" % len(rindex)) for ritem in rindex: key = ritem["key"] if key not in db.keys(deleted=True): dbg(" NEW: %s" % (key)) db.update(api.get(key)) synced_count += 1 litem = db.get(key) if ritem["syncnum"] > litem["syncnum"]: dbg(" UPD: %s" % (key)) db.update(api.get(key)) synced_count += 1 dbg("CLEAN UP:") if since is None: rkeys = api.keys().keys() for k in db.keys(deleted=True): if k not in rkeys: dbg(" DEL: %s" % k) db.remove(k) synced_count += 1 else: for k in db.keys(deleted=True): litem = db.get(k) if litem["deleted"] != 0: dbg(" DEL: %s" % k) db.remove(k) sys.stderr.write("Synced %s notes.\n" % synced_count) return time.time()