From: Michael Tremer Date: Sat, 1 Sep 2018 15:07:15 +0000 (+0100) Subject: blog: Use one simple update function to update posts X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9372518070619928fb4a63c872b982a0662da000;p=ipfire.org.git blog: Use one simple update function to update posts Signed-off-by: Michael Tremer --- diff --git a/src/backend/blog.py b/src/backend/blog.py index 3a0e2e09..169a40d8 100644 --- a/src/backend/blog.py +++ b/src/backend/blog.py @@ -194,20 +194,10 @@ class Post(misc.Object): # Title - def get_title(self): + @property + def title(self): return self.data.title - def set_title(self, title): - self.db.execute("UPDATE blog SET title = %s \ - WHERE id = %s", title, self.id) - - # Update slug if post is not published, yet - if not self.is_published(): - self.db.execute("UPDATE blog SET slug = %s \ - WHERE id = %s", self.backend.blog._make_slug(title), self.id) - - title = property(get_title, set_title) - @property def slug(self): return self.data.slug @@ -252,24 +242,12 @@ class Post(misc.Object): def updated_at(self): return self.data.updated_at - def updated(self): - self.db.execute("UPDATE blog SET updated_at = NOW() \ - WHERE id = %s", self.id) - - # Update search indices - self.backend.blog.refresh() - # Text - def get_text(self): + @property + def text(self): return self.data.text - def set_text(self, text): - self.db.execute("UPDATE blog SET text = %s \ - WHERE id = %s", text, self.id) - - text = property(get_text, set_text) - # HTML @property @@ -281,14 +259,11 @@ class Post(misc.Object): # Tags - def get_tags(self): + @property + def tags(self): return self.data.tags - def set_tags(self, tags): - self.db.execute("UPDATE blog SET tags = %s \ - WHERE id = %s", list(tags), self.id) - - tags = property(get_tags, set_tags) + # Link @property def link(self): @@ -303,3 +278,28 @@ class Post(misc.Object): def is_editable(self, editor): # Authors can edit their own posts return self.author == editor + + def update(self, title, text, tags=[]): + """ + Called to update the content of this post + """ + # Update slug when post isn't published yet + slug = self.slug if self.is_published() else self.backend.blog._make_slug(title) + + # XXX render HTML + + self.db.execute("UPDATE blog SET title = %s, slug = %s, text = %s, \ + tags = %s, updated_at = CURRENT_TIMESTAMP WHERE id = %s", + title, slug, text, list(tags), self.id) + + # Update cache + self.data.update({ + "title" : title, + "slug" : slug, + "text" : text, + "tags" : tags, + }) + + # Update search index if post is published + if self.is_published(): + self.backend.blog.refresh() diff --git a/src/templates/blog/compose.html b/src/templates/blog/compose.html index fdfec359..481886de 100644 --- a/src/templates/blog/compose.html +++ b/src/templates/blog/compose.html @@ -21,8 +21,8 @@
- +
diff --git a/src/web/blog.py b/src/web/blog.py index 59168af1..ca76a5a2 100644 --- a/src/web/blog.py +++ b/src/web/blog.py @@ -138,18 +138,13 @@ class EditHandler(base.BaseHandler): if not post.is_editable(self.current_user): raise tornado.web.HTTPError(403, "%s cannot edit %s" % (self.current_user, post)) + # Save updated content with self.db.transaction(): - # Update title - post.title = self.get_argument("title") - - # Update text - post.text = self.get_argument("text") - - # Update tags - post.tags = (t.strip() for t in self.get_argument("tags", "").split(",")) - - # Mark post as updated - post.updated() + post.update( + title = self.get_argument("title"), + text = self.get_argument("text"), + tags = self.get_argument("tags").split(), + ) # Return to blog if the post is already published if post.is_published():