John Vandenberg has uploaded a new change for review. https://gerrit.wikimedia.org/r/227888
Change subject: Increase usage of assert_valid_iter_params ...................................................................... Increase usage of assert_valid_iter_params Also rename APISite.loadrevisions rvdir to reverse and provide backwards compatability for APISite.recentchanges rcdir. Change-Id: Ia7a7620c53aa26d4fc4ae6870d275c8b73bcaf65 --- M pywikibot/page.py M pywikibot/site.py 2 files changed, 60 insertions(+), 45 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core refs/changes/88/227888/1 diff --git a/pywikibot/page.py b/pywikibot/page.py index 278ed54..7f8be0d 100644 --- a/pywikibot/page.py +++ b/pywikibot/page.py @@ -1472,7 +1472,7 @@ rollback=False, starttime=None, endtime=None): """Generator which loads the version history as Revision instances.""" # TODO: Only request uncached revisions - self.site.loadrevisions(self, getText=content, rvdir=reverse, + self.site.loadrevisions(self, getText=content, reverse=reverse, starttime=starttime, endtime=endtime, step=step, total=total, rollback=rollback) return (self._revisions[rev] for rev in diff --git a/pywikibot/site.py b/pywikibot/site.py index e77315c..d5164b3 100644 --- a/pywikibot/site.py +++ b/pywikibot/site.py @@ -1979,16 +1979,21 @@ 'articlepath must end with /$1' return self.siteinfo['general']['articlepath'][:-2] - def assert_valid_iter_params(self, msg_prefix, start, end, reverse): + def assert_valid_iter_params(self, msg_prefix, start, end, reverse, + suffix='', exception=Error): """Validate iterating API parameters.""" + start_name = 'start' + suffix + end_name = 'end' + suffix if reverse: if end < start: - raise Error( - "%s: end must be later than start with reverse=True" % msg_prefix) + raise exception( + '%s: %s(%r) must be greater than %s(%r) with reverse=True' + % (msg_prefix, end_name, end, start_name, start)) else: if start < end: - raise Error( - "%s: start must be later than end with reverse=False" % msg_prefix) + raise exception( + '%s: %s(%r) must be greater than %s(%r) with reverse=False' + % (msg_prefix, start_name, start, end_name, end)) def has_right(self, right, sysop=False): """Return true if and only if the user has a specific right. @@ -3278,6 +3283,7 @@ @type sortby: str @param reverse: if True, generate results in reverse order (default False) + @type reverse: bool @param starttime: if provided, only generate pages added after this time; not valid unless sortby="timestamp" @type starttime: pywikibot.Timestamp @@ -3316,12 +3322,15 @@ raise ValueError( "categorymembers: invalid sortby value '%s'" % sortby) - if starttime and endtime and starttime > endtime: - raise ValueError( - "categorymembers: starttime must be before endtime") - if startsort and endsort and startsort > endsort: - raise ValueError( - "categorymembers: startsort must be less than endsort") + if starttime and endtime: + self.assert_valid_iter_params('categorymembers', + starttime, endtime, reverse, + suffix='time', exception=ValueError) + + if startsort and endsort: + self.assert_valid_iter_params('categorymembers', + startsort, endsort, reverse, + suffix='sort', exception=ValueError) if isinstance(member_type, basestring): member_type = set([member_type]) @@ -3401,21 +3410,22 @@ **cmargs) return cmgen + @deprecated_args(rvdir='reverse') def loadrevisions(self, page, getText=False, revids=None, startid=None, endid=None, starttime=None, - endtime=None, rvdir=None, user=None, excludeuser=None, + endtime=None, reverse=False, user=None, excludeuser=None, section=None, sysop=False, step=None, total=None, rollback=False): """Retrieve and store revision information. By default, retrieves the last (current) revision of the page, unless any of the optional parameters revids, startid, endid, - starttime, endtime, rvdir, user, excludeuser, or limit are + starttime, endtime, reverse, user, excludeuser, or limit are specified. Unless noted below, all parameters not specified default to False. - If rvdir is False or not specified, startid must be greater than + If reverse is False (default), startid must be greater than endid if both are specified; likewise, starttime must be greater - than endtime. If rvdir is True, these relationships are reversed. + than endtime. If reverse is True, these relationships are reversed. @param page: retrieve revisions of this Page (required unless ids is specified) @@ -3432,8 +3442,9 @@ @param endid: stop upon retrieving this revid @param starttime: retrieve revisions starting at this Timestamp @param endtime: stop upon reaching this Timestamp - @param rvdir: if false, retrieve newest revisions first (default); - if true, retrieve earliest first + @param reverse: if False, retrieve newest revisions first (default); + if True, retrieve earliest first + @type reverse: bool @param user: retrieve only revisions authored by this user @param excludeuser: retrieve all revisions not authored by this user @param sysop: if True, switch to sysop account (if available) to @@ -3445,7 +3456,7 @@ endid is None and starttime is None and endtime is None and - rvdir is None and + reverse is None and user is None and excludeuser is None and step is None and @@ -3457,19 +3468,13 @@ raise ValueError( "loadrevisions: startid/endid combined with starttime/endtime") if starttime is not None and endtime is not None: - if rvdir and starttime >= endtime: - raise ValueError( - "loadrevisions: starttime > endtime with rvdir=True") - if (not rvdir) and endtime >= starttime: - raise ValueError( - "loadrevisions: endtime > starttime with rvdir=False") + self.assert_valid_iter_params('loadrevisions', + starttime, endtime, reverse, + suffix='time', exception=ValueError) if startid is not None and endid is not None: - if rvdir and startid >= endid: - raise ValueError( - "loadrevisions: startid > endid with rvdir=True") - if (not rvdir) and endid >= startid: - raise ValueError( - "loadrevisions: endid > startid with rvdir=False") + self.assert_valid_iter_params('loadrevisions', + startid, endid, reverse, + suffix='id', exception=ValueError) if self.has_extension('ProofreadPage'): rvargs = {'type_arg': 'info|revisions|proofread'} @@ -3493,10 +3498,8 @@ ids = u"|".join(unicode(r) for r in revids) rvargs[u"revids"] = ids - if rvdir: + if reverse: rvargs[u"rvdir"] = u"newer" - elif rvdir is not None: - rvargs[u"rvdir"] = u"older" if startid: rvargs[u"rvstartid"] = startid if endid: @@ -3618,6 +3621,7 @@ level; can only be used if protect_type is specified @param reverse: if True, iterate in reverse Unicode lexigraphic order (default: iterate in forward order) + @type reverse: bool @param content: if True, load the current content of each iterated page (default False) @raises KeyError: the namespace identifier was not resolved @@ -3720,6 +3724,7 @@ @param prefix: Only yield categories starting with this string. @param reverse: if True, iterate in reverse Unicode lexigraphic order (default: iterate in forward order) + @type reverse: bool @param content: if True, load the current content of each iterated page (default False); note that this means the contents of the category description page, not the pages that are members of the category @@ -3804,6 +3809,7 @@ @param minsize: only iterate images of at least this many bytes @param maxsize: only iterate images of no more than this many bytes @param reverse: if True, iterate in reverse lexigraphic order + @type reverse: bool @param sha1: only iterate image (it is theoretically possible there could be more than one) with this sha1 hash @param sha1base36: same as sha1 but in base 36 @@ -3841,21 +3847,16 @@ @param starttime: start iterating at this Timestamp @param endtime: stop iterating at this Timestamp @param reverse: if True, iterate oldest blocks first (default: newest) + @type reverse: bool @param blockids: only iterate blocks with these id numbers @param users: only iterate blocks affecting these usernames or IPs """ if starttime and endtime: - if reverse: - if starttime > endtime: - raise Error( - "blocks: " - "starttime must be before endtime with reverse=True") - else: - if endtime > starttime: - raise Error( - "blocks: " - "endtime must be before starttime with reverse=False") + self.assert_valid_iter_params('blocks', + starttime, endtime, reverse, + suffix='time') + bkgen = self._generator(api.ListGenerator, type_arg="blocks", step=step, total=total) bkgen.request["bkprop"] = "id|user|by|timestamp|expiry|reason|range|flags" @@ -3936,6 +3937,7 @@ @param start: only iterate entries from and after this Timestamp @param end: only iterate entries up to and through this Timestamp @param reverse: if True, iterate oldest entries first (default: newest) + @type reverse: bool @raises KeyError: the namespace identifier was not resolved @raises TypeError: the namespace identifier has an inappropriate type such as bool, or an iterable with more than one namespace @@ -3970,7 +3972,7 @@ @deprecated_args(returndict=None, nobots=None, rcshow=None, rcprop=None, rctype='changetype', revision=None, repeat=None, - rcstart='start', rcend='end', rcdir=None, + rcstart='start', rcend='end', rcdir='reverse', includeredirects='showRedirects', namespace='namespaces', rcnamespace='namespaces', number='total', rclimit='total') def recentchanges(self, start=None, end=None, reverse=False, @@ -4022,6 +4024,10 @@ @raises TypeError: a namespace identifier has an inappropriate type such as NoneType or bool """ + # Backwards compatibility with compat 'rcdir' + if isinstance(reverse, basestring): + reverse = True if reverse == 'newest' else False + if start and end: self.assert_valid_iter_params('recentchanges', start, end, reverse) @@ -4120,6 +4126,7 @@ @param start: Iterate contributions starting at this Timestamp @param end: Iterate contributions ending at this Timestamp @param reverse: Iterate oldest contributions first (default: newest) + @type reverse: bool @param namespaces: only iterate pages in these namespaces @type namespaces: iterable of basestring or Namespace key, or a single instance of those types. May be a '|' separated @@ -4168,6 +4175,7 @@ @param start: Iterate revisions starting at this Timestamp @param end: Iterate revisions ending at this Timestamp @param reverse: Iterate oldest revisions first (default: newest) + @type reverse: bool @param namespaces: only iterate pages in these namespaces @type namespaces: iterable of basestring or Namespace key, or a single instance of those types. May be a '|' separated @@ -4218,6 +4226,7 @@ @param start: Iterate revisions starting at this Timestamp @param end: Iterate revisions ending at this Timestamp @param reverse: Iterate oldest revisions first (default: newest) + @type reverse: bool @param get_text: If True, retrieve the content of each revision and an undelete token @@ -5383,6 +5392,12 @@ timestamp (unicode), length (int), an empty unicode string, username or IP address (str), comment (unicode). + @param start: Timestamp to start listing from + @type start: pywikibot.Timestamp + @param end: Timestamp to end listing at + @type end: pywikibot.Timestamp + @param reverse: if True, start with oldest pages (default: newest) + @type reverse: bool @param namespaces: only iterate pages in these namespaces @type namespaces: iterable of basestring or Namespace key, or a single instance of those types. May be a '|' separated -- To view, visit https://gerrit.wikimedia.org/r/227888 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia7a7620c53aa26d4fc4ae6870d275c8b73bcaf65 Gerrit-PatchSet: 1 Gerrit-Project: pywikibot/core Gerrit-Branch: master Gerrit-Owner: John Vandenberg <jay...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits