From e18aa96a84c0f074de7689184e2b9ff663195453 Mon Sep 17 00:00:00 2001 From: Jonathan Golder Date: Sun, 5 Nov 2017 11:15:04 +0100 Subject: [PATCH 1/4] redfam: article_generator can return talkpage To make pywikibot.pagegenerators.PageWithTalkPageGenerators unneccessary so we can manipulate talkpage object directly Related Task: [FS#161](https://fs.golderweb.de/index.php?do=details&task_id=161) --- lib/redfam.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/redfam.py b/lib/redfam.py index 191a895..0d6c4fe 100644 --- a/lib/redfam.py +++ b/lib/redfam.py @@ -514,7 +514,8 @@ class RedFamWorker( RedFam ): def article_generator(self, # noqa filter_existing=None, filter_redirects=None, exclude_article_status=[], - onlyinclude_article_status=[] ): + onlyinclude_article_status=[], + talkpages=None ): """ Yields pywikibot pageobjects for articles belonging to this redfams in a generator @@ -528,6 +529,8 @@ class RedFamWorker( RedFam ): set to False to get only redirectpages, unset/None results in not filtering @type filter_redirects bool/None + @param talkpages Set to True to get Talkpages instead of article page + @type talkpages bool/None """ @@ -591,6 +594,10 @@ class RedFamWorker( RedFam ): except Break: break + # Toggle talkpage + if talkpages: + page = page.toggleTalkPage() + # Yield filtered pages yield page From 20103d589d137bc2632a889665a15d8930f03cfc Mon Sep 17 00:00:00 2001 From: Jonathan Golder Date: Sun, 5 Nov 2017 11:18:53 +0100 Subject: [PATCH 2/4] redfam: article_generator add redfam info to page Add reference to redfam object and article title from db to Page object since Page.title() may differe (short Namespaces, anchors, special chars) Related Task: [FS#161](https://fs.golderweb.de/index.php?do=details&task_id=161) --- lib/redfam.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/redfam.py b/lib/redfam.py index 0d6c4fe..8248a7e 100644 --- a/lib/redfam.py +++ b/lib/redfam.py @@ -598,6 +598,12 @@ class RedFamWorker( RedFam ): if talkpages: page = page.toggleTalkPage() + # Add reference to redfam to pages + page.redfam = self + + # Keep article title from db with page object + page.redarticle = article + # Yield filtered pages yield page From bfec2abf9822aea6705259bf2003aebdbfacebb5 Mon Sep 17 00:00:00 2001 From: Jonathan Golder Date: Sun, 5 Nov 2017 11:20:55 +0100 Subject: [PATCH 3/4] markpages: Get rid of PageWithTalkPageGenerator Since redfam.article_generator can yield talkpage with additional information about redfam and current article from db, we do not need it anymore. Related Task: [FS#161](https://fs.golderweb.de/index.php?do=details&task_id=161) --- bots/markpages.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/bots/markpages.py b/bots/markpages.py index 5dcf527..e2f587f 100644 --- a/bots/markpages.py +++ b/bots/markpages.py @@ -145,14 +145,10 @@ class MarkPagesBot( CurrentPageBot ): # sets 'current_page' on each treat() for redfam in self.redfams: # We need the talkpage (and only this) of each existing page - for talkpage in pagegenerators.PageWithTalkPageGenerator( - redfam.article_generator( - filter_existing=True, - exclude_article_status=["marked"] ), - return_talk_only=True ): - - # Add reference to redfam to talkpages - talkpage.redfam = redfam + for talkpage in redfam.article_generator( + filter_existing=True, + exclude_article_status=["marked"], + talkpages=True ): yield talkpage From 9640467f6930572c57dc8a3df9b17cf1adbaaea0 Mon Sep 17 00:00:00 2001 From: Jonathan Golder Date: Sun, 5 Nov 2017 11:22:43 +0100 Subject: [PATCH 4/4] markpages: Use redarticle attribute of Page Instead of trying to reconstruct our db article title, use the one added to Page-object by redfam.article_generator Related Task: [FS#161](https://fs.golderweb.de/index.php?do=details&task_id=161) --- bots/markpages.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/bots/markpages.py b/bots/markpages.py index e2f587f..f395af2 100644 --- a/bots/markpages.py +++ b/bots/markpages.py @@ -184,14 +184,8 @@ class MarkPagesBot( CurrentPageBot ): # sets 'current_page' on each treat() # None if change was not accepted by user save_ret = self.put_current( self.new_text, summary=summary ) - # Normalize title with anchor (replace spaces in anchor) - article = self.current_page.toggleTalkPage().title( - asLink=True, textlink=True) - article = article.strip("[]") - article_parts = article.split("#", 1) - if len(article_parts) == 2: - article_parts[1] = article_parts[1].replace(" ", "_") - article = "#".join(article_parts) + # Get article as named in db + article = self.current_page.redarticle # Status if add_ret is None or ( add_ret and save_ret ):