# 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
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
# 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):
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()
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():