Revision: 5483 Author: filnik Date: 2008-05-31 13:43:31 +0000 (Sat, 31 May 2008)
Log Message: ----------- Fixing some fixMes let by NicDumZ. Commenting except badtitle for testing purpose to catch it in a better way... but to tell the truth, I think it's not a good idea :P let's try btw.
Modified Paths: -------------- trunk/pywikipedia/welcome.py
Modified: trunk/pywikipedia/welcome.py =================================================================== --- trunk/pywikipedia/welcome.py 2008-05-31 11:34:17 UTC (rev 5482) +++ trunk/pywikipedia/welcome.py 2008-05-31 13:43:31 UTC (rev 5483) @@ -390,9 +390,7 @@
def parselog(wsite, raw, talk, number): """ The function to load the users (only users who have a certain number of edits) """ - #FIXME : Why is there a need for this 'done' list ? We're not even checking for duplicates... - done = list() - + someone_found = False autocreated = wsite.mediawiki_message('newuserlog-autocreate-entry')
# I search with a regex how many user have not the talk page @@ -406,9 +404,8 @@ p = re.compile(reg, re.UNICODE)
for x in p.finditer(raw): + someone_found = True username = x.group('user') - if username not in done: - done.append(username) #skip autocreated users (SUL) if autocreated in x.group('reason'): wikipedia.output(u'%s has been created automatically, skipping...' % username) @@ -422,6 +419,7 @@
#FIXME: It counts the first 50 edits # if number > 50, it won't work + # (not *so* useful, it should be enough). contribnum = contribs.count('<li>')
if contribnum >= number: @@ -436,7 +434,7 @@ # That user mustn't be welcomed. continue
- if len(done) == 0: + if someone_found: wikipedia.output(u'There is nobody to be welcomed...') else: wikipedia.output(u'\nLoaded all users...') @@ -778,10 +776,6 @@ whitelist_default = list() # Join the whitelist words. whitelist = list_white + whitelist_default - # List of words that the bot understands when it asks the operator for input. - block = ("B", "b", "Blocco", "blocco", "block", "bloc", "Block", "Bloc", 'Report', 'report') - say_hi = ("S", "s", "Saluto", "saluto", "Welcome", "welcome", 'w', 'W', 'say hi', - 'Say hi', 'Hi', 'hi', 'h', 'hello', 'Hello')
# think about non-wikimedia wikis. Use Site functions. URL = wsite.log_address(limit, 'newusers') @@ -830,64 +824,54 @@ # Understand if the user has a bad-username. username = str(username).encode(config.console_encoding) lower_uname = username.lower() - for word in elenco: + for word in elenco: # elenco = list of bad words if word.lower() in lower_uname: baduser = True - # What's this ? Docu please. + # The format of the italian report template is: + # {{Reported|NICKNAME|BADWORD}} + # The nickname is already added before and + # here we add the "badword" part, but + # this function is used only in the italian wiki. if wsite.lang == 'it': final_rep = "%s%s}}" % (rep_text, word) break else: final_rep = rep_text break - # Checking in the whitelist... - - # FIXME I believe this is broken + # Checking in the whitelist... for xy in whitelist: if xy.lower() in lower_uname: - # the next line does *not* change username - # besides replacing xy is useless if only xy.lower() - # is in username - lower_uname.replace(xy, '') + # Deleting the white word found and check + # the word that remains for badwords inside. + lower_uname = lower_uname.replace(xy, '') for word in elenco: baduser = word.lower() in lower_uname break # He has a badusername, trying to report him... if baduser: - # FIXME : while 1 ? What the... ? Do we need a while here ? Documentation please. - while 1: - if ask: - wikipedia.output(u'%s may have an unwanted username, what shall I do?' % usertalkpage.titleWithoutNamespace()) - - # FIXME : consider using inputChoice here - - answer = wikipedia.input(u'[B]lock or [W]elcome?') - for w in block: - if w in answer: - if not usertalkpage.exists(): - # Check if the user has been already blocked (second check). - if blocked(wsite, username): - wikipedia.output(u'%s has been blocked! Skipping him...' % usertalkpage.titleWithoutNamespace()) - # FIXME: that continue will continue on "for w in block:". Do we really want to do this ? - continue - report(wsite, rep_page, username, com, final_rep) - break - else: - wikipedia.output(u'The discussion page of the bad-user already exists...') - running = False - #FIXME : Why don't we break here ? - for w in say_hi: - if w in answer: - baduser = False - break - else: - wikipedia.output(u'%s is possibly an unwanted username. He will be reported.' % usertalkpage.titleWithoutNamespace()) + if ask: + answer = wikipedia.inputChoice(u'%s may have an unwanted username, do you want to report this user?' + % usertalkpage.titleWithoutNamespace(), ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N') + if answer.lower() in ['yes', 'y']: if not usertalkpage.exists(): + # Check if the user has been already blocked (second check). + if blocked(wsite, username): + wikipedia.output(u'%s has been blocked! Skipping him...' % usertalkpage.titleWithoutNamespace()) report(wsite, rep_page, username, com, final_rep) - break + continue else: wikipedia.output(u'The discussion page of the bad-user already exists...') - break + continue + if answer.lower() in ['no', 'n', 'nope']: + baduser = False + else: + wikipedia.output(u'%s is possibly an unwanted username. He will be reported.' % usertalkpage.titleWithoutNamespace()) + if not usertalkpage.exists(): + report(wsite, rep_page, username, com, final_rep) + continue + else: + wikipedia.output(u'The discussion page of the bad-user already exists...') + continue # He has a good username, welcome! else: if not usertalkpage.exists(): @@ -944,34 +928,32 @@ time.sleep(time_variable) # If not recursive, break. elif recursive == False: - #FIXME : others "yields" yield a single integer. Why are we doing this here ? 'STOP' is not even being retrieved - yield [number_user, 'STOP'] + yield number_user + break
if __name__ == "__main__": # Use try and finally, to put the wikipedia.stopme() always at the end of the code. try: - try: - number_user = None - settingsBot = mainSettings() - # Take two settings for the "finally" block. - filename = settingsBot[2] - random = settingsBot[11] - savedata = settingsBot[13] - # I need to know what is the number_user, in this way I get it. - #FIXME: Do we need to do this ? - # in other words, why can't main() return a SINGLE value, - # an integer, number_user ? - for x in main(settingsBot): - try: - number_user = x[0] - except TypeError: - number_user = x - else: - break - except wikipedia.BadTitle: - #FIXME : This kind of error should be catched earlier. - wikipedia.output(u"Wikidown or server's problem. Quit.") - wikipedia.stopme() + #try: + number_user = 0 + settingsBot = mainSettings() + # Take two settings for the "finally" block. + filename = settingsBot[2] + random = settingsBot[11] + savedata = settingsBot[13] + # I need to know what is the number_user, in this way I get it. + # If recursive, just wait some error or something to get the number + # and save it, otherwise just save the first one. + for number_user in main(settingsBot): + pass # number_user get with the for cicle the value + #except wikipedia.BadTitle: + # If the server is down, pywikipediabot raise that error. + # Better to catch it in order not to get useless errors + # (in particular if you're running that script on toolserver). + # FixME: put this except in a better "place" (next to the part + # that raises the error) + # wikipedia.output(u"Wikidown or server's problem. Quit.") + # wikipedia.stopme() finally: # If there is the savedata, the script must save the number_user. if random and savedata and number_user != None: