def reportBadAccount(self, name=None, final=False): #Queue process if name: if globalvar.confirm: answer = pywikibot.inputChoice( u'%s may have an unwanted username, do you want to report this user?' % name, ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N') if answer in ['a', 'all']: answer = 'y' globalvar.confirm = False else: answer = 'y' if answer.lower() in ['yes', 'y'] or not globalvar.confirm: showStatus() pywikibot.output( u'%s is possibly an unwanted username. It will be reported.' % name) if hasattr(self, '_BAQueue'): self._BAQueue.append(name) else: self._BAQueue = [name] if len(self._BAQueue) >= globalvar.dumpToLog or final: rep_text = '' #name in queue is max, put detail to report page pywikibot.output("Updating badname accounts to report page...") rep_page = pywikibot.Page( self.site, pywikibot.translate(self.site, report_page)) if rep_page.exists(): text_get = rep_page.get() else: text_get = u'This is a report page for the Bad-username, please translate me. --~~~' pos = 0 # The talk page includes "_" between the two names, in this way i replace them to " ". for usrna in self._BAQueue: username = pywikibot.url2link(usrna, self.site, self.site) n = re.compile(re.escape(username), re.UNICODE) y = n.search(text_get, pos) if y: pywikibot.output(u'%s is already in the report page.' % username) else: # Adding the log. rep_text += pywikibot.translate(self.site, report_text) % username if self.site.lang == 'it': rep_text = "%s%s}}" % (rep_text, self.bname[username]) com = i18n.twtranslate(self.site, 'welcome-bad_username') if rep_text != '': rep_page.put(text_get + rep_text, comment=com, force=True, minorEdit=True) showStatus(5) pywikibot.output(u'Reported') self.BAQueue = list() else: return True
def reportBadAccount(self, name=None, final=False): # Queue process if name: if globalvar.confirm: answer = wikipedia.inputChoice( u"%s may have an unwanted username, do you want to report this user?" % name, ["Yes", "No", "All"], ["y", "N", "a"], "N", ) if answer in ["a", "all"]: answer = "y" globalvar.confirm = False else: answer = "y" if answer.lower() in ["yes", "y"] or not globalvar.confirm: showStatus() wikipedia.output(u"%s is possibly an unwanted username. It will be reported." % name) if hasattr(self, "_BAQueue"): self._BAQueue.append(name) else: self._BAQueue = [name] if len(self._BAQueue) >= globalvar.dumpToLog or final: rep_text = "" # name in queue is max, put detail to report page wikipedia.output("Updating badname accounts to report page...") rep_page = wikipedia.Page(self.site, wikipedia.translate(self.site, report_page)) if rep_page.exists(): text_get = rep_page.get() else: text_get = u"This is a report page for the Bad-username, please translate me. --~~~" pos = 0 # The talk page includes "_" between the two names, in this way i replace them to " ". for usrna in self._BAQueue: username = wikipedia.url2link(usrna, self.site, self.site) n = re.compile(re.escape(username), re.UNICODE) y = n.search(text_get, pos) if y: wikipedia.output(u"%s is already in the report page." % username) else: # Adding the log. rep_text += wikipedia.translate(self.site, report_text) % username if self.site.lang == "it": rep_text = "%s%s}}" % (rep_text, self.bname[username]) com = wikipedia.translate(self.site, comment) if rep_text != "": rep_page.put(text_get + rep_text, comment=com, minorEdit=True) showStatus(5) wikipedia.output(u"Reported") self.BAQueue = list() else: return True
def reportBadAccount(self, name = None, final = False): #Queue process if name: if globalvar.confirm: answer = pywikibot.inputChoice(u'%s may have an unwanted username, do you want to report this user?' % name, ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N') if answer in ['a', 'all']: answer = 'y' globalvar.confirm = False else: answer = 'y' if answer.lower() in ['yes', 'y'] or not globalvar.confirm: showStatus() pywikibot.output(u'%s is possibly an unwanted username. It will be reported.' % name) if hasattr(self, '_BAQueue'): self._BAQueue.append(name) else: self._BAQueue = [name] if len(self._BAQueue) >= globalvar.dumpToLog or final: rep_text = '' #name in queue is max, put detail to report page pywikibot.output("Updating badname accounts to report page...") rep_page = pywikibot.Page(self.site, pywikibot.translate(self.site, report_page) ) if rep_page.exists(): text_get = rep_page.get() else: text_get = u'This is a report page for the Bad-username, please translate me. --~~~' pos = 0 # The talk page includes "_" between the two names, in this way i replace them to " ". for usrna in self._BAQueue: username = pywikibot.url2link(usrna, self.site, self.site) n = re.compile(re.escape(username), re.UNICODE) y = n.search(text_get, pos) if y: pywikibot.output(u'%s is already in the report page.' % username) else: # Adding the log. rep_text += pywikibot.translate(self.site, report_text) % username if self.site.lang == 'it': rep_text = "%s%s}}" % (rep_text, self.bname[username]) com = i18n.twtranslate(self.site, 'welcome-bad_username') if rep_text != '': rep_page.put(text_get + rep_text, comment = com, minorEdit = True) showStatus(5) pywikibot.output(u'Reported') self.BAQueue = list() else: return True
def logmaker(wsite, welcomed_users, logg, summ2, usernam, contrib): """ Deduct the correct sub page name form the current date """ safety = list() rightime = time.localtime(time.time()) year = str(rightime[0]) month = str(rightime[1]) day = str(rightime[2]) if len(month) == 1: month = u'0' + month if wsite.lang == 'it': target = logg + '/' + day + '/' + month + '/' + year else: target = logg + '/' + year + '/' + month + '/' + day page = wikipedia.Page(wsite, target) try: safety.append(page.get()) except wikipedia.NoPage: #Add the table heading each new period. See http://commons.wikimedia.org/wiki/Commons:Welcome_log if wsite.lang == 'it': safety.append(u'[[Categoria:Benvenuto log|{{subst:PAGENAME}}]]\n{|border="2" cellpadding="4" cellspacing="0" style="margin: 0.5em 0.5em 0.5em 1em; padding: 0.5em; background: #bfcda5; border: 1px #b6fd2c solid; border-collapse: collapse; font-size: 95%;"') elif wsite.lang == 'no': safety.append(u'[[Kategori:Velkomstlogg|{{PAGENAME}}]]\n{| class="wikitable"') else: safety.append(u'{|border="2" cellpadding="4" cellspacing="0" style="margin: 0.5em 0.5em 0.5em 1em; padding: 0.5em; background: #bfcda5; border: 1px #b6fd2c solid; border-collapse: collapse; font-size: 95%;"') # The string below show how the "Usernames" will be notified. safety.append('\n!%s' % usernam) # The string below show how the "Contribs" will be notified. safety.append(u'\n!%s' % contrib) for found_result in welcomed_users: # Adding the log... (don't take care of the variable's name...). luserpage = str(found_result[0]) luser = wikipedia.url2link(luserpage, wsite, wsite) edit_count = str(found_result[1]) logtext = u'\n{{WLE|user=%s|contribs=%s}}' % (luser, edit_count) safety.append(logtext) try: page.put(''.join(safety), summ2) return True except wikipedia.EditConflict: wikipedia.output(u'An edit conflict has occured. Pausing for 10 seconds before continuing.') time.sleep(10) page = wikipedia.Page(wsite, target) try: page.put(u''.join(safety), summ2) return True except wikipedia.EditConflict: wikipedia.output(u'Another edit conflict... Skipping...') return False
def makelogpage(self, queue=[]): if not globalvar.makeWelcomeLog: return None if len(queue) == 0: return None text = u'' logg = pywikibot.translate(self.site, logbook, fallback=False) if not logg: return None target = logg + '/' + time.strftime('%Y/%m/%d', time.localtime(time.time())) if self.site.lang == 'it': target = logg + '/' + time.strftime('%d/%m/%Y', time.localtime(time.time())) logPage = pywikibot.Page(self.site, target) if logPage.exists(): text = logPage.get() else: #make new log page showStatus() pywikibot.output( 'Log page is not exist, getting information for page creation') text = pywikibot.translate(self.site, logpage_header) text += u'\n!%s' % self.site.namespace(2) text += u'\n!%s' % capitalize( self.site.mediawiki_message('contribslink')) for result in queue: # Adding the log... (don't take care of the variable's name...). luser = pywikibot.url2link(result.name(), self.site, self.site) text += u'\n{{WLE|user=%s|contribs=%d}}' % (luser, result.editCount()) #update log page. while True: try: logPage.put(text, i18n.twtranslate(self.site, 'welcome-updating')) return True except pywikibot.EditConflict: pywikibot.output( u'An edit conflict has occured. Pausing for 10 seconds before continuing.' ) time.sleep(10)
def makelogpage(self, queue = []): if not globalvar.makeWelcomeLog: return None if len(queue) == 0: return None text = u'' logg = pywikibot.translate(self.site, logbook) if not logg: return None target = logg + '/' + time.strftime('%Y/%m/%d', time.localtime(time.time())) if self.site.lang == 'it': target = logg + '/' + time.strftime('%d/%m/%Y', time.localtime(time.time())) logPage = pywikibot.Page(self.site, target) if logPage.exists(): text = logPage.get() else: #make new log page showStatus() pywikibot.output('Log page is not exist, getting information for page creation') text = pywikibot.translate(self.site, logpage_header) text += u'\n!%s' % self.site.namespace(2) text += u'\n!%s' % capitalize(self.site.mediawiki_message('contribslink')) for result in queue: # Adding the log... (don't take care of the variable's name...). luser = pywikibot.url2link(result.name(), self.site, self.site) text += u'\n{{WLE|user=%s|contribs=%d}}' % (luser, result.editCount()) #update log page. while True: try: logPage.put(text, i18n.twtranslate(self.site, 'welcome-updating')) return True except pywikibot.EditConflict: pywikibot.output(u'An edit conflict has occured. Pausing for 10 seconds before continuing.') time.sleep(10)
def makelogpage(self, queue=[]): if not globalvar.makeWelcomeLog: return None if len(queue) == 0: return None text = u"" logg = wikipedia.translate(self.site, logbook) if not logg: return None target = logg + "/" + time.strftime("%Y/%m/%d", time.localtime(time.time())) if self.site.lang == "it": target = logg + "/" + time.strftime("%d/%m/%Y", time.localtime(time.time())) logPage = wikipedia.Page(self.site, target) if logPage.exists(): text = logPage.get() else: # make new log page showStatus() wikipedia.output("Log page is not exist, getting information for page creation") text = wikipedia.translate(self.site, logpage_header) text += u"\n!%s" % self.site.namespace(2) text += u"\n!%s" % capitalize(self.site.mediawiki_message("contribslink")) for result in queue: # Adding the log... (don't take care of the variable's name...). luser = wikipedia.url2link(result.name(), self.site, self.site) text += u"\n{{WLE|user=%s|contribs=%d}}" % (luser, result.editCount()) # update log page. while True: try: logPage.put(text, wikipedia.translate(self.site, summary2)) return True except wikipedia.EditConflict: wikipedia.output(u"An edit conflict has occured. Pausing for 10 seconds before continuing.") time.sleep(10)
def report(wsite, rep_page, username, com, rep): """ The function to report the username to a wiki-page. """ another_page = wikipedia.Page(wsite, rep_page) if another_page.exists(): text_get = another_page.get() else: nameBot = config.usernames[wsite.family.name][wsite.lang] text_get = u'This is a report page for the Bad-username, please translate me. --[[User:%s|%s]]' % (nameBot, nameBot) pos = 0 # The talk page includes "_" between the two names, in this way i replace them to " ". username = wikipedia.url2link(username, wsite, wsite) regex = re.escape(username) n = re.compile(regex, re.UNICODE) y = n.search(text_get, pos) if y == None: # Adding the log. rep_text = rep % username another_page.put(text_get + rep_text, comment = com, minorEdit = True) wikipedia.output(u'...Reported...') else: pos = y.end() wikipedia.output(u'%s is already in the report page.' % username)
def _oldParseCategory(self, purge=False, startFrom=None): """Yields all articles and subcategories that are in this category. Set purge to True to instruct MediaWiki not to serve a cached version. Set startFrom to a string which is the title of the page to start from. Yielded results are tuples in the form (tag, page) where tag is one of the constants ARTICLE and SUBCATEGORY, and title is the Page or Category object. Note that results of this method need not be unique. This should not be used outside of this module. """ if self.site().versionnumber() < 4: Rtitle = re.compile('title\s?=\s?"([^"]*)"') elif self.site().versionnumber() < 8: # FIXME seems to parse all links Rtitle = re.compile('/\S*(?: title\s?=\s?)?"([^"]*)"') else: Rtitle = re.compile('<li>(?:<span.*?>)?<a href=".*?"\s?title\s?=\s?"' '([^"]*)"\>\+?[^\<\+]') if self.site().versionnumber() < 8: Rsubcat = None Rimage = None else: Rsubcat = re.compile('CategoryTreeLabelCategory"\s?href=".+?">(.+?)</a>') Rimage = re.compile( '<div class\s?=\s?"thumb"\sstyle="[^"]*">' '(?:<div style="[^"]*">)?<a href=".*?"' '(?:\sclass="image")?\stitle\s?=\s?"([^"]*)"' ) # regular expression matching the "(next 200)" link RLinkToNextPage = re.compile('&from=(.*?)" title="') if startFrom: currentPageOffset = urllib.quote(startFrom.encode(self.site().encoding())) else: currentPageOffset = None while True: path = self.site().get_address(self.urlname()) if purge: path += "&action=purge" if currentPageOffset: path += "&from=" + currentPageOffset pywikibot.output( "Getting [[%s]] starting at %s..." % (self.title(), pywikibot.url2link(currentPageOffset, self.site(), self.site())) ) else: pywikibot.output("Getting [[%s]]..." % self.title()) pywikibot.get_throttle() txt = self.site().getUrl(path) # index where subcategory listing begins if self.site().versionnumber() >= 9: # These IDs were introduced in 1.9 if '<div id="mw-subcategories">' in txt: ibegin = txt.index('<div id="mw-subcategories">') elif '<div id="mw-pages">' in txt: ibegin = txt.index('<div id="mw-pages">') elif '<div id="mw-category-media">' in txt: ibegin = txt.index('<div id="mw-category-media">') else: # No pages return else: # does not work for cats without text ibegin = txt.index("<!-- start content -->") # TODO: This parses category text and may think they are # pages in category! Check for versions before 1.9 # index where article listing ends if '<div class="printfooter">' in txt: iend = txt.index('<div class="printfooter">') elif '<div class="catlinks">' in txt: iend = txt.index('<div class="catlinks">') else: iend = txt.index("<!-- end content -->") txt = txt[ibegin:iend] for title in Rtitle.findall(txt): if title == self.title(): # This is only a link to "previous 200" or "next 200". # Ignore it. pass # For MediaWiki versions where subcats look like articles elif isCatTitle(title, self.site()): yield SUBCATEGORY, Category(self.site(), title) else: yield ARTICLE, pywikibot.Page(self.site(), title) if Rsubcat: # For MediaWiki versions where subcats look differently for titleWithoutNamespace in Rsubcat.findall(txt): title = "Category:%s" % titleWithoutNamespace yield SUBCATEGORY, Category(self.site(), title) if Rimage: # For MediaWiki versions where images work through galleries for title in Rimage.findall(txt): # In some MediaWiki versions, the titles contain the # namespace, but they don't in other (newer) versions. Use # the ImagePage's defaultNamespace feature to get everything # correctly. yield ARTICLE, pywikibot.ImagePage(self.site(), title) # try to find a link to the next list page matchObj = RLinkToNextPage.search(txt) if matchObj: currentPageOffset = matchObj.group(1) else: break
def _oldParseCategory(self, purge=False, startFrom=None): """Yields all articles and subcategories that are in this category. Set purge to True to instruct MediaWiki not to serve a cached version. Set startFrom to a string which is the title of the page to start from. Yielded results are tuples in the form (tag, page) where tag is one of the constants ARTICLE and SUBCATEGORY, and title is the Page or Category object. Note that results of this method need not be unique. This should not be used outside of this module. """ if self.site().versionnumber() < 4: Rtitle = re.compile('title\s?=\s?\"([^\"]*)\"') elif self.site().versionnumber() < 8: # FIXME seems to parse all links Rtitle = re.compile('/\S*(?: title\s?=\s?)?\"([^\"]*)\"') else: Rtitle = re.compile( '<li>(?:<span.*?>)?<a href=\".*?\"\s?title\s?=\s?\"' '([^\"]*)\"\>\+?[^\<\+]') if self.site().versionnumber() < 8: Rsubcat = None Rimage = None else: Rsubcat = re.compile( 'CategoryTreeLabelCategory\"\s?href=\".+?\">(.+?)</a>') Rimage = re.compile( '<div class\s?=\s?\"thumb\"\sstyle=\"[^\"]*\">' '(?:<div style=\"[^\"]*\">)?<a href=\".*?\"' '(?:\sclass="image")?\stitle\s?=\s?\"([^\"]*)\"') # regular expression matching the "(next 200)" link RLinkToNextPage = re.compile('&from=(.*?)" title="') if startFrom: currentPageOffset = urllib.quote( startFrom.encode(self.site().encoding())) else: currentPageOffset = None while True: path = self.site().get_address(self.urlname()) if purge: path += '&action=purge' if currentPageOffset: path += '&from=' + currentPageOffset pywikibot.output( 'Getting [[%s]] starting at %s...' % (self.title(), pywikibot.url2link(currentPageOffset, self.site(), self.site()))) else: pywikibot.output('Getting [[%s]]...' % self.title()) pywikibot.get_throttle() txt = self.site().getUrl(path) # index where subcategory listing begins if self.site().versionnumber() >= 9: # These IDs were introduced in 1.9 if '<div id="mw-subcategories">' in txt: ibegin = txt.index('<div id="mw-subcategories">') elif '<div id="mw-pages">' in txt: ibegin = txt.index('<div id="mw-pages">') elif '<div id="mw-category-media">' in txt: ibegin = txt.index('<div id="mw-category-media">') else: # No pages return else: # does not work for cats without text ibegin = txt.index('<!-- start content -->') # TODO: This parses category text and may think they are # pages in category! Check for versions before 1.9 # index where article listing ends if '<div class="printfooter">' in txt: iend = txt.index('<div class="printfooter">') elif '<div class="catlinks">' in txt: iend = txt.index('<div class="catlinks">') else: iend = txt.index('<!-- end content -->') txt = txt[ibegin:iend] for title in Rtitle.findall(txt): if title == self.title(): # This is only a link to "previous 200" or "next 200". # Ignore it. pass # For MediaWiki versions where subcats look like articles elif isCatTitle(title, self.site()): yield SUBCATEGORY, Category(self.site(), title) else: yield ARTICLE, pywikibot.Page(self.site(), title) if Rsubcat: # For MediaWiki versions where subcats look differently for titleWithoutNamespace in Rsubcat.findall(txt): title = 'Category:%s' % titleWithoutNamespace yield SUBCATEGORY, Category(self.site(), title) if Rimage: # For MediaWiki versions where images work through galleries for title in Rimage.findall(txt): # In some MediaWiki versions, the titles contain the # namespace, but they don't in other (newer) versions. Use # the ImagePage's defaultNamespace feature to get everything # correctly. yield ARTICLE, pywikibot.ImagePage(self.site(), title) # try to find a link to the next list page matchObj = RLinkToNextPage.search(txt) if matchObj: currentPageOffset = matchObj.group(1) else: break