for row in res:
yield Page(self.backend, row.id, data=row)
+ def _get_page(self, query, *args):
+ res = self.db.get(query, *args)
+
+ if res:
+ return Page(self.backend, res.id, data=res)
+
def get_page_title(self, page, default=None):
doc = self.get_page(page)
if doc:
assert page
if revision:
- res = self.db.get("SELECT * FROM wiki WHERE page = %s \
+ return self._get_page("SELECT * FROM wiki WHERE page = %s \
AND timestamp = %s", page, revision)
else:
- res = self.db.get("SELECT * FROM wiki WHERE page = %s \
+ return self._get_page("SELECT * FROM wiki WHERE page = %s \
ORDER BY timestamp DESC LIMIT 1", page)
- if res:
- return Page(self.backend, res.id, data=res)
-
- def get_recent_changes(self):
+ def get_recent_changes(self, limit=None):
return self._get_pages("SELECT * FROM wiki \
- WHERE timestamp >= NOW() - INTERVAL '4 weeks' ORDER BY timestamp DESC")
+ WHERE timestamp >= NOW() - INTERVAL '4 weeks' \
+ ORDER BY timestamp DESC LIMIT %s", limit)
- def create_page(self, page, author, markdown):
+ def create_page(self, page, author, content, changes=None, address=None):
page = Page.sanitise_page_name(page)
- res = self.db.get("INSERT INTO wiki(page, author_id, markdown) \
- VALUES(%s, %s, %s) RETURNING id", page, author.id, markdown)
-
- if res:
- return self.get_page_by_id(res.id)
+ return self._get_page("INSERT INTO wiki(page, author_uid, markdown, changes, address) \
+ VALUES(%s, %s, %s, %s, %s) RETURNING *", page, author.uid, content or None, changes, address)
- def delete_page(self, page, author):
+ def delete_page(self, page, author, **kwargs):
# Do nothing if the page does not exist
if not self.get_page(page):
return
# Just creates a blank last version of the page
- self.create_page(page, author, None)
+ self.create_page(page, author=author, content=None, **kwargs)
@staticmethod
def _split_url(url):
@property
def url(self):
- return "/%s" % self.page
+ return self.page
@property
def page(self):
if m:
return m.group(1)
+ @lazy_property
+ def author(self):
+ if self.data.author_uid:
+ return self.backend.accounts.get_by_uid(self.data.author_uid)
+
def _render(self, text):
logging.debug("Rendering %s" % self)
def get_latest_revision(self):
return self.backend.wiki.get_page(self.page)
+
+ @property
+ def changes(self):
+ return self.data.changes
+
+ # Sidebar
+
+ @lazy_property
+ def sidebar(self):
+ parts = self.page.split("/")
+
+ while parts:
+ sidebar = self.backend.wiki.get_page(os.path.join(*parts, "sidebar"))
+ if sidebar:
+ return sidebar
+
+ parts.pop()