in kitsune/wiki/tasks.py [0:0]
def _rebuild_kb_chunk(data):
"""Re-render a chunk of documents.
Note: Don't use host components when making redirects to wiki pages; those
redirects won't be auto-pruned when they're 404s.
"""
log.info("Rebuilding %s documents." % len(data))
messages = []
for pk in data:
message = None
try:
document = Document.objects.get(pk=pk)
# If we know a redirect link to be broken (i.e. if it looks like a
# link to a document but the document isn't there), log an error:
url = document.redirect_url()
if url and resolves_to_document_view(url) and not document.redirect_document():
log.warn("Invalid redirect document: %d" % pk)
html = document.parse_and_calculate_links()
if document.html != html:
# We are calling update here to so we only update the html
# column instead of all of them. This bypasses post_save
# signal handlers like the one that triggers reindexing.
# See bug 797038 and bug 797352.
Document.objects.filter(pk=pk).update(html=html)
except Document.DoesNotExist:
message = "Missing document: %d" % pk
except Revision.DoesNotExist:
message = "Missing revision for document: %d" % pk
except ValidationError as e:
message = "ValidationError for %d: %s" % (pk, e.messages[0])
except SlugCollision:
message = "SlugCollision: %d" % pk
except TitleCollision:
message = "TitleCollision: %d" % pk
if message:
log.debug(message)
messages.append(message)
if messages:
subject = "[%s] Exceptions raised in _rebuild_kb_chunk()" % settings.PLATFORM_NAME
mail_admins(subject=subject, message="\n".join(messages))
if not transaction.get_connection().in_atomic_block:
transaction.commit()