Drop pre-rendered html: MediaComment.content_html

After a bit of discussion, we decided to drop the
pre-rendered html from the database and render it on
the fly.

In another step, we will use some proper caching method to
cache this stuff.

This commit affects the MediaComment.content_html part.
This commit is contained in:
Elrond 2012-02-18 11:32:28 +01:00
parent 1e72e075f8
commit feba5c5287
6 changed files with 22 additions and 12 deletions

View File

@ -104,3 +104,13 @@ class MediaEntryMixin(object):
def get_license_data(self): def get_license_data(self):
"""Return license dict for requested license""" """Return license dict for requested license"""
return licenses.SUPPORTED_LICENSES[self.license or ""] return licenses.SUPPORTED_LICENSES[self.license or ""]
class MediaCommentMixin(object):
@property
def content_html(self):
"""
the actual html-rendered version of the comment displayed.
Run through Markdown and the HTML cleaner.
"""
return cleaned_markdown_conversion(self.content)

View File

@ -130,7 +130,12 @@ def mediaentry_add_license(database):
@RegisterMigration(9) @RegisterMigration(9)
def remove_calculated_html(database): def remove_calculated_html(database):
""" """
Drop bio_html, description_html again and calculate things on the fly (and cache) Drop pre-rendered html again and calculate things
on the fly (and cache):
- User.bio_html
- MediaEntry.description_html
- MediaComment.content_html
""" """
drop_table_field(database, 'users', 'bio_html') drop_table_field(database, 'users', 'bio_html')
drop_table_field(database, 'media_entries', 'description_html') drop_table_field(database, 'media_entries', 'description_html')
drop_table_field(database, 'media_comments', 'content_html')

View File

@ -23,7 +23,7 @@ from mediagoblin.db.mongo import migrations
from mediagoblin.db.mongo.util import ASCENDING, DESCENDING, ObjectId from mediagoblin.db.mongo.util import ASCENDING, DESCENDING, ObjectId
from mediagoblin.tools.pagination import Pagination from mediagoblin.tools.pagination import Pagination
from mediagoblin.tools import url from mediagoblin.tools import url
from mediagoblin.db.mixin import UserMixin, MediaEntryMixin from mediagoblin.db.mixin import UserMixin, MediaEntryMixin, MediaCommentMixin
################### ###################
# Custom validators # Custom validators
@ -251,7 +251,7 @@ class MediaEntry(Document, MediaEntryMixin):
return self.db.User.find_one({'_id': self.uploader}) return self.db.User.find_one({'_id': self.uploader})
class MediaComment(Document): class MediaComment(Document, MediaCommentMixin):
""" """
A comment on a MediaEntry. A comment on a MediaEntry.
@ -260,8 +260,6 @@ class MediaComment(Document):
- author: user who posted this comment - author: user who posted this comment
- created: when the comment was created - created: when the comment was created
- content: plaintext (but markdown'able) version of the comment's content. - content: plaintext (but markdown'able) version of the comment's content.
- content_html: the actual html-rendered version of the comment displayed.
Run through Markdown and the HTML cleaner.
""" """
__collection__ = 'media_comments' __collection__ = 'media_comments'
@ -272,7 +270,7 @@ class MediaComment(Document):
'author': ObjectId, 'author': ObjectId,
'created': datetime.datetime, 'created': datetime.datetime,
'content': unicode, 'content': unicode,
'content_html': unicode} }
required_fields = [ required_fields = [
'media_entry', 'author', 'created', 'content'] 'media_entry', 'author', 'created', 'content']

View File

@ -133,7 +133,7 @@ def convert_media_comments(mk_db):
new_entry = MediaComment() new_entry = MediaComment()
copy_attrs(entry, new_entry, copy_attrs(entry, new_entry,
('created', ('created',
'content', 'content_html',)) 'content',))
copy_reference_attr(entry, new_entry, "media_entry") copy_reference_attr(entry, new_entry, "media_entry")
copy_reference_attr(entry, new_entry, "author") copy_reference_attr(entry, new_entry, "author")

View File

@ -31,7 +31,7 @@ from sqlalchemy.ext.associationproxy import association_proxy
from mediagoblin.db.sql.extratypes import PathTupleWithSlashes from mediagoblin.db.sql.extratypes import PathTupleWithSlashes
from mediagoblin.db.sql.base import Base, DictReadAttrProxy from mediagoblin.db.sql.base import Base, DictReadAttrProxy
from mediagoblin.db.mixin import UserMixin, MediaEntryMixin from mediagoblin.db.mixin import UserMixin, MediaEntryMixin, MediaCommentMixin
class SimpleFieldAlias(object): class SimpleFieldAlias(object):
@ -218,7 +218,7 @@ class MediaTag(Base):
return DictReadAttrProxy(self) return DictReadAttrProxy(self)
class MediaComment(Base): class MediaComment(Base, MediaCommentMixin):
__tablename__ = "media_comments" __tablename__ = "media_comments"
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
@ -227,7 +227,6 @@ class MediaComment(Base):
author = Column(Integer, ForeignKey('users.id'), nullable=False) author = Column(Integer, ForeignKey('users.id'), nullable=False)
created = Column(DateTime, nullable=False, default=datetime.datetime.now) created = Column(DateTime, nullable=False, default=datetime.datetime.now)
content = Column(UnicodeText, nullable=False) content = Column(UnicodeText, nullable=False)
content_html = Column(UnicodeText)
get_author = relationship(User) get_author = relationship(User)

View File

@ -18,7 +18,6 @@ from webob import exc
from mediagoblin import messages, mg_globals from mediagoblin import messages, mg_globals
from mediagoblin.db.util import DESCENDING, ObjectId from mediagoblin.db.util import DESCENDING, ObjectId
from mediagoblin.tools.text import cleaned_markdown_conversion
from mediagoblin.tools.response import render_to_response, render_404, redirect from mediagoblin.tools.response import render_to_response, render_404, redirect
from mediagoblin.tools.translate import pass_to_ugettext as _ from mediagoblin.tools.translate import pass_to_ugettext as _
from mediagoblin.tools.pagination import Pagination from mediagoblin.tools.pagination import Pagination
@ -146,7 +145,6 @@ def media_post_comment(request, media):
comment['media_entry'] = media._id comment['media_entry'] = media._id
comment['author'] = request.user._id comment['author'] = request.user._id
comment['content'] = unicode(request.POST['comment_content']) comment['content'] = unicode(request.POST['comment_content'])
comment['content_html'] = cleaned_markdown_conversion(comment['content'])
if not comment['content'].strip(): if not comment['content'].strip():
messages.add_message( messages.add_message(