Drop pre-rendered html: MediaEntry.description_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 MediaEntry.description_html part.
This commit is contained in:
parent
e61ab0998b
commit
1e72e075f8
@ -46,6 +46,14 @@ class UserMixin(object):
|
|||||||
|
|
||||||
|
|
||||||
class MediaEntryMixin(object):
|
class MediaEntryMixin(object):
|
||||||
|
@property
|
||||||
|
def description_html(self):
|
||||||
|
"""
|
||||||
|
Rendered version of the description, run through
|
||||||
|
Markdown and cleaned with our cleaning tool.
|
||||||
|
"""
|
||||||
|
return cleaned_markdown_conversion(self.description)
|
||||||
|
|
||||||
def get_display_media(self, media_map,
|
def get_display_media(self, media_map,
|
||||||
fetch_order=common.DISPLAY_IMAGE_FETCHING_ORDER):
|
fetch_order=common.DISPLAY_IMAGE_FETCHING_ORDER):
|
||||||
"""
|
"""
|
||||||
|
@ -29,6 +29,16 @@ def add_table_field(db, table_name, field_name, default_value):
|
|||||||
multi=True)
|
multi=True)
|
||||||
|
|
||||||
|
|
||||||
|
def drop_table_field(db, table_name, field_name):
|
||||||
|
"""
|
||||||
|
Drop an old field from a table/collection
|
||||||
|
"""
|
||||||
|
db[table_name].update(
|
||||||
|
{field_name: {'$exists': True}},
|
||||||
|
{'$unset': {field_name: 1}},
|
||||||
|
multi=True)
|
||||||
|
|
||||||
|
|
||||||
# Please see mediagoblin/tests/test_migrations.py for some examples of
|
# Please see mediagoblin/tests/test_migrations.py for some examples of
|
||||||
# basic migrations.
|
# basic migrations.
|
||||||
|
|
||||||
@ -118,11 +128,9 @@ def mediaentry_add_license(database):
|
|||||||
|
|
||||||
|
|
||||||
@RegisterMigration(9)
|
@RegisterMigration(9)
|
||||||
def user_remove_bio_html(database):
|
def remove_calculated_html(database):
|
||||||
"""
|
"""
|
||||||
Drop bio_html again and calculate things on the fly (and cache)
|
Drop bio_html, description_html again and calculate things on the fly (and cache)
|
||||||
"""
|
"""
|
||||||
database['users'].update(
|
drop_table_field(database, 'users', 'bio_html')
|
||||||
{'bio_html': {'$exists': True}},
|
drop_table_field(database, 'media_entries', 'description_html')
|
||||||
{'$unset': {'bio_html': 1}},
|
|
||||||
multi=True)
|
|
||||||
|
@ -110,9 +110,6 @@ class MediaEntry(Document, MediaEntryMixin):
|
|||||||
up with MarkDown for slight fanciness (links, boldness, italics,
|
up with MarkDown for slight fanciness (links, boldness, italics,
|
||||||
paragraphs...)
|
paragraphs...)
|
||||||
|
|
||||||
- description_html: Rendered version of the description, run through
|
|
||||||
Markdown and cleaned with our cleaning tool.
|
|
||||||
|
|
||||||
- media_type: What type of media is this? Currently we only support
|
- media_type: What type of media is this? Currently we only support
|
||||||
'image' ;)
|
'image' ;)
|
||||||
|
|
||||||
@ -177,7 +174,6 @@ class MediaEntry(Document, MediaEntryMixin):
|
|||||||
'slug': unicode,
|
'slug': unicode,
|
||||||
'created': datetime.datetime,
|
'created': datetime.datetime,
|
||||||
'description': unicode, # May contain markdown/up
|
'description': unicode, # May contain markdown/up
|
||||||
'description_html': unicode, # May contain plaintext, or HTML
|
|
||||||
'media_type': unicode,
|
'media_type': unicode,
|
||||||
'media_data': dict, # extra data relevant to this media_type
|
'media_data': dict, # extra data relevant to this media_type
|
||||||
'plugin_data': dict, # plugins can dump stuff here.
|
'plugin_data': dict, # plugins can dump stuff here.
|
||||||
|
@ -77,7 +77,7 @@ def convert_media_entries(mk_db):
|
|||||||
new_entry = MediaEntry()
|
new_entry = MediaEntry()
|
||||||
copy_attrs(entry, new_entry,
|
copy_attrs(entry, new_entry,
|
||||||
('title', 'slug', 'created',
|
('title', 'slug', 'created',
|
||||||
'description', 'description_html',
|
'description',
|
||||||
'media_type', 'state', 'license',
|
'media_type', 'state', 'license',
|
||||||
'fail_error',
|
'fail_error',
|
||||||
'queued_task_id',))
|
'queued_task_id',))
|
||||||
|
@ -85,7 +85,6 @@ class MediaEntry(Base, MediaEntryMixin):
|
|||||||
slug = Column(Unicode)
|
slug = Column(Unicode)
|
||||||
created = Column(DateTime, nullable=False, default=datetime.datetime.now)
|
created = Column(DateTime, nullable=False, default=datetime.datetime.now)
|
||||||
description = Column(UnicodeText) # ??
|
description = Column(UnicodeText) # ??
|
||||||
description_html = Column(UnicodeText) # ??
|
|
||||||
media_type = Column(Unicode, nullable=False)
|
media_type = Column(Unicode, nullable=False)
|
||||||
state = Column(Unicode, default=u'unprocessed', nullable=False)
|
state = Column(Unicode, default=u'unprocessed', nullable=False)
|
||||||
# or use sqlalchemy.types.Enum?
|
# or use sqlalchemy.types.Enum?
|
||||||
|
@ -34,7 +34,7 @@ from mediagoblin.tools.response import render_to_response, redirect
|
|||||||
from mediagoblin.tools.translate import pass_to_ugettext as _
|
from mediagoblin.tools.translate import pass_to_ugettext as _
|
||||||
from mediagoblin.tools.text import (
|
from mediagoblin.tools.text import (
|
||||||
clean_html, convert_to_tag_list_of_dicts,
|
clean_html, convert_to_tag_list_of_dicts,
|
||||||
media_tags_as_string, cleaned_markdown_conversion)
|
media_tags_as_string)
|
||||||
from mediagoblin.tools.licenses import SUPPORTED_LICENSES
|
from mediagoblin.tools.licenses import SUPPORTED_LICENSES
|
||||||
|
|
||||||
|
|
||||||
@ -72,9 +72,6 @@ def edit_media(request, media):
|
|||||||
media.tags = convert_to_tag_list_of_dicts(
|
media.tags = convert_to_tag_list_of_dicts(
|
||||||
request.POST.get('tags'))
|
request.POST.get('tags'))
|
||||||
|
|
||||||
media.description_html = cleaned_markdown_conversion(
|
|
||||||
media.description)
|
|
||||||
|
|
||||||
media.license = unicode(request.POST.get('license', '')) or None
|
media.license = unicode(request.POST.get('license', '')) or None
|
||||||
|
|
||||||
media.slug = unicode(request.POST['slug'])
|
media.slug = unicode(request.POST['slug'])
|
||||||
|
@ -91,7 +91,7 @@ def tag_atom_feed(request):
|
|||||||
'type': 'text/html'}])
|
'type': 'text/html'}])
|
||||||
for entry in cursor:
|
for entry in cursor:
|
||||||
feed.add(entry.get('title'),
|
feed.add(entry.get('title'),
|
||||||
entry.get('description_html'),
|
entry.description_html,
|
||||||
id=entry.url_for_self(request.urlgen,qualified=True),
|
id=entry.url_for_self(request.urlgen,qualified=True),
|
||||||
content_type='html',
|
content_type='html',
|
||||||
author={'name': entry.get_uploader.username,
|
author={'name': entry.get_uploader.username,
|
||||||
|
@ -28,7 +28,7 @@ _log = logging.getLogger(__name__)
|
|||||||
from werkzeug.utils import secure_filename
|
from werkzeug.utils import secure_filename
|
||||||
|
|
||||||
from mediagoblin.db.util import ObjectId
|
from mediagoblin.db.util import ObjectId
|
||||||
from mediagoblin.tools.text import cleaned_markdown_conversion, convert_to_tag_list_of_dicts
|
from mediagoblin.tools.text import convert_to_tag_list_of_dicts
|
||||||
from mediagoblin.tools.translate import pass_to_ugettext as _
|
from mediagoblin.tools.translate import pass_to_ugettext as _
|
||||||
from mediagoblin.tools.response import render_to_response, redirect
|
from mediagoblin.tools.response import render_to_response, redirect
|
||||||
from mediagoblin.decorators import require_active_login
|
from mediagoblin.decorators import require_active_login
|
||||||
@ -66,8 +66,6 @@ def submit_start(request):
|
|||||||
or unicode(splitext(filename)[0]))
|
or unicode(splitext(filename)[0]))
|
||||||
|
|
||||||
entry.description = unicode(request.POST.get('description'))
|
entry.description = unicode(request.POST.get('description'))
|
||||||
entry.description_html = cleaned_markdown_conversion(
|
|
||||||
entry.description)
|
|
||||||
|
|
||||||
entry.license = unicode(request.POST.get('license', "")) or None
|
entry.license = unicode(request.POST.get('license', "")) or None
|
||||||
|
|
||||||
|
@ -250,7 +250,7 @@ def atom_feed(request):
|
|||||||
|
|
||||||
for entry in cursor:
|
for entry in cursor:
|
||||||
feed.add(entry.get('title'),
|
feed.add(entry.get('title'),
|
||||||
entry.get('description_html'),
|
entry.description_html,
|
||||||
id=entry.url_for_self(request.urlgen,qualified=True),
|
id=entry.url_for_self(request.urlgen,qualified=True),
|
||||||
content_type='html',
|
content_type='html',
|
||||||
author={
|
author={
|
||||||
|
Loading…
x
Reference in New Issue
Block a user