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

Reply via email to