User:Thurallor-bot/update vxp deeds.py
Jump to navigation
Jump to search
import mwparserfromhell import re import pywikibot from pywikibot import pagegenerators site = pywikibot.Site() cat = pywikibot.Category(site,'Category:Virtue Experience Deeds') gen = pagegenerators.CategorizedPageGenerator(cat) for page in gen: title = page.title() print('Processing: ' + title) text = page.text # Extract the {{Deed}} template from the article tree = mwparserfromhell.parse(text) deed_template = None for template in tree.filter_templates(): if template.name.matches('Deed'): deed_template = template break if not deed_template: print('Unexpectedly, there is no {{Deed}} template in the article!') continue # Verify that the {{Deed} template contains the expected values for Virtue and Virtue-value if deed_template.has('Virtue') and deed_template.has('Virtue-value'): virtue_param_value = str(deed_template.get('Virtue').value) value_param_value = str(deed_template.get('Virtue-value').value).strip() value_param_value = re.sub(r'[,\.]', '', value_param_value) if not re.search(r'Virtue Experience', virtue_param_value): print('Unexpectedly, the Virtue parameter (= ' + virtue_param_value + ') is not set to "Virtue Experience"!') continue if not re.match(r'^[0-9]+$', value_param_value): print('Unexpectedly, the Virtue-value parameter (= ' + value_param_value + ') is not an integer!') continue else: print('Unexpectedly, the {{Deed}} template lacks a Virtue and/or Virtue-value parameter!') continue # Replace the Virtue parameter with VXP-reward (retaining the spacing around the parameter name) vxp_param = deed_template.get('Virtue') param_name = str(vxp_param.name); param_name = re.sub(r'Virtue {,4}', 'VXP-reward', param_name) vxp_param.name = param_name; vxp_param.value = ' ' + value_param_value + "\n"; # Delete the Virtue-value, Virtue2, and Virtue2-value parameters deed_template.remove('Virtue-value') if deed_template.has('Virtue2'): deed_template.remove('Virtue2') if deed_template.has('Virtue2-value'): deed_template.remove('Virtue2-value') # Save changes page.text = str(tree) page.save("New parameter 'VXP-reward' replaces 'Virtue', 'Virtue-value', 'Virtue2', 'Virtue2-value'")