Mercurial > wikked
changeset 138:df04e6a875ba
Added Celery-powered background updates to wiki pages.
TODO: need to make it more customizable and optional.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 08 Dec 2013 12:51:58 -0800 |
parents | d29007463b70 |
children | 2ec24079d9df |
files | backend.py wikked/db/sql.py wikked/tasks.py wikked/views.py wikked/wiki.py |
diffstat | 5 files changed, 55 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- /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() +
--- 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)
--- /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() +
--- 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)
--- 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.