Refactor revision logic to make more straightforward
Use groupby so we don't have to deal with edge cases and compare revisions directly. Signed-off-by: Will Beason <willbeason@gmail.com>
This commit is contained in:
parent
aec6e5fafa
commit
4dde25c508
33
wikiq
33
wikiq
@ -10,6 +10,7 @@ import os.path
|
||||
import re
|
||||
from datetime import datetime, timezone
|
||||
from io import TextIOWrapper
|
||||
from itertools import groupby
|
||||
|
||||
from subprocess import Popen, PIPE
|
||||
from collections import deque
|
||||
@ -93,6 +94,10 @@ class WikiqPage:
|
||||
self.mwpage = page
|
||||
self.__revisions = self.rev_list()
|
||||
|
||||
@staticmethod
|
||||
def user_text(rev) -> str | None:
|
||||
return None if rev.deleted.user else rev.user.text
|
||||
|
||||
def rev_list(self):
|
||||
# Outline for how we want to handle collapse_user=True
|
||||
# iteration rev.user prev_rev.user add prev_rev?
|
||||
@ -108,27 +113,13 @@ class WikiqPage:
|
||||
yield rev
|
||||
return
|
||||
|
||||
collapsed_revs = 1
|
||||
prev_rev = next(self.mwpage)
|
||||
prev_rev.collapsed_revs = collapsed_revs
|
||||
|
||||
for rev in self.mwpage:
|
||||
# yield if this is the last edit in a seq by a user and reset
|
||||
# also yield if we don't know who the user is
|
||||
|
||||
if rev.deleted.user or prev_rev.deleted.user or rev.user.text != prev_rev.user.text:
|
||||
yield prev_rev
|
||||
collapsed_revs = 1
|
||||
rev.collapsed_revs = collapsed_revs
|
||||
else:
|
||||
# Otherwise, collapse revision.
|
||||
collapsed_revs += 1
|
||||
rev.collapsed_revs = collapsed_revs
|
||||
|
||||
prev_rev = rev
|
||||
|
||||
# also yield the final time
|
||||
yield prev_rev
|
||||
for _, revs in groupby(self.mwpage, self.user_text):
|
||||
# All revisions are either from the same user, or this is a single
|
||||
# revision where the user is missing.
|
||||
revs = list(revs)
|
||||
rev = revs[-1]
|
||||
rev.collapsed_revs = len(revs)
|
||||
yield rev
|
||||
|
||||
def __iter__(self):
|
||||
return self.__revisions
|
||||
|
Loading…
Reference in New Issue
Block a user