Last active
December 20, 2015 17:18
-
-
Save pads/6167532 to your computer and use it in GitHub Desktop.
Archive tiddlers from one bag to another, based on age.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import logging | |
from datetime import datetime | |
from tiddlywebplugins.tiddlyspace.config import config | |
from tiddlyweb.store import Store | |
from tiddlyweb.model.tiddler import Tiddler | |
now = datetime.utcnow() | |
# Make sure this is writable by the user running this | |
filename = 'archive-%s-%s-%s.log' % (now.year, now.month, now.day) | |
logging.basicConfig(filename=filename, level=logging.INFO, format='%(asctime)s %(message)s') | |
# This uses the default DB config which is configured to tiddlyweb@localhost without a password | |
# Update the second value as required if this is different i.e.: | |
# { 'db_config': '<mysql-connection-string>'} | |
store = Store(config['server_store'][0], config['server_store'][1], | |
environ={'tiddlyweb.config': config}) | |
def archive(from_bag, to_bag, max_days=90, filter=None): | |
if filter: | |
logging.info('using filter %s', filter) | |
tiddlers = list(store.search('bag:%s %s _limit:99999;sort=modified' | |
% (from_bag, filter))) | |
else: | |
tiddlers = list(store.search('bag:%s _limit:99999;sort=modified' % from_bag)) | |
logging.info('found %s tiddlers in %s', len(tiddlers), from_bag) | |
counter = 0 | |
for tiddler in tiddlers: | |
original_tiddler = store.get(tiddler) | |
tiddler_age = now - datetime.strptime(original_tiddler.modified, | |
'%Y%m%d%H%M%S') | |
if tiddler_age.days > max_days: | |
clone_tiddler(store, original_tiddler, to_bag) | |
store.delete(original_tiddler) | |
counter = counter + 1 | |
logging.info('archived tiddler %s', original_tiddler.title) | |
logging.info('archived %s tiddlers', counter) | |
def clone_tiddler(store, original_tiddler, new_bag): | |
for revision_id in reversed(store.list_tiddler_revisions(original_tiddler)): | |
tiddler_revision = Tiddler(original_tiddler.title, original_tiddler.bag) | |
tiddler_revision.revision = revision_id | |
tiddler_revision = store.get(tiddler_revision) | |
tiddler_revision.bag = new_bag | |
tiddler_revision.revision = None | |
store.put(tiddler_revision) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment