jenkins-bot has submitted this change and it was merged.
Change subject: Pages revisions code cleanup
......................................................................
Pages revisions code cleanup
- Use Page.revisions() generator to retrieve Revision objects.
This is derived from site.loadrevisions and will solve some
bugs like T66188 and T57261
- add rollback parameter for revisions method already supported
by loadrevisions
- getVersionHistory() and fullVersionHistory() are deprecated
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 some args on several methods, rename "reverseOrder"
with "reverse" and "getText" with "content"
- use Page.revisions methid for latest_revision_id() and
latest_revision() methods
Change-Id: I35fe88849655b7dda3763ac7fa37802d8149e636
---
M pywikibot/page.py
1 file changed, 41 insertions(+), 39 deletions(-)
Approvals:
John Vandenberg: Looks good to me, but someone else must approve
Ladsgroup: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/page.py b/pywikibot/page.py
index 6fa838d..2c5766b 100644
--- a/pywikibot/page.py
+++ b/pywikibot/page.py
@@ -420,7 +420,7 @@
def latest_revision_id(self):
"""Return the current revision id for this
page."""
if not hasattr(self, '_revid'):
- self.site.loadrevisions(self)
+ self.revisions(self)
return self._revid
@deprecated('latest_revision_id')
@@ -431,10 +431,7 @@
@property
def latest_revision(self):
"""Return the current revision for this page."""
- rev = self.latest_revision_id
- if rev not in self._revisions:
- self.site.loadrevisions(self)
- return self._revisions[rev]
+ return next(self.revisions(content=True, total=1))
@property
def text(self):
@@ -1371,68 +1368,63 @@
"""
return self.site.getredirtarget(self)
- def revisions(self, reverseOrder=False, step=None, total=None):
+ @deprecated_args(getText='content', reverseOrder='reverse')
+ def revisions(self, reverse=False, step=None, total=None, content=False,
+ rollback=False):
"""Generator which loads the version history as Revision
instances."""
# TODO: Only request uncached revisions
- self.site.loadrevisions(self, getText=False, rvdir=reverseOrder,
- step=step, total=total)
+ self.site.loadrevisions(self, getText=content, rvdir=reverse,
+ step=step, total=total, rollback=rollback)
return (self._revisions[rev] for rev in
- sorted(self._revisions, reverse=not reverseOrder)[:total])
+ sorted(self._revisions, reverse=not reverse)[:total])
# 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_args(forceReload=None, revCount="total", getAll=None)
- def getVersionHistory(self, reverseOrder=False, step=None, total=None):
+ @deprecated('Page.revisions()')
+ @deprecated_args(forceReload=None, revCount='total', getAll=None,
+ reverseOrder='reverse')
+ def getVersionHistory(self, reverse=False, step=None, total=None):
"""Load the version history page and return history information.
Return value is a list of tuples, where each tuple represents one
edit and is built of revision id, edit date/time, user name, and
edit summary. Starts with the most current revision, unless
- reverseOrder is True.
+ reverse is True.
@param step: limit each API call to this number of revisions
@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 [rev.hist_entry()
- for revid, rev in sorted(self._revisions.items(),
- reverse=not reverseOrder)
- ][:total]
+ for rev in self.revisions(reverse=reverse,
+ step=step, total=total)
+ ]
- @deprecated_args(forceReload=None)
- def getVersionHistoryTable(self, reverseOrder=False, step=None, total=None):
+ @deprecated_args(forceReload=None, reverseOrder='reverse')
+ def getVersionHistoryTable(self, reverse=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 entry in self.getVersionHistory(reverseOrder=reverseOrder,
- step=step, total=total):
+ for entry in self.revisions(reverse=reverse, step=step, total=total):
result += '|----\n'
- result += '| %s || %s || %s || <nowiki>%s</nowiki>\n' %
entry
+ result += ('| {r.revid} || {r.timestamp} || {r.user} || '
+
'<nowiki>{r.comment}</nowiki>\n'.format(r=entry))
result += '|}\n'
return result
- def fullVersionHistory(self, reverseOrder=False, step=None,
- total=None, rollback=False):
+ @deprecated("Page.revisions(content=True)")
+ @deprecated_args(reverseOrder='reverse', rollback=None)
+ def fullVersionHistory(self, reverse=False, step=None, total=None):
"""Iterate previous versions including wikitext.
Takes same arguments as getVersionHistory.
- @param rollback: Returns rollback token.
- @return: A generator that yields tuples consisting of revision ID,
- edit date/time, user name and content
-
"""
- self.site.loadrevisions(self, getText=True, rvdir=reverseOrder,
- step=step, total=total, rollback=rollback)
-
- return [rev.hist_entry()
- for revid, rev in sorted(self._revisions.items(),
- reverse=not reverseOrder)
- ][:total]
+ return [rev.full_hist_entry()
+ for rev in self.revisions(content=True, reverse=reverse,
+ step=step, total=total)
+ ]
def contributingUsers(self, step=None, total=None):
"""Return a set of usernames (or IPs) of users who edited this
page.
@@ -1441,9 +1433,8 @@
@param total: iterate no more than this number of revisions in total
"""
- history = self.getVersionHistory(step=step, total=total)
- users = set(entry.user for entry in history)
- return users
+ return set(entry.user for entry in self.revisions(step=step,
+ total=total))
@deprecated('oldest_revision')
def getCreator(self):
@@ -4157,6 +4148,17 @@
return Revision.FullHistEntry(self.revid, self.timestamp, self.user,
self.text, self.rollbacktoken)
+ def __getitem__(self, key):
+ """Give access to Revision class values by 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 with
+ % operator easier.
+
+ """
+ return getattr(self, key)
+
class Link(ComparableMixin):
--
To view, visit
https://gerrit.wikimedia.org/r/135745
To unsubscribe, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I35fe88849655b7dda3763ac7fa37802d8149e636
Gerrit-PatchSet: 7
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Mpaa <mpaa.wiki(a)gmail.com>
Gerrit-Reviewer: Ricordisamoa <ricordisamoa(a)openmailbox.org>
Gerrit-Reviewer: XZise <CommodoreFabianus(a)gmx.de>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>