Revision: 8376 Author: russblau Date: 2010-08-04 14:02:17 +0000 (Wed, 04 Aug 2010)
Log Message: ----------- Fix bug 3036372 (Missing argument in page.put) - this allows use of the "botflag" parameter to .put and .save to override the default behavior, which is to set the Bot flag on any edit by a bot account and not to set it on edits by non-bot accounts. Use of this flag may be contrary to bot policies on some wikis!
Modified Paths: -------------- branches/rewrite/pywikibot/page.py branches/rewrite/pywikibot/site.py
Modified: branches/rewrite/pywikibot/page.py =================================================================== --- branches/rewrite/pywikibot/page.py 2010-08-01 13:52:56 UTC (rev 8375) +++ branches/rewrite/pywikibot/page.py 2010-08-04 14:02:17 UTC (rev 8376) @@ -638,8 +638,8 @@ # no restricting template found return True
- def save(self, comment=None, watch=None, minor=True, force=False, - async=False, callback=None): + def save(self, comment=None, watch=None, minor=True, botflag=None, + force=False, async=False, callback=None): """Save the current contents of page's text to the wiki.
@param comment: The edit summary for the modification (optional, but @@ -651,6 +651,8 @@ @type watch: bool or None @param minor: if True, mark this edit as minor @type minor: bool + @param botflag: if True, mark this edit as made by a bot (default: + True if user has bot status, False if not) @param force: if True, ignore botMayEdit() setting @type force: bool @param async: if True, launch a separate thread to save @@ -675,18 +677,22 @@ raise pywikibot.PageNotSaved( "Page %s not saved; editing restricted by {{bots}} template" % self.title(asLink=True)) + if botflag is None: + botflag = ("bot" in self.site.userinfo["rights"]) if async: - pywikibot.async_request(self._save, comment, minor, watchval, - async, callback) + pywikibot.async_request(self._save, comment=comment, minor=minor, + watchval=watchval, botflag=botflag, + async=async, callback=callback) else: - self._save(comment, minor, watchval, async, callback) + self._save(comment=comment, minor=minor, watchval=watchval, + botflag=botflag, async=async, callback=callback)
- def _save(self, comment, minor, watchval, async, callback): + def _save(self, comment, minor, watchval, botflag, async, callback): err = None link = self.title(asLink=True) try: done = self.site.editpage(self, summary=comment, minor=minor, - watch=watchval) + watch=watchval, bot=botflag) if not done: pywikibot.warning(u"Page %s not saved" % link) raise pywikibot.PageNotSaved(link) @@ -707,7 +713,7 @@ callback(self, err)
def put(self, newtext, comment=u'', watchArticle=None, minorEdit=True, - force=False, async=False, callback=None): + botflag=None, force=False, async=False, callback=None): """Save the page with the contents of the first argument as the text.
This method is maintained primarily for backwards-compatibility. @@ -719,11 +725,12 @@
""" self.text = newtext - return self.save(comment, watchArticle, minorEdit, force, - async, callback) + return self.save(comment=comment, watch=watchArticle, + minor=minorEdit, botflag=botflag, force=force, + async=async, callback=callback)
def put_async(self, newtext, comment=u'', watchArticle=None, - minorEdit=True, force=False, callback=None): + minorEdit=True, botflag=None, force=False, callback=None): """Put page on queue to be saved to wiki asynchronously.
Asynchronous version of put (takes the same arguments), which places @@ -733,8 +740,8 @@
""" return self.put(newtext, comment=comment, watchArticle=watchArticle, - minorEdit=minorEdit, force=force, async=True, - callback=callback) + minorEdit=minorEdit, botflag=botflag, force=force, + async=True, callback=callback)
def watch(self, unwatch=False): """Add or remove this page to/from bot account's watchlist.
Modified: branches/rewrite/pywikibot/site.py =================================================================== --- branches/rewrite/pywikibot/site.py 2010-08-01 13:52:56 UTC (rev 8375) +++ branches/rewrite/pywikibot/site.py 2010-08-04 14:02:17 UTC (rev 8376) @@ -2288,7 +2288,7 @@ }
def editpage(self, page, summary, minor=True, notminor=False, - recreate=True, createonly=False, watch=None): + bot=True, recreate=True, createonly=False, watch=None): """Submit an edited Page object to be saved to the wiki.
@param page: The Page to be saved; its .text property will be used @@ -2308,6 +2308,7 @@ * unwatch: remove the page from the watchlist * preferences: use the preference settings (Default) * nochange: don't change the watchlist + @param botflag: if True, mark edit with bot flag @return: True if edit succeeded, False if it failed
""" @@ -2331,23 +2332,23 @@ if lastrev is not None and page.latestRevision() != lastrev: raise EditConflict( "editpage: Edit conflict detected; saving aborted.") - req = api.Request(site=self, action="edit", - title=page.title(withSection=False), - text=text, token=token, summary=summary) + params = dict(action="edit", + title=page.title(withSection=False), + text=text, token=token, summary=summary) + if bot: + params["bot"] = "" if lastrev is not None: - req["basetimestamp"] = page._revisions[lastrev].timestamp + params["basetimestamp"] = page._revisions[lastrev].timestamp if minor: - req['minor'] = "" + params['minor'] = "" elif notminor: - req['notminor'] = "" - if 'bot' in self.userinfo['groups']: - req['bot'] = "" + params['notminor'] = "" if recreate: - req['recreate'] = "" + params['recreate'] = "" if createonly: - req['createonly'] = "" + params['createonly'] = "" if watch in ["watch", "unwatch", "preferences", "nochange"]: - req['watch'] = watch + params['watchlist'] = watch elif watch: pywikibot.warning( u"editpage: Invalid watch value '%(watch)s' ignored." @@ -2355,7 +2356,8 @@ ## FIXME: API gives 'badmd5' error ## md5hash = md5() ## md5hash.update(urllib.quote_plus(text.encode(self.encoding()))) -## req['md5'] = md5hash.digest() +## params['md5'] = md5hash.digest() + req = api.Request(site=self, **params) while True: try: result = req.submit()