jenkins-bot has submitted this change and it was merged.
Change subject: [IMPROV] LogEntry: page method instead of title ......................................................................
[IMPROV] LogEntry: page method instead of title
The name of the method title() is misleading as it actually returns a Page instance. The title() method still redirects to the new page() method but is deprecated and will be replaced in the future by something that just returns a string.
Bug: T78125 Change-Id: Ic1abfaba91a6b8e117b29365a882fdcf9203ccf7 --- M pywikibot/logentries.py M pywikibot/pagegenerators.py M scripts/imageuncat.py M scripts/redirect.py M tests/logentry_tests.py M tests/site_tests.py 6 files changed, 39 insertions(+), 12 deletions(-)
Approvals: John Vandenberg: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/logentries.py b/pywikibot/logentries.py index bc99909..017f558 100644 --- a/pywikibot/logentries.py +++ b/pywikibot/logentries.py @@ -82,16 +82,26 @@ def ns(self): return self.data['ns']
+ @deprecated('page()') def title(self): + """ + DEPRECATED: Alias for page(). + + This is going to be replaced by just returning the title as a string + instead of a Page instance. + """ + return self.page() + + def page(self): """ Page on which action was performed.
Note: title may be missing in data dict e.g. by oversight action to hide the title. In that case a KeyError exception will raise """ - if not hasattr(self, '_title'): - self._title = pywikibot.Page(self.site, self.data['title']) - return self._title + if not hasattr(self, '_page'): + self._page = pywikibot.Page(self.site, self.data['title']) + return self._page
def type(self): return self.data['type'] @@ -136,7 +146,7 @@ if self.isAutoblockRemoval: self._blockid = int(self.data['title'][pos + 1:])
- def title(self): + def page(self): """ Return the blocked account or IP.
@@ -149,7 +159,7 @@ if self.isAutoblockRemoval: return self._blockid else: - return super(BlockEntry, self).title() + return super(BlockEntry, self).page()
def flags(self): """ diff --git a/pywikibot/pagegenerators.py b/pywikibot/pagegenerators.py index d1a714c..3dff94f 100644 --- a/pywikibot/pagegenerators.py +++ b/pywikibot/pagegenerators.py @@ -890,7 +890,7 @@ for entry in site.logevents(total=total, logtype=logtype, user=user, namespace=namespace): try: - yield entry.title() + yield entry.page() except KeyError as e: pywikibot.warning(u'LogeventsPageGenerator: ' u'failed to load page for %r; skipping' @@ -1668,8 +1668,8 @@ site = pywikibot.Site() for entry in site.logevents(logtype="upload", step=step, total=total): # entry is an UploadEntry object - # entry.title() returns a Page object - yield entry.title() + # entry.page() returns a Page object + yield entry.page()
def WikibaseItemGenerator(gen): diff --git a/scripts/imageuncat.py b/scripts/imageuncat.py index d543730..85a6d7e 100755 --- a/scripts/imageuncat.py +++ b/scripts/imageuncat.py @@ -1261,7 +1261,7 @@ yesterday = today + timedelta(days=-1)
for logentry in site.logevents(logtype='upload', start=yesterday, end=today, reverse=True): - yield logentry.title() + yield logentry.page()
def recentChanges(site=None, delay=0, block=70): diff --git a/scripts/redirect.py b/scripts/redirect.py index b8e299c..9792ce1 100755 --- a/scripts/redirect.py +++ b/scripts/redirect.py @@ -351,7 +351,7 @@ pywikibot.output('.', newline=False) for logentry in move_gen: try: - moved_page = logentry.title() + moved_page = logentry.page() except KeyError: # hidden page continue pywikibot.output('.', newline=False) diff --git a/tests/logentry_tests.py b/tests/logentry_tests.py index 20820c9..ea17f2e 100644 --- a/tests/logentry_tests.py +++ b/tests/logentry_tests.py @@ -79,7 +79,9 @@ self.assertIsInstance(logentry.pageid(), int) self.assertIsInstance(logentry.timestamp(), pywikibot.Timestamp) if 'title' in logentry.data: # title may be missing - self.assertIsInstance(logentry.title(), pywikibot.Page) + self.assertIsInstance(logentry.page(), pywikibot.Page) + else: + self.assertRaises(KeyError, logentry.page) self.assertEqual(logentry.type(), logtype) self.assertIsInstance(logentry.user(), unicode) self.assertGreaterEqual(logentry.logid(), 0) @@ -95,6 +97,7 @@ """Create the new class.""" def test_method(logtype): def test_logevent(self, key): + """Test a single logtype entry.""" self._test_logevent(logtype)
return test_logevent @@ -192,6 +195,19 @@ self.assertIsInstance(logentry.new_ns(), int) self.assertEqual(logentry.new_title(), logentry.target_page)
+ def test_LogEntry_title(self, key): + """Test title and page return the same instance.""" + # Request multiple log entries in the hope that one might have no + # title entry + for logentry in self.site.logevents(total=5): + if 'title' in logentry.data: # title may be missing + self.assertIsInstance(logentry.title(), pywikibot.Page) + self.assertIs(logentry.title(), logentry.page()) + else: + self.assertRaises(KeyError, logentry.title) + self.assertDeprecation() + self._reset_messages() +
if __name__ == '__main__': try: diff --git a/tests/site_tests.py b/tests/site_tests.py index 9c62d93..2fbe552 100644 --- a/tests/site_tests.py +++ b/tests/site_tests.py @@ -899,7 +899,8 @@ for entry in mysite.logevents(logtype=typ, total=3): self.assertEqual(entry.type(), typ) for entry in mysite.logevents(page=mainpage, total=3): - self.assertEqual(entry.title().title(), mainpage.title()) + self.assertEqual(entry.page().title(), mainpage.title()) + self.assertEqual(entry.page(), mainpage) for entry in mysite.logevents(user=mysite.user(), total=3): self.assertEqual(entry.user(), mysite.user()) for entry in mysite.logevents(start=pywikibot.Timestamp.fromISOformat("2008-09-01T00:00:01Z"), total=5):
pywikibot-commits@lists.wikimedia.org