diff options
Diffstat (limited to 'pysite/views/wiki/history/compare.py')
-rw-r--r-- | pysite/views/wiki/history/compare.py | 70 |
1 files changed, 0 insertions, 70 deletions
diff --git a/pysite/views/wiki/history/compare.py b/pysite/views/wiki/history/compare.py deleted file mode 100644 index 6411ab30..00000000 --- a/pysite/views/wiki/history/compare.py +++ /dev/null @@ -1,70 +0,0 @@ -import difflib - -from pygments import highlight -from pygments.formatters import HtmlFormatter -from pygments.lexers import DiffLexer -from werkzeug.exceptions import BadRequest, NotFound - -from pysite.base_route import RouteView -from pysite.constants import DEBUG_MODE, EDITOR_ROLES -from pysite.mixins import DBMixin - - -class CompareView(RouteView, DBMixin): - path = "/history/compare/<string:first_rev>/<string:second_rev>" - name = "history.compare" - - table_name = "wiki_revisions" - table_primary_key = "id" - - def get(self, first_rev, second_rev): - before = self.db.get(self.table_name, first_rev) - after = self.db.get(self.table_name, second_rev) - - if not (before and after): - raise NotFound() - - if before["date"] > after["date"]: # Check whether the before was created after the after - raise BadRequest() - - if before["id"] == after["id"]: # The same revision has been requested - raise BadRequest() - - before_text = before["post"]["rst"] - after_text = after["post"]["rst"] - - if not before_text.endswith("\n"): - before_text += "\n" - - if not after_text.endswith("\n"): - after_text += "\n" - - before_text = before_text.splitlines(keepends=True) - after_text = after_text.splitlines(keepends=True) - - if not before["slug"] == after["slug"]: - raise BadRequest() # The revisions are not from the same post - - diff = difflib.unified_diff(before_text, after_text, fromfile=f"{first_rev}.rst", tofile=f"{second_rev}.rst") - diff = "".join(diff) - diff = highlight(diff, DiffLexer(), HtmlFormatter()) - return self.render("wiki/compare_revision.html", - title=after["post"]["title"], - page=before["slug"], - diff=diff, - slug=before["slug"], - can_edit=self.is_staff()) - - def is_staff(self): - if DEBUG_MODE: - return True - if not self.logged_in: - return False - - roles = self.user_data.get("roles", []) - - for role in roles: - if role in EDITOR_ROLES: - return True - - return False |