Mpaa has uploaded a new change for review. https://gerrit.wikimedia.org/r/192099
Change subject: Port replace.Replacement() in scripts which use ReplaceRobot() ...................................................................... Port replace.Replacement() in scripts which use ReplaceRobot() After refactoring of replace.py in: - babc7cef9b7805b0bb8c2b5abab4b715e7fc1e7a - a96d2689e543cfa17da549cb9465253520adb06b image.py and template.py were broken. ReplaceRobot needs to have in input Replacement() objects. Also improved site use and line length formatting. Bug: T90016 Change-Id: If69d1d554c542b1dfb805015f640b0c61a8702d0 --- M scripts/image.py M scripts/template.py 2 files changed, 69 insertions(+), 48 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core refs/changes/99/192099/1 diff --git a/scripts/image.py b/scripts/image.py index fb26ad2..8de1259 100644 --- a/scripts/image.py +++ b/scripts/image.py @@ -119,13 +119,13 @@ if not self.getOption('summary'): if self.new_image: - self.options['summary'] = i18n.translate(self.site, self.msg_replace, - fallback=True) \ - % (self.old_image, self.new_image) + self.options['summary'] = ( + i18n.translate(self.site, self.msg_replace, fallback=True) + % (self.old_image, self.new_image)) else: - self.options['summary'] = i18n.translate(self.site, self.msg_remove, - fallback=True) \ - % self.old_image + self.options['summary'] = ( + i18n.translate(self.site, self.msg_remove, fallback=True) + % self.old_image) def run(self): """Start the bot's action.""" @@ -147,26 +147,35 @@ # Be careful, spaces and _ have been converted to '\ ' and '\_' escaped = re.sub('\\\\[_ ]', '[_ ]', escaped) if not self.getOption('loose') or not self.new_image: - image_regex = re.compile( - r'\[\[ *(?:%s)\s*:\s*%s *(?P<parameters>\|[^\n]+|) *\]\]' - % ('|'.join(self.site.namespace(6, all=True)), escaped)) + image_regex = (r'\[\[ *(?:%s)\s*:\s*%s *(?P<parameters>\|[^\n]+|) *\]\]' + % ('|'.join(self.site.namespace(6, all=True)), escaped)) else: - image_regex = re.compile(r'' + escaped) + image_regex = r'' + escaped if self.new_image: if not self.getOption('loose'): - replacements.append((image_regex, - u'[[%s:%s\\g<parameters>]]' - % (self.site.image_namespace(), - self.new_image))) + replacement = replace.Replacement( + image_regex, + u'[[%s:%s\\g<parameters>]]' % (self.site.image_namespace(), + self.new_image)) + replacements.append(replacement) else: - replacements.append((image_regex, self.new_image)) + replacement = replace.Replacement(image_regex, self.new_image) + replacements.append(replacement) else: - replacements.append((image_regex, '')) + replacement = replace.Replacement(image_regex, '') + replacements.append(replacement) + # Set the regular expression flags + flags = re.UNICODE | re.DOTALL + + # Pre-compile all regular expressions here to save time later + for replacement in replacements: + replacement.compile(True, flags) replaceBot = replace.ReplaceRobot(self.generator, replacements, acceptall=self.getOption('always'), - summary=self.getOption('summary')) + summary=self.getOption('summary'), + site=self.site) replaceBot.run() diff --git a/scripts/template.py b/scripts/template.py index 25aad55..713e933 100755 --- a/scripts/template.py +++ b/scripts/template.py @@ -144,7 +144,7 @@ pywikibot.output(u'Skipping %s' % page.title(asLink=True)) -class XmlDumpTemplatePageGenerator: +class XmlDumpTemplatePageGenerator(object): """ Generator which yields Pages that transclude a template. @@ -215,13 +215,14 @@ }) super(TemplateRobot, self).__init__(**kwargs) + self.site = pywikibot.Site() self.generator = generator self.templates = templates - site = pywikibot.Site() if self.getOption('addedCat'): - self.options['addedCat'] = pywikibot.Category(site, self.getOption('addedCat')) + self.options['addedCat'] = pywikibot.Category(self.site, + self.getOption('addedCat')) - comma = site.mediawiki_message('comma-separator') + comma = self.site.mediawiki_message('comma-separator') # get edit summary message if it's empty if not self.getOption('summary'): @@ -229,13 +230,13 @@ 'num': len(self.templates)} if self.getOption('remove'): self.options['summary'] = i18n.twntranslate( - site, 'template-removing', params) + self.site, 'template-removing', params) elif self.getOption('subst'): self.options['summary'] = i18n.twntranslate( - site, 'template-substituting', params) + self.site, 'template-substituting', params) else: self.options['summary'] = i18n.twntranslate( - site, 'template-changing', params) + self.site, 'template-changing', params) def run(self): """Start the robot's action.""" @@ -247,10 +248,9 @@ replacements = [] exceptions = {} - site = pywikibot.Site() + namespaces = list(self.site.namespace(10, all=True)) for old, new in self.templates.items(): - namespaces = list(site.namespace(10, all=True)) - if not site.nocapitalize: + if not self.site.nocapitalize: pattern = '[' + \ re.escape(old[0].upper()) + \ re.escape(old[0].lower()) + \ @@ -258,35 +258,49 @@ else: pattern = re.escape(old) pattern = re.sub(r'_|\\ ', r'[_ ]', pattern) - templateRegex = re.compile(r'\{\{ *(' + ':|'.join(namespaces) + - r':|[mM][sS][gG]:)?' + pattern + - r'(?P<parameters>\s*\|.+?|) *}}', - re.DOTALL) + templateRegex = (r'\{\{ *(' + ':|'.join(namespaces) + + r':|[mM][sS][gG]:)?' + pattern + + r'(?P<parameters>\s*\|.+?|) *}}') if self.getOption('subst') and self.getOption('remove'): - replacements.append((templateRegex, - r'{{subst:%s\g<parameters>}}' % new)) + replacement = replace.Replacement( + templateRegex, + r'{{subst:%s\g<parameters>}}' % new) + replacements.append(replacement) exceptions['inside-tags'] = ['ref', 'gallery'] elif self.getOption('subst'): - replacements.append((templateRegex, - r'{{subst:%s\g<parameters>}}' % old)) + replacement = replace.Replacement( + templateRegex, + r'{{subst:%s\g<parameters>}}' % old) + replacements.append(replacement) exceptions['inside-tags'] = ['ref', 'gallery'] elif self.getOption('remove'): - replacements.append((templateRegex, '')) + replacement = replace.Replacement(templateRegex, '') + replacements.append(replacement) else: - template = pywikibot.Page(site, new, ns=10) + template = pywikibot.Page(self.site, new, ns=10) if not template.exists(): pywikibot.warning(u'Template "%s" does not exist.' % new) if not pywikibot.input_yn('Do you want to proceed anyway?', default=False, automatic_quit=False): continue - replacements.append((templateRegex, - r'{{%s\g<parameters>}}' % new)) + replacement = replace.Replacement( + templateRegex, + r'{{%s\g<parameters>}}' % new) + replacements.append(replacement) + + # Set the regular expression flags + flags = re.UNICODE | re.DOTALL + + # Pre-compile all regular expressions here to save time later + for replacement in replacements: + replacement.compile(True, flags) replaceBot = replace.ReplaceRobot(self.generator, replacements, exceptions, acceptall=self.getOption('always'), addedCat=self.getOption('addedCat'), - summary=self.getOption('summary')) + summary=self.getOption('summary'), + site=self.site) replaceBot.run() @@ -308,6 +322,7 @@ skip = False timestamp = None + site = pywikibot.Site() # read command line parameters local_args = pywikibot.handle_args(args) genFactory = pagegenerators.GeneratorFactory() @@ -339,10 +354,8 @@ timestamp = arg[len('-timestamp:'):] else: if not genFactory.handleArg(arg): - templateNames.append( - pywikibot.Page(pywikibot.Site(), arg, - ns=10 - ).title(withNamespace=False)) + templateName = pywikibot.Page(site, arg, ns=10) + templateNames.append(templateName.title(withNamespace=False)) if not templateNames: pywikibot.showHelp() @@ -356,14 +369,13 @@ for i in range(0, len(templateNames), 2): templates[templateNames[i]] = templateNames[i + 1] except IndexError: - pywikibot.output( -u'Unless using solely -subst or -remove, you must give an even number of template names.') + pywikibot.output(u'Unless using solely -subst or -remove, ' + u'you must give an even number of template names.') return oldTemplates = [] for templateName in templates.keys(): - oldTemplate = pywikibot.Page(pywikibot.Site(), templateName, - ns=10) + oldTemplate = pywikibot.Page(site, templateName, ns=10) oldTemplates.append(oldTemplate) if xmlfilename: -- To view, visit https://gerrit.wikimedia.org/r/192099 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If69d1d554c542b1dfb805015f640b0c61a8702d0 Gerrit-PatchSet: 1 Gerrit-Project: pywikibot/core Gerrit-Branch: master Gerrit-Owner: Mpaa <mpaa.w...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits