# HG changeset patch # User Ludovic Chabant # Date 1386535918 28800 # Node ID df04e6a875ba05023ca361aff77fa7a7913dfa9e # Parent d29007463b7062f4522aece70d2ce4a6bb4dcbc6 Added Celery-powered background updates to wiki pages. TODO: need to make it more customizable and optional. diff -r d29007463b70 -r df04e6a875ba backend.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/backend.py Sun Dec 08 12:51:58 2013 -0800 @@ -0,0 +1,17 @@ +import logging +from celery import Celery +from utils import find_wiki_root + + +logging.basicConfig(level=logging.DEBUG) + + +app = Celery( + 'wikked', + broker='amqp://', + backend='amqp://', + include=['wikked.tasks']) + +if __name__ == '__main__': + app.start() + diff -r d29007463b70 -r df04e6a875ba wikked/db/sql.py --- a/wikked/db/sql.py Sun Dec 08 12:50:57 2013 -0800 +++ b/wikked/db/sql.py Sun Dec 08 12:51:58 2013 -0800 @@ -330,7 +330,7 @@ return po def _cacheExtendedData(self, page): - logger.debug("Caching extended data for page '%s' [%d]." % (page.url, page._id)) + logger.info("Caching extended data for page '%s' [%d]." % (page.url, page._id)) if not hasattr(page, '_id') or not page._id: raise Exception("Given page '%s' has no `_id` attribute set." % page.url) diff -r d29007463b70 -r df04e6a875ba wikked/tasks.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wikked/tasks.py Sun Dec 08 12:51:58 2013 -0800 @@ -0,0 +1,30 @@ +import logging +from backend import app +from wiki import Wiki, WikiParameters + + +logger = logging.getLogger(__name__) + + +class wiki_session(object): + def __init__(self, wiki_root): + self.wiki_root = wiki_root + self.wiki = None + + def __enter__(self): + params = WikiParameters(root=self.wiki_root) + self.wiki = Wiki(params) + self.wiki.start(False) + return self.wiki + + def __exit__(self, type, value, traceback): + if self.wiki.db.session: + self.wiki.db.session.remove() + return False + + +@app.task +def update_wiki(wiki_root): + with wiki_session(wiki_root) as wiki: + wiki.update() + diff -r d29007463b70 -r df04e6a875ba wikked/views.py --- a/wikked/views.py Sun Dec 08 12:50:57 2013 -0800 +++ b/wikked/views.py Sun Dec 08 12:51:58 2013 -0800 @@ -13,6 +13,7 @@ from formatter import PageFormatter, FormattingContext from scm.base import STATE_NAMES, ACTION_NAMES from utils import split_page_url +from tasks import update_wiki DONT_CHECK = 0 @@ -210,7 +211,8 @@ 'author': author, 'message': message } - g.wiki.setPage(url, page_fields) + g.wiki.setPage(url, page_fields, do_update=False) + update_wiki.delay(g.wiki.root) result = {'saved': 1} return make_auth_response(result) @@ -543,6 +545,7 @@ @app.route('/api/preview', methods=['POST']) def api_preview(): url = request.form.get('url') + url = url_from_viewarg(url) text = request.form.get('text') dummy = DummyPage(g.wiki, url, text) diff -r d29007463b70 -r df04e6a875ba wikked/wiki.py --- a/wikked/wiki.py Sun Dec 08 12:50:57 2013 -0800 +++ b/wikked/wiki.py Sun Dec 08 12:51:58 2013 -0800 @@ -176,8 +176,6 @@ def getPages(self, subdir=None, meta_query=None): """ Gets all the pages in the wiki, or in the given sub-directory. """ - if meta_query: - self._cachePages() for page in self.db.getPages(subdir, meta_query): yield page @@ -186,7 +184,7 @@ """ return self.db.getPage(url) - def setPage(self, url, page_fields): + def setPage(self, url, page_fields, do_update=True): """ Updates or creates a page for a given URL. """ # Validate the parameters. @@ -211,7 +209,8 @@ self.scm.commit([page_info.path], commit_meta) # Update the DB and index with the new/modified page. - self.update(url, cache_ext_data=False) + if do_update: + self.update(url, cache_ext_data=False) def revertPage(self, url, page_fields): """ Reverts the page with the given URL to an older revision.