User:Thurallor-bot/update vxp deeds.py

From Lotro-Wiki.com
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'")