page = 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)
+ # Store any linked files
+ page._store_linked_files()
+
# Send email to all watchers
page._send_watcher_emails(excludes=[author])
return renderer.html
+ # Linked Files
+
@property
- def images(self):
+ def files(self):
renderer = self.backend.wiki.render(self.page, self.markdown)
- return renderer.images
+ return renderer.files
+
+ def _store_linked_files(self):
+ self.db.executemany("INSERT INTO wiki_linked_files(page_id, path) \
+ VALUES(%s, %s)", ((self.id, file) for file in self.files))
@property
def timestamp(self):
# Markdown Renderer
self.renderer = markdown.Markdown(
extensions=[
- ImageExtractorExtension(),
+ LinkedFilesExtractorExtension(),
PrettyLinksExtension(),
"codehilite",
"fenced_code",
return text
@lazy_property
- def images(self):
+ def files(self):
"""
- A list of all images that have been part of the rendered markup
+ A list of all linked files that have been part of the rendered markup
"""
- images = []
+ files = []
- for url in self.renderer.images:
+ for url in self.renderer.files:
# Skip external images
if url.startswith("https://") or url.startswith("http://"):
continue
# Make the URL absolute
url = self.backend.wiki.make_path(self.path, url)
- images.append(url)
+ files.append(url)
- return images
+ return files
class PrettyLinksExtension(markdown.extensions.Extension):
yield self.regex.sub(r"[CVE-\1](https://cve.mitre.org/cgi-bin/cvename.cgi?name=\1)", line)
-class ImageExtractor(markdown.treeprocessors.Treeprocessor):
+class LinkedFilesExtractor(markdown.treeprocessors.Treeprocessor):
"""
- Finds all images
+ Finds all Linked Files
"""
def run(self, root):
- self.md.images = []
+ self.md.files = []
# Find all images and store the URLs
for image in root.findall(".//img"):
src = image.get("src")
- self.md.images.append(src)
+ self.md.files.append(src)
-class ImageExtractorExtension(markdown.extensions.Extension):
+class LinkedFilesExtractorExtension(markdown.extensions.Extension):
def extendMarkdown(self, md):
- md.treeprocessors.register(ImageExtractor(md), "image-extractor", 10)
+ md.treeprocessors.register(LinkedFilesExtractor(md), "linked-files-extractor", 10)