Drop pre-rendered html: User.bio_html
authorElrond <elrond+mediagoblin.org@samba-tng.org>
Sat, 4 Feb 2012 19:55:55 +0000 (20:55 +0100)
committerElrond <elrond+mediagoblin.org@samba-tng.org>
Sat, 18 Feb 2012 11:35:30 +0000 (12:35 +0100)
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 User.bio_html part.

mediagoblin/db/mixin.py
mediagoblin/db/mongo/migrations.py
mediagoblin/db/mongo/models.py
mediagoblin/db/sql/convert.py
mediagoblin/db/sql/models.py
mediagoblin/edit/views.py

index beaff9b02b6cf78cb4c9df1f5f33d32ea24d63a0..2ff08722e3a0f98ee14d34070a148091395fb496 100644 (file)
@@ -29,6 +29,7 @@ real objects.
 
 from mediagoblin.auth import lib as auth_lib
 from mediagoblin.tools import common, licenses
+from mediagoblin.tools.text import cleaned_markdown_conversion
 
 
 class UserMixin(object):
@@ -39,6 +40,10 @@ class UserMixin(object):
         return auth_lib.bcrypt_check_password(
             password, self.pw_hash)
 
+    @property
+    def bio_html(self):
+        return cleaned_markdown_conversion(self.bio)
+
 
 class MediaEntryMixin(object):
     def get_display_media(self, media_map,
index 261e21a5a31b273017bafdd42ed6e9a34666bdcd..74a810c1eb447c2e078dae4df69651facd210f9f 100644 (file)
@@ -115,3 +115,14 @@ def mediaentry_add_license(database):
     Add the 'license' field for entries that don't have it.
     """
     add_table_field(database, 'media_entries', 'license', None)
+
+
+@RegisterMigration(9)
+def user_remove_bio_html(database):
+    """
+    Drop bio_html again and calculate things on the fly (and cache)
+    """
+    database['users'].update(
+        {'bio_html': {'$exists': True}},
+        {'$unset': {'bio_html': 1}},
+        multi=True)
index 541086bc5311037109592b7086c59ba1c1ae6d9d..c1282f4ae7177181dbf06f8ea19f0c484a39efa0 100644 (file)
@@ -59,7 +59,6 @@ class User(Document, UserMixin):
      - is_admin: Whether or not this user is an administrator or not.
      - url: this user's personal webpage/website, if appropriate.
      - bio: biography of this user (plaintext, in markdown)
-     - bio_html: biography of the user converted to proper HTML.
     """
     __collection__ = 'users'
     use_dot_notation = True
@@ -76,7 +75,6 @@ class User(Document, UserMixin):
         'is_admin': bool,
         'url': unicode,
         'bio': unicode,      # May contain markdown
-        'bio_html': unicode,  # May contain plaintext, or HTML
         'fp_verification_key': unicode,  # forgotten password verification key
         'fp_token_expire': datetime.datetime,
         }
index f6575be9a5ac5bc1a6534d78d811171ddf38cec6..a098927ff73b1d135a6d1c8dca7883c356d4d415 100644 (file)
@@ -56,7 +56,7 @@ def convert_users(mk_db):
         copy_attrs(entry, new_entry,
             ('username', 'email', 'created', 'pw_hash', 'email_verified',
              'status', 'verification_key', 'is_admin', 'url',
-             'bio', 'bio_html',
+             'bio',
              'fp_verification_key', 'fp_token_expire',))
         # new_entry.fp_verification_expire = entry.fp_token_expire
 
index 9d06f79cb768aac96d9f5ec455b6243f05b9981d..3cf4ff40957dbbe184ecd1f9f97a5e60e15ca479 100644 (file)
@@ -64,7 +64,6 @@ class User(Base, UserMixin):
     is_admin = Column(Boolean, default=False, nullable=False)
     url = Column(Unicode)
     bio = Column(UnicodeText)  # ??
-    bio_html = Column(UnicodeText)  # ??
     fp_verification_key = Column(Unicode)
     fp_token_expire = Column(DateTime)
 
index a724551755416018c344572a84a87e85063ad9d6..47761f23f4cfbf5636b2e0d83d20b968783b856b 100644 (file)
@@ -171,8 +171,6 @@ def edit_profile(request):
         user.url = unicode(request.POST['url'])
         user.bio = unicode(request.POST['bio'])
 
-        user.bio_html = cleaned_markdown_conversion(user.bio)
-
         user.save()
 
         messages.add_message(request,