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 <[email protected]>
Gerrit-Reviewer: John Vandenberg <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Merlijn van Deen <[email protected]>
Gerrit-Reviewer: Mpaa <[email protected]>
Gerrit-Reviewer: Ricordisamoa <[email protected]>
Gerrit-Reviewer: XZise <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to