1# -*- coding: iso-8859-1 -*- 2""" 3 MoinMoin - (re)building of Xapian indices 4 5 @copyright: 2007 MoinMoin:KarolNowak 6 @license: GNU GPL, see COPYING for details. 7""" 8 9import MoinMoin.events as ev 10 11 12def _get_index(request): 13 try: 14 from MoinMoin.search.Xapian import XapianIndex 15 return XapianIndex(request) 16 except ImportError: 17 pass 18 19 20def handle_renamed(event): 21 """Updates Xapian index when a page changes its name""" 22 23 request = event.request 24 25 if request.cfg.xapian_search: 26 index = _get_index(request) 27 if index and index.exists(): 28 index.update_item(event.old_page.page_name, now=False) 29 index.update_item(event.page.page_name) 30 31 32def handle_copied(event): 33 """Updates Xapian index when a page is copied""" 34 35 request = event.request 36 37 if request.cfg.xapian_search: 38 index = _get_index(request) 39 if index and index.exists(): 40 index.update_item(event.page.page_name) 41 42 43def handle_changed(event): 44 """Updates Xapian index when a page is changed""" 45 46 request = event.request 47 48 if request.cfg.xapian_search: 49 index = _get_index(request) 50 if index and index.exists(): 51 index.update_item(event.page.page_name) 52 53 54def handle_deleted(event): 55 """Updates Xapian index when a page is deleted""" 56 event = ev.PageChangedEvent(event.request, event.page, event.comment) 57 handle_changed(event) 58 59 60def handle_attachment_change(event): 61 """Updates Xapian index when attachment is added or removed""" 62 63 request = event.request 64 65 if request.cfg.xapian_search: 66 index = _get_index(request) 67 if index and index.exists(): 68 index.update_item(event.pagename, event.filename) 69 70 71def handle(event): 72 if isinstance(event, ev.PageRenamedEvent): 73 handle_renamed(event) 74 elif isinstance(event, ev.PageCopiedEvent): 75 handle_copied(event) 76 elif isinstance(event, (ev.PageChangedEvent, ev.TrivialPageChangedEvent)): 77 handle_changed(event) 78 elif isinstance(event, ev.PageDeletedEvent): 79 handle_deleted(event) 80 elif isinstance(event, (ev.FileAttachedEvent, ev.FileRemovedEvent)): 81 handle_attachment_change(event) 82 83