def __init__(self, generator, old_image, new_image=None, **kwargs): """ Constructor. @param generator: the pages to work on @type generator: iterable @param old_image: the title of the old image (without namespace) @type old_image: unicode @param new_image: the title of the new image (without namespace), or None if you want to remove the image @type new_image: unicode or None """ self.availableOptions.update({ 'summary': None, 'loose': False, }) Bot.__init__(self, generator=generator, **kwargs) self.old_image = old_image self.new_image = new_image if not self.getOption('summary'): self.options['summary'] = i18n.translate( self.site, self.msg_replace, (self.old_image, self.new_image) if self.new_image else self.old_image, fallback=True) namespace = self.site.namespaces[6] if namespace.case == 'first-letter': case = re.escape(self.old_image[0].upper() + self.old_image[0].lower()) escaped = '[' + case + ']' + re.escape(self.old_image[1:])
def __init__(self, generator, old_image, new_image=None, **kwargs): """ Constructor. @param generator: the pages to work on @type generator: iterable @param old_image: the title of the old image (without namespace) @type old_image: unicode @param new_image: the title of the new image (without namespace), or None if you want to remove the image @type new_image: unicode or None """ self.availableOptions.update({ 'summary': None, 'loose': False, }) Bot.__init__(self, generator=generator, **kwargs) self.old_image = old_image self.new_image = new_image if not self.getOption('summary'): self.options['summary'] = i18n.translate( self.site, self.msg_replace, (self.old_image, self.new_image) if self.new_image else self.old_image, fallback=True) # regular expression to find the original template. # {{vfd}} does the same thing as {{Vfd}}, so both will be found. # The old syntax, {{msg:vfd}}, will also be found. # The group 'parameters' will either match the parameters, or an # empty string if there are none. replacements = [] namespace = self.site.namespaces[6] if namespace.case == 'first-letter': case = re.escape(self.old_image[0].upper() + self.old_image[0].lower()) escaped = '[' + case + ']' + re.escape(self.old_image[1:])
def __init__(self, generator, old_image, new_image=None, **kwargs): """ Initializer. @param generator: the pages to work on @type generator: iterable @param old_image: the title of the old image (without namespace) @type old_image: unicode @param new_image: the title of the new image (without namespace), or None if you want to remove the image @type new_image: unicode or None """ self.availableOptions.update({ 'summary': None, 'loose': False, }) Bot.__init__(self, generator=generator, **kwargs) self.old_image = old_image self.new_image = new_image param = { 'old': self.old_image, 'new': self.new_image, 'file': self.old_image, } summary = self.getOption('summary') or i18n.twtranslate( self.site, 'image-replace' if self.new_image else 'image-remove', param) namespace = self.site.namespaces[6] if namespace.case == 'first-letter': case = re.escape(self.old_image[0].upper() + self.old_image[0].lower()) escaped = '[' + case + ']' + re.escape(self.old_image[1:])
def __init__(self, generator, old_image, new_image=None, **kwargs): """ Constructor. @param generator: the pages to work on @type generator: iterable @param old_image: the title of the old image (without namespace) @type old_image: unicode @param new_image: the title of the new image (without namespace), or None if you want to remove the image @type new_image: unicode or None """ self.availableOptions.update({ 'summary': None, 'loose': False, }) Bot.__init__(self, generator=generator, **kwargs) self.old_image = old_image self.new_image = new_image if not self.getOption('summary'): self.options['summary'] = i18n.translate( self.site, self.msg_replace, (self.old_image, self.new_image) if self.new_image else self.old_image, fallback=True) # regular expression to find the original template. # {{vfd}} does the same thing as {{Vfd}}, so both will be found. # The old syntax, {{msg:vfd}}, will also be found. # The group 'parameters' will either match the parameters, or an # empty string if there are none. replacements = [] namespace = self.site.namespaces[6] if namespace.case == 'first-letter': case = re.escape(self.old_image[0].upper() + self.old_image[0].lower()) escaped = '[' + case + ']' + re.escape(self.old_image[1:]) else: escaped = re.escape(self.old_image) # 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(namespace), escaped)) else: image_regex = re.compile(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))) else: replacements.append((image_regex, self.new_image)) else: replacements.append((image_regex, '')) super(ImageRobot, self).__init__(self.generator, replacements, always=self.getOption('always'), summary=self.getOption('summary'))
def __init__(self, generator, templates, **kwargs): """ Constructor. @param generator: the pages to work on @type generator: iterable @param templates: a dictionary which maps old template names to their replacements. If remove or subst is True, it maps the names of the templates that should be removed/resolved to None. @type templates: dict """ self.availableOptions.update({ 'subst': False, 'remove': False, 'summary': None, 'addedCat': None, }) Bot.__init__(self, generator=generator, **kwargs) self.templates = templates # get edit summary message if it's empty if not self.getOption('summary'): comma = self.site.mediawiki_message('comma-separator') params = {'list': comma.join(self.templates.keys()), 'num': len(self.templates)} if self.getOption('remove'): self.options['summary'] = i18n.twtranslate( self.site, 'template-removing', params) elif self.getOption('subst'): self.options['summary'] = i18n.twtranslate( self.site, 'template-substituting', params) else: self.options['summary'] = i18n.twtranslate( self.site, 'template-changing', params) replacements = [] exceptions = {} builder = textlib._MultiTemplateMatchBuilder(self.site) for old, new in self.templates.items(): templateRegex = builder.pattern(old) if self.getOption('subst') and self.getOption('remove'): replacements.append((templateRegex, r'{{subst:%s\g<parameters>}}' % new)) exceptions['inside-tags'] = ['ref', 'gallery', 'poem', 'pagelist', ] elif self.getOption('subst'): replacements.append((templateRegex, r'{{subst:%s\g<parameters>}}' % old)) exceptions['inside-tags'] = ['ref', 'gallery', 'poem', 'pagelist', ] elif self.getOption('remove'): separate_line_regex = re.compile( r'^[*#:]* *{0} *\n'.format(templateRegex.pattern), re.DOTALL | re.MULTILINE) replacements.append((separate_line_regex, '')) spaced_regex = re.compile( r' +{0} +'.format(templateRegex.pattern), re.DOTALL) replacements.append((spaced_regex, ' ')) replacements.append((templateRegex, '')) else: 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)) super(TemplateRobot, self).__init__( generator, replacements, exceptions, always=self.getOption('always'), addedCat=self.getOption('addedCat'), summary=self.getOption('summary'))
def __init__(self, generator, old_image, new_image=None, **kwargs): """ Constructor. @param generator: the pages to work on @type generator: iterable @param old_image: the title of the old image (without namespace) @type old_image: unicode @param new_image: the title of the new image (without namespace), or None if you want to remove the image @type new_image: unicode or None """ self.availableOptions.update({ 'summary': None, 'loose': False, }) Bot.__init__(self, generator=generator, **kwargs) self.old_image = old_image self.new_image = new_image param = { 'old': self.old_image, 'new': self.new_image, 'file': self.old_image, } summary = self.getOption('summary') or i18n.twtranslate( self.site, 'image-replace' if self.new_image else 'image-remove', param) namespace = self.site.namespaces[6] if namespace.case == 'first-letter': case = re.escape(self.old_image[0].upper() + self.old_image[0].lower()) escaped = '[' + case + ']' + re.escape(self.old_image[1:]) else: escaped = re.escape(self.old_image) # 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(namespace), escaped)) else: image_regex = re.compile(r'' + escaped) replacements = [] if self.new_image: if not self.getOption('loose'): replacements.append((image_regex, u'[[%s:%s\\g<parameters>]]' % (self.site.namespaces.FILE.custom_name, self.new_image))) else: replacements.append((image_regex, self.new_image)) else: replacements.append((image_regex, '')) super(ImageRobot, self).__init__(self.generator, replacements, always=self.getOption('always'), site=self.site, summary=summary)
def __init__(self, generator, templates, **kwargs): """ Constructor. @param generator: the pages to work on @type generator: iterable @param templates: a dictionary which maps old template names to their replacements. If remove or subst is True, it maps the names of the templates that should be removed/resolved to None. @type templates: dict """ self.availableOptions.update({ 'subst': False, 'remove': False, 'summary': None, 'addedCat': None, }) Bot.__init__(self, generator=generator, **kwargs) self.templates = templates # get edit summary message if it's empty if not self.getOption('summary'): comma = self.site.mediawiki_message('comma-separator') params = {'list': comma.join(self.templates.keys()), 'num': len(self.templates)} site = self.site if self.getOption('remove'): self.options['summary'] = i18n.twntranslate( site, 'template-removing', params) elif self.getOption('subst'): self.options['summary'] = i18n.twntranslate( site, 'template-substituting', params) else: self.options['summary'] = i18n.twntranslate( site, 'template-changing', params) # regular expression to find the original template. # {{vfd}} does the same thing as {{Vfd}}, so both will be found. # The old syntax, {{msg:vfd}}, will also be found. # The group 'parameters' will either match the parameters, or an # empty string if there are none. replacements = [] exceptions = {} namespace = self.site.namespaces[10] for old, new in self.templates.items(): if namespace.case == 'first-letter': pattern = '[' + \ re.escape(old[0].upper()) + \ re.escape(old[0].lower()) + \ ']' + re.escape(old[1:]) else: pattern = re.escape(old) pattern = re.sub(r'_|\\ ', r'[_ ]', pattern) templateRegex = re.compile(r'\{\{ *(' + ':|'.join(namespace) + r':|[mM][sS][gG]:)?' + pattern + r'(?P<parameters>\s*\|.+?|) *}}', re.DOTALL) if self.getOption('subst') and self.getOption('remove'): replacements.append((templateRegex, r'{{subst:%s\g<parameters>}}' % new)) exceptions['inside-tags'] = ['ref', 'gallery'] elif self.getOption('subst'): replacements.append((templateRegex, r'{{subst:%s\g<parameters>}}' % old)) exceptions['inside-tags'] = ['ref', 'gallery'] elif self.getOption('remove'): replacements.append((templateRegex, '')) else: 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)) super(TemplateRobot, self).__init__( generator, replacements, exceptions, always=self.getOption('always'), addedCat=self.getOption('addedCat'), summary=self.getOption('summary'))
def __init__(self, generator, templates, **kwargs): """ Constructor. @param generator: the pages to work on @type generator: iterable @param templates: a dictionary which maps old template names to their replacements. If remove or subst is True, it maps the names of the templates that should be removed/resolved to None. @type templates: dict """ self.availableOptions.update({ 'subst': False, 'remove': False, 'summary': None, 'addedCat': None, }) Bot.__init__(self, generator=generator, **kwargs) self.templates = templates # get edit summary message if it's empty if not self.getOption('summary'): comma = self.site.mediawiki_message('comma-separator') params = {'list': comma.join(self.templates.keys()), 'num': len(self.templates)} site = self.site if self.getOption('remove'): self.options['summary'] = i18n.twtranslate( site, 'template-removing', params) elif self.getOption('subst'): self.options['summary'] = i18n.twtranslate( site, 'template-substituting', params) else: self.options['summary'] = i18n.twtranslate( site, 'template-changing', params) # regular expression to find the original template. # {{vfd}} does the same thing as {{Vfd}}, so both will be found. # The old syntax, {{msg:vfd}}, will also be found. # The group 'parameters' will either match the parameters, or an # empty string if there are none. replacements = [] exceptions = {} builder = textlib._MultiTemplateMatchBuilder(site) for old, new in self.templates.items(): templateRegex = builder.pattern(old) if self.getOption('subst') and self.getOption('remove'): replacements.append((templateRegex, r'{{{{subst:{0!s}\g<parameters>}}}}'.format(new))) exceptions['inside-tags'] = ['ref', 'gallery'] elif self.getOption('subst'): replacements.append((templateRegex, r'{{{{subst:{0!s}\g<parameters>}}}}'.format(old))) exceptions['inside-tags'] = ['ref', 'gallery'] elif self.getOption('remove'): replacements.append((templateRegex, '')) else: template = pywikibot.Page(self.site, new, ns=10) if not template.exists(): pywikibot.warning(u'Template "{0!s}" does not exist.'.format(new)) if not pywikibot.input_yn('Do you want to proceed anyway?', default=False, automatic_quit=False): continue replacements.append((templateRegex, r'{{{{{0!s}\g<parameters>}}}}'.format(new))) super(TemplateRobot, self).__init__( generator, replacements, exceptions, always=self.getOption('always'), addedCat=self.getOption('addedCat'), summary=self.getOption('summary'))
def __init__(self, generator, templates, **kwargs): """ Constructor. @param generator: the pages to work on @type generator: iterable @param templates: a dictionary which maps old template names to their replacements. If remove or subst is True, it maps the names of the templates that should be removed/resolved to None. @type templates: dict """ self.availableOptions.update({ 'subst': False, 'remove': False, 'summary': None, 'addedCat': None, }) Bot.__init__(self, generator=generator, **kwargs) self.templates = templates # get edit summary message if it's empty if not self.getOption('summary'): comma = self.site.mediawiki_message('comma-separator') params = { 'list': comma.join(self.templates.keys()), 'num': len(self.templates) } site = self.site if self.getOption('remove'): self.options['summary'] = i18n.twtranslate( site, 'template-removing', params) elif self.getOption('subst'): self.options['summary'] = i18n.twtranslate( site, 'template-substituting', params) else: self.options['summary'] = i18n.twtranslate( site, 'template-changing', params) # regular expression to find the original template. # {{vfd}} does the same thing as {{Vfd}}, so both will be found. # The old syntax, {{msg:vfd}}, will also be found. # The group 'parameters' will either match the parameters, or an # empty string if there are none. replacements = [] exceptions = {} builder = textlib._MultiTemplateMatchBuilder(site) for old, new in self.templates.items(): templateRegex = builder.pattern(old) if self.getOption('subst') and self.getOption('remove'): replacements.append( (templateRegex, r'{{subst:%s\g<parameters>}}' % new)) exceptions['inside-tags'] = ['ref', 'gallery'] elif self.getOption('subst'): replacements.append( (templateRegex, r'{{subst:%s\g<parameters>}}' % old)) exceptions['inside-tags'] = ['ref', 'gallery'] elif self.getOption('remove'): replacements.append((templateRegex, '')) else: 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)) super(TemplateRobot, self).__init__(generator, replacements, exceptions, always=self.getOption('always'), addedCat=self.getOption('addedCat'), summary=self.getOption('summary'))
def __init__(self, generator, templates, **kwargs): """ Initializer. @param generator: the pages to work on @type generator: iterable @param templates: a dictionary which maps old template names to their replacements. If remove or subst is True, it maps the names of the templates that should be removed/resolved to None. @type templates: dict """ self.availableOptions.update({ 'subst': False, 'remove': False, 'summary': None, 'addedCat': None, }) Bot.__init__(self, generator=generator, **kwargs) self.templates = templates # get edit summary message if it's empty if not self.getOption('summary'): comma = self.site.mediawiki_message('comma-separator') params = { 'list': comma.join(self.templates.keys()), 'num': len(self.templates) } if self.getOption('remove'): self.options['summary'] = i18n.twtranslate( self.site, 'template-removing', params) elif self.getOption('subst'): self.options['summary'] = i18n.twtranslate( self.site, 'template-substituting', params) else: self.options['summary'] = i18n.twtranslate( self.site, 'template-changing', params) replacements = [] exceptions = {} builder = textlib._MultiTemplateMatchBuilder(self.site) for old, new in self.templates.items(): template_regex = builder.pattern(old) if self.getOption('subst') and self.getOption('remove'): replacements.append( (template_regex, r'{{subst:%s\g<parameters>}}' % new)) exceptions['inside-tags'] = [ 'ref', 'gallery', 'poem', 'pagelist', ] elif self.getOption('subst'): replacements.append( (template_regex, r'{{subst:%s\g<parameters>}}' % old)) exceptions['inside-tags'] = [ 'ref', 'gallery', 'poem', 'pagelist', ] elif self.getOption('remove'): separate_line_regex = re.compile( r'^[*#:]* *{0} *\n'.format(template_regex.pattern), re.DOTALL | re.MULTILINE) replacements.append((separate_line_regex, '')) spaced_regex = re.compile( r' +{0} +'.format(template_regex.pattern), re.DOTALL) replacements.append((spaced_regex, ' ')) replacements.append((template_regex, '')) else: 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( (template_regex, r'{{%s\g<parameters>}}' % new)) super(TemplateRobot, self).__init__(generator, replacements, exceptions, always=self.getOption('always'), addedCat=self.getOption('addedCat'), summary=self.getOption('summary'))
def __init__(self, generator, templates, **kwargs): """ Constructor. @param generator: the pages to work on @type generator: iterable @param templates: a dictionary which maps old template names to their replacements. If remove or subst is True, it maps the names of the templates that should be removed/resolved to None. @type templates: dict """ self.availableOptions.update({ 'subst': False, 'remove': False, 'summary': None, 'addedCat': None, }) Bot.__init__(self, generator=generator, **kwargs) self.templates = templates # get edit summary message if it's empty if not self.getOption('summary'): comma = self.site.mediawiki_message('comma-separator') params = { 'list': comma.join(self.templates.keys()), 'num': len(self.templates) } site = self.site if self.getOption('remove'): self.options['summary'] = i18n.twntranslate( site, 'template-removing', params) elif self.getOption('subst'): self.options['summary'] = i18n.twntranslate( site, 'template-substituting', params) else: self.options['summary'] = i18n.twntranslate( site, 'template-changing', params) # regular expression to find the original template. # {{vfd}} does the same thing as {{Vfd}}, so both will be found. # The old syntax, {{msg:vfd}}, will also be found. # The group 'parameters' will either match the parameters, or an # empty string if there are none. replacements = [] exceptions = {} namespace = self.site.namespaces[10] for old, new in self.templates.items(): if namespace.case == 'first-letter': pattern = '[' + \ re.escape(old[0].upper()) + \ re.escape(old[0].lower()) + \ ']' + re.escape(old[1:]) else: pattern = re.escape(old) pattern = re.sub(r'_|\\ ', r'[_ ]', pattern) templateRegex = re.compile( r'\{\{ *(' + ':|'.join(namespace) + r':|[mM][sS][gG]:)?' + pattern + r'(?P<parameters>\s*\|.+?|) *}}', re.DOTALL) if self.getOption('subst') and self.getOption('remove'): replacements.append( (templateRegex, r'{{subst:%s\g<parameters>}}' % new)) exceptions['inside-tags'] = ['ref', 'gallery'] elif self.getOption('subst'): replacements.append( (templateRegex, r'{{subst:%s\g<parameters>}}' % old)) exceptions['inside-tags'] = ['ref', 'gallery'] elif self.getOption('remove'): replacements.append((templateRegex, '')) else: 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)) super(TemplateRobot, self).__init__(generator, replacements, exceptions, always=self.getOption('always'), addedCat=self.getOption('addedCat'), summary=self.getOption('summary'))