Xqt has uploaded a new change for review. https://gerrit.wikimedia.org/r/135745
Change subject: [WIP] version history code cleanup ...................................................................... [WIP] version history code cleanup - New Page.revisions() generator to retrieve Revision objects. This is derived from site.loadrevisions and will solve some bugs like 64188 and 55261 - getVersionHistory() and fullVersionHistory() will become deprecated state and it is recommended to use revisions() instead. - __getitem__() if Revision class enables indexed read access to its values. This may be used for format strings, a sample is made in getVersionHistoryTable() - deprecate arg "forceReload" is removed on some methods ... to be continued Change-Id: I35fe88849655b7dda3763ac7fa37802d8149e636 --- M pywikibot/page.py 1 file changed, 46 insertions(+), 28 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core refs/changes/45/135745/1 diff --git a/pywikibot/page.py b/pywikibot/page.py index b40ec42..a824d10 100644 --- a/pywikibot/page.py +++ b/pywikibot/page.py @@ -1221,9 +1221,22 @@ """ return self.site.getredirtarget(self) + def revisions(self, getText=False, reverseOrder=False, step=None, + total=None): + """Generator which load the version history page and yield history + information as Revision class + + """ + self.site.loadrevisions(self, getText=getText, rvdir=reverseOrder, + step=step, total=total) + return (self._revisions[rev] for i, rev in + enumerate(sorted(self._revisions, reverse=not reverseOrder), 1) + if i <= total or total is None) + # BREAKING CHANGE: in old framework, default value for getVersionHistory # returned no more than 500 revisions; now, it iterates # all revisions unless 'total' argument is used + @deprecated("Page.revisions()") @deprecate_arg("forceReload", None) @deprecate_arg("revCount", "total") @deprecate_arg("getAll", None) @@ -1240,32 +1253,30 @@ @param total: iterate no more than this number of revisions in total """ - self.site.loadrevisions(self, getText=False, rvdir=reverseOrder, - step=step, total=total) - return [(self._revisions[rev].revid, - self._revisions[rev].timestamp, - self._revisions[rev].user, - self._revisions[rev].comment - ) for rev in sorted(self._revisions, - reverse=not reverseOrder) + return [(rev.revid, + rev.timestamp, + rev.user, + rev.comment + ) for rev in self.revisions(reverseOrder=reverseOrder, + step=step, total=total) ] - def getVersionHistoryTable(self, forceReload=False, reverseOrder=False, - step=None, total=None): + @deprecate_arg("forceReload", None) + def getVersionHistoryTable(self, reverseOrder=False, step=None, + total=None): """Return the version history as a wiki table.""" result = '{| class="wikitable"\n' result += '! oldid || date/time || username || edit summary\n' - for oldid, time, username, summary \ - in self.getVersionHistory(forceReload=forceReload, - reverseOrder=reverseOrder, - step=step, total=total): + for rev in self.revisions(reverseOrder=reverseOrder, + step=step, total=total): result += '|----\n' - result += '| %s || %s || %s || <nowiki>%s</nowiki>\n'\ - % (oldid, time, username, summary) + result += '| %(revid)s || %(timestamp)s || %(user)s || <nowiki>%(comment)s</nowiki>\n'\ + % rev result += '|}\n' return result + @deprecated("Page.revisions(getText=True)") def fullVersionHistory(self, reverseOrder=False, step=None, total=None): """Iterate previous versions including wikitext. @@ -1276,15 +1287,13 @@ edit date/time, user name and content """ - self.site.loadrevisions(self, getText=True, - rvdir=reverseOrder, - step=step, total=total) - return [(self._revisions[rev].revid, - self._revisions[rev].timestamp, - self._revisions[rev].user, - self._revisions[rev].text - ) for rev in sorted(self._revisions, - reverse=not reverseOrder) + return [(rev.revid, + rev.timestamp, + rev.user, + rev.text, + ) for rev in self.revisions(getText=True, + reverseOrder=reverseOrder, + step=step, total=total) ] def contributingUsers(self, step=None, total=None): @@ -1294,9 +1303,7 @@ @param total: iterate no more than this number of revisions in total """ - edits = self.getVersionHistory(step=step, total=total) - users = set([edit[2] for edit in edits]) - return users + return set(rev.user for rev in self.revisions(step=step, total=total)) @deprecate_arg("throttle", None) def move(self, newtitle, reason=None, movetalkpage=True, sysop=False, @@ -3064,6 +3071,7 @@ class Revision(object): """A structure holding information about a single revision of a Page.""" + def __init__(self, revid, timestamp, user, anon=False, comment=u"", text=None, minor=False): """All parameters correspond to object attributes (e.g., revid @@ -3093,6 +3101,16 @@ self.comment = comment self.minor = minor + def __getitem__(self, key): + """Revision class may also give access to its values by keys + + e.g. revid parameter may be assigned by revision['revid'] + as well as revision.revid. This makes formatting strings easyer, + see getVersionHistoryTable() as a sample + + """ + return getattr(self, key) + class Link(ComparableMixin): """A Mediawiki link (local or interwiki) -- To view, visit https://gerrit.wikimedia.org/r/135745 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I35fe88849655b7dda3763ac7fa37802d8149e636 Gerrit-PatchSet: 1 Gerrit-Project: pywikibot/core Gerrit-Branch: master Gerrit-Owner: Xqt <i...@gno.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits