New feature force parsing of countrylists regardless if needed with param "-force-reload"
This commit is contained in:
22
chartsbot.py
22
chartsbot.py
@@ -40,6 +40,8 @@ The following parameters are supported:
|
|||||||
|
|
||||||
-always If given, request for confirmation of edit is short circuited
|
-always If given, request for confirmation of edit is short circuited
|
||||||
Use for unattended run
|
Use for unattended run
|
||||||
|
-force-reload If given, countrylists will be always parsed regardless if
|
||||||
|
needed or not
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
@@ -61,10 +63,10 @@ class ChartsBot( ):
|
|||||||
"""
|
"""
|
||||||
Bot which automatically updates a ChartsSummaryPage like
|
Bot which automatically updates a ChartsSummaryPage like
|
||||||
[[Portal:Charts_und_Popmusik/Aktuelle_Nummer-eins-Hits]] by reading linked
|
[[Portal:Charts_und_Popmusik/Aktuelle_Nummer-eins-Hits]] by reading linked
|
||||||
CountryListsAn incomplete sample bot.
|
CountryLists
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__( self, generator, always ):
|
def __init__( self, generator, always, force_reload ):
|
||||||
"""
|
"""
|
||||||
Constructor.
|
Constructor.
|
||||||
|
|
||||||
@@ -74,11 +76,17 @@ class ChartsBot( ):
|
|||||||
@param always: if True, request for confirmation of edit is short
|
@param always: if True, request for confirmation of edit is short
|
||||||
circuited. Use for unattended run
|
circuited. Use for unattended run
|
||||||
@type always: bool
|
@type always: bool
|
||||||
|
@param force-reload: If given, countrylists will be always parsed
|
||||||
|
regardless if needed or not
|
||||||
|
@type force-reload: bool
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.generator = generator
|
self.generator = generator
|
||||||
self.always = always
|
self.always = always
|
||||||
|
|
||||||
|
# Force parsing of countrylist
|
||||||
|
self.force_reload = force_reload
|
||||||
|
|
||||||
# Set the edit summary message
|
# Set the edit summary message
|
||||||
self.site = pywikibot.Site()
|
self.site = pywikibot.Site()
|
||||||
self.summary = "Bot: Aktualisiere Übersichtsseite Nummer-eins-Hits"
|
self.summary = "Bot: Aktualisiere Übersichtsseite Nummer-eins-Hits"
|
||||||
@@ -102,7 +110,7 @@ class ChartsBot( ):
|
|||||||
################################################################
|
################################################################
|
||||||
|
|
||||||
# Initialise and treat SummaryPageWorker
|
# Initialise and treat SummaryPageWorker
|
||||||
sumpage = SummaryPage( text )
|
sumpage = SummaryPage( text, self.force_reload )
|
||||||
sumpage.treat()
|
sumpage.treat()
|
||||||
|
|
||||||
# Check if editing is needed and if so get new text
|
# Check if editing is needed and if so get new text
|
||||||
@@ -187,10 +195,16 @@ def main(*args):
|
|||||||
# If always is True, bot won't ask for confirmation of edit (automode)
|
# If always is True, bot won't ask for confirmation of edit (automode)
|
||||||
always = False
|
always = False
|
||||||
|
|
||||||
|
# If force_reload is True, bot will always parse Countrylist regardless of
|
||||||
|
# parsing is needed or not
|
||||||
|
force_reload = False
|
||||||
|
|
||||||
# Parse command line arguments
|
# Parse command line arguments
|
||||||
for arg in local_args:
|
for arg in local_args:
|
||||||
if arg.startswith("-always"):
|
if arg.startswith("-always"):
|
||||||
always = True
|
always = True
|
||||||
|
elif arg.startswith("-force-reload"):
|
||||||
|
force_reload = True
|
||||||
else:
|
else:
|
||||||
genFactory.handleArg(arg)
|
genFactory.handleArg(arg)
|
||||||
|
|
||||||
@@ -200,7 +214,7 @@ def main(*args):
|
|||||||
# The preloading generator is responsible for downloading multiple
|
# The preloading generator is responsible for downloading multiple
|
||||||
# pages from the wiki simultaneously.
|
# pages from the wiki simultaneously.
|
||||||
gen = pagegenerators.PreloadingGenerator(gen)
|
gen = pagegenerators.PreloadingGenerator(gen)
|
||||||
bot = ChartsBot(gen, always)
|
bot = ChartsBot(gen, always, force_reload)
|
||||||
bot.run()
|
bot.run()
|
||||||
else:
|
else:
|
||||||
pywikibot.showHelp()
|
pywikibot.showHelp()
|
||||||
|
|||||||
@@ -38,14 +38,24 @@ class SummaryPage():
|
|||||||
Handles summary page related actions
|
Handles summary page related actions
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__( self, text ):
|
def __init__( self, text, force_reload=False ):
|
||||||
"""
|
"""
|
||||||
Create Instance
|
Create Instance
|
||||||
|
|
||||||
|
@param text: Page Text of summarypage
|
||||||
|
@type text: str
|
||||||
|
@param force-reload: If given, countrylists will be always parsed
|
||||||
|
regardless if needed or not
|
||||||
|
@type force-reload: bool
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Parse Text with mwparser
|
# Parse Text with mwparser
|
||||||
self.wikicode = mwparser.parse( text )
|
self.wikicode = mwparser.parse( text )
|
||||||
|
|
||||||
|
# Force parsing of countrylist
|
||||||
|
self.force_reload = force_reload
|
||||||
|
|
||||||
def treat( self ):
|
def treat( self ):
|
||||||
"""
|
"""
|
||||||
Handles parsing/editing of text
|
Handles parsing/editing of text
|
||||||
@@ -55,7 +65,9 @@ class SummaryPage():
|
|||||||
for entry in self.wikicode.filter_templates( matches="/Eintrag" ):
|
for entry in self.wikicode.filter_templates( matches="/Eintrag" ):
|
||||||
|
|
||||||
# Instantiate SummaryPageEntry-object
|
# Instantiate SummaryPageEntry-object
|
||||||
summarypageentry = SummaryPageEntry( entry )
|
summarypageentry = SummaryPageEntry(entry,
|
||||||
|
force_reload=self.force_reload)
|
||||||
|
|
||||||
# Treat SummaryPageEntry-object
|
# Treat SummaryPageEntry-object
|
||||||
summarypageentry.treat()
|
summarypageentry.treat()
|
||||||
|
|
||||||
@@ -85,13 +97,22 @@ class SummaryPageEntry():
|
|||||||
|
|
||||||
write_needed = False
|
write_needed = False
|
||||||
|
|
||||||
def __init__( self, entry ):
|
def __init__( self, entry, force_reload=False ):
|
||||||
"""
|
"""
|
||||||
Constructor
|
Constructor
|
||||||
|
|
||||||
|
@param entry: Entry template of summarypage entry
|
||||||
|
@type text: mwparser.template
|
||||||
|
@param force-reload: If given, countrylists will be always parsed
|
||||||
|
regardless if needed or not
|
||||||
|
@type force-reload: bool
|
||||||
"""
|
"""
|
||||||
self.old_entry = SummaryPageEntryTemplate( entry )
|
self.old_entry = SummaryPageEntryTemplate( entry )
|
||||||
self.new_entry = SummaryPageEntryTemplate( )
|
self.new_entry = SummaryPageEntryTemplate( )
|
||||||
|
|
||||||
|
# Force parsing of countrylist
|
||||||
|
self.force_reload = force_reload
|
||||||
|
|
||||||
def treat( self ):
|
def treat( self ):
|
||||||
"""
|
"""
|
||||||
Controls parsing/update-sequence of entry
|
Controls parsing/update-sequence of entry
|
||||||
@@ -134,9 +155,7 @@ class SummaryPageEntry():
|
|||||||
try:
|
try:
|
||||||
self.countrylist = CountryList( self.countrylist_wikilink )
|
self.countrylist = CountryList( self.countrylist_wikilink )
|
||||||
|
|
||||||
if( self.countrylist and
|
self.maybe_parse_countrylist()
|
||||||
self.countrylist.is_parsing_needed( self.countrylist_revid )):
|
|
||||||
self.countrylist.parse()
|
|
||||||
|
|
||||||
# Maybe fallback to last years list
|
# Maybe fallback to last years list
|
||||||
except CountryListError:
|
except CountryListError:
|
||||||
@@ -144,13 +163,26 @@ class SummaryPageEntry():
|
|||||||
self.countrylist_wikilink.title = link_title
|
self.countrylist_wikilink.title = link_title
|
||||||
self.countrylist = CountryList( self.countrylist_wikilink )
|
self.countrylist = CountryList( self.countrylist_wikilink )
|
||||||
|
|
||||||
if( self.countrylist and
|
self.maybe_parse_countrylist()
|
||||||
self.countrylist.is_parsing_needed( self.countrylist_revid )):
|
|
||||||
self.countrylist.parse()
|
|
||||||
|
|
||||||
if not self.countrylist:
|
if not self.countrylist:
|
||||||
raise SummaryPageEntryError( "CountryList does not exists!" )
|
raise SummaryPageEntryError( "CountryList does not exists!" )
|
||||||
|
|
||||||
|
def maybe_parse_countrylist( self ):
|
||||||
|
"""
|
||||||
|
Parse countrylist if page-object exists and if parsing is needed or
|
||||||
|
param -force-reload is set
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Fast return if no countrylist-object
|
||||||
|
if not self.countrylist:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Parse if needed or forced
|
||||||
|
if( self.countrylist.is_parsing_needed( self.countrylist_revid ) or
|
||||||
|
self.force_reload ):
|
||||||
|
self.countrylist.parse()
|
||||||
|
|
||||||
def get_countrylist_wikilink( self ):
|
def get_countrylist_wikilink( self ):
|
||||||
"""
|
"""
|
||||||
Load wikilink to related countrylist
|
Load wikilink to related countrylist
|
||||||
@@ -250,8 +282,8 @@ class SummaryPageEntryTemplate():
|
|||||||
Creates Instance of Class for given mwparser.template object of
|
Creates Instance of Class for given mwparser.template object of
|
||||||
SummmaryPageEntry Template. If no object was given create empty one.
|
SummmaryPageEntry Template. If no object was given create empty one.
|
||||||
|
|
||||||
@param template_obj mw.parser.template Object of
|
@param template_obj Object of SummmaryPageEntry Template
|
||||||
SummmaryPageEntry Template
|
@type template_obj: mwparser.template
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Check if object was given
|
# Check if object was given
|
||||||
|
|||||||
Reference in New Issue
Block a user