Hi Sorawee,
On 24 January 2014 02:09, Sorawee Porncharoenwase
<nullzero.free(a)gmail.com>wrote;wrote:
I think that we should have a function which tries to
login and return the
status whether that logging in is successful. What we currently do (for
example in APISite.deletepage()) is that we "try: site.login(sysop=True)
except pywikibot.NoUsername: blah blah" Isn't it better to have something
like "if site.loginABC(sysop=True): blah blah else: blah blah"
In the case of deletepage(), the 'must_be' decorator should have been used.
That function takes care of calling self.login(sysop=True/False) to make
sure the user is logged in as the correct user. So, basically,
def deletepage(self, page, summary):
"""Delete page from the wiki. Requires appropriate privilege
level.
@param page: Page to be deleted.
@param summary: Edit summary (required!).
"""
try:
self.login(sysop=True)
except pywikibot.NoUsername as e:
raise NoUsername("delete: Unable to login as sysop (%s)"
% e.__class__.__name__)
if not self.logged_in(sysop=True):
raise NoUsername("delete: Unable to login as sysop")
token = self.token(page, "delete")
should really be
@must_be('sysop')
def deletepage(self, page, summary):
"""Delete page from the wiki. Requires appropriate privilege
level.
@param page: Page to be deleted.
@param summary: Edit summary (required!).
"""
token = self.token(page, "delete")
As for
http://lists.wikimedia.org/pipermail/pywikipedia-bugs/2014-January/007200.h…;
it should check whether a sysop user is *configured*, not whether the
current user is the sysop - you're completely right. The way to do that is
to call
if site.username(sysop=True):
# a sysop username has been configured
else:
# otherwise
The actual account switching is then done in the site object using the
must_be wrapper.
Merlijn